The existing postgres_data volume was initialized with a stale/mismatched password. Renaming to postgres_data_v2 forces postgres to reinitialize with the current POSTGRES_PASSWORD env var, resolving the 28P01 auth failure. Co-Authored-By: Paperclip <noreply@paperclip.ing>
143 lines
4 KiB
YAML
143 lines
4 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'
|
|
- 'traefik.docker.network=coolify'
|
|
- '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_v2:/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_v2:
|
|
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
|