From 28f0c9f162b7e1c315a1bf4461943782cf467974 Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Wed, 20 Nov 2024 10:43:11 -0500 Subject: [PATCH] feat(add): Discourse --- apps/dokploy/public/templates/discourse.svg | 8 ++ .../templates/discourse/docker-compose.yml | 94 +++++++++++++++++++ apps/dokploy/templates/discourse/index.ts | 37 ++++++++ apps/dokploy/templates/templates.ts | 15 +++ 4 files changed, 154 insertions(+) create mode 100644 apps/dokploy/public/templates/discourse.svg create mode 100644 apps/dokploy/templates/discourse/docker-compose.yml create mode 100644 apps/dokploy/templates/discourse/index.ts diff --git a/apps/dokploy/public/templates/discourse.svg b/apps/dokploy/public/templates/discourse.svg new file mode 100644 index 00000000..4cbb8c87 --- /dev/null +++ b/apps/dokploy/public/templates/discourse.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/apps/dokploy/templates/discourse/docker-compose.yml b/apps/dokploy/templates/discourse/docker-compose.yml new file mode 100644 index 00000000..ce6106be --- /dev/null +++ b/apps/dokploy/templates/discourse/docker-compose.yml @@ -0,0 +1,94 @@ +version: '3.7' + +services: + discourse-db: + image: docker.io/bitnami/postgresql:17 + networks: + - dokploy-network + volumes: + - discourse-postgresql-data:/bitnami/postgresql + environment: + POSTGRESQL_USERNAME: bn_discourse + POSTGRESQL_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRESQL_DATABASE: bitnami_discourse + healthcheck: + test: ["CMD-SHELL", "pg_isready -U bn_discourse -d bitnami_discourse"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + discourse-redis: + image: docker.io/bitnami/redis:7.4 + networks: + - dokploy-network + volumes: + - discourse-redis-data:/bitnami/redis + environment: + REDIS_PASSWORD: ${REDIS_PASSWORD} + healthcheck: + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + discourse-app: + image: docker.io/bitnami/discourse:3.3.2 + networks: + - dokploy-network + volumes: + - discourse-data:/bitnami/discourse + depends_on: + discourse-db: + condition: service_healthy + discourse-redis: + condition: service_healthy + environment: + DISCOURSE_HOST: ${DISCOURSE_HOST} + DISCOURSE_DATABASE_HOST: discourse-db + DISCOURSE_DATABASE_PORT_NUMBER: 5432 + DISCOURSE_DATABASE_USER: bn_discourse + DISCOURSE_DATABASE_PASSWORD: ${POSTGRES_PASSWORD} + DISCOURSE_DATABASE_NAME: bitnami_discourse + DISCOURSE_REDIS_HOST: discourse-redis + DISCOURSE_REDIS_PORT_NUMBER: 6379 + DISCOURSE_REDIS_PASSWORD: ${REDIS_PASSWORD} + # Optional: Configure SMTP for email delivery + # DISCOURSE_SMTP_HOST: ${SMTP_HOST} + # DISCOURSE_SMTP_PORT: ${SMTP_PORT} + # DISCOURSE_SMTP_USER: ${SMTP_USER} + # DISCOURSE_SMTP_PASSWORD: ${SMTP_PASSWORD} + restart: unless-stopped + + discourse-sidekiq: + image: docker.io/bitnami/discourse:3.3.2 + networks: + - dokploy-network + volumes: + - discourse-sidekiq-data:/bitnami/discourse + depends_on: + - discourse-app + command: /opt/bitnami/scripts/discourse-sidekiq/run.sh + environment: + DISCOURSE_HOST: ${DISCOURSE_HOST} + DISCOURSE_DATABASE_HOST: discourse-db + DISCOURSE_DATABASE_PORT_NUMBER: 5432 + DISCOURSE_DATABASE_USER: bn_discourse + DISCOURSE_DATABASE_PASSWORD: ${POSTGRES_PASSWORD} + DISCOURSE_DATABASE_NAME: bitnami_discourse + DISCOURSE_REDIS_HOST: discourse-redis + DISCOURSE_REDIS_PORT_NUMBER: 6379 + DISCOURSE_REDIS_PASSWORD: ${REDIS_PASSWORD} + # Optional: Configure SMTP for email delivery + # DISCOURSE_SMTP_HOST: ${SMTP_HOST} + # DISCOURSE_SMTP_PORT: ${SMTP_PORT} + # DISCOURSE_SMTP_USER: ${SMTP_USER} + # DISCOURSE_SMTP_PASSWORD: ${SMTP_PASSWORD} + restart: unless-stopped + +volumes: + discourse-postgresql-data: + discourse-redis-data: + discourse-data: + discourse-sidekiq-data: \ No newline at end of file diff --git a/apps/dokploy/templates/discourse/index.ts b/apps/dokploy/templates/discourse/index.ts new file mode 100644 index 00000000..bf99e8d0 --- /dev/null +++ b/apps/dokploy/templates/discourse/index.ts @@ -0,0 +1,37 @@ +import { + type DomainSchema, + type Schema, + type Template, + generatePassword, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainDomain = generateRandomDomain(schema); + const postgresPassword = generatePassword(); + const redisPassword = generatePassword(); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 3000, + serviceName: "discourse-app", + }, + ]; + + const envs = [ + `DISCOURSE_HOST=${mainDomain}`, + `POSTGRES_PASSWORD=${postgresPassword}`, + `REDIS_PASSWORD=${redisPassword}`, + "# Optional: Configure SMTP for email delivery", + "# SMTP_HOST=smtp.example.com", + "# SMTP_PORT=587", + "# SMTP_USER=your_smtp_user", + "# SMTP_PASSWORD=your_smtp_password", + ]; + + return { + domains, + envs, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index 46806a8a..99cf534b 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -867,4 +867,19 @@ export const templates: TemplateData[] = [ tags: ["support", "chat", "customer-service"], load: () => import("./chatwoot/index").then((m) => m.generate), }, + { + id: "discourse", + name: "Discourse", + version: "3.3.2", + description: + "Discourse is a modern forum software for your community. Use it as a mailing list, discussion forum, or long-form chat room.", + logo: "discourse.svg", + links: { + github: "https://github.com/discourse/discourse", + website: "https://www.discourse.org/", + docs: "https://meta.discourse.org/", + }, + tags: ["forum", "community", "discussion"], + load: () => import("./discourse/index").then((m) => m.generate), + }, ];