Configuración de Docker Compose para Meilisearch + Python FastAPI
Cuándo usar esta combinación
Esta arquitectura es ideal para aplicaciones que requieren capacidades de búsqueda de texto completo ultrarrápidas (sub-50ms), tolerantes a errores tipográficos y con soporte multi-idioma (ej. catálogos de e-commerce, motores de búsqueda de SaaS o gestión documental). FastAPI actúa como una capa de backend asíncrona de alto rendimiento que procesa lógica de negocio e ingesta datos, mientras Meilisearch descarga la carga de indexación y consultas complejas de la base de datos relacional principal con un consumo mínimo de recursos.
docker-compose.yml
version: '3.8'
services:
meilisearch:
image: getmeili/meilisearch:v1.6
container_name: meilisearch_app
restart: unless-stopped
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
- MEILI_NO_ANALYTICS=true
volumes:
- meili_data:/meili_data
networks:
- backend-network
# No exponer puertos públicamente en producción si FastAPI actúa como proxy
fastapi:
build:
context: .
dockerfile: Dockerfile
container_name: fastapi_app
restart: unless-stopped
depends_on:
- meilisearch
environment:
- APP_ENV=production
- SECRET_KEY=${FASTAPI_SECRET_KEY}
- MEILISEARCH_URL=http://meilisearch:7700
- MEILISEARCH_KEY=${MEILI_MASTER_KEY}
ports:
- "8000:8000"
networks:
- backend-network
volumes:
meili_data:
driver: local
networks:
backend-network:
driver: bridge
3 Variables de entorno críticas para producción
MEILI_MASTER_KEY: Clave maestra para autenticación en Meilisearch. Si no se define o usa el valor por defecto, Meilisearch se negará a iniciar en modo producción o quedará completamente vulnerable a accesos no autorizados.FASTAPI_SECRET_KEY: Semilla criptográfica utilizada por FastAPI/Starlette para la firma de tokens JWT, cookies de sesión y hashes de seguridad.MEILI_ENV: Debe configurarse explícitamente enproduction. Esto desactiva rutas inseguras de depuración, la interfaz web pública de testing (UI dashboard) y fuerza el uso obligatorio de autenticación por API keys.
Consejo Senior de Seguridad y Rendimiento
- Seguridad (Zero-Trust Network): No expongas el puerto
7700de Meilisearch al host o a internet. Mantén Meilisearch aislado en la red interna de Docker (backend-network). Si el frontend necesita buscar directamente para optimizar latencia, haz que FastAPI genere Tenant Tokens o Keys con permisos limitados y expiración (Search-only) vía API en lugar de exponer la Master Key. - Rendimiento (I/O & Memory Mapping): Meilisearch utiliza intensivamente LMDB (Memory-Mapped Files). Asegúrate de que el volumen
meili_dataesté montado sobre almacenamiento NVMe/SSD con altos IOPS y evita limitar la memoria RAM en el contenedor a valores inferiores al tamaño total de tu índice estimado para evitardisk thrashing.
Checklist de Seguridad antes de desplegar
- Cambiar las contraseñas por defecto en el archivo .env
- Mapear volúmenes persistentes en el VPS
- Configurar las reglas de firewall para los puertos requeridos