mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
Merge branch 'canary' into template-frappe-hr
This commit is contained in:
BIN
apps/dokploy/public/templates/evolutionapi.png
Normal file
BIN
apps/dokploy/public/templates/evolutionapi.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
apps/dokploy/public/templates/formbricks.png
Normal file
BIN
apps/dokploy/public/templates/formbricks.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
61
apps/dokploy/templates/evolutionapi/docker-compose.yml
Normal file
61
apps/dokploy/templates/evolutionapi/docker-compose.yml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
services:
|
||||||
|
evolution-api:
|
||||||
|
image: atendai/evolution-api:v2.1.2
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- evolution-instances:/evolution/instances
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
environment:
|
||||||
|
- SERVER_URL=${SERVER_URL}
|
||||||
|
- AUTHENTICATION_TYPE=${AUTHENTICATION_TYPE}
|
||||||
|
- AUTHENTICATION_API_KEY=${AUTHENTICATION_API_KEY}
|
||||||
|
- AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=${AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES}
|
||||||
|
- LANGUAGE=${LANGUAGE}
|
||||||
|
- CONFIG_SESSION_PHONE_CLIENT=${CONFIG_SESSION_PHONE_CLIENT}
|
||||||
|
- CONFIG_SESSION_PHONE_NAME=${CONFIG_SESSION_PHONE_NAME}
|
||||||
|
- TELEMETRY=${TELEMETRY}
|
||||||
|
- TELEMETRY_URL=${TELEMETRY_URL}
|
||||||
|
- DATABASE_ENABLED=${DATABASE_ENABLED}
|
||||||
|
- DATABASE_PROVIDER=${DATABASE_PROVIDER}
|
||||||
|
- DATABASE_CONNECTION_URI=${DATABASE_CONNECTION_URI}
|
||||||
|
- DATABASE_SAVE_DATA_INSTANCE=${DATABASE_SAVE_DATA_INSTANCE}
|
||||||
|
- DATABASE_SAVE_DATA_NEW_MESSAGE=${DATABASE_SAVE_DATA_NEW_MESSAGE}
|
||||||
|
- DATABASE_SAVE_MESSAGE_UPDATE=${DATABASE_SAVE_MESSAGE_UPDATE}
|
||||||
|
- DATABASE_SAVE_DATA_CONTACTS=${DATABASE_SAVE_DATA_CONTACTS}
|
||||||
|
- DATABASE_SAVE_DATA_CHATS=${DATABASE_SAVE_DATA_CHATS}
|
||||||
|
- DATABASE_SAVE_DATA_LABELS=${DATABASE_SAVE_DATA_LABELS}
|
||||||
|
- DATABASE_SAVE_DATA_HISTORIC=${DATABASE_SAVE_DATA_HISTORIC}
|
||||||
|
- CACHE_REDIS_ENABLED=${CACHE_REDIS_ENABLED}
|
||||||
|
- CACHE_REDIS_URI=${CACHE_REDIS_URI}
|
||||||
|
- CACHE_REDIS_PREFIX_KEY=${CACHE_REDIS_PREFIX_KEY}
|
||||||
|
- CACHE_REDIS_SAVE_INSTANCES=${CACHE_REDIS_SAVE_INSTANCES}
|
||||||
|
|
||||||
|
evolution-postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- evolution-postgres-data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=${POSTGRES_DATABASE}
|
||||||
|
- POSTGRES_USER=${POSTGRES_USERNAME}
|
||||||
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||||
|
|
||||||
|
evolution-redis:
|
||||||
|
image: redis:alpine
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- evolution-redis-data:/data
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
evolution-instances:
|
||||||
|
evolution-postgres-data:
|
||||||
|
evolution-redis-data:
|
||||||
59
apps/dokploy/templates/evolutionapi/index.ts
Normal file
59
apps/dokploy/templates/evolutionapi/index.ts
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import {
|
||||||
|
type DomainSchema,
|
||||||
|
type Schema,
|
||||||
|
type Template,
|
||||||
|
generateBase64,
|
||||||
|
generatePassword,
|
||||||
|
generateRandomDomain,
|
||||||
|
} from "../utils";
|
||||||
|
|
||||||
|
export function generate(schema: Schema): Template {
|
||||||
|
const mainDomain = generateRandomDomain(schema);
|
||||||
|
const apiKey = generateBase64(64);
|
||||||
|
const postgresPassword = generatePassword();
|
||||||
|
|
||||||
|
const domains: DomainSchema[] = [
|
||||||
|
{
|
||||||
|
host: mainDomain,
|
||||||
|
port: 8080,
|
||||||
|
serviceName: "evolution-api",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const envs = [
|
||||||
|
`SERVER_URL=https://${mainDomain}`,
|
||||||
|
"AUTHENTICATION_TYPE=apikey",
|
||||||
|
`AUTHENTICATION_API_KEY=${apiKey}`,
|
||||||
|
"AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true",
|
||||||
|
|
||||||
|
"LANGUAGE=en",
|
||||||
|
"CONFIG_SESSION_PHONE_CLIENT=Evolution API",
|
||||||
|
"CONFIG_SESSION_PHONE_NAME=Chrome",
|
||||||
|
"TELEMETRY=false",
|
||||||
|
"TELEMETRY_URL=",
|
||||||
|
|
||||||
|
"POSTGRES_DATABASE=evolution",
|
||||||
|
"POSTGRES_USERNAME=postgresql",
|
||||||
|
`POSTGRES_PASSWORD=${postgresPassword}`,
|
||||||
|
"DATABASE_ENABLED=true",
|
||||||
|
"DATABASE_PROVIDER=postgresql",
|
||||||
|
`DATABASE_CONNECTION_URI=postgres://postgresql:${postgresPassword}@evolution-postgres:5432/evolution`,
|
||||||
|
"DATABASE_SAVE_DATA_INSTANCE=true",
|
||||||
|
"DATABASE_SAVE_DATA_NEW_MESSAGE=true",
|
||||||
|
"DATABASE_SAVE_MESSAGE_UPDATE=true",
|
||||||
|
"DATABASE_SAVE_DATA_CONTACTS=true",
|
||||||
|
"DATABASE_SAVE_DATA_CHATS=true",
|
||||||
|
"DATABASE_SAVE_DATA_LABELS=true",
|
||||||
|
"DATABASE_SAVE_DATA_HISTORIC=true",
|
||||||
|
|
||||||
|
"CACHE_REDIS_ENABLED=true",
|
||||||
|
"CACHE_REDIS_URI=redis://evolution-redis:6379",
|
||||||
|
"CACHE_REDIS_PREFIX_KEY=evolution",
|
||||||
|
"CACHE_REDIS_SAVE_INSTANCES=true",
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
domains,
|
||||||
|
envs,
|
||||||
|
};
|
||||||
|
}
|
||||||
38
apps/dokploy/templates/formbricks/docker-compose.yml
Normal file
38
apps/dokploy/templates/formbricks/docker-compose.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
x-environment: &environment
|
||||||
|
environment:
|
||||||
|
WEBAPP_URL: ${WEBAPP_URL}
|
||||||
|
NEXTAUTH_URL: ${NEXTAUTH_URL}
|
||||||
|
DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public"
|
||||||
|
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
|
||||||
|
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
|
||||||
|
CRON_SECRET: ${CRON_SECRET}
|
||||||
|
EMAIL_VERIFICATION_DISABLED: 1
|
||||||
|
PASSWORD_RESET_DISABLED: 1
|
||||||
|
S3_FORCE_PATH_STYLE: 0
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
restart: always
|
||||||
|
image: pgvector/pgvector:pg17
|
||||||
|
volumes:
|
||||||
|
- postgres:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
- POSTGRES_PASSWORD=postgres
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
formbricks:
|
||||||
|
restart: always
|
||||||
|
image: ghcr.io/formbricks/formbricks:v3.1.3
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
ports:
|
||||||
|
- 3000
|
||||||
|
volumes:
|
||||||
|
- ../files/uploads:/home/nextjs/apps/web/uploads/
|
||||||
|
<<: *environment
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres:
|
||||||
|
driver: local
|
||||||
|
uploads:
|
||||||
39
apps/dokploy/templates/formbricks/index.ts
Normal file
39
apps/dokploy/templates/formbricks/index.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import {
|
||||||
|
type DomainSchema,
|
||||||
|
type Schema,
|
||||||
|
type Template,
|
||||||
|
generateBase64,
|
||||||
|
generateRandomDomain,
|
||||||
|
} from "../utils";
|
||||||
|
|
||||||
|
export function generate(schema: Schema): Template {
|
||||||
|
const mainDomain = generateRandomDomain(schema);
|
||||||
|
const secretBase = generateBase64(64);
|
||||||
|
const encryptionKey = generateBase64(48);
|
||||||
|
const cronSecret = generateBase64(32);
|
||||||
|
|
||||||
|
const domains: DomainSchema[] = [
|
||||||
|
{
|
||||||
|
host: mainDomain,
|
||||||
|
port: 3000,
|
||||||
|
serviceName: "formbricks",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const envs = [
|
||||||
|
`WEBAPP_URL=http://${mainDomain}`,
|
||||||
|
`NEXTAUTH_URL=http://${mainDomain}`,
|
||||||
|
`NEXTAUTH_SECRET=${secretBase}`,
|
||||||
|
`ENCRYPTION_KEY=${encryptionKey}`,
|
||||||
|
`CRON_SECRET=${cronSecret}`,
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
const mounts: Template["mounts"] = [];
|
||||||
|
|
||||||
|
return {
|
||||||
|
envs,
|
||||||
|
mounts,
|
||||||
|
domains,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: postgres:13
|
image: postgres:17-alpine
|
||||||
ports:
|
ports:
|
||||||
- 5432
|
- 5432
|
||||||
networks:
|
networks:
|
||||||
@@ -19,7 +19,7 @@ services:
|
|||||||
- listmonk-data:/var/lib/postgresql/data
|
- listmonk-data:/var/lib/postgresql/data
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
image: listmonk/listmonk:v3.0.0
|
image: listmonk/listmonk:v4.1.0
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
@@ -35,7 +35,7 @@ services:
|
|||||||
|
|
||||||
app:
|
app:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: listmonk/listmonk:v3.0.0
|
image: listmonk/listmonk:v4.1.0
|
||||||
environment:
|
environment:
|
||||||
- TZ=Etc/UTC
|
- TZ=Etc/UTC
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|||||||
@@ -2,13 +2,11 @@ import {
|
|||||||
type DomainSchema,
|
type DomainSchema,
|
||||||
type Schema,
|
type Schema,
|
||||||
type Template,
|
type Template,
|
||||||
generatePassword,
|
|
||||||
generateRandomDomain,
|
generateRandomDomain,
|
||||||
} from "../utils";
|
} from "../utils";
|
||||||
|
|
||||||
export function generate(schema: Schema): Template {
|
export function generate(schema: Schema): Template {
|
||||||
const randomDomain = generateRandomDomain(schema);
|
const randomDomain = generateRandomDomain(schema);
|
||||||
const adminPassword = generatePassword(32);
|
|
||||||
|
|
||||||
const domains: DomainSchema[] = [
|
const domains: DomainSchema[] = [
|
||||||
{
|
{
|
||||||
@@ -19,7 +17,7 @@ export function generate(schema: Schema): Template {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const envs = [
|
const envs = [
|
||||||
`# login with admin:${adminPassword}`,
|
`# visit the page to setup your super admin user`,
|
||||||
"# check config.toml in Advanced / Volumes for more options",
|
"# check config.toml in Advanced / Volumes for more options",
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -29,9 +27,6 @@ export function generate(schema: Schema): Template {
|
|||||||
content: `[app]
|
content: `[app]
|
||||||
address = "0.0.0.0:9000"
|
address = "0.0.0.0:9000"
|
||||||
|
|
||||||
admin_username = "admin"
|
|
||||||
admin_password = "${adminPassword}"
|
|
||||||
|
|
||||||
[db]
|
[db]
|
||||||
host = "db"
|
host = "db"
|
||||||
port = 5432
|
port = 5432
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: "3.9"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
teable:
|
teable:
|
||||||
image: ghcr.io/teableio/teable:1.3.1-alpha-build.460
|
image: ghcr.io/teableio/teable:latest
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- teable-data:/app/.assets
|
- teable-data:/app/.assets
|
||||||
|
|||||||
@@ -1239,6 +1239,21 @@ export const templates: TemplateData[] = [
|
|||||||
tags: ["matrix", "communication"],
|
tags: ["matrix", "communication"],
|
||||||
load: () => import("./conduit/index").then((m) => m.generate),
|
load: () => import("./conduit/index").then((m) => m.generate),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "evolutionapi",
|
||||||
|
name: "Evolution API",
|
||||||
|
version: "v2.1.2",
|
||||||
|
description:
|
||||||
|
"Evolution API is a robust platform dedicated to empowering small businesses with limited resources, going beyond a simple messaging solution via WhatsApp.",
|
||||||
|
logo: "evolutionapi.png",
|
||||||
|
links: {
|
||||||
|
github: "https://github.com/EvolutionAPI/evolution-api",
|
||||||
|
docs: "https://doc.evolution-api.com/v2/en/get-started/introduction",
|
||||||
|
website: "https://evolution-api.com/opensource-whatsapp-api/",
|
||||||
|
},
|
||||||
|
tags: ["api", "whatsapp", "messaging"],
|
||||||
|
load: () => import("./evolutionapi/index").then((m) => m.generate),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "conduwuit",
|
id: "conduwuit",
|
||||||
name: "Conduwuit",
|
name: "Conduwuit",
|
||||||
@@ -1452,5 +1467,21 @@ export const templates: TemplateData[] = [
|
|||||||
},
|
},
|
||||||
tags: ["hrms", "payroll", "leaves", "expenses", "attendance", "performace"],
|
tags: ["hrms", "payroll", "leaves", "expenses", "attendance", "performace"],
|
||||||
load: () => import("./frappe-hr/index").then((m) => m.generate),
|
load: () => import("./frappe-hr/index").then((m) => m.generate),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "formbricks",
|
||||||
|
name: "Formbricks",
|
||||||
|
version: "v3.1.3",
|
||||||
|
description:
|
||||||
|
"Formbricks is an open-source survey and form platform for collecting user data.",
|
||||||
|
logo: "formbricks.png",
|
||||||
|
links: {
|
||||||
|
github: "https://github.com/formbricks/formbricks",
|
||||||
|
website: "https://formbricks.com/",
|
||||||
|
docs: "https://formbricks.com/docs",
|
||||||
|
},
|
||||||
|
tags: ["forms", "analytics"],
|
||||||
|
load: () => import("./formbricks/index").then((m) => m.generate),
|
||||||
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user