agenthub/compose.coolify.yml
barodine 1ed91f715b
Some checks are pending
CI / lint + typecheck + tests (push) Waiting to run
CI / docker build + push (push) Blocked by required conditions
fix(compose): add traefik.docker.network=coolify label for correct container routing
When a container is on multiple networks, Traefik needs explicit instruction
on which network to use for proxying. Without this label, Traefik may pick
the wrong IP (from the compose default network) and fail to route traffic.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 10:24:57 +00:00

145 lines
4.1 KiB
YAML

services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
NODE_ENV: production
PORT: 3000
HOST: 0.0.0.0
LOG_LEVEL: info
POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
POSTGRES_USER: ${POSTGRES_USER:-agenthub}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB:-agenthub}
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
JWT_SECRET: ${JWT_SECRET}
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-https://agenthub.barodine.net}
networks:
- default
- coolify
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
restart: unless-stopped
labels:
- 'coolify.managed=true'
- 'coolify.name=agenthub'
- 'coolify.type=application'
- 'traefik.enable=true'
# Tell Traefik which Docker network to use for routing
- 'traefik.docker.network=coolify'
# HTTPS router for agenthub.barodine.net
- 'traefik.http.routers.agenthub.rule=Host(`agenthub.barodine.net`)'
- 'traefik.http.routers.agenthub.entrypoints=websecure'
- 'traefik.http.routers.agenthub.tls=true'
- 'traefik.http.routers.agenthub.tls.certresolver=letsencrypt'
- 'traefik.http.services.agenthub.loadbalancer.server.port=3000'
- 'traefik.http.middlewares.agenthub-headers.headers.customrequestheaders.X-Forwarded-Proto=https'
- 'traefik.http.routers.agenthub.middlewares=agenthub-headers'
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:3000/healthz']
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-agenthub}
POSTGRES_USER: ${POSTGRES_USER:-agenthub}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_INITDB_ARGS: '--encoding=UTF8 --locale=C'
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-agenthub} -d ${POSTGRES_DB:-agenthub}']
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
labels:
- 'coolify.managed=true'
- 'coolify.type=database'
redis:
image: redis:7-alpine
command:
- redis-server
- --save 60 100
- --appendonly yes
- --appendfsync everysec
- --maxmemory 256mb
- --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
restart: unless-stopped
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 3s
retries: 3
start_period: 5s
labels:
- 'coolify.managed=true'
- 'coolify.type=database'
backup:
build:
context: .
dockerfile: Dockerfile.backup
environment:
PGHOST: postgres
PGPORT: 5432
PGDATABASE: ${POSTGRES_DB:-agenthub}
PGUSER: ${POSTGRES_USER:-agenthub}
PGPASSWORD: ${POSTGRES_PASSWORD}
BACKUP_DIR: /backups
RETENTION_DAYS: ${BACKUP_RETENTION_DAYS:-14}
S3_ENDPOINT: ${S3_ENDPOINT:-}
S3_BUCKET: ${S3_BUCKET:-}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-}
GPG_RECIPIENT_KEY: ${GPG_RECIPIENT_KEY:-}
volumes:
- backup_data:/backups
depends_on:
postgres:
condition: service_healthy
restart: 'no'
profiles:
- backup
labels:
- 'coolify.managed=true'
- 'coolify.type=service'
- 'ofelia.enabled=true'
- 'ofelia.job-exec.backup-daily.schedule=0 0 3 * * *'
- 'ofelia.job-exec.backup-daily.command=/usr/local/bin/backup.sh'
volumes:
postgres_data:
driver: local
labels:
- 'coolify.managed=true'
redis_data:
driver: local
labels:
- 'coolify.managed=true'
backup_data:
driver: local
labels:
- 'coolify.managed=true'
networks:
default:
labels:
- 'coolify.managed=true'
coolify:
external: true