124 lines
5.9 KiB
Markdown
124 lines
5.9 KiB
Markdown
# RustBox Docker
|
|
|
|
Run all commands from the `docker/` directory.
|
|
|
|
The Compose files use the project name `rustbox` and the examples below additionally pass `-p rustbox`. Using `-p` is intentional: a globally exported `COMPOSE_PROJECT_NAME` has higher priority than the `name: rustbox` field in a Compose file and could otherwise attach RustBox to an unrelated Compose project/network.
|
|
|
|
## Quick start
|
|
|
|
PostgreSQL + S3/SILO + OpenSearch:
|
|
|
|
```bash
|
|
PORT=3009 \
|
|
IMAP_HOST=mail.linuxiarz.pl \
|
|
SMTP_HOST=mail.linuxiarz.pl \
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml up --build
|
|
```
|
|
|
|
SQLite, local blobs and local Tantivy:
|
|
|
|
```bash
|
|
IMAP_HOST=mail.linuxiarz.pl \
|
|
SMTP_HOST=mail.linuxiarz.pl \
|
|
docker compose -p rustbox -f compose-single-sqlite.yml up --build
|
|
```
|
|
|
|
MySQL + NFS + OpenSearch:
|
|
|
|
```bash
|
|
NFS_SERVER=10.0.0.10 \
|
|
NFS_EXPORT=/exports/rustbox \
|
|
IMAP_HOST=mail.linuxiarz.pl \
|
|
SMTP_HOST=mail.linuxiarz.pl \
|
|
docker compose -p rustbox -f compose-mysql-nfs-opensearch.yml up --build
|
|
```
|
|
|
|
Check only the RustBox project:
|
|
|
|
```bash
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml ps
|
|
```
|
|
|
|
Stop it without deleting persistent volumes:
|
|
|
|
```bash
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml down
|
|
```
|
|
|
|
To also delete the Compose volumes, use `down -v` only when you really want to remove local database, S3 and OpenSearch data.
|
|
|
|
## Environment variables
|
|
|
|
Copy the supplied template if you prefer a persistent local configuration:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
| Variable | Default | Used by | Description |
|
|
|---|---|---|---|
|
|
| `HOST` | `0.0.0.0` | all | Address RustBox listens on inside the container. |
|
|
| `PORT` | `3001` | all | RustBox HTTP port. The same value is used for the container listener and host port mapping. Example: `PORT=3009` publishes `3009:3009`. |
|
|
| `IMAP_HOST` | `mail.example.com` | all | IMAP server hostname used for mailbox access/authentication. Set this for a real mail system. |
|
|
| `IMAP_PORT` | `993` | all | IMAP server port. |
|
|
| `SMTP_HOST` | `mail.example.com` | all | SMTP server hostname used for sending mail. |
|
|
| `SMTP_PORT` | `587` | all | SMTP submission port. |
|
|
| `TLS_ENABLED` | `true` | all | Enables TLS for mail connections according to RustBox configuration. |
|
|
| `RUST_LOG` | `info` | all | Rust logging filter/level. |
|
|
| `SESSION_ENCRYPTION_KEY` | development key | PostgreSQL, MySQL | Shared key used to encrypt session data. All application nodes must use the same value. Replace it outside local testing. |
|
|
| `POSTGRES_PASSWORD` | `rustbox-dev-password` | PostgreSQL | Password for PostgreSQL user `rustbox`; also used in `DATABASE_URL`. |
|
|
| `S3_ACCESS_KEY` | `rustbox` | PostgreSQL/S3 | Access key for the bundled S3-compatible SILO service and RustBox S3 client. |
|
|
| `S3_SECRET_KEY` | `rustbox-s3-dev-password` | PostgreSQL/S3 | Secret key for SILO and RustBox S3 client. Replace it outside local testing. |
|
|
| `MYSQL_PASSWORD` | `rustbox-dev-password` | MySQL/NFS | Password for MySQL user `rustbox`; also used in `DATABASE_URL`. |
|
|
| `MYSQL_ROOT_PASSWORD` | `rustbox-root-password` | MySQL/NFS | MySQL root password used by the container and health check. |
|
|
| `NFS_SERVER` | none | MySQL/NFS | NFS server address. Required for `compose-mysql-nfs-opensearch.yml`. |
|
|
| `NFS_EXPORT` | `/rustbox` | MySQL/NFS | Export path on the NFS server. |
|
|
| `COMPOSE_PROJECT_NAME` | `rustbox` in `.env.example` | Compose | Compose project name. A value exported in the shell overrides the file's `name:`. The documented commands use `-p rustbox`, which has the highest priority. |
|
|
|
|
`RUSTBOX_CONFIG` and `DATABASE_URL` are set by the Compose files themselves and normally should not be supplied from the shell for these bundled topologies.
|
|
|
|
## Avoiding another Compose project
|
|
|
|
If `docker compose ... ps` shows containers from another application, inspect the effective project-name override:
|
|
|
|
```bash
|
|
printf 'COMPOSE_PROJECT_NAME=%s\n' "${COMPOSE_PROJECT_NAME:-<unset>}"
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml ps
|
|
```
|
|
|
|
For RustBox use `-p rustbox` in operational commands. This isolates service discovery too: the RustBox container resolves PostgreSQL as `postgres` only on the RustBox Compose network.
|
|
|
|
Useful DNS/database checks:
|
|
|
|
```bash
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml \
|
|
run --rm --no-deps --entrypoint getent rustbox hosts postgres
|
|
|
|
docker compose -p rustbox -f compose-postgres-s3-opensearch.yml \
|
|
exec postgres pg_isready -U rustbox -d rustbox
|
|
```
|
|
|
|
## Topologies
|
|
|
|
### `compose-single-sqlite.yml`
|
|
|
|
Single RustBox node with SQLite, filesystem blob storage and local Tantivy search. Persistent application data is stored in the `rustbox-data` Docker volume.
|
|
|
|
### `compose-postgres-s3-opensearch.yml`
|
|
|
|
Cluster-ready backing topology with PostgreSQL, SILO providing an S3-compatible API, and OpenSearch. The RustBox application container itself has no persistent `data_dir` volume.
|
|
|
|
The bundled SILO topology is intended for local/integration validation of the S3 API. Production deployments should use a security-reviewed S3-compatible service with an appropriate lifecycle and HA policy.
|
|
|
|
### `compose-mysql-nfs-opensearch.yml`
|
|
|
|
MySQL, shared POSIX/NFS blob storage and OpenSearch. The NFS volume driver is deliberate: a normal local Docker named volume is not shared between Docker hosts and therefore is not a valid blob backend for a multi-host RustBox deployment.
|
|
|
|
## Production notes
|
|
|
|
Replace all example passwords, S3 credentials and `SESSION_ENCRYPTION_KEY` before production use.
|
|
|
|
The OpenSearch examples disable its security plugin to keep the local Compose topology self-contained. Production should use TLS/authentication and HTTPS URLs in `search.urls`.
|
|
|
|
The two cluster-ready examples intentionally start one RustBox application container so they can run directly on a single Docker host. For multiple RustBox application nodes, put them behind an external load balancer and do not publish the same host port from every node; SQL, blob storage and OpenSearch must remain shared between the nodes.
|