← Volver al Generador Principal

Configuración de Docker Compose para FastAPI + MongoDB + Mongo Express

Cuándo usar esta combinación

Ideal para microservicios y APIs asíncronas de alto rendimiento que manejan datos no estructurados o esquemas dinámicos basados en JSON. FastAPI proporciona concurrencia nativa (ASGI) y documentación automática OpenAPI, mientras MongoDB ofrece escalabilidad horizontal y flexibilidad de modelado. Mongo Express acelera las etapas de desarrollo, prototipado y pruebas locales al proveer una interfaz visual ligera para inspeccionar y manipular datos sin requerir herramientas de escritorio externas.


Configuración de Referencia (docker-compose.yml)

version: '3.8'

services:
  fastapi:
    build: 
      context: ./app
      dockerfile: Dockerfile
    container_name: fastapi_app
    restart: always
    environment:
      - MONGO_URI=mongodb://app_user:${MONGO_APP_PASSWORD}@mongodb:27017/app_db?authSource=app_db
      - SECRET_KEY=${FASTAPI_SECRET_KEY}
    ports:
      - "8000:8000"
    depends_on:
      mongodb:
        condition: service_healthy
    networks:
      - backend_network

  mongodb:
    image: mongo:6.0
    container_name: mongodb_db
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
      - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
      - MONGO_INITDB_DATABASE=app_db
    volumes:
      - mongo_data:/data/db
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
    networks:
      - backend_network
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5

  mongo-express:
    image: mongo-express:1.0.0-alpha.4
    container_name: mongo_express_gui
    restart: unless-stopped
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=${MONGO_ROOT_USER}
      - ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_ROOT_PASSWORD}
      - ME_CONFIG_MONGODB_URL=mongodb://${MONGO_ROOT_USER}:${MONGO_ROOT_PASSWORD}@mongodb:27017/
      - ME_CONFIG_BASICAUTH_USERNAME=${MONGO_EXPRESS_USER}
      - ME_CONFIG_BASICAUTH_PASSWORD=${MONGO_EXPRESS_PASSWORD}
    ports:
      - "8081:8081"
    depends_on:
      mongodb:
        condition: service_healthy
    networks:
      - backend_network

networks:
  backend_network:
    driver: bridge

volumes:
  mongo_data:

Variables de Entorno Críticas para Producción

  1. MONGO_INITDB_ROOT_PASSWORD (MongoDB): Contraseña maestra del clúster. Debe generarse de forma aleatoria (mínimo 32 caracteres alfanuméricos) y nunca usar valores por defecto (admin, root).
  2. FASTAPI_SECRET_KEY (FastAPI): Semilla criptográfica utilizada para firmar tokens JWT, cookies y sesiones de seguridad. Si se ve comprometida, se pueden falsificar identidades de autenticación.
  3. ME_CONFIG_BASICAUTH_PASSWORD (Mongo Express): Credencial de acceso a la interfaz web administrativa. La exposición de este panel con credenciales predeterminadas equivale a otorgar control total de la base de datos a atacantes.

Consejo de Seguridad y Rendimiento

Checklist de Seguridad antes de desplegar