Docker¶
The recommended way to run Bakwas. Production-grade out of the box with Gunicorn, health checks, and a SQLite volume.
Quick start¶
# Clone the repo
git clone https://github.com/alifbae/bakwas.git
cd bakwas
# Configure your provider keys
cp .env.example .env
# Edit .env and set at least ANTHROPIC_API_KEY (or another provider key)
# Start the container
docker-compose up -d
Bakwas is now available at http://localhost:5000.
No key? No models.
Bakwas hides any provider whose API key isn't set, so if the model dropdown is empty you need at least one provider key in .env. See Providers for the full list.
Compose reference¶
The repo ships with a working docker-compose.yml. Here is the minimal version:
services:
bakwas:
build: .
container_name: bakwas-app
ports:
- "5000:5000"
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
- GROQ_API_KEY=${GROQ_API_KEY:-}
- DEBUG=${DEBUG:-False}
- SECRET_KEY=${SECRET_KEY}
- RATE_LIMIT_SUMMARIZE=${RATE_LIMIT_SUMMARIZE:-30 per hour}
volumes:
- ./data:/app/data
# Optional: override the shipped provider config without rebuilding
# - ./config/providers.local.yaml:/app/config/providers.local.yaml:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Compose auto-loads .env from the project directory, so values flow into the container through the ${VAR} interpolations above. Only the variables listed in environment: are visible to the app — add new ones when you register custom providers.
Volumes¶
| Host path | Container path | Purpose |
|---|---|---|
./data |
/app/data |
SQLite database. Required if you want summaries to survive restarts. |
./config/providers.local.yaml |
/app/config/providers.local.yaml |
Optional. Override the shipped provider registry without rebuilding. |
Production notes¶
- The image runs Gunicorn with 2 worker processes × 4 threads. The Flask dev server is not used in the container.
- The health check hits
/healthevery 30 seconds and accepts 3 failures before marking the container unhealthy. - Logs go to stdout/stderr and are visible via
docker logs bakwas-appordocker-compose logs -f bakwas.