diff --git a/public/templates/documenso.png b/public/templates/documenso.png new file mode 100644 index 00000000..cb4765fc Binary files /dev/null and b/public/templates/documenso.png differ diff --git a/templates/documenso/docker-compose.yml b/templates/documenso/docker-compose.yml new file mode 100644 index 00000000..e2702931 --- /dev/null +++ b/templates/documenso/docker-compose.yml @@ -0,0 +1,53 @@ +version: "3.8" +services: + postgres: + image: postgres:16 + networks: + - dokploy-network + volumes: + - documenso-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=documenso + - POSTGRES_PASSWORD=password + - POSTGRES_DB=documenso + healthcheck: + test: ["CMD-SHELL", "pg_isready -U documenso"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + + documenso: + image: documenso/documenso:latest + networks: + - dokploy-network + depends_on: + postgres: + condition: service_healthy + environment: + - PORT=${DOCUMENSO_PORT} + - NEXTAUTH_URL=http://${DOCUMENSO_HOST} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - NEXT_PRIVATE_ENCRYPTION_KEY=${NEXT_PRIVATE_ENCRYPTION_KEY} + - NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY} + - NEXT_PUBLIC_WEBAPP_URL=http://${DOCUMENSO_HOST} + - NEXT_PRIVATE_DATABASE_URL=postgres://documenso:password@postgres:5432/documenso + - NEXT_PRIVATE_DIRECT_DATABASE_URL=postgres://documenso:password@postgres:5432/documenso + - NEXT_PUBLIC_UPLOAD_TRANSPORT=database + - NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth + - NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12 + ports: + - ${DOCUMENSO_PORT} + labels: + - "traefik.enable=true" + - "traefik.http.routers.${HASH}.rule=Host(`${DOCUMENSO_HOST}`)" + - "traefik.http.services.${HASH}.loadbalancer.server.port=${DOCUMENSO_PORT}" + volumes: + - /opt/documenso/cert.p12:/opt/documenso/cert.p12 + +networks: + dokploy-network: + external: true + +volumes: + documenso-data: diff --git a/templates/documenso/index.ts b/templates/documenso/index.ts new file mode 100644 index 00000000..42450460 --- /dev/null +++ b/templates/documenso/index.ts @@ -0,0 +1,29 @@ +import { + generateHash, + generateRandomDomain, + type Template, + type Schema, + generateBase64, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainServiceHash = generateHash(schema.projectName); + const randomDomain = generateRandomDomain(schema); + + const nextAuthSecret = generateBase64(32); + const documensoEncryptionKey = generateBase64(32); + const documensoSecondaryEncryptionKey = generateBase64(32); + + const envs = [ + `DOCUMENSO_HOST=${randomDomain}`, + "DOCUMENSO_PORT=3000", + `HASH=${mainServiceHash}`, + `NEXTAUTH_SECRET=${nextAuthSecret}`, + `NEXT_PRIVATE_ENCRYPTION_KEY=${documensoEncryptionKey}`, + `NEXT_PRIVATE_SECONDARY_ENCRYPTION_KEY=${documensoSecondaryEncryptionKey}`, + ]; + + return { + envs, + }; +} diff --git a/templates/templates.ts b/templates/templates.ts index 918838ba..6db09f0d 100644 --- a/templates/templates.ts +++ b/templates/templates.ts @@ -34,7 +34,7 @@ export const templates: TemplateData[] = [ { id: "calcom", name: "Calcom", - version: "2.7.6", + version: "v2.7.6", description: "Calcom is a open source alternative to Calendly that allows to create scheduling and booking services.", @@ -47,4 +47,20 @@ export const templates: TemplateData[] = [ tags: ["scheduling", "booking"], load: () => import("./calcom/index").then((m) => m.generate), }, + { + id: "documenso", + name: "Documenso", + version: "v1.5.6", + description: + "Documenso is the open source alternative to DocuSign for signing documents digitally", + + links: { + github: "https://github.com/documenso/documenso", + website: "https://documenso.com/", + docs: "https://documenso.com/docs", + }, + logo: "documenso.png", + tags: ["document-signing"], + load: () => import("./documenso/index").then((m) => m.generate), + }, ];