mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
Merge branch 'canary' into feat/better-auth-2
This commit is contained in:
@@ -1,38 +1,38 @@
|
||||
import {
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateRandomDomain,
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateRandomDomain,
|
||||
} from "../utils";
|
||||
|
||||
export function generate(schema: Schema): Template {
|
||||
const dashboardDomain = generateRandomDomain(schema);
|
||||
const backendDomain = generateRandomDomain(schema);
|
||||
const actionsDomain = generateRandomDomain(schema);
|
||||
const dashboardDomain = generateRandomDomain(schema);
|
||||
const backendDomain = generateRandomDomain(schema);
|
||||
const actionsDomain = generateRandomDomain(schema);
|
||||
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: dashboardDomain,
|
||||
port: 6791,
|
||||
serviceName: "dashboard",
|
||||
},
|
||||
{
|
||||
host: backendDomain,
|
||||
port: 3210,
|
||||
serviceName: "backend",
|
||||
},
|
||||
{
|
||||
host: actionsDomain,
|
||||
port: 3211,
|
||||
serviceName: "backend",
|
||||
},
|
||||
];
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: dashboardDomain,
|
||||
port: 6791,
|
||||
serviceName: "dashboard",
|
||||
},
|
||||
{
|
||||
host: backendDomain,
|
||||
port: 3210,
|
||||
serviceName: "backend",
|
||||
},
|
||||
{
|
||||
host: actionsDomain,
|
||||
port: 3211,
|
||||
serviceName: "backend",
|
||||
},
|
||||
];
|
||||
|
||||
const envs = [
|
||||
`NEXT_PUBLIC_DEPLOYMENT_URL=http://${backendDomain}`,
|
||||
`CONVEX_CLOUD_ORIGIN=http://${backendDomain}`,
|
||||
`CONVEX_SITE_ORIGIN=http://${actionsDomain}`,
|
||||
];
|
||||
const envs = [
|
||||
`NEXT_PUBLIC_DEPLOYMENT_URL=http://${backendDomain}`,
|
||||
`CONVEX_CLOUD_ORIGIN=http://${backendDomain}`,
|
||||
`CONVEX_SITE_ORIGIN=http://${actionsDomain}`,
|
||||
];
|
||||
|
||||
return { envs, domains };
|
||||
return { envs, domains };
|
||||
}
|
||||
|
||||
@@ -2,7 +2,10 @@ services:
|
||||
glance:
|
||||
image: glanceapp/glance
|
||||
volumes:
|
||||
- ../files/app/glance.yml:/app/glance.yml
|
||||
- ../files/app/config/:/app/config
|
||||
- ../files/app/assets:/app/assets
|
||||
# Optionally, also mount docker socket if you want to use the docker containers widget
|
||||
# - /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
ports:
|
||||
- 8080
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
@@ -17,7 +17,7 @@ export function generate(schema: Schema): Template {
|
||||
|
||||
const mounts: Template["mounts"] = [
|
||||
{
|
||||
filePath: "/app/glance.yml",
|
||||
filePath: "/app/config/glance.yml",
|
||||
content: `
|
||||
branding:
|
||||
hide-footer: true
|
||||
|
||||
40
apps/dokploy/templates/linkwarden/docker-compose.yml
Normal file
40
apps/dokploy/templates/linkwarden/docker-compose.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
services:
|
||||
linkwarden:
|
||||
environment:
|
||||
- NEXTAUTH_SECRET
|
||||
- NEXTAUTH_URL
|
||||
- DATABASE_URL=postgresql://linkwarden:${POSTGRES_PASSWORD}@postgres:5432/linkwarden
|
||||
restart: unless-stopped
|
||||
image: ghcr.io/linkwarden/linkwarden:v2.9.3
|
||||
ports:
|
||||
- 3000
|
||||
volumes:
|
||||
- linkwarden-data:/data/data
|
||||
depends_on:
|
||||
- postgres
|
||||
healthcheck:
|
||||
test: curl --fail http://localhost:3000 || exit 1
|
||||
interval: 60s
|
||||
retries: 2
|
||||
start_period: 60s
|
||||
timeout: 15s
|
||||
|
||||
postgres:
|
||||
image: postgres:17-alpine
|
||||
restart: unless-stopped
|
||||
user: postgres
|
||||
environment:
|
||||
POSTGRES_USER: linkwarden
|
||||
POSTGRES_DB: linkwarden
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
linkwarden-data:
|
||||
postgres-data:
|
||||
33
apps/dokploy/templates/linkwarden/index.ts
Normal file
33
apps/dokploy/templates/linkwarden/index.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import {
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateBase64,
|
||||
generatePassword,
|
||||
generateRandomDomain,
|
||||
} from "../utils";
|
||||
|
||||
export function generate(schema: Schema): Template {
|
||||
const mainDomain = generateRandomDomain(schema);
|
||||
const postgresPassword = generatePassword();
|
||||
const nextSecret = generateBase64(32);
|
||||
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: mainDomain,
|
||||
port: 3000,
|
||||
serviceName: "linkwarden",
|
||||
},
|
||||
];
|
||||
|
||||
const envs = [
|
||||
`POSTGRES_PASSWORD=${postgresPassword}`,
|
||||
`NEXTAUTH_SECRET=${nextSecret}`,
|
||||
`NEXTAUTH_URL=http://${mainDomain}/api/v1/auth`,
|
||||
];
|
||||
|
||||
return {
|
||||
domains,
|
||||
envs,
|
||||
};
|
||||
}
|
||||
25
apps/dokploy/templates/mailpit/docker-compose.yml
Normal file
25
apps/dokploy/templates/mailpit/docker-compose.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
services:
|
||||
mailpit:
|
||||
image: axllent/mailpit:v1.22.3
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '1025:1025'
|
||||
volumes:
|
||||
- 'mailpit-data:/data'
|
||||
environment:
|
||||
- MP_SMTP_AUTH_ALLOW_INSECURE=true
|
||||
- MP_MAX_MESSAGES=5000
|
||||
- MP_DATABASE=/data/mailpit.db
|
||||
- MP_UI_AUTH=${MP_UI_AUTH}
|
||||
- MP_SMTP_AUTH=${MP_SMTP_AUTH}
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- /mailpit
|
||||
- readyz
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
|
||||
volumes:
|
||||
mailpit-data:
|
||||
31
apps/dokploy/templates/mailpit/index.ts
Normal file
31
apps/dokploy/templates/mailpit/index.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import {
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateBase64,
|
||||
generatePassword,
|
||||
generateRandomDomain,
|
||||
} from "../utils";
|
||||
|
||||
export function generate(schema: Schema): Template {
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: generateRandomDomain(schema),
|
||||
port: 8025,
|
||||
serviceName: "mailpit",
|
||||
},
|
||||
];
|
||||
|
||||
const defaultPassword = generatePassword();
|
||||
|
||||
const envs = [
|
||||
"# Uncomment below if you want basic auth on UI and SMTP",
|
||||
`#MP_UI_AUTH=mailpit:${defaultPassword}`,
|
||||
`#MP_SMTP_AUTH=mailpit:${defaultPassword}`,
|
||||
];
|
||||
|
||||
return {
|
||||
domains,
|
||||
envs,
|
||||
};
|
||||
}
|
||||
21
apps/dokploy/templates/pocket-id/docker-compose.yml
Normal file
21
apps/dokploy/templates/pocket-id/docker-compose.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
services:
|
||||
pocket-id:
|
||||
image: ghcr.io/pocket-id/pocket-id:v0.35.1
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUBLIC_UI_CONFIG_DISABLED
|
||||
- PUBLIC_APP_URL
|
||||
- TRUST_PROXY
|
||||
ports:
|
||||
- 80
|
||||
volumes:
|
||||
- pocket-id-data:/app/backend/data
|
||||
healthcheck:
|
||||
test: "curl -f http://localhost/health"
|
||||
interval: 1m30s
|
||||
timeout: 5s
|
||||
retries: 2
|
||||
start_period: 10s
|
||||
|
||||
volumes:
|
||||
pocket-id-data:
|
||||
29
apps/dokploy/templates/pocket-id/index.ts
Normal file
29
apps/dokploy/templates/pocket-id/index.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import {
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateRandomDomain,
|
||||
} from "../utils";
|
||||
|
||||
export function generate(schema: Schema): Template {
|
||||
const mainDomain = generateRandomDomain(schema);
|
||||
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: mainDomain,
|
||||
port: 80,
|
||||
serviceName: "pocket-id",
|
||||
},
|
||||
];
|
||||
|
||||
const envs = [
|
||||
"PUBLIC_UI_CONFIG_DISABLED=false",
|
||||
`PUBLIC_APP_URL=http://${mainDomain}`,
|
||||
"TRUST_PROXY=true",
|
||||
];
|
||||
|
||||
return {
|
||||
domains,
|
||||
envs,
|
||||
};
|
||||
}
|
||||
@@ -25,8 +25,8 @@ export const templates: TemplateData[] = [
|
||||
"Outline is a self-hosted knowledge base and documentation platform that allows you to build and manage your own knowledge base applications.",
|
||||
links: {
|
||||
github: "https://github.com/outline/outline",
|
||||
website: "https://outline.com/",
|
||||
docs: "https://docs.outline.com/",
|
||||
website: "https://getoutline.com/",
|
||||
docs: "https://docs.getoutline.com/s/guide",
|
||||
},
|
||||
logo: "outline.png",
|
||||
load: () => import("./outline/index").then((m) => m.generate),
|
||||
@@ -393,6 +393,21 @@ export const templates: TemplateData[] = [
|
||||
tags: ["chat"],
|
||||
load: () => import("./open-webui/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "mailpit",
|
||||
name: "Mailpit",
|
||||
version: "v1.22.3",
|
||||
description:
|
||||
"Mailpit is a tiny, self-contained, and secure email & SMTP testing tool with API for developers.",
|
||||
logo: "mailpit.svg",
|
||||
links: {
|
||||
github: "https://github.com/axllent/mailpit",
|
||||
website: "https://mailpit.axllent.org/",
|
||||
docs: "https://mailpit.axllent.org/docs/",
|
||||
},
|
||||
tags: ["email", "smtp"],
|
||||
load: () => import("./mailpit/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "listmonk",
|
||||
name: "Listmonk",
|
||||
@@ -426,7 +441,7 @@ export const templates: TemplateData[] = [
|
||||
{
|
||||
id: "umami",
|
||||
name: "Umami",
|
||||
version: "v2.14.0",
|
||||
version: "v2.16.1",
|
||||
description:
|
||||
"Umami is a simple, fast, privacy-focused alternative to Google Analytics.",
|
||||
logo: "umami.png",
|
||||
@@ -662,6 +677,21 @@ export const templates: TemplateData[] = [
|
||||
tags: ["open-source"],
|
||||
load: () => import("./vaultwarden/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "linkwarden",
|
||||
name: "Linkwarden",
|
||||
version: "2.9.3",
|
||||
description:
|
||||
"Self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.",
|
||||
logo: "linkwarden.png",
|
||||
links: {
|
||||
github: "https://github.com/linkwarden/linkwarden",
|
||||
website: "https://linkwarden.app/",
|
||||
docs: "https://docs.linkwarden.app/",
|
||||
},
|
||||
tags: ["bookmarks", "link-sharing"],
|
||||
load: () => import("./linkwarden/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "hi-events",
|
||||
name: "Hi.events",
|
||||
@@ -1093,6 +1123,21 @@ export const templates: TemplateData[] = [
|
||||
tags: ["identity", "auth"],
|
||||
load: () => import("./logto/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "pocket-id",
|
||||
name: "Pocket ID",
|
||||
version: "0.35.1",
|
||||
description:
|
||||
"A simple and easy-to-use OIDC provider that allows users to authenticate with their passkeys to your services.",
|
||||
logo: "pocket-id.svg",
|
||||
links: {
|
||||
github: "https://github.com/pocket-id/pocket-id",
|
||||
website: "https://pocket-id.org/",
|
||||
docs: "https://pocket-id.org/docs",
|
||||
},
|
||||
tags: ["identity", "auth"],
|
||||
load: () => import("./pocket-id/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "penpot",
|
||||
name: "Penpot",
|
||||
@@ -1559,4 +1604,18 @@ export const templates: TemplateData[] = [
|
||||
tags: ["backend", "database", "api"],
|
||||
load: () => import("./convex/index").then((m) => m.generate),
|
||||
},
|
||||
{
|
||||
id: "wikijs",
|
||||
name: "Wiki.js",
|
||||
version: "2.5",
|
||||
description: "The most powerful and extensible open source Wiki software.",
|
||||
logo: "wikijs.svg",
|
||||
links: {
|
||||
github: "https://github.com/requarks/wiki",
|
||||
website: "https://js.wiki/",
|
||||
docs: "https://docs.requarks.io/",
|
||||
},
|
||||
tags: ["knowledge-base", "self-hosted", "documentation"],
|
||||
load: () => import("./wikijs/index").then((m) => m.generate),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
umami:
|
||||
image: ghcr.io/umami-software/umami:postgresql-v2.14.0
|
||||
image: ghcr.io/umami-software/umami:postgresql-v2.16.1
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
|
||||
|
||||
31
apps/dokploy/templates/wikijs/docker-compose.yml
Normal file
31
apps/dokploy/templates/wikijs/docker-compose.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
version: '3.5'
|
||||
services:
|
||||
wiki:
|
||||
image: ghcr.io/requarks/wiki:2.5
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- DB_TYPE
|
||||
- DB_HOST
|
||||
- DB_PORT
|
||||
- DB_USER
|
||||
- DB_PASS
|
||||
- DB_NAME
|
||||
depends_on:
|
||||
- db
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.constraint-label-stack=wikijs
|
||||
db:
|
||||
image: postgres:14
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER
|
||||
- POSTGRES_PASSWORD
|
||||
- POSTGRES_DB
|
||||
volumes:
|
||||
- wiki-db-data:/var/lib/postgresql/data
|
||||
networks:
|
||||
dokploy-network:
|
||||
external: true
|
||||
volumes:
|
||||
wiki-db-data:
|
||||
35
apps/dokploy/templates/wikijs/index.ts
Normal file
35
apps/dokploy/templates/wikijs/index.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import {
|
||||
type DomainSchema,
|
||||
type Schema,
|
||||
type Template,
|
||||
generateRandomDomain,
|
||||
} from "../utils";
|
||||
|
||||
export function generate(schema: Schema): Template {
|
||||
const domains: DomainSchema[] = [
|
||||
{
|
||||
host: generateRandomDomain(schema),
|
||||
port: 3000,
|
||||
serviceName: "wiki",
|
||||
},
|
||||
];
|
||||
|
||||
const envs = [
|
||||
"# Database Setup",
|
||||
"POSTGRES_USER=wikijs",
|
||||
"POSTGRES_PASSWORD=wikijsrocks",
|
||||
"POSTGRES_DB=wiki",
|
||||
"# WikiJS Database Connection",
|
||||
"DB_TYPE=postgres",
|
||||
"DB_HOST=db",
|
||||
"DB_PORT=5432",
|
||||
"DB_USER=wikijs",
|
||||
"DB_PASS=wikijsrocks",
|
||||
"DB_NAME=wiki",
|
||||
];
|
||||
|
||||
return {
|
||||
domains,
|
||||
envs,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user