Copy the environment template (only required if you want to override defaults):
cp .env.docker .env
The stack already reads .env.docker via env_file, so copying is optional unless you need custom values.
Start the stack:
docker compose up -d
When you need to run migrations or any workflow that requires the bundled MySQL, activate the migration profile:
docker compose --profile migration up -d box-mysql
MySQL stays behind this profile so the default stack keeps the scope limited. The APIs already point to box-mysql via MYSQL_URL, so start the profile before or next to the main stack when migrations are required.
Stop and remove containers/volumes:
docker compose down
docker compose logs -f box-mgnt-apidocker compose exec box-mongodb mongosh --eval 'rs.status()'docker compose build box-mgnt-apibox-redis, box-rabbitmq, box-mongodb, and box-mysql use named volumes (redis_data, rabbitmq_data, mongo_data, mysql_data). MySQL is only provisioned when you activate the migration profile.mongod --replSet rs0 --bind_ip_all plus docker/mongo/init-repl.js, which initializes rs0 exactly once and ensures box_admin/box_stats exist..env.docker via env_file, then sets host/port/DB overrides for container-specific behavior.box-network) keeps all containers connected while ports stay consistent with the Nest apps (3300, 3301, 3302).curl -fsSL http://localhost:3300/api/v1/health (box-mgnt-api) returns HTTP 200/JSON.curl -fsSL http://localhost:3301/api/v1/health (box-app-api) returns HTTP 200/JSON.curl -fsSL http://localhost:3302/api/v1/health (box-stats-api) returns HTTP 200/JSON.docker compose exec box-mongodb mongosh --quiet --eval 'rs.status().ok' prints 1.