# Compose stack for the kirche-einfach devcontainer. # VS Code attaches to the `app` service (see devcontainer.json); all values # come from the repo-root `.env` via `env_file` (no ${} interpolation needed). services: app: build: context: . dockerfile: Dockerfile args: FORGEJO_USERNAME: jonas command: sleep infinity volumes: - ..:/workspaces/kirche-einfach:cached - kirche-einfach-venv:/workspaces/kirche-einfach/backend/.venv - kirche-einfach-node-modules:/workspaces/kirche-einfach/frontend/node_modules env_file: - ../.env ports: - "8000:8000" # FastAPI - "3000:3000" # Vite langflow: image: langflowai/langflow:latest env_file: - ../.env environment: # Static values only; secrets/URLs come from ../.env via env_file # (compose interpolates ${} from .devcontainer/.env, not the repo-root .env). LANGFLOW_CONFIG_DIR: /app/langflow LANGFLOW_HOST: 0.0.0.0 PORT: "7860" LANGFLOW_AUTO_LOGIN: "false" LANGFLOW_API_KEY_SOURCE: env # SQLite file inside the langflow-data volume (absolute path required # by Langflow); overrides any postgres URL in ../.env. LANGFLOW_DATABASE_URL: sqlite:////app/langflow/langflow.db volumes: - langflow-data:/app/langflow ports: - "7860:7860" healthcheck: test: [ "CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:7860/health', timeout=5)\"", ] interval: 10s timeout: 5s retries: 20 start_period: 60s lfx: build: context: . dockerfile: Dockerfile.lfx env_file: - ../.env volumes: - lfx-data:/flows ports: - "6004:6004" healthcheck: test: [ "CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:6004/health', timeout=5)\"", ] interval: 10s timeout: 5s retries: 12 start_period: 30s # Optional nightly auto-updates of :latest images. Not part of the default # dev startup (no container updates needed while iterating). watchtower: image: nickfedor/watchtower:latest profiles: ["updates"] volumes: - /var/run/docker.sock:/var/run/docker.sock environment: WATCHTOWER_LABEL_ENABLE: "true" WATCHTOWER_SCHEDULE: "0 0 4 * * *" WATCHTOWER_CLEANUP: "true" WATCHTOWER_ROLLING_RESTART: "true" labels: com.centurylinklabs.watchtower.enable: "true" volumes: kirche-einfach-venv: kirche-einfach-node-modules: langflow-data: lfx-data: