Files
Warp/Docker-AIO/README.md
T
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

69 lines
2.8 KiB
Markdown

# Docker-AIO: everything in one image
The homeserver, the admin panel and the web client in one image, one image
per database. [`entrypoint.sh`](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`](Dockerfile) | `warp-aio` | SQLite, `/data/warp.db` |
| [`Dockerfile.PocketBase`](Dockerfile.PocketBase) | `warp-aio-pocketbase` | PocketBase (embedded driver), `/data/pb_data` |
| [`Dockerfile.PostgreSQL`](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`.
```sh
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`](.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/](../Docker/README.md), 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:
```sh
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
```