Installation
Domain, proxy, and TLS
Publish Forge Web and Forge API through a single HTTPS boundary.
Repository-validated operator guidance View source ↗
#DNS first
Register a domain with any registrar. Create an A record for the panel hostname to the control-plane IPv4 address. Create an AAAA record only when the same host has working IPv6 and its firewall allows it. Check propagation before certificate requests.
DNS check
dig +short panel.example.com A
dig +short panel.example.com AAAA#Supplied proxy options
| Option | Repository configuration | Use |
|---|---|---|
| Caddy | infra/compose.caddy.production.yml + infra/Caddyfile.production.example | A public Caddy override routes the panel hostname to Web and /api to API. Copy the example first. |
| Traefik | infra/compose.tls.yml | The supplied TLS override obtains HTTP-01 certificates and routes the panel hostname to Web and /api to API. |
#Enable the supplied TLS override
From infra/
# Set PANEL_DOMAIN, PANEL_URL, TRAEFIK_ACME_EMAIL and optional API_DOMAIN in .env
docker compose -f compose.yml -f compose.production.yml -f compose.tls.yml --env-file .env config --quiet
docker compose -f compose.yml -f compose.production.yml -f compose.tls.yml --env-file .env up -d#Use Caddy instead
From infra/
# Do not combine this with compose.tls.yml
cp Caddyfile.production.example Caddyfile.production
# Set PANEL_DOMAIN and PANEL_URL in .env
docker compose -f compose.yml -f compose.production.yml -f compose.caddy.production.yml --env-file .env config --quiet
docker compose -f compose.yml -f compose.production.yml -f compose.caddy.production.yml --env-file .env up -d
docker compose -f compose.yml -f compose.production.yml -f compose.caddy.production.yml --env-file .env logs -f caddy#Firewall and certificate failures
HTTP-01 needs a reachable port 80
Allow TCP 80 and 443 to the proxy. A failed certificate is commonly caused by incorrect DNS, an occupied port, an unreachable IPv6 address, or a CDN/proxy mode that prevents the challenge.