Files
Warp/Docker-AIO
tajniak81andClaude Opus 5.5 89f89b5d36 Docker-AIO: one image per database
Dockerfile builds warp-aio on SQLite, Dockerfile.PocketBase builds
warp-aio-pocketbase and Dockerfile.PostgreSQL builds warp-aio-postgresql
with PostgreSQL bundled. The database driver and connection string now
come from the image, so the SQLite and PocketBase images no longer carry
PostgreSQL (103 MB instead of 149 MB). The AIO compose files point at
their own Dockerfile and image, and the entrypoint refuses to start an
embedded PostgreSQL in an image that has none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:22:24 +02:00
..
2026-10-22 20:22:24 +02:00
2026-10-22 20:22:24 +02:00

Docker-AIO: everything in one image

The homeserver, the admin panel and the web client in one image, one image per database. entrypoint.sh starts them in one container; if one exits, the rest are stopped and the container's restart policy brings the set back.

Dockerfile Image Database
Dockerfile warp-aio SQLite, /data/warp.db
Dockerfile.PocketBase warp-aio-pocketbase PocketBase (embedded driver), /data/pb_data
Dockerfile.PostgreSQL warp-aio-postgresql PostgreSQL 17 in the container, /data/postgres
Compose file Image
docker-compose.sqlite.yml warp-aio, built here
docker-compose.pocketbase.yml warp-aio-pocketbase, built here
docker-compose.postgresql.yml warp-aio-postgresql, built here
docker-compose.*.prod.yml the same images, pulled, never built

Everything lives in the warp-data volume, mounted on /data.

cd Docker-AIO
cp .env.example .env      # then edit it
docker compose -f docker-compose.sqlite.yml up -d --build
docker compose -f docker-compose.sqlite.yml exec warp warp create-account --username admin --admin

Homeserver on :8008, admin panel on :8009, web client on :8080.

The PostgreSQL in warp-aio-postgresql listens only on a Unix socket inside the container, so it needs no password and is not reachable from outside. To point that image at a PostgreSQL elsewhere instead, set WARP_AIO_EMBEDDED_POSTGRES=false and WARP_DB_CONNECTION_STRING.

The three Dockerfiles share their build stages line for line; only the header and the final stage differ. Keep the build stages in step when changing one.

Settings

Every setting is in .env, copied from .env.example, which lists them all with their defaults; an empty value means the default. .env is not committed. On top of the settings of Docker/, it has:

Variable Default
WARP_AIO_ADMIN true false runs no admin panel
WARP_AIO_WEB true false runs no web client

The database driver and connection string come from the image.

Prod files

The .prod.yml files pull $WARP_REGISTRY/<image>:$WARP_VERSION (defaults ghcr.io/dariuszjaniak and latest). Push the images first, from the repository root:

docker build -t $WARP_REGISTRY/warp-aio:$WARP_VERSION -f Docker-AIO/Dockerfile .
docker build -t $WARP_REGISTRY/warp-aio-pocketbase:$WARP_VERSION -f Docker-AIO/Dockerfile.PocketBase .
docker build -t $WARP_REGISTRY/warp-aio-postgresql:$WARP_VERSION -f Docker-AIO/Dockerfile.PostgreSQL .
for i in warp-aio warp-aio-pocketbase warp-aio-postgresql; do
  docker push $WARP_REGISTRY/$i:$WARP_VERSION
done