Deployment
Deploy Pliny
Docker and Docker Compose. Five minutes from zero to running.
Requirements
- ✓ Docker 20+
- ✓ Docker Compose v2+
- ✓ 512MB RAM minimum (1GB+ recommended)
- ✓ Any Linux server, VPS, or homelab machine
Quick start
1. Clone the repo
git clone https://github.com/bshandley/pliny
cd pliny
cd pliny
2. Configure environment
cp .env.example .env
# Edit .env — at minimum set DB_PASSWORD, JWT_SECRET, and PLINY_URL
# Edit .env — at minimum set DB_PASSWORD, JWT_SECRET, and PLINY_URL
3. Start
docker compose up -d
Images pull from GitHub Container Registry automatically. Migrations run on startup — nothing else needed.
4. Open Pliny
http://localhost:8080
Create your admin account on first launch.
Running behind a reverse proxy?
Point your reverse proxy (nginx, Caddy, Traefik, Pangolin, etc.) to port 8080.
WebSocket support is required — make sure your proxy forwards the Upgrade header.
Environment variables
| Variable | Default | Description |
|---|---|---|
| POSTGRES_DB | pliny | Database name |
| POSTGRES_USER | pliny | Database user |
| POSTGRES_PASSWORD * | — | Database password — change this |
| JWT_SECRET * | — | Secret for JWT tokens — use a long random string |
| PORT | 3001 | Backend API port |
| SMTP_HOST | — | SMTP host for email notifications (optional) |
| SMTP_PORT | 587 | SMTP port |
| SMTP_USER | — | SMTP username |
| SMTP_PASS | — | SMTP password |
| S3_ENDPOINT | — | S3-compatible storage endpoint (optional — uses local disk by default) |
| S3_BUCKET | — | S3 bucket name |
| S3_ACCESS_KEY | — | S3 access key |
| S3_SECRET_KEY | — | S3 secret key |
| OIDC_ISSUER | — | OIDC provider URL for SSO (optional) |
| OIDC_CLIENT_ID | — | OIDC client ID |
| OIDC_CLIENT_SECRET | — | OIDC client secret |
* Required
Updating
docker compose pull && docker compose up -d
Migrations run automatically on restart. That's it.