Dokploy

Chatwoot

Open-source customer engagement platform that provides a shared inbox for teams, live chat, and omnichannel support.

Chatwoot logo

Configuration

version: "3.8"

x-chatwoot-base: &chatwoot-base
  image: chatwoot/chatwoot:v4.12.1
  restart: unless-stopped
  volumes:
    - chatwoot-storage:/app/storage
  environment:
    - FRONTEND_URL=${FRONTEND_URL}
    - SECRET_KEY_BASE=${SECRET_KEY_BASE}
    - FORCE_SSL=${FORCE_SSL}
    - DEFAULT_LOCALE=${DEFAULT_LOCALE}
    - ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE}
    - ENABLE_ACCOUNT_SIGNUP=${ENABLE_ACCOUNT_SIGNUP}
    - RAILS_ENV=${RAILS_ENV}
    - NODE_ENV=${NODE_ENV}
    - INSTALLATION_ENV=${INSTALLATION_ENV}
    - RAILS_LOG_TO_STDOUT=${RAILS_LOG_TO_STDOUT}
    - LOG_LEVEL=${LOG_LEVEL}
    - POSTGRES_HOST=${POSTGRES_HOST}
    - POSTGRES_PORT=${POSTGRES_PORT}
    - POSTGRES_DATABASE=${POSTGRES_DATABASE}
    - POSTGRES_USERNAME=${POSTGRES_USERNAME}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    - REDIS_URL=${REDIS_URL}
    - REDIS_PASSWORD=${REDIS_PASSWORD}

services:
  chatwoot:
    <<: *chatwoot-base
    depends_on:
      - postgres
      - redis
    entrypoint: docker/entrypoints/rails.sh
    command:
      - sh
      - -c
      - bundle exec rails db:chatwoot_prepare && bundle exec rails s -p 3000 -b 0.0.0.0
    expose:
      - "3000"

  chatwoot-worker:
    <<: *chatwoot-base
    depends_on:
      - postgres
      - redis
    command:
      - bundle
      - exec
      - sidekiq
      - -C
      - config/sidekiq.yml

  postgres:
    image: pgvector/pgvector:pg16
    restart: unless-stopped
    volumes:
      - chatwoot-postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=${POSTGRES_DATABASE}
      - POSTGRES_USER=${POSTGRES_USERNAME}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

  redis:
    image: redis:alpine
    restart: unless-stopped
    command:
      - sh
      - -c
      - redis-server --requirepass "$$REDIS_PASSWORD"
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
    volumes:
      - chatwoot-redis-data:/data

volumes:
  chatwoot-storage:
  chatwoot-postgres-data:
  chatwoot-redis-data:
[variables]
main_domain = "${domain}"
secret_key_base = "${hash:64}"
postgres_password = "${password}"
redis_password = "${password}"

[config]
env = [
  "FRONTEND_URL=http://${main_domain}",
  "SECRET_KEY_BASE=${secret_key_base}",
  "FORCE_SSL=false",
  "RAILS_ENV=production",
  "NODE_ENV=production",
  "INSTALLATION_ENV=docker",
  "RAILS_LOG_TO_STDOUT=true",
  "LOG_LEVEL=info",
  "DEFAULT_LOCALE=en",
  "POSTGRES_HOST=postgres",
  "POSTGRES_PORT=5432",
  "POSTGRES_DATABASE=chatwoot",
  "POSTGRES_USERNAME=postgres",
  "POSTGRES_PASSWORD=${postgres_password}",
  "REDIS_URL=redis://:${redis_password}@redis:6379",
  "REDIS_PASSWORD=${redis_password}",
  "ENABLE_ACCOUNT_SIGNUP=false",
  "ACTIVE_STORAGE_SERVICE=local",
]
mounts = []

