Ports
AnvilBase publishes host ports in a dedicated 39xxx block so a fresh clone
won’t collide with the conventional ports you’re probably already running (Postgres
5432, Redis 6379, MinIO 9000, dev servers on 3000/4000/8080).
Container-internal ports stay at their conventional defaults, so inter-service
DSNs don’t depend on host overrides.
Default ports
| Service | Host port | Internal port | Override (.env) |
|---|---|---|---|
| Control plane (API) | 39001 | 3001 | CONTROL_PLANE_PORT |
| Auth | 39002 | 3002 | AUTH_PORT |
| Webhooks | 39003 | 3003 | WEBHOOKS_PORT |
| Console | 39004 | 3004 | CONSOLE_PORT |
| Realtime | 39040 | 4000 | REALTIME_PORT |
| Postgres | 39432 | 5432 | POSTGRES_PORT |
| Valkey | 39637 | 6379 | VALKEY_PORT |
| Supavisor | 39654 | — | SUPAVISOR_PORT |
| MinIO (S3 API) | 39900 | 9000 | MINIO_PORT |
| MinIO (console) | 39901 | 9001 | MINIO_CONSOLE_PORT |
| Traefik (HTTP) | 39080 | 80 | TRAEFIK_HTTP_PORT |
| Traefik (HTTPS) | 39443 | 443 | TRAEFIK_HTTPS_PORT |
| Traefik (dashboard) | 39081 | 8080 | TRAEFIK_DASHBOARD_PORT |
Local quick links
- Console — http://localhost:39004
- Control-plane API — http://localhost:39001
- Health — http://localhost:39001/health
- MinIO console — http://localhost:39901 (inactive under the RustFS overlay)
- Traefik dashboard — http://localhost:39081 (disable in production)
Production exposure
In production, only Traefik (80/443) should be reachable from the internet.
Do not publish the internal service ports to the host; keep Postgres, Valkey, MinIO,
realtime, and Deno on the private network, and close/relocate the Traefik
dashboard port. See Network Security.
Changing a port
Set the relevant *_PORT in .env and restart the stack. Because only the host
side changes, no other service configuration is affected:
# example: move the console to 4321CONSOLE_PORT=4321Next: Error Codes.