From ac033cea22a1a9a904b1f09c751b5534022bc14b Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Tue, 19 Nov 2024 03:06:54 -0500 Subject: [PATCH] Add: Chatwoot --- apps/dokploy/public/templates/chatwoot.svg | 3 + .../templates/chatwoot/docker-compose.yml | 76 +++++++++++++++++++ apps/dokploy/templates/chatwoot/index.ts | 46 +++++++++++ apps/dokploy/templates/templates.ts | 14 ++++ 4 files changed, 139 insertions(+) create mode 100644 apps/dokploy/public/templates/chatwoot.svg create mode 100644 apps/dokploy/templates/chatwoot/docker-compose.yml create mode 100644 apps/dokploy/templates/chatwoot/index.ts diff --git a/apps/dokploy/public/templates/chatwoot.svg b/apps/dokploy/public/templates/chatwoot.svg new file mode 100644 index 00000000..56c9a7b8 --- /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 00000000..1b84b618 --- /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: + rails: + <<: *base-config + depends_on: + postgres: + condition: service_started + 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 + + sidekiq: + <<: *base-config + depends_on: + postgres: + condition: service_started + redis: + condition: service_started + command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml'] + restart: always + + postgres: + image: postgres:12 + restart: always + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - dokploy-network + environment: + - POSTGRES_DB=${POSTGRES_DATABASE} + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + + redis: + image: redis:alpine + restart: always + volumes: + - redis_data:/data + networks: + - dokploy-network + +networks: + dokploy-network: + external: true + +volumes: + chatwoot_storage: + postgres_data: + 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 00000000..8e57702f --- /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: "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=postgres`, + `POSTGRES_PORT=5432`, + `POSTGRES_DATABASE=chatwoot`, + `POSTGRES_USERNAME=postgres`, + `POSTGRES_PASSWORD=${postgresPassword}`, + `REDIS_URL=redis://redis:6379`, + `ENABLE_ACCOUNT_SIGNUP=false`, + `ACTIVE_STORAGE_SERVICE=local`, + ]; + + return { + domains, + envs, + }; +} \ No newline at end of file diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index d0b29fc6..bc496c27 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -837,4 +837,18 @@ 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), + }, ];