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.