Files
computer-playbook/roles/web-app-hermes/templates/env.j2
kevinveenbirkenbachandClaude Opus 5 91a2036aea fix(web-app-hermes): stop the image migrating a config it cannot write
config.yaml reaches the container as a docker config, which swarm mounts
read-only. The image runs its schema migration on every boot, and because the
rendered file carries no _config_version it counts as legacy, so the migrator
backs the file up and writes it back, failing with EACCES every start. The
image offers HERMES_SKIP_CONFIG_MIGRATION for exactly this case, and the
config is rendered fresh on every deploy, so there is no persisted legacy
shape left to migrate.

Drops the volume ownership block that a wrong reading of the same failure
introduced. The rescue artifact of that run shows the directory was already
owned by the runtime user, and the log shows that user creating directories in
it, so the block only widened the mode and fixed nothing.

Keeps the single replica but states the reason the evidence supports: SQLite
on an NFS-backed shared volume, where advisory locks do not carry reliably.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 16:05:09 +02:00

16 lines
540 B
Django/Jinja

{% include 'roles/sys-svc-container/templates/env.j2' %}
HERMES_SKIP_CONFIG_MIGRATION=true
API_SERVER_ENABLED=true
API_SERVER_HOST=0.0.0.0
API_SERVER_PORT={{ HERMES_PORT_INTERNAL }}
API_SERVER_KEY={{ HERMES_API_SERVER_KEY | dotenv_quote }}
{% if HERMES_LITELLM_ENABLED | bool %}
OLLAMA_API_KEY={{ HERMES_LITELLM_API_KEY | dotenv_quote }}
OLLAMA_BASE_URL={{ LITELLM_BASE_LOCAL_URL }}/v1
{% endif %}
{% for server in HERMES_MCP_SERVERS %}
{{ server.id | upper | replace('-', '_') }}_MCP_TOKEN={{ server.token | dotenv_quote }}
{% endfor %}