Files
RustBox/docker/README.md
T
Mateusz Gruszczyński 9ba6571fa6
RustBox CI / rustbox (push) Canceled after 0s
v0.2.0_docker
2026-10-31 15:33:58 +01:00

5.9 KiB

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:

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:

IMAP_HOST=mail.linuxiarz.pl \
SMTP_HOST=mail.linuxiarz.pl \
docker compose -p rustbox -f compose-single-sqlite.yml up --build

MySQL + NFS + OpenSearch:

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:

docker compose -p rustbox -f compose-postgres-s3-opensearch.yml ps

Stop it without deleting persistent volumes:

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:

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:

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:

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.