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:

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 to Production
  • Weikio__Identity__LocalIdentity__Username - Set an administrator email address
  • Weikio__Identity__LocalIdentity__Password - Generate a strong password
  • Weikio__Identity__LocalIdentity__ApiKey - Generate a secure API key

Security for production

Do not run the dev tag on an open port in production.

  1. Change the default credentials immediately.
  2. Configure Traefik with real TLS certificates for HTTPS, for example from Let’s Encrypt.
  3. Add authentication to your NATS configuration.
  4. Replace all instances of localtest.me with your actual domain names.
  5. 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