hermes: add hermes-dashboard systemd unit (port 9119, fronted by Traefik)

This commit is contained in:
Hermes Agent service account
2026-05-31 21:09:27 -05:00
parent dc5392446c
commit bd100c15e7
3 changed files with 79 additions and 1 deletions

View File

@@ -8,8 +8,19 @@ hermes_home: /home/hermes
# Set to true if you don't need browser automation (skips Playwright/Chromium) # Set to true if you don't need browser automation (skips Playwright/Chromium)
hermes_skip_browser: false hermes_skip_browser: false
# systemd service name # systemd service name (gateway)
hermes_service_name: hermes hermes_service_name: hermes
# Path where hermes binary will be accessible system-wide # Path where hermes binary will be accessible system-wide
hermes_bin_symlink: /usr/local/bin/hermes hermes_bin_symlink: /usr/local/bin/hermes
# -----------------------------------------------------------------------------
# Hermes Web UI (dashboard) — fronted by Traefik on lightning-lane via the
# 'jarvis' service. Binds to 0.0.0.0 so Traefik can reach it from upstream;
# --insecure is acceptable because TLS + auth are terminated at Traefik.
# -----------------------------------------------------------------------------
hermes_dashboard_enabled: true
hermes_dashboard_service_name: hermes-dashboard
hermes_dashboard_host: 0.0.0.0
hermes_dashboard_port: 9119
hermes_dashboard_insecure: true

View File

@@ -154,3 +154,46 @@
enabled: true enabled: true
state: stopped state: stopped
become: true become: true
# ---------------------------------------------------------------------------
# 7. Install systemd service unit for the Hermes Web UI (dashboard)
# Separate unit from the gateway so the UI can be restarted / disabled
# independently. Fronted upstream by Traefik (jarvis service) on
# lightning-lane, so binding 0.0.0.0 with --insecure is intentional.
# ---------------------------------------------------------------------------
- name: Deploy hermes-dashboard systemd service unit
ansible.builtin.template:
src: hermes-dashboard.service.j2
dest: /etc/systemd/system/{{ hermes_dashboard_service_name }}.service
owner: root
group: root
mode: "0644"
become: true
register: hermes_dashboard_unit
when: hermes_dashboard_enabled
- name: Reload systemd to pick up hermes-dashboard unit changes
ansible.builtin.systemd:
daemon_reload: true
become: true
when:
- hermes_dashboard_enabled
- hermes_dashboard_unit is changed
- name: Enable and start hermes-dashboard service
ansible.builtin.systemd:
name: "{{ hermes_dashboard_service_name }}"
enabled: true
state: started
become: true
when: hermes_dashboard_enabled
- name: Restart hermes-dashboard on unit change
ansible.builtin.systemd:
name: "{{ hermes_dashboard_service_name }}"
state: restarted
become: true
when:
- hermes_dashboard_enabled
- hermes_dashboard_unit is changed

View File

@@ -0,0 +1,24 @@
[Unit]
Description=Hermes Dashboard (Web UI)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User={{ hermes_user }}
Group={{ hermes_group }}
WorkingDirectory={{ hermes_home }}
Environment="HOME={{ hermes_home }}"
Environment="PATH={{ hermes_home }}/.local/bin:/usr/local/bin:/usr/bin:/bin"
Environment="HERMES_HOME={{ hermes_home }}/.hermes"
ExecStart={{ hermes_home }}/.hermes/hermes-agent/venv/bin/hermes dashboard --host {{ hermes_dashboard_host }} --port {{ hermes_dashboard_port }}{% if hermes_dashboard_insecure %} --insecure{% endif %}
TimeoutStopSec=30
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=hermes-dashboard
[Install]
WantedBy=multi-user.target