Skip to Content
New to Genbox? Check out our Getting Started guide
ConfigurationInfrastructure

Infrastructure Configuration

Configure infrastructure services like databases, caches, and queues.

Basic Infrastructure

provides: mongodb: type: database image: mongo:7 port: 27017

Full Configuration

provides: mongodb: type: database image: mongo:7 port: 27017 description: Primary database # Data persistence data_dir: /data/db # Additional ports additional_ports: admin: 27018 # Environment variables for container env: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD} MONGO_INITDB_DATABASE: myapp # Volume mounts volumes: ./init-mongo.js: /docker-entrypoint-initdb.d/init.js # Health check healthcheck: mongosh --eval "db.adminCommand('ping')" # Replica set (for transactions) replicaSet: rs0

Common Services

MongoDB

provides: mongodb: type: database image: mongo:7 port: 27017 data_dir: /data/db env: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: secret

Redis

provides: redis: type: cache image: redis:7-alpine port: 6379 data_dir: /data # For persistence

RabbitMQ

provides: rabbitmq: type: queue image: rabbitmq:3-management port: 5672 additional_ports: management: 15672 env: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest

PostgreSQL

provides: postgres: type: database image: postgres:16 port: 5432 data_dir: /var/lib/postgresql/data env: POSTGRES_USER: postgres POSTGRES_PASSWORD: secret POSTGRES_DB: myapp

Elasticsearch

provides: elasticsearch: type: search image: elasticsearch:8.11.0 port: 9200 additional_ports: transport: 9300 env: discovery.type: single-node ES_JAVA_OPTS: "-Xms512m -Xmx512m" xpack.security.enabled: "false"

MinIO (S3-compatible storage)

provides: minio: type: storage image: minio/minio:latest port: 9000 additional_ports: console: 9001 env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin

Mailhog (Email testing)

provides: mailhog: type: email image: mailhog/mailhog:latest port: 1025 additional_ports: web: 8025

Infrastructure Types

TypePurposeExamples
databaseData storageMongoDB, PostgreSQL, MySQL
cacheCaching layerRedis, Memcached
queueMessage queuesRabbitMQ, Kafka
storageObject storageMinIO, LocalStack S3
searchSearch enginesElasticsearch, Typesense
emailEmail servicesMailhog, MailCatcher
customOther servicesAny Docker image

Profile-Specific Infrastructure

Control infrastructure per profile:

profiles: quick: apps: [frontend] # No infrastructure - connect to staging full: apps: [frontend, backend] connections: backend: mongodb: local # Use local MongoDB redis: local # Use local Redis rabbitmq: staging # Use staging RabbitMQ

Connection URLs

Apps receive connection URLs via environment variables:

apps: backend: connects_to: mongodb: mode: local env: MONGODB_URI: mongodb://root:secret@localhost:27017/myapp?authSource=admin redis: mode: local env: REDIS_URL: redis://localhost:6379

Health Checks

Configure health checks for infrastructure:

provides: mongodb: type: database image: mongo:7 port: 27017 healthcheck: command: mongosh --eval "db.adminCommand('ping')" interval: 10s timeout: 5s retries: 5

Volumes and Persistence

provides: mongodb: type: database image: mongo:7 port: 27017 data_dir: /data/db # Mounted for persistence volumes: # Mount initialization scripts ./scripts/init-db.js: /docker-entrypoint-initdb.d/init.js:ro # Mount config files ./config/mongod.conf: /etc/mongod.conf:ro

Best Practices

  1. Use specific versions: Avoid latest tags
  2. Configure health checks: Ensure services are ready
  3. Set resource limits: Prevent runaway containers
  4. Use secrets for passwords: Don’t hardcode in config
  5. Document custom configs: Explain non-obvious settings
Last updated on