diff --git a/apps/dokploy/public/templates/chatwoot.svg b/apps/dokploy/public/templates/chatwoot.svg new file mode 100644 index 000000000..56c9a7b8f --- /dev/null +++ b/apps/dokploy/public/templates/chatwoot.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/apps/dokploy/templates/chatwoot/docker-compose.yml b/apps/dokploy/templates/chatwoot/docker-compose.yml new file mode 100644 index 000000000..8b762e36e --- /dev/null +++ b/apps/dokploy/templates/chatwoot/docker-compose.yml @@ -0,0 +1,76 @@ +version: '3' + +x-base-config: &base-config + image: chatwoot/chatwoot:v3.14.1 + volumes: + - chatwoot-storage:/app/storage + networks: + - dokploy-network + environment: + - FRONTEND_URL=${FRONTEND_URL} + - SECRET_KEY_BASE=${SECRET_KEY_BASE} + - RAILS_ENV=${RAILS_ENV} + - NODE_ENV=${NODE_ENV} + - INSTALLATION_ENV=${INSTALLATION_ENV} + - RAILS_LOG_TO_STDOUT=${RAILS_LOG_TO_STDOUT} + - LOG_LEVEL=${LOG_LEVEL} + - DEFAULT_LOCALE=${DEFAULT_LOCALE} + - POSTGRES_HOST=${POSTGRES_HOST} + - POSTGRES_PORT=${POSTGRES_PORT} + - POSTGRES_DATABASE=${POSTGRES_DATABASE} + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - REDIS_URL=${REDIS_URL} + - ENABLE_ACCOUNT_SIGNUP=${ENABLE_ACCOUNT_SIGNUP} + - ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE} + +services: + chatwoot-rails: + <<: *base-config + depends_on: + chatwoot-postgres: + condition: service_started + chatwoot-redis: + condition: service_started + entrypoint: docker/entrypoints/rails.sh + command: ['bundle', 'exec', 'sh', '-c', 'rails db:chatwoot_prepare && rails s -p 3000 -b 0.0.0.0'] + restart: always + + chatwoot-sidekiq: + <<: *base-config + depends_on: + chatwoot-postgres: + condition: service_started + chatwoot-redis: + condition: service_started + command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml'] + restart: always + + chatwoot-postgres: + image: postgres:12 + restart: always + volumes: + - chatwoot-postgres-data:/var/lib/postgresql/data + networks: + - dokploy-network + environment: + - POSTGRES_DB=${POSTGRES_DATABASE} + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + + chatwoot-redis: + image: redis:alpine + restart: always + volumes: + - chatwoot-redis-data:/data + networks: + - dokploy-network + +networks: + dokploy-network: + external: true + +volumes: + chatwoot-storage: + chatwoot-postgres-data: + chatwoot-redis-data: \ No newline at end of file diff --git a/apps/dokploy/templates/chatwoot/index.ts b/apps/dokploy/templates/chatwoot/index.ts new file mode 100644 index 000000000..9c5e44c6b --- /dev/null +++ b/apps/dokploy/templates/chatwoot/index.ts @@ -0,0 +1,46 @@ +import { + type DomainSchema, + type Schema, + type Template, + generateBase64, + generatePassword, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainDomain = generateRandomDomain(schema); + const secretKeyBase = generateBase64(64); + const postgresPassword = generatePassword(); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 3000, + serviceName: "chatwoot-rails", + }, + ]; + + const envs = [ + `FRONTEND_URL=http://${mainDomain}`, + `SECRET_KEY_BASE=${secretKeyBase}`, + "RAILS_ENV=production", + "NODE_ENV=production", + "INSTALLATION_ENV=docker", + "RAILS_LOG_TO_STDOUT=true", + "LOG_LEVEL=info", + "DEFAULT_LOCALE=en", + "POSTGRES_HOST=chatwoot-postgres", + "POSTGRES_PORT=5432", + "POSTGRES_DATABASE=chatwoot", + "POSTGRES_USERNAME=postgres", + `POSTGRES_PASSWORD=${postgresPassword}`, + "REDIS_URL=redis://chatwoot-redis:6379", + "ENABLE_ACCOUNT_SIGNUP=false", + "ACTIVE_STORAGE_SERVICE=local", + ]; + + return { + domains, + envs, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index d0b29fc66..ec3b03548 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -837,4 +837,19 @@ export const templates: TemplateData[] = [ tags: ["3d", "rendering", "animation"], load: () => import("./blender/index").then((m) => m.generate), }, + { + id: "chatwoot", + name: "Chatwoot", + version: "v3.14.1", + description: + "Open-source customer engagement platform that provides a shared inbox for teams, live chat, and omnichannel support.", + logo: "chatwoot.svg", + links: { + github: "https://github.com/chatwoot/chatwoot", + website: "https://www.chatwoot.com", + docs: "https://www.chatwoot.com/docs", + }, + tags: ["support", "chat", "customer-service"], + load: () => import("./chatwoot/index").then((m) => m.generate), + }, ];