Docker Deployment
Mudabbir ships with a production-ready Dockerfile and docker-compose.yml in the repository root. The Docker image includes all extras ([all]), Playwright Chromium, and tesseract OCR — everything works out of the box.
Quick Start
# Clone the repogit clone https://github.com/Ahmed5754/Mudabbir.gitcd mudabbir
# Copy the env template and fill in your keyscp .env.example .env
# Build and startdocker compose up -dThe dashboard is available at http://localhost:8888.
Docker’s bridge networking means localhost auth bypass doesn’t work inside a container. You’ll need to log in with the access token.
Get the access token and paste it into the login page:
docker exec mudabbir cat /home/mudabbir/.mudabbir/access_tokenDockerfile Overview
The Dockerfile uses a multi-stage build for a lean runtime image:
Builder stage (python:3.12-slim):
- Installs build dependencies (
gcc,python3-dev,git) - Creates a virtual environment and installs
mudabbir[all] - Downloads Playwright Chromium
Runtime stage (python:3.12-slim):
- Installs only runtime system deps (tesseract, Chromium shared libs, curl)
- Copies the venv and Playwright browsers from the builder
- Runs as a non-root
mudabbiruser - Exposes port
8888with a healthcheck
The container binds to 0.0.0.0:8888 by default (set via MUDABBIR_WEB_HOST and MUDABBIR_WEB_PORT environment variables in the Dockerfile).
Docker Compose
The docker-compose.yml defines three services. Only the main mudabbir service starts by default — Ollama and Qdrant are behind Compose profiles.
Default (Mudabbir only)
docker compose up -dWith Ollama (local LLM)
docker compose --profile ollama up -dSet the Ollama host to the container service name in your .env:
MUDABBIR_OLLAMA_HOST=http://ollama:11434Then pull the models you need:
docker compose exec ollama ollama pull llama3.2docker compose exec ollama ollama pull nomic-embed-textFor GPU passthrough with NVIDIA, uncomment the deploy.resources.reservations block in docker-compose.yml.
With Qdrant (vector memory)
docker compose --profile qdrant up -dQdrant is needed for Mem0 semantic memory. It exposes port 6333 for the REST API.
All services
docker compose --profile ollama --profile qdrant up -dEnvironment Variables
All configuration is passed via environment variables. Copy .env.example to .env and fill in the values you need:
cp .env.example .envThe .env.example file is organized by section (LLM, channels, memory, tools, security) and documents every available MUDABBIR_ variable. See the Configuration reference for full details.
You can also change the host port:
MUDABBIR_PORT=9000 docker compose up -dPersistent Data
A named Docker volume (mudabbir-data) is mounted at /home/mudabbir/.mudabbir to persist:
- Configuration (
config.json,secrets.enc) - Session history
- Memory data (file-based and Mem0)
- OAuth tokens
- Audit logs
- MCP server configs
- Skills
Data survives docker compose down and docker compose up cycles. To fully reset, remove the volume:
docker compose down -vManaging the Container
# View logsdocker compose logs -f mudabbir
# Restartdocker compose restart mudabbir
# Stop everythingdocker compose down
# Rebuild after pulling updatesgit pull && docker compose build && docker compose up -dBrowser Automation
Playwright Chromium is included in the Docker image along with all required shared libraries. Browser tools work out of the box inside the container — no additional setup needed.
Limitations
- Desktop tools (
pyautogui) require a display server and won’t work in a headless container. They fail gracefully at invocation time. - WhatsApp Personal mode (neonize QR pairing) requires a persistent session. The named volume handles this, but the QR code must be scanned via the web dashboard on first setup.
Next Steps
Self-Hosting
Reverse proxy, SSL, and production hardening.
Systemd Service
Run Mudabbir as a background service without Docker.