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>
69 lines
2.8 KiB
Markdown
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
|
|
```
|