Each folder gets a .env.example listing every homeserver, admin panel and web client setting with its default (empty means the default). Compose reads .env for ports, registry and the PostgreSQL password, and passes it to the containers through env_file; the compose files keep only the database driver, connection string and internal addresses. .env is git-ignored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
90 lines
2.9 KiB
YAML
90 lines
2.9 KiB
YAML
# Warp on PostgreSQL: the homeserver, the admin panel, the web client and
|
|
# PostgreSQL, each in its own container, pulled from a registry.
|
|
#
|
|
# cd Docker
|
|
# cp .env.example .env # then edit it; set WARP_POSTGRES_PASSWORD
|
|
# docker compose -f docker-compose.postgresql.prod.yml up -d
|
|
#
|
|
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
|
|
# client http://localhost:8080. PostgreSQL is reachable only on the compose
|
|
# network.
|
|
#
|
|
# Create the first administrator once the server is up:
|
|
#
|
|
# docker compose -f docker-compose.postgresql.prod.yml exec warp warp create-account --username admin --admin
|
|
#
|
|
# Nothing is built here: the images come from WARP_REGISTRY (default
|
|
# ghcr.io/dariuszjaniak) at tag WARP_VERSION (default latest). Pin
|
|
# WARP_VERSION to a release in production, and update with
|
|
#
|
|
# docker compose -f docker-compose.postgresql.prod.yml pull && docker compose -f docker-compose.postgresql.prod.yml up -d
|
|
|
|
name: warp-postgresql
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:17-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: warp
|
|
POSTGRES_PASSWORD: ${WARP_POSTGRES_PASSWORD:?set WARP_POSTGRES_PASSWORD}
|
|
POSTGRES_DB: warp
|
|
# C sorts by byte, which is what room and event IDs are compared by.
|
|
POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate=C --lc-ctype=C
|
|
volumes:
|
|
- postgres-data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U warp -d warp"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
|
|
warp:
|
|
image: ${WARP_REGISTRY:-ghcr.io/dariuszjaniak}/warp:${WARP_VERSION:-latest}
|
|
pull_policy: always
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
# The signing key is created on first start and kept in the volume:
|
|
# losing it means other servers no longer recognise this one.
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
command:
|
|
- test -f /data/signing.key || warp generate-keys --output /data/signing.key; exec warp serve
|
|
env_file: .env
|
|
environment:
|
|
WARP_DB_DRIVER: postgres
|
|
WARP_DB_CONNECTION_STRING: postgres://warp:${WARP_POSTGRES_PASSWORD:?set WARP_POSTGRES_PASSWORD}@postgres:5432/warp?sslmode=disable
|
|
volumes:
|
|
- warp-data:/data
|
|
ports:
|
|
- "${WARP_PORT:-8008}:8008"
|
|
|
|
admin:
|
|
image: ${WARP_REGISTRY:-ghcr.io/dariuszjaniak}/warp-admin:${WARP_VERSION:-latest}
|
|
pull_policy: always
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- warp
|
|
env_file: .env
|
|
environment:
|
|
WARP_ADMIN_HOMESERVER: http://warp:8008
|
|
ports:
|
|
- "${WARP_ADMIN_PORT:-8009}:8009"
|
|
|
|
web:
|
|
image: ${WARP_REGISTRY:-ghcr.io/dariuszjaniak}/warp-web:${WARP_VERSION:-latest}
|
|
pull_policy: always
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- warp
|
|
env_file: .env
|
|
environment:
|
|
WARP_WEB_HOMESERVER: http://warp:8008
|
|
ports:
|
|
- "${WARP_WEB_PORT:-8080}:8080"
|
|
|
|
volumes:
|
|
postgres-data:
|
|
warp-data:
|