Docker Compose Setup
Deploy 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 -d
3. Verify the installation
Wait for the images to be pulled and the services to start, then check the status:
docker-compose ps
All 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 /data
Upgrading
If you are tracking tags like :latest or :dev, upgrade with the following commands:
docker-compose pull
docker-compose up -d
Troubleshooting
Services not starting
If a service repeatedly restarts, check its logs:
docker-compose logs backend
Network issues
Verify that Docker created the network:
docker network ls | grep weikio
Port 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 -v
Next steps
- Quickstart - Create your first integration
- Integration Flows - Learn how flows work
- API Management - Configure the API gateway
- Eventing - Set up event streaming