Skip to main content

Docker Installation

Docker provides an easy way to run the zopp server without installing dependencies. All zopp images are available on GitHub Container Registry.

Images​

ImageDescription
ghcr.io/faiscadev/zopp-serverThe zopp gRPC server
ghcr.io/faiscadev/zopp-operatorKubernetes operator for syncing secrets
ghcr.io/faiscadev/zopp-cliThe zopp CLI

All images support linux/amd64 and linux/arm64.

Running the Server​

Quick Start (SQLite)​

docker run -d \
--name zopp-server \
-p 50051:50051 \
-v zopp-data:/data \
ghcr.io/faiscadev/zopp-server:latest

This starts the server with SQLite storage at /data/zopp.db.

With PostgreSQL​

docker run -d \
--name zopp-server \
-p 50051:50051 \
-e DATABASE_URL=postgres://user:password@host:5432/zopp \
ghcr.io/faiscadev/zopp-server:latest

With TLS​

docker run -d \
--name zopp-server \
-p 50051:50051 \
-v /path/to/certs:/certs:ro \
-v zopp-data:/data \
ghcr.io/faiscadev/zopp-server:latest \
serve --tls-cert /certs/server.crt --tls-key /certs/server.key

Docker Compose​

A complete setup with PostgreSQL:

# docker-compose.yaml
version: '3.8'

services:
postgres:
image: postgres:16
environment:
POSTGRES_USER: zopp
POSTGRES_PASSWORD: zopp
POSTGRES_DB: zopp
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U zopp"]
interval: 5s
timeout: 5s
retries: 5

zopp-server:
image: ghcr.io/faiscadev/zopp-server:latest
ports:
- "50051:50051"
environment:
DATABASE_URL: postgres://zopp:zopp@postgres:5432/zopp
depends_on:
postgres:
condition: service_healthy

volumes:
postgres-data:

Start with:

docker compose up -d

Using the CLI via Docker​

If you don't want to install the CLI locally, you can use the Docker image:

# Create an alias for convenience
alias zopp='docker run --rm -v ~/.zopp:/home/zopp/.zopp ghcr.io/faiscadev/zopp-cli:latest'

# Now use normally
zopp workspace list
note

The -v ~/.zopp:/home/zopp/.zopp mount ensures your credentials persist between runs.

Connecting to Host Network​

To connect the CLI to a server running on your host machine:

# Linux
docker run --rm \
--network host \
-v ~/.zopp:/home/zopp/.zopp \
ghcr.io/faiscadev/zopp-cli:latest \
--server http://127.0.0.1:50051 \
workspace list

# macOS/Windows
docker run --rm \
-v ~/.zopp:/home/zopp/.zopp \
ghcr.io/faiscadev/zopp-cli:latest \
--server http://host.docker.internal:50051 \
workspace list

Creating Server Invites​

To create the first user invite, you need to run the server command with database access:

# SQLite
docker run --rm \
-v zopp-data:/data \
ghcr.io/faiscadev/zopp-server:latest \
invite create --expires-hours 48 --db /data/zopp.db

# PostgreSQL
docker run --rm \
-e DATABASE_URL=postgres://zopp:zopp@host.docker.internal:5432/zopp \
ghcr.io/faiscadev/zopp-server:latest \
invite create --expires-hours 48

Environment Variables​

VariableDescriptionDefault
DATABASE_URLDatabase connection stringSQLite at /data/zopp.db
ZOPP_TLS_CERTPath to TLS certificateNone
ZOPP_TLS_KEYPath to TLS private keyNone
ZOPP_TLS_CLIENT_CAPath to client CA for mTLSNone

Health Checks​

The server exposes health endpoints on port 8080:

# Liveness
curl http://localhost:8080/healthz

# Readiness
curl http://localhost:8080/readyz

Next Steps​