Docker Compose

Production Docker Compose deployment walkthrough.

The canonical way to deploy Weavestream is with the published compose.yml. This guide covers a production-grade setup.

The compose.yml

The compose file defines five services:

services:
  postgres:   # PostgreSQL 16 — primary database
  redis:      # Redis 7 — sessions, queues, cache
  api:        # NestJS REST API
  web:        # Next.js frontend
  worker:     # BullMQ background jobs

Uploaded files (attachments, thumbnails, logos, export PDFs) live on a host bind-mounted directory (${DATA_DIR}/files) shared by api and worker. No additional storage container is required.

All Weavestream images are pulled from GitHub Container Registry:

ghcr.io/weavestream/weavestream-{api,web,worker}:<version>

Production Setup

1. Download compose.yml and .env

Pin to a specific release tag:

mkdir weavestream && cd weavestream
curl -O https://raw.githubusercontent.com/Weavestream/Weavestream/v1.1.1/compose.yml
curl -O https://raw.githubusercontent.com/Weavestream/Weavestream/v1.1.1/.env.example
mv .env.example .env

2. Generate secrets

curl -O https://raw.githubusercontent.com/Weavestream/Weavestream/v1.1.1/scripts/keygen.sh
chmod +x keygen.sh
./keygen.sh >> .env

Update DATABASE_URL and REDIS_URL to use the newly generated passwords.

3. Set critical variables in .env

WEAVESTREAM_VERSION=1.1.1
APP_URL=https://your-domain.com
API_URL=https://your-domain.com/api
DATA_DIR=/opt/weavestream/data   # or your preferred path

4. Configure data directory

mkdir -p /opt/weavestream/data/{postgres,redis,files}

Or let Docker create it automatically on first boot.

5. Start the stack

docker compose up -d

6. Create the first admin

docker compose exec api node dist/cli.js create-admin

Health Checks

Each service has a health check defined in compose.yml. Check the status:

docker compose ps

The web and worker services wait for api to be healthy before starting. The api service runs prisma migrate deploy on boot — this takes a few seconds on first run.

Useful Commands

# View logs
docker compose logs -f api
docker compose logs -f worker

# Check API health
curl http://localhost:3000/api/health

# Run CLI commands
docker compose exec api node dist/cli.js --help

# Restart a single service
docker compose restart api

# Stop everything
docker compose down

# Stop and remove volumes (destructive — data loss!)
docker compose down -v

Scaling

api and worker are stateless and can be scaled horizontally:

docker compose up -d --scale api=3 --scale worker=2

prisma migrate deploy uses a Postgres advisory lock, so multiple api replicas are safe to start simultaneously.

Environment Variables at Runtime

Environment variables in .env are loaded by Docker Compose and injected into each container. To apply a change:

# Edit .env
docker compose up -d   # containers restart with new env

Some changes (like DATA_DIR) require the stack to be stopped first to avoid data loss.