This page explains the Docker workflows for contributors. Use it when you are developing the Web UI, debugging the deployment stack, or need the platform services that the Python-only CLI does not require.
| Mode | Command | Use when |
|---|---|---|
| Local infrastructure | ./dev.sh infra or .\dev.ps1 infra |
You run the backend and frontend on the host, but want PostgreSQL, Redis, RustFS, mailcatcher, and the code-server proxy in Docker. Recommended for daily development. |
| Full local stack | ./dev.sh full or .\dev.ps1 full |
You want Docker to build and run backend, worker, frontend, and infrastructure from the local source tree. Useful for deployment debugging. |
| Image deployment | ./start.sh --debug |
You want to run already-published deployment images, with debug ports exposed. Useful for release verification. |
Run all commands from the docker/ directory.
- Docker Engine with the Compose plugin (
docker compose version) - Enough local disk space for PostgreSQL, Redis, RustFS, backend, frontend, and task-runner images
- A writable project home directory for generated user projects
On Linux, the backend mounts /var/run/docker.sock so tasks can launch isolated runtime containers. Make sure your user can access Docker.
This project uses Docker Compose v2 through the docker compose command. Verify the installation after setup:
docker version
docker compose versionUse Docker Desktop for Windows for local development.
- Confirm Windows meets Docker Desktop's current system requirements.
- Enable WSL 2 on Windows if it is not already enabled.
- Download and run
Docker Desktop Installer.exe. - Use per-user installation unless your organization requires all-users installation.
- When the installer asks for the backend, select Use WSL 2 instead of Hyper-V.
- Start Docker Desktop from the Start menu and accept the Docker Desktop terms.
- Open PowerShell and verify:
docker version
docker compose versionFor this project, keep Docker Desktop running while using .\dev.ps1 .... Use Linux containers through WSL 2; Windows containers are not supported by the local compose stack.
Docker Desktop licensing depends on your organization type and size. Check Docker's current subscription terms on the official install page before using it in a company environment.
Install Docker Desktop for Mac, start Docker Desktop from /Applications, accept the Docker Desktop terms, and verify:
docker version
docker compose versionInstall Docker Engine for your distribution, then install the Docker Compose plugin if it is not included by your package source.
After installation, make sure your shell can access Docker:
docker version
docker compose versionIf docker version fails with a permission error, either run Docker commands with sudo or follow Docker's post-installation steps for non-root access.
Copy the local example and edit required values:
cd docker
cp .env.develop.local.example .envWindows PowerShell:
cd docker
Copy-Item .env.develop.local.example .envSet these values before starting services:
| Variable | Purpose |
|---|---|
SECRET_KEY |
Application secret. Generate with python -c "import secrets; print(secrets.token_urlsafe(32))". |
PROVIDER_ENCRYPTION_KEY |
Stable encryption key for stored provider credentials. Generate it the same way and do not rotate it casually. |
FIRST_SUPERUSER / FIRST_SUPERUSER_PASSWORD |
Initial administrator account. |
POSTGRES_PASSWORD |
PostgreSQL password. |
REDIS_PASSWORD |
Redis password. |
RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY |
RustFS object storage credentials. |
HOST_PROJECT_HOME / DOCKER_PROJECT_HOME |
Host and container project-home paths. For local debugging they should point to the same absolute path. |
For host-run backend development, keep the service endpoints pointed at localhost:
POSTGRES_SERVER=localhost
REDIS_HOST=localhost
RUSTFS_ENDPOINT=http://localhost:9000
AUTH_BACKEND_URL=http://host.docker.internal:8000
FRONTEND_HOST=http://localhost:5173
CHAT_TUNE_CONTAINER_NETWORK=falseStart only the infrastructure services:
cd docker
./dev.sh infraWindows PowerShell:
cd docker
.\dev.ps1 infraThis uses compose.yml plus compose.override.yml. The override exposes infrastructure ports and disables the application containers so you can run backend and frontend directly on the host.
Exposed services:
| Service | URL / port |
|---|---|
| PostgreSQL | localhost:5432 |
| Redis | localhost:6379 |
| RustFS API | http://localhost:9000 |
| RustFS console | http://localhost:9001 |
| Adminer | http://localhost:8080 |
| Mailcatcher UI | http://localhost:1081 |
| Mailcatcher SMTP | localhost:1025 |
| Code-server proxy | http://localhost:8083 |
Then start the backend on the host:
cd ../src/backend
uv sync
uv run alembic upgrade head
uv run fastapi dev app/main.pyStart a worker in another shell when testing async tasks:
cd ../src/backend
uv run celery -A app.core.celery worker --loglevel=info --concurrency=2Start the frontend:
cd ../src/frontend
bun install
bun run devThe backend reads ../../docker/.env by default, so keep running backend commands from src/backend.
Build and run the full stack from local source with debug ports:
cd docker
./dev.sh fullWindows PowerShell:
cd docker
.\dev.ps1 fullThis uses compose.yml plus compose.deploy.debug.yml and enables the debug profile. It runs backend, worker, frontend, infrastructure, Adminer, and Flower in Docker.
Useful endpoints:
| Service | URL / port |
|---|---|
| Frontend | http://localhost:${FRONTEND_PORT}; default from .env is 18041 |
| Backend API | http://localhost:8000 |
| Adminer | http://localhost:8080 |
| Flower | http://localhost:5555 |
| RustFS console | http://localhost:9001 |
Tail logs:
./dev.sh logs
./dev.sh logs backend workerWindows PowerShell:
.\dev.ps1 logs
.\dev.ps1 logs backend workerShow service status:
./dev.sh psWindows PowerShell:
.\dev.ps1 psUse start.sh when you want deployment images instead of local builds:
cd docker
TAG=v1.0.0 ./start.sh start --debug--debug includes compose.deploy.debug.yml, enables the debug profile, and exposes PostgreSQL, Redis, RustFS, backend, Adminer, and Flower ports.
Stop containers without removing them:
./dev.sh stopWindows PowerShell:
.\dev.ps1 stopRemove compose containers and orphans while keeping bind-mounted data under docker/app-data/:
./dev.sh removeWindows PowerShell:
.\dev.ps1 removeFor image-based deployments:
./start.sh stop --debug
./start.sh remove --debug| Symptom | Likely cause | Fix |
|---|---|---|
Missing docker/.env |
The local env file was not created | Run cp .env.develop.local.example .env in docker/ and edit required values. |
Compose reports Variable not set |
Required secrets are still blank | Fill every required value in .env. |
| Backend cannot connect to DB or Redis | .env still points to Docker service names while backend runs on the host |
Use POSTGRES_SERVER=localhost and REDIS_HOST=localhost. |
| Stored provider credentials disappear after restart | PROVIDER_ENCRYPTION_KEY changed or was empty |
Set a stable PROVIDER_ENCRYPTION_KEY and keep it unchanged for that database. |
| Task containers cannot access generated files | HOST_PROJECT_HOME and DOCKER_PROJECT_HOME do not match the local path expectation |
Use the same absolute path for local debugging and ensure it exists. |
| Ports are already in use | Another service is using the debug port | Change the relevant port in .env or stop the conflicting process. |