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 db:chatwoot_prepare && 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: - 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} 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