Files
Warp/Docker/docker-compose.pocketbase.s3.prod.yml
T
tajniak81andClaude Opus 5.5 0994156705 Docker, Docker-AIO: private registry, data volumes set from .env
Images now default to the registry 10.2.1.10:5500/admin instead of
ghcr.io/dariuszjaniak, in the compose files, the .env examples and the
READMEs.

Each data volume's source comes from .env: WARP_DATA_VOLUME,
WARP_POSTGRES_VOLUME, SEAWEED_DATA_VOLUME and SEAWEED_ADMIN_VOLUME.
Empty keeps the named volume; a host path bind-mounts that directory,
which must be writable by UID 10001 where the homeserver or the AIO
container uses it. Each .env example lists the ones its compose file
mounts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:46:31 +01:00

97 lines
3.9 KiB
YAML

# Warp on PocketBase with media in an S3 bucket elsewhere: the homeserver,
# the admin panel and the web client, each in its own container, pulled
# from a registry.
#
# cd Docker
# cp .env.pocketbase.s3.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
# WARP_PB_S3_BUCKET (default warp) on WARP_PB_S3_ENDPOINT, which must already
# exist: nothing here runs a gateway or creates the bucket. For a gateway on
# this Docker host, use http://host.docker.internal:8333; the host entry below
# makes that name resolve. For a SeaweedFS that comes up with the stack, see
# docker-compose.pocketbase.seaweedfs.yml. Media stored before S3 was on is
# not moved into the bucket.
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
# client http://localhost:8080.
#
# Create the first administrator once the server is up:
#
# docker compose -f docker-compose.pocketbase.s3.prod.yml exec warp warp create-account --username admin --admin
#
# Nothing is built here: the homeserver, admin panel and web client images
# come from WARP_REGISTRY (default 10.2.1.10:5500/admin) at tag
# WARP_VERSION (default latest). Pin WARP_VERSION to a release in
# production, and update with
#
# docker compose -f docker-compose.pocketbase.s3.prod.yml pull && docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
name: warp-pocketbase-s3
services:
warp:
image: ${WARP_REGISTRY:-10.2.1.10:5500/admin}/warp:${WARP_VERSION:-latest}
pull_policy: always
restart: unless-stopped
extra_hosts:
# Lets WARP_PB_S3_ENDPOINT name the Docker host as host.docker.internal.
- "host.docker.internal:host-gateway"
# The homeserver does not check the endpoint at startup and would only
# fail on the first upload, so wait up to 30 seconds for it to answer at
# all (any HTTP status). 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:
- >-
i=0; until curl -s -o /dev/null --max-time 5 "$$WARP_PB_S3_ENDPOINT"; do
i=$$((i + 1)); if [ "$$i" -ge 30 ]; then echo "S3 endpoint $$WARP_PB_S3_ENDPOINT does not answer" >&2; exit 1; fi;
echo "waiting for S3 endpoint $$WARP_PB_S3_ENDPOINT" >&2; sleep 1; done;
test -f /data/signing.key || warp generate-keys --output /data/signing.key; exec warp serve
env_file: .env
environment:
WARP_DB_DRIVER: pocketbase
WARP_DB_CONNECTION_STRING: /data/pb_data
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: ${WARP_PB_S3_ENDPOINT:?set WARP_PB_S3_ENDPOINT in .env}
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
# SeaweedFS and MinIO ignore the region; the client insists on one.
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
WARP_PB_S3_SECRET: ${WARP_PB_S3_SECRET:?set WARP_PB_S3_SECRET in .env}
# true for SeaweedFS and MinIO, false for AWS S3 proper.
WARP_PB_S3_FORCE_PATH_STYLE: ${WARP_PB_S3_FORCE_PATH_STYLE:-true}
volumes:
- ${WARP_DATA_VOLUME:-warp-data}:/data
ports:
- "${WARP_PORT:-8008}:8008"
admin:
image: ${WARP_REGISTRY:-10.2.1.10:5500/admin}/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:-10.2.1.10:5500/admin}/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:
warp-data: