diff --git a/apps/dokploy/public/templates/typebot.svg b/apps/dokploy/public/templates/typebot.svg new file mode 100644 index 00000000..83d04de2 --- /dev/null +++ b/apps/dokploy/public/templates/typebot.svg @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index 100802e5..6047a7c6 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -453,4 +453,18 @@ export const templates: TemplateData[] = [ tags: ["analytics", "self-hosted"], load: () => import("./aptabase/index").then((m) => m.generate), }, + { + id: "typebot", + name: "Typebot", + version: "latest", + description: "Typebot is an open-source chatbot builder platform.", + logo: "typebot.svg", + links: { + github: "https://github.com/baptisteArno/typebot.io", + website: "https://typebot.io/", + docs: "https://docs.typebot.io/get-started/introduction", + }, + tags: ["chatbot", "builder", "open-source"], + load: () => import("./typebot/index").then((m) => m.generate), + }, ]; diff --git a/apps/dokploy/templates/typebot/docker-compose.yml b/apps/dokploy/templates/typebot/docker-compose.yml new file mode 100644 index 00000000..036ffea5 --- /dev/null +++ b/apps/dokploy/templates/typebot/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.3' + +volumes: + db-data: + +services: + typebot-db: + image: postgres:14-alpine + restart: always + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: typebot + POSTGRES_DB: typebot + POSTGRES_PASSWORD: typebot + networks: + - dokploy-network + + typebot-builder: + image: baptistearno/typebot-builder:latest + restart: always + depends_on: + - typebot-db + ports: + - '8080:3000' + environment: + ENCRYPTION_SECRET: '${ENCRYPTION_SECRET}' + DATABASE_URL: 'postgresql://typebot:typebot@typebot-db:5432/typebot' + NEXTAUTH_URL: '${NEXTAUTH_URL}' + NEXT_PUBLIC_VIEWER_URL: '${NEXT_PUBLIC_VIEWER_URL}' + ADMIN_EMAIL: '${ADMIN_EMAIL}' + SMTP_HOST: '${SMTP_HOST}' + NEXT_PUBLIC_SMTP_FROM: '${NEXT_PUBLIC_SMTP_FROM}' + SMTP_USERNAME: '${SMTP_USERNAME}' + SMTP_PASSWORD: '${SMTP_PASSWORD}' + DEFAULT_WORKSPACE_PLAN: '${DEFAULT_WORKSPACE_PLAN}' + + typebot-viewer: + image: baptistearno/typebot-viewer:latest + restart: always + ports: + - '8081:3000' + environment: + ENCRYPTION_SECRET: '${ENCRYPTION_SECRET}' + DATABASE_URL: postgresql://typebot:typebot@typebot-db:5432/typebot + NEXTAUTH_URL: http://localhost:8080 + NEXT_PUBLIC_VIEWER_URL: http://localhost:8081 + ADMIN_EMAIL: '${ADMIN_EMAIL}' + SMTP_HOST: '${SMTP_HOST}' + NEXT_PUBLIC_SMTP_FROM: '${NEXT_PUBLIC_SMTP_FROM}' + SMTP_USER: '${SMTP_USER}' + SMTP_PASSWORD: '${SMTP_PASSWORD}' + DEFAULT_WORKSPACE_PLAN: '${DEFAULT_WORKSPACE_PLAN}' \ No newline at end of file diff --git a/apps/dokploy/templates/typebot/index.ts b/apps/dokploy/templates/typebot/index.ts new file mode 100644 index 00000000..a0703d71 --- /dev/null +++ b/apps/dokploy/templates/typebot/index.ts @@ -0,0 +1,44 @@ +import { + type DomainSchema, + type Schema, + type Template, + generateBase64, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const builderDomain = generateRandomDomain(schema); + const viewerDomain = generateRandomDomain(schema); + const encryptionSecret = generateBase64(24); + + const domains: DomainSchema[] = [ + { + host: builderDomain, + port: 8080, + serviceName: "typebot-builder", + }, + { + host: viewerDomain, + port: 8081, + serviceName: "typebot-viewer", + }, + ]; + + const envs = [ + `ENCRYPTION_SECRET=${encryptionSecret}`, + `NEXTAUTH_URL=http://${builderDomain}`, + `NEXT_PUBLIC_VIEWER_URL=http://${viewerDomain}`, + "ADMIN_EMAIL=typebot@example.com", + "SMTP_HOST=", + "SMTP_PORT=25", + "SMTP_USERNAME=", + "SMTP_PASSWORD=", + "NEXT_PUBLIC_SMTP_FROM=typebot@example.com", + "DEFAULT_WORKSPACE_PLAN=UNLIMITED", + ]; + + return { + envs, + domains, + }; +}