Dashboard/Docker Compose Reference

Docker Compose Reference

All configuration is passed to ProxyOS via environment variables. The recommended approach is an .env file loaded by env_file: in docker-compose.yml.


Required variables

PROXYOS_SECRET

Required. No default.

A secret string used to sign session tokens and cookies. Must be set before first boot. If you change this value, all existing sessions are invalidated — every logged-in user will be logged out.

# Generate a secure value
openssl rand -hex 32

Set as:

PROXYOS_SECRET=your-64-char-hex-string-here

Optional variables

PROXYOS_URL

The public URL at which the dashboard is reachable. Used for OAuth callback URLs, email verification links, and any absolute URL that ProxyOS generates.

PROXYOS_URL=https://proxyos.yourdomain.com

If not set, ProxyOS derives URLs from the incoming request host.


LOG_LEVEL

Controls the verbosity of application logs written to stdout.

ValueDescription
errorOnly errors
warnErrors and warnings
infoNormal operational messages (default)
debugVerbose — includes tRPC procedure calls, DB queries
LOG_LEVEL=info

Port variables

These control which host ports the container binds to. The container-internal ports are fixed.

PROXYOS_DASHBOARD_PORT

Host port that maps to the Next.js dashboard (container port 3000).

PROXYOS_DASHBOARD_PORT=3091

PROXYOS_HTTP_PORT

Host port that maps to Caddy's HTTP listener (container port 80).

PROXYOS_HTTP_PORT=80

PROXYOS_HTTPS_PORT

Host port that maps to Caddy's HTTPS listener (container port 443). Also bound for UDP (HTTP/3 QUIC).

PROXYOS_HTTPS_PORT=443

Internal / baked-in variables

These are set in the Dockerfile and are not normally overridden. They are documented here for reference when debugging inside the container.

VariableDefaultDescription
PROXYOS_DB_PATH/data/proxyos/proxyos.dbPath to the SQLite database file
PROXYOS_ACCESS_LOG/data/proxyos/access.logPath to the Caddy access log
CADDY_BASE_CONFIG_PATH/etc/caddy/base-config.jsonCaddy bootstrap config (baked into the image, not in a volume)
CADDY_ADMIN_URLhttp://localhost:2019URL of the Caddy Admin API (internal only)
XDG_DATA_HOME/data/caddyWhere Caddy stores certificates and ACME state
XDG_CONFIG_HOME/config/caddyWhere Caddy stores runtime config
NODE_ENVproductionAlways production in the container
PORT3000Internal port the Next.js app listens on
HOSTNAME0.0.0.0Bind address for the Next.js app

Volume mounts

Host pathContainer pathPurpose
proxyos-data (named volume)/data/proxyosSQLite database, access log
caddy-data (named volume)/data/caddyTLS certificates, ACME accounts
caddy-config (named volume)/config/caddyCaddy runtime config
/var/run/docker.sock/var/run/docker.sockRead-only Docker socket for network/container discovery

Security note: The Docker socket mount is required for the container scanner and Docker network auto-discovery features. Mount it read-only (:ro) as shown in the compose file.


Exposed ports

Container portProtocolPurpose
80TCPCaddy HTTP (ACME HTTP-01 challenges, HTTP→HTTPS redirects)
443TCP + UDPCaddy HTTPS (TLS) and HTTP/3 (QUIC over UDP)
3000TCPNext.js dashboard (mapped to PROXYOS_DASHBOARD_PORT on the host)
2019TCPCaddy Admin API — intentionally not exposed to the host

DNS settings

The compose file hard-codes DNS servers to 8.8.8.8 and 1.1.1.1. This prevents a known issue where the container loses DNS resolution after a rebuild because it inherits a stale /etc/resolv.conf from the Docker daemon. See Cloudflared DNS errors for details.

ProxyOS