Configuration
All runtime configuration is done through environment variables passed to the app container.
Environment variables
| Variable | Required | Default | Description |
|---|---|---|---|
SECRET_KEY_BASE | ✅ | — | Key used to sign cookies and tokens. Must be at least 64 characters. Generate with openssl rand -base64 48 |
DATABASE_URL | ✅ | — | Full Ecto/PostgreSQL connection string, e.g. ecto://user:pass@host/db |
PHX_HOST | — | localhost | Public hostname of the application. Used to build absolute URLs |
PORT | — | 4000 | Port that the application listens on inside the container |
POSTGRES_PASSWORD | — | kinkeep | Password for the kinkeep PostgreSQL user (used by the db service) |
POOL_SIZE | — | 10 | Number of database connections in the pool |
Persistent volumes
| Volume | Contents |
|---|---|
db_data | PostgreSQL data directory |
uploads | Photos and logos uploaded by users |
Back up both volumes regularly if you care about your data.
Running behind a reverse proxy
If you put Kinkeep behind Nginx, Caddy, or Traefik:
- Set
PHX_HOSTto your public domain. - Forward port
4000from the container. - Make sure the proxy passes the
X-Forwarded-ForandX-Forwarded-Protoheaders so that Phoenix can reconstruct the correct base URL.
Example Caddy snippet:
kinkeep.example.org {
reverse_proxy localhost:4000
}