mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
Merge branch 'canary' into canary
This commit is contained in:
commit
58e6462ff1
@ -37,7 +37,7 @@ const appearanceFormSchema = z.object({
|
|||||||
theme: z.enum(["light", "dark", "system"], {
|
theme: z.enum(["light", "dark", "system"], {
|
||||||
required_error: "Please select a theme.",
|
required_error: "Please select a theme.",
|
||||||
}),
|
}),
|
||||||
language: z.enum(["en", "pl", "ru", "de", "zh-Hans"], {
|
language: z.enum(["en", "pl", "ru", "de", "zh-Hant", "zh-Hans"], {
|
||||||
required_error: "Please select a language.",
|
required_error: "Please select a language.",
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -177,7 +177,8 @@ export function AppearanceForm() {
|
|||||||
{ label: "Polski", value: "pl" },
|
{ label: "Polski", value: "pl" },
|
||||||
{ label: "Русский", value: "ru" },
|
{ label: "Русский", value: "ru" },
|
||||||
{ label: "Deutsch", value: "de" },
|
{ label: "Deutsch", value: "de" },
|
||||||
{ label: "简体中文", value: "zh-Hans" },
|
{ label: "繁體中文", value: "zh-Hant" },
|
||||||
|
{ label: "简体中文", value: "zh-Hans" }
|
||||||
].map((preset) => (
|
].map((preset) => (
|
||||||
<SelectItem key={preset.label} value={preset.value}>
|
<SelectItem key={preset.label} value={preset.value}>
|
||||||
{preset.label}
|
{preset.label}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: "en",
|
defaultLocale: "en",
|
||||||
locales: ["en", "pl", "ru", "de", "zh-Hans"],
|
locales: ["en", "pl", "ru", "de", "zh-Hant", "zh-Hans"],
|
||||||
localeDetection: false,
|
localeDetection: false,
|
||||||
},
|
},
|
||||||
fallbackLng: "en",
|
fallbackLng: "en",
|
||||||
|
@ -71,7 +71,7 @@ export default api.withTRPC(
|
|||||||
{
|
{
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: "en",
|
defaultLocale: "en",
|
||||||
locales: ["en", "pl", "ru", "de", "zh-Hans"],
|
locales: ["en", "pl", "ru", "de", "zh-Hant", "zh-Hans"],
|
||||||
localeDetection: false,
|
localeDetection: false,
|
||||||
},
|
},
|
||||||
fallbackLng: "en",
|
fallbackLng: "en",
|
||||||
|
0
apps/dokploy/public/locales/zh-Hant/common.json
Normal file
0
apps/dokploy/public/locales/zh-Hant/common.json
Normal file
40
apps/dokploy/public/locales/zh-Hant/settings.json
Normal file
40
apps/dokploy/public/locales/zh-Hant/settings.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"settings.common.save": "儲存",
|
||||||
|
"settings.server.domain.title": "伺服器網域",
|
||||||
|
"settings.server.domain.description": "將一個網域加入到您的伺服器。",
|
||||||
|
"settings.server.domain.form.domain": "網域",
|
||||||
|
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 郵箱",
|
||||||
|
"settings.server.domain.form.certificate.label": "憑證",
|
||||||
|
"settings.server.domain.form.certificate.placeholder": "選擇一個憑證",
|
||||||
|
"settings.server.domain.form.certificateOptions.none": "無",
|
||||||
|
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (預設)",
|
||||||
|
"settings.server.webServer.title": "Web 伺服器",
|
||||||
|
"settings.server.webServer.description": "管理 Web 伺服器。",
|
||||||
|
"settings.server.webServer.actions": "操作",
|
||||||
|
"settings.server.webServer.reload": "重新載入",
|
||||||
|
"settings.server.webServer.watchLogs": "查看日誌",
|
||||||
|
"settings.server.webServer.server.label": "伺服器",
|
||||||
|
"settings.server.webServer.traefik.label": "Traefik",
|
||||||
|
"settings.server.webServer.traefik.modifyEnv": "修改環境變數",
|
||||||
|
"settings.server.webServer.storage.label": "磁碟空間",
|
||||||
|
"settings.server.webServer.storage.cleanUnusedImages": "清理未使用的映像檔",
|
||||||
|
"settings.server.webServer.storage.cleanUnusedVolumes": "清理未使用的磁碟區",
|
||||||
|
"settings.server.webServer.storage.cleanStoppedContainers": "清理已停止的容器",
|
||||||
|
"settings.server.webServer.storage.cleanDockerBuilder": "清理 Docker Builder 和系統快取",
|
||||||
|
"settings.server.webServer.storage.cleanMonitoring": "清理監控",
|
||||||
|
"settings.server.webServer.storage.cleanAll": "清理所有",
|
||||||
|
"settings.profile.title": "帳戶偏好",
|
||||||
|
"settings.profile.description": "更改您的個人資料詳情。",
|
||||||
|
"settings.profile.email": "電子郵件",
|
||||||
|
"settings.profile.password": "密碼",
|
||||||
|
"settings.profile.avatar": "頭像",
|
||||||
|
"settings.appearance.title": "外觀",
|
||||||
|
"settings.appearance.description": "自訂儀表板主題。",
|
||||||
|
"settings.appearance.theme": "主題",
|
||||||
|
"settings.appearance.themeDescription": "選擇儀表板主題",
|
||||||
|
"settings.appearance.themes.light": "亮",
|
||||||
|
"settings.appearance.themes.dark": "暗",
|
||||||
|
"settings.appearance.themes.system": "系統",
|
||||||
|
"settings.appearance.language": "語言",
|
||||||
|
"settings.appearance.languageDescription": "選擇儀表板語言"
|
||||||
|
}
|
BIN
apps/dokploy/public/templates/ontime.png
Normal file
BIN
apps/dokploy/public/templates/ontime.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
@ -79,6 +79,8 @@ export const composeRouter = createTRPCRouter({
|
|||||||
if (ctx.user.rol === "user") {
|
if (ctx.user.rol === "user") {
|
||||||
await addNewService(ctx.user.authId, newService.composeId);
|
await addNewService(ctx.user.authId, newService.composeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return newService;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
tickets-postgres:
|
||||||
image: mysql:8
|
image: mysql:8
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
hostname: mysql
|
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- tickets-mysql:/var/lib/mysql
|
- tickets-mysql-data:/var/lib/mysql
|
||||||
environment:
|
environment:
|
||||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||||
@ -20,23 +19,22 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
bot:
|
tickets-app:
|
||||||
image: eartharoid/discord-tickets:4.0.21
|
image: eartharoid/discord-tickets:4.0.21
|
||||||
depends_on:
|
depends_on:
|
||||||
mysql:
|
tickets-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
hostname: bot
|
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- tickets-bot:/home/container/user
|
- tickets-app-data:/home/container/user
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
tty: true
|
tty: true
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
environment:
|
environment:
|
||||||
DB_CONNECTION_URL: mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql/${MYSQL_DATABASE}
|
DB_CONNECTION_URL: mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@tickets-postgres/${MYSQL_DATABASE}
|
||||||
DISCORD_SECRET: ${DISCORD_SECRET}
|
DISCORD_SECRET: ${DISCORD_SECRET}
|
||||||
DISCORD_TOKEN: ${DISCORD_TOKEN}
|
DISCORD_TOKEN: ${DISCORD_TOKEN}
|
||||||
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
|
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
|
||||||
@ -49,6 +47,10 @@ services:
|
|||||||
PUBLISH_COMMANDS: "true"
|
PUBLISH_COMMANDS: "true"
|
||||||
SUPER: ${SUPER_USERS}
|
SUPER: ${SUPER_USERS}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
tickets-mysql:
|
tickets-mysql-data:
|
||||||
tickets-bot:
|
tickets-app-data:
|
@ -13,7 +13,6 @@ export function generate(schema: Schema): Template {
|
|||||||
const mysqlUser = "tickets";
|
const mysqlUser = "tickets";
|
||||||
const mysqlDatabase = "tickets";
|
const mysqlDatabase = "tickets";
|
||||||
|
|
||||||
// Generate encryption key in the format they use
|
|
||||||
const encryptionKey = Array.from({ length: 48 }, () =>
|
const encryptionKey = Array.from({ length: 48 }, () =>
|
||||||
Math.floor(Math.random() * 16).toString(16),
|
Math.floor(Math.random() * 16).toString(16),
|
||||||
).join("");
|
).join("");
|
||||||
@ -22,7 +21,7 @@ export function generate(schema: Schema): Template {
|
|||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 8169,
|
port: 8169,
|
||||||
serviceName: "bot",
|
serviceName: "tickets-app",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -33,7 +32,6 @@ export function generate(schema: Schema): Template {
|
|||||||
`MYSQL_ROOT_PASSWORD=${mysqlRootPassword}`,
|
`MYSQL_ROOT_PASSWORD=${mysqlRootPassword}`,
|
||||||
`MYSQL_USER=${mysqlUser}`,
|
`MYSQL_USER=${mysqlUser}`,
|
||||||
`ENCRYPTION_KEY=${encryptionKey}`,
|
`ENCRYPTION_KEY=${encryptionKey}`,
|
||||||
// These need to be set by the user through the UI
|
|
||||||
"# Follow the guide at: https://discordtickets.app/self-hosting/installation/docker/#creating-the-discord-application",
|
"# Follow the guide at: https://discordtickets.app/self-hosting/installation/docker/#creating-the-discord-application",
|
||||||
"DISCORD_SECRET=",
|
"DISCORD_SECRET=",
|
||||||
"DISCORD_TOKEN=",
|
"DISCORD_TOKEN=",
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
invoiceshelf_db:
|
invoiceshelf-postgres:
|
||||||
image: postgres:15
|
image: postgres:15
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- invoiceshelf-postgres-data:/var/lib/postgresql/data
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||||
- POSTGRES_USER=${DB_USERNAME}
|
- POSTGRES_USER=${DB_USERNAME}
|
||||||
@ -17,13 +17,13 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
invoiceshelf:
|
invoiceshelf-app:
|
||||||
image: invoiceshelf/invoiceshelf:latest
|
image: invoiceshelf/invoiceshelf:latest
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- app_data:/data
|
- invoiceshelf-app-data:/data
|
||||||
- app_conf:/conf
|
- invoiceshelf-app-conf:/conf
|
||||||
environment:
|
environment:
|
||||||
- PHP_TZ=UTC
|
- PHP_TZ=UTC
|
||||||
- TIMEZONE=UTC
|
- TIMEZONE=UTC
|
||||||
@ -32,7 +32,7 @@ services:
|
|||||||
- APP_DEBUG=false
|
- APP_DEBUG=false
|
||||||
- APP_URL=http://${INVOICESHELF_HOST}
|
- APP_URL=http://${INVOICESHELF_HOST}
|
||||||
- DB_CONNECTION=pgsql
|
- DB_CONNECTION=pgsql
|
||||||
- DB_HOST=invoiceshelf_db
|
- DB_HOST=invoiceshelf-postgres
|
||||||
- DB_PORT=5432
|
- DB_PORT=5432
|
||||||
- DB_DATABASE=${DB_DATABASE}
|
- DB_DATABASE=${DB_DATABASE}
|
||||||
- DB_USERNAME=${DB_USERNAME}
|
- DB_USERNAME=${DB_USERNAME}
|
||||||
@ -46,10 +46,14 @@ services:
|
|||||||
- SANCTUM_STATEFUL_DOMAINS=${INVOICESHELF_HOST}
|
- SANCTUM_STATEFUL_DOMAINS=${INVOICESHELF_HOST}
|
||||||
- STARTUP_DELAY=10
|
- STARTUP_DELAY=10
|
||||||
depends_on:
|
depends_on:
|
||||||
invoiceshelf_db:
|
invoiceshelf-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres_data:
|
invoiceshelf-postgres-data:
|
||||||
app_data:
|
invoiceshelf-app-data:
|
||||||
app_conf:
|
invoiceshelf-app-conf:
|
@ -16,7 +16,7 @@ export function generate(schema: Schema): Template {
|
|||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 80,
|
port: 80,
|
||||||
serviceName: "invoiceshelf",
|
serviceName: "invoiceshelf-app",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
14
apps/dokploy/templates/ontime/docker-compose.yml
Normal file
14
apps/dokploy/templates/ontime/docker-compose.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
services:
|
||||||
|
ontime:
|
||||||
|
image: getontime/ontime:v3.8.0
|
||||||
|
ports:
|
||||||
|
- 4001
|
||||||
|
- 8888
|
||||||
|
- 9999
|
||||||
|
volumes:
|
||||||
|
- ontime-data:/data/
|
||||||
|
environment:
|
||||||
|
- TZ
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
ontime-data:
|
25
apps/dokploy/templates/ontime/index.ts
Normal file
25
apps/dokploy/templates/ontime/index.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
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: 4001,
|
||||||
|
serviceName: "ontime",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const envs = ["TZ=UTC"];
|
||||||
|
|
||||||
|
return {
|
||||||
|
domains,
|
||||||
|
envs,
|
||||||
|
};
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
peppermint_postgres:
|
peppermint-postgres:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- pgdata:/var/lib/postgresql/data
|
- peppermint-postgres-data:/var/lib/postgresql/data
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: peppermint
|
POSTGRES_USER: peppermint
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
@ -18,19 +18,23 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
peppermint:
|
peppermint-app:
|
||||||
image: pepperlabs/peppermint:latest
|
image: pepperlabs/peppermint:latest
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
depends_on:
|
depends_on:
|
||||||
peppermint_postgres:
|
peppermint-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
environment:
|
environment:
|
||||||
DB_USERNAME: "peppermint"
|
DB_USERNAME: "peppermint"
|
||||||
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
DB_HOST: "peppermint_postgres"
|
DB_HOST: "peppermint-postgres"
|
||||||
SECRET: ${SECRET}
|
SECRET: ${SECRET}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pgdata:
|
peppermint-postgres-data:
|
@ -8,27 +8,24 @@ import {
|
|||||||
} from "../utils";
|
} from "../utils";
|
||||||
|
|
||||||
export function generate(schema: Schema): Template {
|
export function generate(schema: Schema): Template {
|
||||||
// Generate domains and secrets
|
|
||||||
const mainDomain = generateRandomDomain(schema);
|
const mainDomain = generateRandomDomain(schema);
|
||||||
const apiDomain = generateRandomDomain(schema);
|
const apiDomain = generateRandomDomain(schema);
|
||||||
const postgresPassword = generatePassword();
|
const postgresPassword = generatePassword();
|
||||||
const secret = generateBase64(32);
|
const secret = generateBase64(32);
|
||||||
|
|
||||||
// Configure domain routing
|
|
||||||
const domains: DomainSchema[] = [
|
const domains: DomainSchema[] = [
|
||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 3000,
|
port: 3000,
|
||||||
serviceName: "peppermint",
|
serviceName: "peppermint-app",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
host: apiDomain,
|
host: apiDomain,
|
||||||
port: 5003,
|
port: 5003,
|
||||||
serviceName: "peppermint",
|
serviceName: "peppermint-app",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set environment variables
|
|
||||||
const envs = [
|
const envs = [
|
||||||
`MAIN_DOMAIN=${mainDomain}`,
|
`MAIN_DOMAIN=${mainDomain}`,
|
||||||
`API_DOMAIN=${apiDomain}`,
|
`API_DOMAIN=${apiDomain}`,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
postiz:
|
postiz-app:
|
||||||
image: ghcr.io/gitroomhq/postiz-app:latest
|
image: ghcr.io/gitroomhq/postiz-app:latest
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@ -37,7 +37,7 @@ services:
|
|||||||
POSTGRES_USER: ${DB_USER}
|
POSTGRES_USER: ${DB_USER}
|
||||||
POSTGRES_DB: ${DB_NAME}
|
POSTGRES_DB: ${DB_NAME}
|
||||||
volumes:
|
volumes:
|
||||||
- postgres-volume:/var/lib/postgresql/data
|
- postiz-postgres-data:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: pg_isready -U ${DB_USER} -d ${DB_NAME}
|
test: pg_isready -U ${DB_USER} -d ${DB_NAME}
|
||||||
interval: 10s
|
interval: 10s
|
||||||
@ -57,8 +57,12 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- postiz-redis-data:/data
|
- postiz-redis-data:/data
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres-volume:
|
postiz-postgres-data:
|
||||||
postiz-redis-data:
|
postiz-redis-data:
|
||||||
postiz-config:
|
postiz-config:
|
||||||
postiz-uploads:
|
postiz-uploads:
|
@ -18,7 +18,7 @@ export function generate(schema: Schema): Template {
|
|||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 5000,
|
port: 5000,
|
||||||
serviceName: "postiz",
|
serviceName: "postiz-app",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
slash:
|
slash-app:
|
||||||
image: yourselfhosted/slash:latest
|
image: yourselfhosted/slash:latest
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- slash_data:/var/opt/slash
|
- slash-app-data:/var/opt/slash
|
||||||
environment:
|
environment:
|
||||||
- SLASH_DRIVER=postgres
|
- SLASH_DRIVER=postgres
|
||||||
- SLASH_DSN=postgresql://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}?sslmode=disable
|
- SLASH_DSN=postgresql://${DB_USER}:${DB_PASSWORD}@slash-postgres:5432/${DB_NAME}?sslmode=disable
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
slash-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
db:
|
slash-postgres:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- slash-postgres-data:/var/lib/postgresql/data
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_USER=${DB_USER}
|
- POSTGRES_USER=${DB_USER}
|
||||||
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||||
@ -32,6 +32,10 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
slash_data:
|
slash-app-data:
|
||||||
postgres_data:
|
slash-postgres-data:
|
@ -16,7 +16,7 @@ export function generate(schema: Schema): Template {
|
|||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 5231,
|
port: 5231,
|
||||||
serviceName: "slash",
|
serviceName: "slash-app",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -956,5 +956,20 @@ export const templates: TemplateData[] = [
|
|||||||
},
|
},
|
||||||
tags: ["media", "photos", "self-hosted"],
|
tags: ["media", "photos", "self-hosted"],
|
||||||
load: () => import("./photoprism/index").then((m) => m.generate),
|
load: () => import("./photoprism/index").then((m) => m.generate),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "ontime",
|
||||||
|
name: "Ontime",
|
||||||
|
version: "v3.8.0",
|
||||||
|
description:
|
||||||
|
"Ontime is browser-based application that manages event rundowns, scheduliing and cuing",
|
||||||
|
logo: "ontime.png",
|
||||||
|
links: {
|
||||||
|
github: "https://github.com/cpvalente/ontime/",
|
||||||
|
website: "https://getontime.no",
|
||||||
|
docs: "https://docs.getontime.no",
|
||||||
|
},
|
||||||
|
tags: ["event"],
|
||||||
|
load: () => import("./ontime/index").then((m) => m.generate),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
db:
|
windmill-postgres:
|
||||||
image: postgres:16
|
image: postgres:16
|
||||||
shm_size: 1g
|
shm_size: 1g
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- db_data:/var/lib/postgresql/data
|
- windmill-postgres-data:/var/lib/postgresql/data
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
environment:
|
environment:
|
||||||
@ -18,7 +18,7 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
windmill_server:
|
windmill-server:
|
||||||
image: ghcr.io/windmill-labs/windmill:main
|
image: ghcr.io/windmill-labs/windmill:main
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
@ -28,12 +28,12 @@ services:
|
|||||||
- MODE=server
|
- MODE=server
|
||||||
- BASE_URL=http://${WINDMILL_HOST}
|
- BASE_URL=http://${WINDMILL_HOST}
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
windmill-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- worker_logs:/tmp/windmill/logs
|
- windmill-worker-logs:/tmp/windmill/logs
|
||||||
|
|
||||||
windmill_worker:
|
windmill-worker:
|
||||||
image: ghcr.io/windmill-labs/windmill:main
|
image: ghcr.io/windmill-labs/windmill:main
|
||||||
deploy:
|
deploy:
|
||||||
replicas: 3
|
replicas: 3
|
||||||
@ -49,14 +49,14 @@ services:
|
|||||||
- MODE=worker
|
- MODE=worker
|
||||||
- WORKER_GROUP=default
|
- WORKER_GROUP=default
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
windmill-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- worker_dependency_cache:/tmp/windmill/cache
|
- windmill-worker-cache:/tmp/windmill/cache
|
||||||
- worker_logs:/tmp/windmill/logs
|
- windmill-worker-logs:/tmp/windmill/logs
|
||||||
|
|
||||||
windmill_worker_native:
|
windmill-worker-native:
|
||||||
image: ghcr.io/windmill-labs/windmill:main
|
image: ghcr.io/windmill-labs/windmill:main
|
||||||
deploy:
|
deploy:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
@ -74,20 +74,20 @@ services:
|
|||||||
- NUM_WORKERS=8
|
- NUM_WORKERS=8
|
||||||
- SLEEP_QUEUE=200
|
- SLEEP_QUEUE=200
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
windmill-postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- worker_logs:/tmp/windmill/logs
|
- windmill-worker-logs:/tmp/windmill/logs
|
||||||
|
|
||||||
lsp:
|
windmill-lsp:
|
||||||
image: ghcr.io/windmill-labs/windmill-lsp:latest
|
image: ghcr.io/windmill-labs/windmill-lsp:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- dokploy-network
|
- dokploy-network
|
||||||
volumes:
|
volumes:
|
||||||
- lsp_cache:/root/.cache
|
- windmill-lsp-cache:/root/.cache
|
||||||
|
|
||||||
caddy:
|
windmill-caddy:
|
||||||
image: ghcr.io/windmill-labs/caddy-l4:latest
|
image: ghcr.io/windmill-labs/caddy-l4:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@ -97,11 +97,15 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- BASE_URL=":80"
|
- BASE_URL=":80"
|
||||||
depends_on:
|
depends_on:
|
||||||
- windmill_server
|
- windmill-server
|
||||||
- lsp
|
- windmill-lsp
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
db_data:
|
windmill-postgres-data:
|
||||||
worker_dependency_cache:
|
windmill-worker-cache:
|
||||||
worker_logs:
|
windmill-worker-logs:
|
||||||
lsp_cache:
|
windmill-lsp-cache:
|
@ -14,14 +14,14 @@ export function generate(schema: Schema): Template {
|
|||||||
{
|
{
|
||||||
host: mainDomain,
|
host: mainDomain,
|
||||||
port: 80,
|
port: 80,
|
||||||
serviceName: "caddy",
|
serviceName: "windmill-caddy",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const envs = [
|
const envs = [
|
||||||
`WINDMILL_HOST=${mainDomain}`,
|
`WINDMILL_HOST=${mainDomain}`,
|
||||||
`POSTGRES_PASSWORD=${postgresPassword}`,
|
`POSTGRES_PASSWORD=${postgresPassword}`,
|
||||||
`DATABASE_URL=postgres://postgres:${postgresPassword}@db/windmill?sslmode=disable`,
|
`DATABASE_URL=postgres://postgres:${postgresPassword}@windmill-postgres/windmill?sslmode=disable`,
|
||||||
];
|
];
|
||||||
|
|
||||||
const mounts: Template["mounts"] = [
|
const mounts: Template["mounts"] = [
|
||||||
@ -29,8 +29,8 @@ export function generate(schema: Schema): Template {
|
|||||||
filePath: "Caddyfile",
|
filePath: "Caddyfile",
|
||||||
content: `:80 {
|
content: `:80 {
|
||||||
bind 0.0.0.0
|
bind 0.0.0.0
|
||||||
reverse_proxy /ws/* http://lsp:3001
|
reverse_proxy /ws/* http://windmill-lsp:3001
|
||||||
reverse_proxy /* http://windmill_server:8000
|
reverse_proxy /* http://windmill-server:8000
|
||||||
}`,
|
}`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
|
|
||||||
const SUPPORTED_LOCALES = ["en", "pl", "ru", "de", "zh-Hans"] as const;
|
const SUPPORTED_LOCALES = ["en", "pl", "ru", "de", "zh-Hant", "zh-Hans"] as const;
|
||||||
|
|
||||||
type Locale = (typeof SUPPORTED_LOCALES)[number];
|
type Locale = (typeof SUPPORTED_LOCALES)[number];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user