[[config.domains]]
serviceName = "chatwoot"
port = 3_000
host = "${main_domain}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxueC1jaGF0d29vdC1iYXNlOiAmY2hhdHdvb3QtYmFzZVxuICBpbWFnZTogY2hhdHdvb3QvY2hhdHdvb3Q6djQuMTIuMVxuICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICB2b2x1bWVzOlxuICAgIC0gY2hhdHdvb3Qtc3RvcmFnZTovYXBwL3N0b3JhZ2VcbiAgZW52aXJvbm1lbnQ6XG4gICAgLSBGUk9OVEVORF9VUkw9JHtGUk9OVEVORF9VUkx9XG4gICAgLSBTRUNSRVRfS0VZX0JBU0U9JHtTRUNSRVRfS0VZX0JBU0V9XG4gICAgLSBGT1JDRV9TU0w9JHtGT1JDRV9TU0x9XG4gICAgLSBERUZBVUxUX0xPQ0FMRT0ke0RFRkFVTFRfTE9DQUxFfVxuICAgIC0gQUNUSVZFX1NUT1JBR0VfU0VSVklDRT0ke0FDVElWRV9TVE9SQUdFX1NFUlZJQ0V9XG4gICAgLSBFTkFCTEVfQUNDT1VOVF9TSUdOVVA9JHtFTkFCTEVfQUNDT1VOVF9TSUdOVVB9XG4gICAgLSBSQUlMU19FTlY9JHtSQUlMU19FTlZ9XG4gICAgLSBOT0RFX0VOVj0ke05PREVfRU5WfVxuICAgIC0gSU5TVEFMTEFUSU9OX0VOVj0ke0lOU1RBTExBVElPTl9FTlZ9XG4gICAgLSBSQUlMU19MT0dfVE9fU1RET1VUPSR7UkFJTFNfTE9HX1RPX1NURE9VVH1cbiAgICAtIExPR19MRVZFTD0ke0xPR19MRVZFTH1cbiAgICAtIFBPU1RHUkVTX0hPU1Q9JHtQT1NUR1JFU19IT1NUfVxuICAgIC0gUE9TVEdSRVNfUE9SVD0ke1BPU1RHUkVTX1BPUlR9XG4gICAgLSBQT1NUR1JFU19EQVRBQkFTRT0ke1BPU1RHUkVTX0RBVEFCQVNFfVxuICAgIC0gUE9TVEdSRVNfVVNFUk5BTUU9JHtQT1NUR1JFU19VU0VSTkFNRX1cbiAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgLSBSRURJU19VUkw9JHtSRURJU19VUkx9XG4gICAgLSBSRURJU19QQVNTV09SRD0ke1JFRElTX1BBU1NXT1JEfVxuXG5zZXJ2aWNlczpcbiAgY2hhdHdvb3Q6XG4gICAgPDw6ICpjaGF0d29vdC1iYXNlXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gcG9zdGdyZXNcbiAgICAgIC0gcmVkaXNcbiAgICBlbnRyeXBvaW50OiBkb2NrZXIvZW50cnlwb2ludHMvcmFpbHMuc2hcbiAgICBjb21tYW5kOlxuICAgICAgLSBzaFxuICAgICAgLSAtY1xuICAgICAgLSBidW5kbGUgZXhlYyByYWlscyBkYjpjaGF0d29vdF9wcmVwYXJlICYmIGJ1bmRsZSBleGVjIHJhaWxzIHMgLXAgMzAwMCAtYiAwLjAuMC4wXG4gICAgZXhwb3NlOlxuICAgICAgLSBcIjMwMDBcIlxuXG4gIGNoYXR3b290LXdvcmtlcjpcbiAgICA8PDogKmNoYXR3b290LWJhc2VcbiAgICBkZXBlbmRzX29uOlxuICAgICAgLSBwb3N0Z3Jlc1xuICAgICAgLSByZWRpc1xuICAgIGNvbW1hbmQ6XG4gICAgICAtIGJ1bmRsZVxuICAgICAgLSBleGVjXG4gICAgICAtIHNpZGVraXFcbiAgICAgIC0gLUNcbiAgICAgIC0gY29uZmlnL3NpZGVraXEueW1sXG5cbiAgcG9zdGdyZXM6XG4gICAgaW1hZ2U6IHBndmVjdG9yL3BndmVjdG9yOnBnMTZcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGNoYXR3b290LXBvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFBPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREFUQUJBU0V9XG4gICAgICAtIFBPU1RHUkVTX1VTRVI9JHtQT1NUR1JFU19VU0VSTkFNRX1cbiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JHtQT1NUR1JFU19QQVNTV09SRH1cblxuICByZWRpczpcbiAgICBpbWFnZTogcmVkaXM6YWxwaW5lXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBjb21tYW5kOlxuICAgICAgLSBzaFxuICAgICAgLSAtY1xuICAgICAgLSByZWRpcy1zZXJ2ZXIgLS1yZXF1aXJlcGFzcyBcIiQkUkVESVNfUEFTU1dPUkRcIlxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBSRURJU19QQVNTV09SRD0ke1JFRElTX1BBU1NXT1JEfVxuICAgIHZvbHVtZXM6XG4gICAgICAtIGNoYXR3b290LXJlZGlzLWRhdGE6L2RhdGFcblxudm9sdW1lczpcbiAgY2hhdHdvb3Qtc3RvcmFnZTpcbiAgY2hhdHdvb3QtcG9zdGdyZXMtZGF0YTpcbiAgY2hhdHdvb3QtcmVkaXMtZGF0YToiLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuc2VjcmV0X2tleV9iYXNlID0gXCIke2hhc2g6NjR9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkfVwiXG5yZWRpc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZH1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuICBcIkZST05URU5EX1VSTD1odHRwOi8vJHttYWluX2RvbWFpbn1cIixcbiAgXCJTRUNSRVRfS0VZX0JBU0U9JHtzZWNyZXRfa2V5X2Jhc2V9XCIsXG4gIFwiRk9SQ0VfU1NMPWZhbHNlXCIsXG4gIFwiUkFJTFNfRU5WPXByb2R1Y3Rpb25cIixcbiAgXCJOT0RFX0VOVj1wcm9kdWN0aW9uXCIsXG4gIFwiSU5TVEFMTEFUSU9OX0VOVj1kb2NrZXJcIixcbiAgXCJSQUlMU19MT0dfVE9fU1RET1VUPXRydWVcIixcbiAgXCJMT0dfTEVWRUw9aW5mb1wiLFxuICBcIkRFRkFVTFRfTE9DQUxFPWVuXCIsXG4gIFwiUE9TVEdSRVNfSE9TVD1wb3N0Z3Jlc1wiLFxuICBcIlBPU1RHUkVTX1BPUlQ9NTQzMlwiLFxuICBcIlBPU1RHUkVTX0RBVEFCQVNFPWNoYXR3b290XCIsXG4gIFwiUE9TVEdSRVNfVVNFUk5BTUU9cG9zdGdyZXNcIixcbiAgXCJQT1NUR1JFU19QQVNTV09SRD0ke3Bvc3RncmVzX3Bhc3N3b3JkfVwiLFxuICBcIlJFRElTX1VSTD1yZWRpczovLzoke3JlZGlzX3Bhc3N3b3JkfUByZWRpczo2Mzc5XCIsXG4gIFwiUkVESVNfUEFTU1dPUkQ9JHtyZWRpc19wYXNzd29yZH1cIixcbiAgXCJFTkFCTEVfQUNDT1VOVF9TSUdOVVA9ZmFsc2VcIixcbiAgXCJBQ1RJVkVfU1RPUkFHRV9TRVJWSUNFPWxvY2FsXCIsXG5dXG5tb3VudHMgPSBbXVxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJjaGF0d29vdFwiXG5wb3J0ID0gM18wMDBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbiIKfQ==

Tags

support, chat, customer-service


Version: v4.12.1

On this page