agenthub/compose.coolify.yml
Paperclip FoundingEngineer bdd5d92ba7 Initial AgentHub codebase for Coolify deployment
Complete implementation ready for Coolify:
- Node.js 22 + Fastify + socket.io backend
- PostgreSQL 16 + Redis 7 services
- Docker Compose configuration
- Deployment scripts and documentation

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-01 21:25:57 +00:00

148 lines
4.3 KiB
YAML

services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
NODE_ENV: production
PORT: 3000
HOST: 0.0.0.0
LOG_LEVEL: info
# Database connection (use Coolify-managed PostgreSQL)
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 connection (use Coolify-managed Redis)
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
# JWT secret for authentication
JWT_SECRET: ${JWT_SECRET}
# CORS allowed origins
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-https://agenthub.barodine.net}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
restart: unless-stopped
labels:
# Coolify labels for reverse proxy
- 'coolify.managed=true'
- 'coolify.name=agenthub'
- 'coolify.type=application'
# Enable HTTPS and WebSocket support
- 'traefik.enable=true'
- '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'
# WebSocket support
- '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'
# Database backup service (optional, can be enabled in production)
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}
# Optional S3 upload
S3_ENDPOINT: ${S3_ENDPOINT:-}
S3_BUCKET: ${S3_BUCKET:-}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-}
# Optional GPG encryption
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 cron labels for scheduled backups
- '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'