{ "id": "allprox", "name": "allprox", "description": "Caddy reverse proxy that routes domains to local IPs, hosts an authenticated portal (web UI), and is SSO-ready for Authelia (OAuth2/OIDC).", "version": "1.0.0", "category": "network", "tags": ["reverse-proxy", "caddy", "authelia", "sso", "https"], "author": "Caddy / Authelia", "license": "Apache-2.0", "homepage": "https://caddyserver.com", "documentation": "https://www.authelia.com/integration/proxies/caddy/", "compose": { "image": "caddy:2-alpine", "container_name": "allprox", "restart": "unless-stopped", "ports": ["80:80", "443:443", "443:443/udp"], "volumes": [ "./Caddyfile:/etc/caddy/Caddyfile:ro", "./portal:/srv/portal:ro", "allprox_data:/data", "allprox_config:/config" ], "environment": [ "APP1_UPSTREAM=${APP1_UPSTREAM}", "APP2_UPSTREAM=${APP2_UPSTREAM}", "PORTAL_AUTH_HASH=${PORTAL_AUTH_HASH}" ], "networks": ["homelab"] }, "volumes": { "allprox_data": {}, "allprox_config": {} }, "networks": { "homelab": { "external": true } }, "env": [ { "name": "PORTAL_AUTH_HASH", "label": "Portal admin password (bcrypt hash)", "description": "bcrypt hash for basic_auth (default is 'changeme'). Generate your own with: docker compose exec allprox caddy hash-password", "default": "$2b$10$fKkpKSlwLZtOBXpInl8pG.8mS65kiEfjOVsuvBj7ikHgtfqEa7h4y", "required": false, "secret": true }, { "name": "APP1_UPSTREAM", "label": "Upstream for app1.example.com", "description": "Local IP:port to proxy app1.example.com to", "default": "127.0.0.1:3000", "required": false, "secret": false }, { "name": "APP2_UPSTREAM", "label": "Upstream for app2.example.com", "description": "Local IP:port to proxy app2.example.com to", "default": "127.0.0.1:8080", "required": false, "secret": false } ], "notes": "Edit services/allprox/Caddyfile to add domains and change upstreams. The portal (web UI) is at portal.example.com (change the domain). Interim auth is basic_auth (admin / 'changeme' by default) — swap to the Authelia forward_auth block in the Caddyfile for OAuth2/OIDC SSO." }