← Volver al Generador Principal

Configuración de Docker Compose para Meilisearch + Python FastAPI

Cuándo usar esta combinación

Esta arquitectura es ideal para aplicaciones que requieren búsqueda instantánea (search-as-you-type), tolerancia a erratas y filtros facetados sin la complejidad operativa de Elasticsearch. FastAPI proporciona una capa de backend asíncrona y de alto rendimiento para validar datos, gestionar la lógica de negocio y controlar la autenticación, mientras Meilisearch delega las búsquedas ultrarrápidas con latencias inferiores a 50 ms. Es perfecta para catálogos de e-commerce, directorios SaaS, motores de documentación técnica y plataformas con alto volumen de lecturas concurrentes.


Docker Compose de Referencia

version: '3.8'

services:
  meilisearch:
    image: getmeili/meilisearch:v1.6
    environment:
      - MEILI_ENV=production
      - MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
      - MEILI_NO_ANALYTICS=true
    volumes:
      - meili_data:/meili_data
    networks:
      - internal_network
    restart: unless-stopped

  api:
    build:
      context: ./api
      dockerfile: Dockerfile
    environment:
      - APP_ENV=production
      - SECRET_KEY=${FASTAPI_SECRET_KEY}
      - MEILISEARCH_URL=http://meilisearch:7700
      - MEILISEARCH_KEY=${MEILI_MASTER_KEY}
    ports:
      - "8000:8000"
    depends_on:
      - meilisearch
    networks:
      - internal_network
    restart: unless-stopped

networks:
  internal_network:
    driver: bridge

volumes:
  meili_data:

Variables de Entorno Críticas para Producción

  1. MEILI_MASTER_KEY: Clave maestra requerida para proteger la instancia de Meilisearch. Si se omite en producción, el contenedor fallará por diseño; si es predecible, cualquier usuario podrá alterar o borrar los índices directamente. Generar con openssl rand -base64 32.

  2. FASTAPI_SECRET_KEY (o SECRET_KEY): Semilla criptográfica utilizada por FastAPI para firmar tokens JWT, sesiones y hashes. Si se expone o usa el valor por defecto, permite la falsificación de tokens de autenticación y escalada de privilegios.

  3. MEILI_ENV (establecido en production): Fuerza a Meilisearch a requerir obligatoriamente una clave maestra para cualquier operación, desactiva rutas inseguras de depuración y optimiza el consumo del motor LMDB para cargas de trabajo reales.


Consejo de Seguridad y Rendimiento

Aislamiento de red y optimización de I/O: Nunca expongas el puerto de Meilisearch (7700) al tráfico público en el archivo Compose; mantén la comunicación exclusivamente dentro de una red interna de Docker (internal_network), forzando que todas las consultas pasen por FastAPI para control de acceso y rate limiting.

Para el rendimiento, monta el volumen de Meilisearch (/meili_data) sobre almacenamiento local NVMe (evita volúmenes compartidos de red como NFS o AWS EFS), ya que el motor de base de datos embebido (LMDB) depende críticamente de operaciones de lectura/escritura directas y mapas de memoria (memory-mapped files).

Checklist de Seguridad antes de desplegar