diff --git a/apps/dokploy/public/templates/heyform.svg b/apps/dokploy/public/templates/heyform.svg new file mode 100644 index 00000000..e1e34e61 --- /dev/null +++ b/apps/dokploy/public/templates/heyform.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/dokploy/templates/heyform/docker-compose.yml b/apps/dokploy/templates/heyform/docker-compose.yml new file mode 100644 index 00000000..ec7e02fc --- /dev/null +++ b/apps/dokploy/templates/heyform/docker-compose.yml @@ -0,0 +1,48 @@ +services: + heyform: + image: heyform/community-edition:latest + restart: always + volumes: + # Persist uploaded images + - heyform-data:/app/static/upload + depends_on: + - mongo + - redis + ports: + - 8000 + env_file: + - .env + environment: + MONGO_URI: 'mongodb://mongo:27017/heyform' + REDIS_HOST: redis + REDIS_PORT: 6379 + networks: + - heyform-network + + mongo: + image: percona/percona-server-mongodb:4.4 + restart: always + networks: + - heyform-network + volumes: + # Persist MongoDB data + - mongo-data:/data/db + + redis: + image: redis + restart: always + command: "redis-server --appendonly yes" + networks: + - heyform-network + volumes: + # Persist KeyDB data + - redis-data:/data + +networks: + heyform-network: + driver: bridge + +volumes: + heyform-data: + mongo-data: + redis-data: diff --git a/apps/dokploy/templates/heyform/index.ts b/apps/dokploy/templates/heyform/index.ts new file mode 100644 index 00000000..03ea4b92 --- /dev/null +++ b/apps/dokploy/templates/heyform/index.ts @@ -0,0 +1,32 @@ +import { + type DomainSchema, + type Schema, + type Template, + generateBase64, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainDomain = generateRandomDomain(schema); + const sessionKey = generateBase64(64); + const formEncryptionKey = generateBase64(64); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 8000, + serviceName: "heyform", + }, + ]; + + const envs = [ + `APP_HOMEPAGE_URL=http://${mainDomain}`, + `SESSION_KEY=${sessionKey}`, + `FORM_ENCRYPTION_KEY=${formEncryptionKey}`, + ]; + + return { + envs, + domains, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index ec3b0354..46806a8a 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -837,6 +837,21 @@ export const templates: TemplateData[] = [ tags: ["3d", "rendering", "animation"], load: () => import("./blender/index").then((m) => m.generate), }, + { + id: "heyform", + name: "HeyForm", + version: "latest", + description: + "Allows anyone to create engaging conversational forms for surveys, questionnaires, quizzes, and polls. No coding skills required.", + logo: "heyform.svg", + links: { + github: "https://github.com/heyform/heyform", + website: "https://heyform.net", + docs: "https://docs.heyform.net", + }, + tags: ["form", "builder", "questionnaire", "quiz", "survey"], + load: () => import("./heyform/index").then((m) => m.generate), + }, { id: "chatwoot", name: "Chatwoot",