services: watchtower: image: containrrr/watchtower command: - "--label-enable" - "--interval" - "30" - "--rolling-restart" volumes: - /var/run/docker.sock:/var/run/docker.sock traefik: image: "traefik:v3.3" container_name: "traefik" command: - "--providers.docker=true" - "--entryPoints.web.address=:80" - "--entryPoints.websecure.address=:443" ports: - "80:80" - "443:443" networks: - traefik-net volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" rabbitmq: image: rabbitmq:3-management ports: - "5672:5672" - "15672:15672" environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest volumes: - rabbitmq_data:/var/lib/rabbitmq networks: - traefik-net healthcheck: test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] interval: 10s timeout: 5s retries: 5 backend: image: ghcr.io/kaneo-app/api:latest labels: - "traefik.enable=true" - "traefik.http.routers.backend.rule=Host(`demo-api.kaneo.app`)" - "traefik.http.routers.backend.entrypoints=web" - "com.centurylinklabs.watchtower.enable=true" - "com.centurylinklabs.watchtower.depends-on=true" - "com.centurylinklabs.watchtower.enable-volume-preservation=true" environment: JWT_ACCESS: "change_me" DB_PATH: "/app/apps/api/data/kaneo.db" RABBITMQ_URL: "amqp://guest:guest@rabbitmq:5672" DEMO_MODE: "true" volumes: - sqlite_data:/app/apps/api/data:rw networks: - traefik-net depends_on: rabbitmq: condition: service_healthy restart: unless-stopped frontend: image: ghcr.io/kaneo-app/web:latest environment: KANEO_API_URL: "https://demo-api.kaneo.app" labels: - "traefik.enable=true" - "traefik.http.routers.frontend.rule=Host(`demo.kaneo.app`)" - "traefik.http.routers.frontend.entrypoints=web" - "com.centurylinklabs.watchtower.enable=true" depends_on: - backend restart: unless-stopped networks: - traefik-net networks: traefik-net: driver: bridge volumes: sqlite_data: name: kaneo_sqlite_data rabbitmq_data: name: kaneo_rabbitmq_data