Files
OmniRoute/contrib/podman/omniroute.container
Diego Rodrigues de Sa e Souza c06ac9aafa fix(security): remove literal secrets from podman manifest, block CHANGEME remote login (#13679) (#13812)
Merged in the 2026-09-16 sweep of the maintainer's own open PRs, at the owner's explicit instruction. No push was made to the PR branch: the merge took the head as the owning session left it (verified OPEN, non-draft and MERGEABLE against the release tip immediately before merging).
2026-09-16 06:09:29 -03:00

60 lines
1.9 KiB
Plaintext

[Unit]
Description=OmniRoute — Unified AI Proxy
After=network-online.target
Wants=network-online.target
Requires=omniroute-redis.service
After=omniroute-redis.service
[Container]
# Use this image after building locally
Image=localhost/omniroute:base
# Or use the fully qualified published image (there is no published :base tag)
# Image=docker.io/diegosouzapw/omniroute:latest
ContainerName=omniroute
Network=omniroute.network
PublishPort=20128:20128
PublishPort=20129:20129
Volume=omniroute.volume:/app/data:Z
# Use a bind mount if you need direct host access to the data:
# Volume=/home/USER/code/docker/OmniRoute/data:/app/data:Z
Environment=DATA_DIR=/app/data
Environment=PORT=20128
Environment=DASHBOARD_PORT=20128
Environment=API_PORT=20129
Environment=API_HOST=0.0.0.0
Environment=REDIS_URL=redis://redis:6379
Environment=NODE_ENV=production
Environment=REQUIRE_API_KEY=true
# JWT_SECRET, API_KEY_SECRET and INITIAL_PASSWORD are deliberately NOT set here.
# This unit used to ship copy-pasteable "replace-me" placeholder literals — an
# operator who forgot to replace them ran production with a public, guessable
# secret and dashboard password (#13679). Generate real values and load them from
# your project .env before the FIRST start — see "Generate secrets before first
# start" in contrib/podman/README.md — by uncommenting and pointing this at your
# project .env:
# EnvironmentFile=%h/code/docker/OmniRoute/.env
#
# If left unset: JWT_SECRET and API_KEY_SECRET are auto-generated and persisted
# on first boot, and the dashboard requires setup from localhost before it
# accepts any password (see managementPassword.ts / apiAuth.ts) — safer than a
# known-literal default either way, but a real INITIAL_PASSWORD is still
# recommended for non-interactive first boots.
HealthCmd=node /app/healthcheck.mjs
HealthInterval=30s
HealthRetries=3
HealthTimeout=5s
HealthStartPeriod=15s
[Service]
Restart=always
[Install]
WantedBy=default.target