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
-
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 conopenssl rand -base64 32. -
FASTAPI_SECRET_KEY(oSECRET_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. -
MEILI_ENV(establecido enproduction): 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
- 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