Docker Compose Setup
Weik.io 2026.1Deploy Weik.io using Docker Compose.
Docker Compose is the recommended way to run Weik.io on your own infrastructure. This setup runs the entire platform in a single environment.
Prerequisites#
- Docker Engine 20.10 or later
- Docker Compose v2.0 or later
- At least 4GB of available RAM
- 10GB of available disk space
Architecture#
The Docker Compose deployment runs six distinct services:
- Traefik: The reverse proxy and load balancer
- NATS: The messaging backbone that handles event streaming and agent communication
- Backend: The core API and business logic
- UI: The web interface you interact with
- Agent: The local execution engine that runs the integration flows
- APIM: The API Management gateway that routes incoming HTTP traffic
Quick start#
1. Create the Docker Compose file#
Create a docker-compose.yml file with the following content. The configuration uses localtest.me domains because they automatically resolve to localhost, which simplifies local testing.
services:
traefik:
image: traefik:v2.10
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "8000:80" # HTTP traffic
- "8080:8080" # Traefik dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- weikio-network
nats:
image: nats:latest
command: ["-p", "4222", "-m", "8222", "-js", "-sd", "/var/data"]
volumes:
- data:/var/data
ports:
- "4222:4222" # NATS TCP port
networks:
- weikio-network
backend:
image: weikio/backend:dev
restart: unless-stopped
environment:
- 'WEIKIO_HOME=/etc/weikio'
- 'ASPNETCORE_ENVIRONMENT=Development'
- 'Weikio__Server__BaseAddress=http://backend/'
- 'Weikio__Identity__LocalIdentity__IsEnabled=True'
- 'Weikio__Identity__LocalIdentity__Username=dev@weik.io'
- 'Weikio__Identity__LocalIdentity__Password=password'
- 'Weikio__Identity__LocalIdentity__ApiKey=api.key'
- 'Weikio__Nats__Url=nats://nats:4222'
- 'ASPNETCORE_URLS=http://*:80'
depends_on:
- nats
volumes:
- data:/etc/weikio
networks:
- weikio-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend.rule=Host(`backend.localtest.me`)"
- "traefik.http.routers.backend.entrypoints=web"
- "traefik.http.services.backend-service.loadbalancer.server.port=80"
- "traefik.http.routers.backend.service=backend-service"
ui:
image: weikio/ui:dev
restart: unless-stopped
environment:
- 'WEIKIO_HOME=/etc/weikio'
- 'ASPNETCORE_ENVIRONMENT=Development'
- 'Weikio__Server__BaseAddress=http://backend/'
- 'ASPNETCORE_URLS=http://*:80'
depends_on:
- backend
volumes:
- data:/etc/weikio
networks:
- weikio-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.ui.rule=Host(`weikio.localtest.me`)"
- "traefik.http.routers.ui.entrypoints=web"
- "traefik.http.services.ui-service.loadbalancer.server.port=80"
- "traefik.http.routers.ui.service=ui-service"
agent:
image: weikio/agent:dev
restart: unless-stopped
environment:
- 'WEIKIO_HOME=/etc/weikio'
- 'ASPNETCORE_ENVIRONMENT=Development'
- 'Weikio__Server__BaseAddress=http://backend/'
- 'Weikio__Agent__JbangFromPath=true'
- 'Weikio__Agent__Capabilities__Location=Local'
- 'Weikio__Agent__Capabilities__Environment=DevTest'
- 'Weikio__Nats__Url=nats://nats:4222'
depends_on:
- backend
volumes:
- data:/etc/weikio
networks:
- weikio-network
apim:
image: weikio/apim:dev
restart: unless-stopped
environment:
- 'WEIKIO_HOME=/etc/weikio'
- 'ASPNETCORE_ENVIRONMENT=Development'
- 'Weikio__Server__BaseAddress=http://backend/'
- 'Weikio__Nats__Url=nats://nats:4222'
- 'ASPNETCORE_URLS=http://*:80'
depends_on:
- backend
volumes:
- data:/etc/weikio
networks:
- weikio-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.apim.rule=Host(`api.localtest.me`)"
- "traefik.http.routers.apim.entrypoints=web"
- "traefik.http.services.apim-service.loadbalancer.server.port=80"
- "traefik.http.routers.apim.service=apim-service"
networks:
weikio-network:
volumes:
data:2. Start the services#
docker-compose up -d3. Verify the installation#
Wait for the images to be pulled and the services to start, then check the status:
docker-compose psAll services should report a status of “Up” or “healthy”.
4. Access Weik.io#
You can now access the platform at:
- UI: http://weikio.localtest.me:8000
- API Gateway: http://api.localtest.me:8000
- Backend API: http://backend.localtest.me:8000
- Traefik Dashboard: http://localhost:8080
The default development credentials are:
- Username:
dev@weik.io - Password:
password - API Key:
api.key
Configuration#
Environment variables#
The compose file above uses development settings. For production environments, harden the Backend service variables:
ASPNETCORE_ENVIRONMENT: Set toProductionWeikio__Identity__LocalIdentity__Username: Set an administrator email addressWeikio__Identity__LocalIdentity__Password: Generate a strong passwordWeikio__Identity__LocalIdentity__ApiKey: Generate a secure API key
Security for production#
Do not run the dev tag on an open port in production.
- Change the default credentials immediately.
- Configure Traefik with real TLS certificates for HTTPS, for example from Let’s Encrypt.
- Add authentication to your NATS configuration.
- Replace all instances of
localtest.mewith your actual domain names. - Pin specific image versions (e.g.,
weikio/backend:1.2.0) instead of tracking:dev.
Custom domains#
To swap in your own domains, update the Traefik labels on the relevant services. For example:
labels:
- "traefik.http.routers.ui.rule=Host(`your-domain.com`)"Data backup#
All configuration and state live in the data volume. You can back it up without stopping the system:
docker run --rm -v weikio_data:/data -v $(pwd):/backup alpine tar czf /backup/weikio-backup.tar.gz /dataUpgrading#
If you are tracking tags like :latest or :dev, upgrade with the following commands:
docker-compose pull
docker-compose up -dTroubleshooting#
Services not starting#
If a service repeatedly restarts, check its logs:
docker-compose logs backendNetwork issues#
Verify that Docker created the network:
docker network ls | grep weikioPort conflicts#
If ports 8000 or 8080 are already in use by another application, change the host side of the port mappings in your docker-compose.yml (e.g., "8081:80").
Disk space#
Check the available disk space in your Docker volumes:
docker system df -vNext steps#
- Quickstart: Create your first integration
- Integration Flows: Learn how flows work
- API Management: Configure the API gateway
- Eventing: Set up event streaming