services: hermes: image: ${HERMES_IMAGE:-nousresearch/hermes-agent}:${HERMES_TAG:-latest} container_name: ${COMPOSE_PROJECT_NAME:-alan}-hermes restart: unless-stopped command: gateway run shm_size: ${HERMES_SHM_SIZE:-1g} ports: - "127.0.0.1:${HERMES_API_PORT:-18642}:8642" environment: TZ: ${TZ:-Europe/Berlin} volumes: - ${HERMES_DATA_DIR:-./state/hermes}:/opt/data healthcheck: test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8642/health', timeout=3).read()\""] interval: 30s timeout: 5s retries: 5 start_period: 45s mem_limit: ${HERMES_MEMORY_LIMIT:-4g} cpus: ${HERMES_CPUS:-2.0} security_opt: - no-new-privileges:true networks: hermes_private: agents_shared: br0_uplink: aliases: - hermes dashboard: image: ${HERMES_IMAGE:-nousresearch/hermes-agent}:${HERMES_TAG:-latest} container_name: ${COMPOSE_PROJECT_NAME:-alan}-hermes-dashboard restart: unless-stopped command: dashboard --host 0.0.0.0 profiles: ["dashboard"] ports: - "127.0.0.1:${HERMES_DASHBOARD_PORT:-19119}:9119" environment: TZ: ${TZ:-Europe/Berlin} GATEWAY_HEALTH_URL: http://hermes:8642 volumes: - ${HERMES_DATA_DIR:-./state/hermes}:/opt/data:ro depends_on: hermes: condition: service_healthy healthcheck: test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:9119', timeout=3).read()\""] interval: 30s timeout: 5s retries: 5 start_period: 30s mem_limit: ${DASHBOARD_MEMORY_LIMIT:-512m} cpus: ${DASHBOARD_CPUS:-0.5} security_opt: - no-new-privileges:true networks: - hermes_private networks: hermes_private: name: ${COMPOSE_PROJECT_NAME:-alan}_hermes_private driver: bridge internal: false agents_shared: name: ${AGENTS_SHARED_NETWORK:-alan_agents_shared} external: true br0_uplink: name: ${BR0_DOCKER_NETWORK:-br0_lan} external: true