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

2. Configure environment

cp .env.example .env
# 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.