# 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/:$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 ```