# Secretos. Los patrones `**/` son IMPRESCINDIBLES, no redundantes: .dockerignore usa la # semántica de filepath.Match de Go, donde `*` NO cruza el separador de ruta. Con sólo `.env` y # `*.env` se excluía el .env de la raíz pero NO backend/.env, que contiene HF_API_KEY y acabaría # horneado en la imagen vía `COPY backend/ backend/`. .env *.env **/.env **/*.env # SQLite database (will be created at runtime). NUNCA hornear la BD de usuarios en la # imagen: sólo el índice RAG (instance/rag_index) debe copiarse. Excluye la BD del contexto # de build para que `COPY instance*` no la arrastre a la imagen distribuida. data/*.db instance/*.db instance/morphos.db # OS .DS_Store Thumbs.db # IDE .vscode/ .idea/ *.swp *.swo # Git .git/ .gitignore # Node / build tools. Hace falta el patrón `**/` además del suelto: los patrones de # .dockerignore se casan contra la ruta relativa a la raíz del contexto, así que `node_modules/` # por sí solo NO cubre frontend/node_modules (96 MB), que la etapa 1 reinstala con `npm ci`. node_modules/ **/node_modules/ # CRÍTICO — entornos virtuales de Python. # `RUN uv sync` construye el venv de Linux en /app/backend/.venv, y el `COPY backend/ backend/` # posterior lo SOBRESCRIBÍA con el venv local de macOS (binarios Mach-O, 1.3 GB). El resultado # era un /app/backend/.venv/bin/python inejecutable en Linux: la build reventaba al precargar # los modelos y, de haber llegado a arrancar, el CMD de uvicorn habría fallado igual. .venv/ **/.venv/ __pycache__/ **/__pycache__/ *.pyc .pytest_cache/ .ruff_cache/ # Corpus con licencia: 226 MB que no se copian a ninguna capa, sólo engordan el contexto. books/ # Artefactos y código que la imagen no usa. dist/ se toma de la etapa `frontend`, no del host. dist/ evals/ bridge/ .github/ .agents/ scripts/ # Documentation not needed in the image README.md CLAUDE.md SKILL.md USO_DE_IA.md