**/.env Dockerfile .dockerignore .git .gitignore docker/ # Python __pycache__/ *.py[cod] *$py.class *.so .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg .venv/ # Web node_modules npm-debug.log .next # IDE .idea/ .vscode/ *.swp *.swo # OS .DS_Store Thumbs.db # Project specific conf.yaml web/ docs/ examples/ assets/ tests/ *.log # Exclude directories not needed in Docker context # Frontend build only needs frontend/ # Backend build only needs backend/ scripts/ logs/ docker/ skills/ frontend/.next frontend/node_modules # Frontend unit tests can import fixtures outside frontend/ (for example, examples/), # so exclude them from the frontend-only Docker build context. frontend/tests backend/.venv backend/htmlcov backend/.coverage # Runtime data written by a running DeerFlow, not build inputs. backend/Dockerfile # does `COPY backend ./backend`, so leaving these in the context both bakes the # sqlite database, per-user uploads and the JWT secret into the image and breaks # the build outright once the app has created directories owned by the container's # root that the build client cannot read. **/.deer-flow/ backend/sandbox/ # Local configuration holds model API keys, MCP credentials, frontend secrets and # local HTTPS keys (frontend/*.pem, the frontend .gitignore's mkcert pair). # Compose and Helm supply it at runtime. The config resolvers still read the legacy # backend/ copies, and `COPY backend ./backend` / `COPY frontend ./frontend` would # otherwise bake them into every image layer built from this checkout. config.yaml config.yaml.bak extensions_config.json mcp_config.json backend/config.yaml backend/config.yaml.bak backend/extensions_config.json backend/mcp_config.json **/.env*.local frontend/*.pem *.md !README.md !frontend/README.md !backend/README.md # Extension manager snapshots must enter the backend builder intact. A Python # package may require README metadata, native modules, or package assets that # the general image-context exclusions above intentionally omit elsewhere. !backend/extensions/ !backend/extensions/sources/ !backend/extensions/sources/** # The re-inclusion above wins over every earlier rule, so the files the extension # manager refuses to snapshot (deerflow/extensions/manager.py) are excluded again # here. A snapshot the manager wrote never contains them; one edited by hand # must not carry credentials into the image either. backend/extensions/sources/**/.env backend/extensions/sources/**/.env.* backend/extensions/sources/**/.npmrc backend/extensions/sources/**/.pypirc backend/extensions/sources/**/credentials.json backend/extensions/sources/**/*.key backend/extensions/sources/**/*.pem backend/extensions/sources/**/*.p12 backend/extensions/sources/**/*.pfx