Sidekiq was starting before migrations ran, causing RuntimeError on the group_type enum. Moved db:chatwoot_prepare from post_start into the rails entrypoint and made sidekiq depend on the rails healthcheck. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
141 lines
4.1 KiB
YAML
141 lines
4.1 KiB
YAML
version: '3'
|
|
|
|
services:
|
|
rails:
|
|
image: 'ghcr.io/fazer-ai/chatwoot:latest'
|
|
pull_policy: always
|
|
volumes:
|
|
- 'storage:/app/storage'
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
environment:
|
|
- NODE_ENV=production
|
|
- RAILS_ENV=production
|
|
- INSTALLATION_ENV=docker
|
|
- DEFAULT_LOCALE=pt_BR
|
|
- FRONTEND_URL=${SERVICE_URL_RAILS}
|
|
- INTERNAL_HOST_URL=http://rails:3000
|
|
- POSTGRES_HOST=postgres
|
|
- POSTGRES_PORT=5432
|
|
- POSTGRES_USERNAME=${SERVICE_USER_POSTGRES}
|
|
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
|
- POSTGRES_DATABASE=${POSTGRES_DB:-chatwoot_production}
|
|
- SECRET_KEY_BASE=${SERVICE_PASSWORD_64_SECRETKEYBASE}
|
|
- REDIS_URL=redis://redis:6379
|
|
- REDIS_PASSWORD=${SERVICE_PASSWORD_REDIS}
|
|
- BAILEYS_PROVIDER_DEFAULT_CLIENT_NAME=${BAILEYS_PROVIDER_DEFAULT_CLIENT_NAME}
|
|
- BAILEYS_PROVIDER_DEFAULT_URL=${BAILEYS_PROVIDER_DEFAULT_URL}
|
|
- BAILEYS_PROVIDER_DEFAULT_API_KEY=${BAILEYS_PROVIDER_DEFAULT_API_KEY}
|
|
- BAILEYS_PROVIDER_USE_INTERNAL_HOST_URL=true
|
|
- MAILER_SENDER_EMAIL=${MAILER_SENDER_EMAIL}
|
|
- RESEND_API_KEY=${RESEND_API_KEY}
|
|
- BRAND_ASSETS_URL=${BRAND_ASSETS_URL}
|
|
entrypoint: docker/entrypoints/rails.sh
|
|
command:
|
|
- bundle
|
|
- exec
|
|
- rails
|
|
- s
|
|
- '-p'
|
|
- '3000'
|
|
- '-b'
|
|
- 0.0.0.0
|
|
restart: always
|
|
post_start:
|
|
- command:
|
|
- sh
|
|
- '-c'
|
|
- 'bundle exec rails branding:update && if [ -n "$${BRAND_ASSETS_URL}" ]; then deployment/extract_brand_assets.sh "$${BRAND_ASSETS_URL}"; fi'
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- 'wget -qO- --header="Accept: text/html" http://127.0.0.1:3000/'
|
|
interval: 60s
|
|
timeout: 20s
|
|
retries: 10
|
|
|
|
sidekiq:
|
|
image: 'ghcr.io/fazer-ai/chatwoot:latest'
|
|
pull_policy: always
|
|
volumes:
|
|
- 'storage:/app/storage'
|
|
depends_on:
|
|
rails:
|
|
condition: service_healthy
|
|
postgres:
|
|
condition: service_started
|
|
redis:
|
|
condition: service_started
|
|
environment:
|
|
- NODE_ENV=production
|
|
- RAILS_ENV=production
|
|
- INSTALLATION_ENV=docker
|
|
- DEFAULT_LOCALE=pt_BR
|
|
- FRONTEND_URL=${SERVICE_URL_RAILS}
|
|
- INTERNAL_HOST_URL=http://rails:3000
|
|
- POSTGRES_HOST=postgres
|
|
- POSTGRES_PORT=5432
|
|
- POSTGRES_USERNAME=${SERVICE_USER_POSTGRES}
|
|
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
|
- POSTGRES_DATABASE=${POSTGRES_DB:-chatwoot_production}
|
|
- SECRET_KEY_BASE=${SERVICE_PASSWORD_64_SECRETKEYBASE}
|
|
- REDIS_URL=redis://redis:6379
|
|
- REDIS_PASSWORD=${SERVICE_PASSWORD_REDIS}
|
|
- BAILEYS_PROVIDER_DEFAULT_CLIENT_NAME=${BAILEYS_PROVIDER_DEFAULT_CLIENT_NAME}
|
|
- BAILEYS_PROVIDER_DEFAULT_URL=${BAILEYS_PROVIDER_DEFAULT_URL}
|
|
- BAILEYS_PROVIDER_DEFAULT_API_KEY=${BAILEYS_PROVIDER_DEFAULT_API_KEY}
|
|
- BAILEYS_PROVIDER_USE_INTERNAL_HOST_URL=true
|
|
- MAILER_SENDER_EMAIL=${MAILER_SENDER_EMAIL}
|
|
- RESEND_API_KEY=${RESEND_API_KEY}
|
|
command:
|
|
- bundle
|
|
- exec
|
|
- sidekiq
|
|
- '-C'
|
|
- config/sidekiq.yml
|
|
restart: always
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- 'ps aux | grep [s]idekiq'
|
|
interval: 20s
|
|
timeout: 20s
|
|
retries: 10
|
|
|
|
postgres:
|
|
image: 'pgvector/pgvector:pg16'
|
|
restart: always
|
|
volumes:
|
|
- 'postgres:/var/lib/postgresql/data'
|
|
environment:
|
|
- POSTGRES_DB=${POSTGRES_DB:-chatwoot_production}
|
|
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
|
|
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- 'pg_isready -h localhost -p 5432 -U $${POSTGRES_USER} -d $${POSTGRES_DB}'
|
|
interval: 20s
|
|
timeout: 20s
|
|
retries: 10
|
|
|
|
redis:
|
|
image: 'redis:alpine'
|
|
restart: always
|
|
command:
|
|
- sh
|
|
- '-c'
|
|
- 'redis-server --requirepass "${SERVICE_PASSWORD_REDIS}"'
|
|
volumes:
|
|
- 'redis:/data'
|
|
environment:
|
|
- REDIS_PASSWORD=${SERVICE_PASSWORD_REDIS}
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- 'redis-cli -h localhost -p 6379 -a $${REDIS_PASSWORD} ping'
|
|
interval: 20s
|
|
timeout: 20s
|
|
retries: 10
|