Skip to content

Docker

PlotPress ships as a single static-binary image: backend, embedded Astro frontend, no sidecar.

Terminal window
docker run --rm -it \
-p 8080:8080 \
-v "$(pwd)/workspace:/workspace" \
-v plotpress-data:/var/lib/plotpress \
-e WAREHOUSE_PASSWORD \
-e SMTP_PASSWORD \
ghcr.io/octopyth/plotpress:latest

./workspace is your PlotPress workspace — the folder containing plotpress.yaml, connections.yaml, groups.yaml, and dashboards/. The named volume holds SQLite (sessions, audit log).

services:
plotpress:
image: ghcr.io/octopyth/plotpress:latest
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./workspace:/workspace:ro
- plotpress-data:/var/lib/plotpress
environment:
WAREHOUSE_PASSWORD: ${WAREHOUSE_PASSWORD}
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
SMTP_PASSWORD: ${SMTP_PASSWORD}
volumes:
plotpress-data:

The workspace is mounted read-only on purpose — dashboards are config-as-code, the container should never write to them.

PathContents
/usr/local/bin/plotpressThe Go binary; embeds the Astro frontend.
/workspaceMount point for your PlotPress workspace.
/var/lib/plotpressSQLite + any caches. Mount a volume here.
TagMeaning
latestLatest stable release.
vX.Y.ZPinned release.
mainBuilt from main on every merge — for testing only.

The only stateful surface inside the container is /var/lib/plotpress. Back it up the same way you back up any SQLite-on-a-volume workload — a periodic litestream replicate to S3/R2 is the recommended path.