--- title: Docker Compose Development description: Building SurfSense from source using docker-compose.dev.yml --- If you're contributing to SurfSense and want to build from source, use `docker-compose.dev.yml` instead: ```bash cd SurfSense/docker docker compose -f docker-compose.dev.yml up --build ``` This file builds the backend and frontend from your local source code (instead of pulling prebuilt images) and includes pgAdmin for database inspection at [http://localhost:5050](http://localhost:5050). It intentionally keeps raw frontend, backend, and zero-cache ports published for debugging. Use the production `docker-compose.yml` for the default Caddy single-origin setup. ## Dev-Only Environment Variables The following `.env` variables are **only used by the dev compose file** (they have no effect on the production `docker-compose.yml`): | Variable | Description | Default | |----------|-------------|---------| | `PGADMIN_PORT` | pgAdmin web UI port | `5050` | | `PGADMIN_DEFAULT_EMAIL` | pgAdmin login email | `admin@surfsense.com` | | `PGADMIN_DEFAULT_PASSWORD` | pgAdmin login password | `surfsense` | | `REDIS_PORT` | Exposed Redis port (internal-only in prod) | `6379` | | `AUTH_TYPE` | Runtime auth mode | `LOCAL` | | `ETL_SERVICE` | Runtime document parsing service | `DOCLING` | | `DEPLOYMENT_MODE` | Runtime deployment mode | `self-hosted` | | `ZERO_CACHE_PORT` | Exposed zero-cache port for debugging | `4848` | In the production compose file, the frontend reads `AUTH_TYPE`, `ETL_SERVICE`, and `DEPLOYMENT_MODE` at request time. Browser API and Zero traffic are same-origin relative through bundled Caddy. Production Docker exposes only the bundled Caddy proxy by default; dev compose keeps direct service ports so contributors can inspect and restart individual services without going through the proxy.