This guide provides a production-oriented baseline for running Infram with Podman or Docker.
- Linux host with Podman or Docker
opensslfor encryption key generation- Persistent storage for
/app/data - Reverse proxy plan for production exposure (recommended)
Infram requires ENCRYPTION_KEY at startup. The value must be a 64-character hex string.
Generate one securely:
openssl rand -hex 32You can provide it either as:
- environment variable
ENCRYPTION_KEY - runtime secret file
/run/secrets/encryption_key(auto-loaded asENCRYPTION_KEY)
mkdir -p /opt/podman-infra-manager
podman run -d \
--name infram \
--network host \
--restart always \
-e ENCRYPTION_KEY="<replace-with-generated-key>" \
-e TRUST_PROXY=1 \
-v /opt/podman-infra-manager:/app/data:Z \
swissmakers/infram:latest::: code-group
docker run -d \
--name infram \
--network host \
--restart always \
-e ENCRYPTION_KEY="<replace-with-generated-key>" \
-e TRUST_PROXY=1 \
-v /opt/podman-infra-manager:/app/data \
swissmakers/infram:latestdocker run -d \
--name infram \
--restart always \
-p 6989:6989 \
-e ENCRYPTION_KEY="<replace-with-generated-key>" \
-e TRUST_PROXY=1 \
-v /opt/podman-infra-manager:/app/data \
swissmakers/infram:latest:::
Note
Use host networking if you need host-local network behavior for operations and integrations.
::: code-group
services:
infram:
image: swissmakers/infram:latest
container_name: infram
restart: always
network_mode: host
environment:
ENCRYPTION_KEY: "<replace-with-generated-key>"
TRUST_PROXY: "1"
volumes:
- infram-data:/app/data
volumes:
infram-data:services:
infram:
image: swissmakers/infram:latest
container_name: infram
restart: always
network_mode: host
environment:
TRUST_PROXY: "1"
volumes:
- infram-data:/app/data
- ./secrets/encryption_key:/run/secrets/encryption_key:ro
volumes:
infram-data::::
Start:
docker compose up -d- Open
http://<host>:6989(or your reverse-proxy URL). - Complete first-time setup and create an admin account.
- Confirm data persistence under
/opt/podman-infra-manager(or your named volume). - If reverse proxied, verify audit records show real client IP addresses.
- Check container logs for startup confirmation and migration success.
docker pull swissmakers/infram:latest
docker compose down
docker compose up -dPodman equivalent:
podman pull swissmakers/infram:latest
podman stop infram && podman rm infram
# start again with the same run command- Backup: archive
/opt/podman-infra-manager(or export named volume) - Restore: stop container, restore data, start container
- Before upgrades: always create and verify a backup
- Keep
STRICT_TLS=truein production - Set
TRUST_PROXYto the exact proxy topology - Keep
ENABLE_SOURCE_SYNC=falseunless source sync is required - Set
ENABLE_VERSION_CHECK=falsein restricted networks - Keep container runtime and host OS patched
make security-update
make security-audit
make security-all
make security-sbom