diff --git a/apps/dokploy/lib/languages.ts b/apps/dokploy/lib/languages.ts index de08a9fb64..a19c958936 100644 --- a/apps/dokploy/lib/languages.ts +++ b/apps/dokploy/lib/languages.ts @@ -18,6 +18,7 @@ export const Languages = { norwegian: { code: "no", name: "Norsk" }, azerbaijani: { code: "az", name: "Azərbaycan" }, indonesian: { code: "id", name: "Bahasa Indonesia" }, + malayalam: { code: "ml", name: "മലയാളം" }, }; export type Language = keyof typeof Languages; diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index f1123794aa..a467d5f692 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -1,6 +1,6 @@ { "name": "dokploy", - "version": "v0.17.6", + "version": "v0.17.7", "private": true, "license": "Apache-2.0", "type": "module", diff --git a/apps/dokploy/public/locales/ml/common.json b/apps/dokploy/public/locales/ml/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/apps/dokploy/public/locales/ml/common.json @@ -0,0 +1 @@ +{} diff --git a/apps/dokploy/public/locales/ml/settings.json b/apps/dokploy/public/locales/ml/settings.json new file mode 100644 index 0000000000..cb62b6ec34 --- /dev/null +++ b/apps/dokploy/public/locales/ml/settings.json @@ -0,0 +1,58 @@ +{ + "settings.common.save": "സേവ് ചെയ്യുക", + "settings.common.enterTerminal": "ടർമിനലിൽ പ്രവേശിക്കുക", + "settings.server.domain.title": "സർവർ ഡോമെയ്ൻ", + "settings.server.domain.description": "നിങ്ങളുടെ സർവർ അപ്ലിക്കേഷനിൽ ഒരു ഡോമെയ്ൻ ചേർക്കുക.", + "settings.server.domain.form.domain": "ഡോമെയ്ൻ", + "settings.server.domain.form.letsEncryptEmail": "ലെറ്റ്സ് എൻക്രിപ്റ്റ് ഇമെയിൽ", + "settings.server.domain.form.certificate.label": "സർട്ടിഫിക്കറ്റ് പ്രൊവൈഡർ", + "settings.server.domain.form.certificate.placeholder": "ഒരു സർട്ടിഫിക്കറ്റ് തിരഞ്ഞെടുക്കുക", + "settings.server.domain.form.certificateOptions.none": "ഒന്നുമില്ല", + "settings.server.domain.form.certificateOptions.letsencrypt": "ലെറ്റ്സ് എൻക്രിപ്റ്റ്", + + "settings.server.webServer.title": "വെബ് സർവർ", + "settings.server.webServer.description": "വെബ് സർവർ റീലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ശുചീകരിക്കുക.", + "settings.server.webServer.actions": "നടപടികൾ", + "settings.server.webServer.reload": "റീലോഡ് ചെയ്യുക", + "settings.server.webServer.watchLogs": "ലോഗുകൾ കാണുക", + "settings.server.webServer.updateServerIp": "സർവർ IP അപ്ഡേറ്റ് ചെയ്യുക", + "settings.server.webServer.server.label": "സർവർ", + "settings.server.webServer.traefik.label": "ട്രാഫിക്", + "settings.server.webServer.traefik.modifyEnv": "ചുറ്റുപാടുകൾ മാറ്റുക", + "settings.server.webServer.traefik.managePorts": "അധിക പോർട്ട് മാപ്പിംഗ്", + "settings.server.webServer.traefik.managePortsDescription": "ട്രാഫിക്കിനായി അധിക പോർട്ടുകൾ ചേർക്കുക അല്ലെങ്കിൽ നീക്കം ചെയ്യുക", + "settings.server.webServer.traefik.targetPort": "ടാർഗറ്റ് പോർട്ട്", + "settings.server.webServer.traefik.publishedPort": "പ്രസിദ്ധീകരിച്ച പോർട്ട്", + "settings.server.webServer.traefik.addPort": "പോർട്ട് ചേർക്കുക", + "settings.server.webServer.traefik.portsUpdated": "പോർട്ടുകൾ വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു", + "settings.server.webServer.traefik.portsUpdateError": "പോർട്ടുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ പരാജയപ്പെട്ടു", + "settings.server.webServer.traefik.publishMode": "പ്രസിദ്ധീകരണ മോഡ്", + "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": "ഡോക്കർ ബിൽഡറും സിസ്റ്റവും ശുചീകരിക്കുക", + "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": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു ഭാഷ തിരഞ്ഞെടുക്കുക", + + "settings.terminal.connectionSettings": "കണക്ഷൻ ക്രമീകരണങ്ങൾ", + "settings.terminal.ipAddress": "IP വിലാസം", + "settings.terminal.port": "പോർട്ട്", + "settings.terminal.username": "ഉപയോക്തൃനാമം" +} diff --git a/apps/dokploy/public/templates/glance.png b/apps/dokploy/public/templates/glance.png new file mode 100644 index 0000000000..54fc413113 Binary files /dev/null and b/apps/dokploy/public/templates/glance.png differ diff --git a/apps/dokploy/public/templates/homarr.png b/apps/dokploy/public/templates/homarr.png new file mode 100644 index 0000000000..25581ea5cb Binary files /dev/null and b/apps/dokploy/public/templates/homarr.png differ diff --git a/apps/dokploy/public/templates/twenty.svg b/apps/dokploy/public/templates/twenty.svg index cf5223b961..bad18fab32 100644 --- a/apps/dokploy/public/templates/twenty.svg +++ b/apps/dokploy/public/templates/twenty.svg @@ -1,6 +1,12 @@ - - - - - + + + + + + + + + + + diff --git a/apps/dokploy/templates/glance/docker-compose.yml b/apps/dokploy/templates/glance/docker-compose.yml new file mode 100644 index 0000000000..e931d6e401 --- /dev/null +++ b/apps/dokploy/templates/glance/docker-compose.yml @@ -0,0 +1,8 @@ +services: + glance: + image: glanceapp/glance + volumes: + - ../files/app/glance.yml:/app/glance.yml + ports: + - 8080 + restart: unless-stopped diff --git a/apps/dokploy/templates/glance/index.ts b/apps/dokploy/templates/glance/index.ts new file mode 100644 index 0000000000..4b22978643 --- /dev/null +++ b/apps/dokploy/templates/glance/index.ts @@ -0,0 +1,108 @@ +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: 8080, + serviceName: "glance", + }, + ]; + + const mounts: Template["mounts"] = [ + { + filePath: "/app/glance.yml", + content: ` +branding: + hide-footer: true + logo-text: P + +pages: + - name: Home + columns: + - size: small + widgets: + - type: calendar + + - type: releases + show-source-icon: true + repositories: + - Dokploy/dokploy + - n8n-io/n8n + - Budibase/budibase + - home-assistant/core + - tidbyt/pixlet + + - type: twitch-channels + channels: + - nmplol + - extraemily + - qtcinderella + - ludwig + - timthetatman + - mizkif + + - size: full + widgets: + - type: hacker-news + + - type: videos + style: grid-cards + channels: + - UC3GzdWYwUYI1ACxuP9Nm-eg + - UCGbg3DjQdcqWwqOLHpYHXIg + - UC24RSoLcjiNZbQcT54j5l7Q + limit: 3 + + - type: rss + limit: 10 + collapse-after: 3 + cache: 3h + feeds: + - url: https://daringfireball.net/feeds/main + title: Daring Fireball + + - size: small + widgets: + - type: weather + location: Gansevoort, New York, United States + show-area-name: false + units: imperial + hour-format: 12h + + - type: markets + markets: + - symbol: SPY + name: S&P 500 + - symbol: VOO + name: Vanguard + - symbol: BTC-USD + name: Bitcoin + - symbol: ETH-USD + name: Etherium + - symbol: NVDA + name: NVIDIA + - symbol: AAPL + name: Apple + - symbol: MSFT + name: Microsoft + - symbol: GOOGL + name: Google + - symbol: AMD + name: AMD + - symbol: TSLA + name: Tesla`, + }, + ]; + + return { + domains, + mounts, + }; +} diff --git a/apps/dokploy/templates/homarr/docker-compose.yml b/apps/dokploy/templates/homarr/docker-compose.yml new file mode 100644 index 0000000000..876ea3f6f7 --- /dev/null +++ b/apps/dokploy/templates/homarr/docker-compose.yml @@ -0,0 +1,11 @@ +services: + homarr: + image: ghcr.io/homarr-labs/homarr:latest + restart: unless-stopped + volumes: + # - /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration + - ../homarr/appdata:/appdata + environment: + - SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY} + ports: + - 7575 diff --git a/apps/dokploy/templates/homarr/index.ts b/apps/dokploy/templates/homarr/index.ts new file mode 100644 index 0000000000..eb5a9f8234 --- /dev/null +++ b/apps/dokploy/templates/homarr/index.ts @@ -0,0 +1,27 @@ +import { + type DomainSchema, + type Schema, + type Template, + generatePassword, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainDomain = generateRandomDomain(schema); + const secretKey = generatePassword(64); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 7575, + serviceName: "homarr", + }, + ]; + + const envs = [`SECRET_ENCRYPTION_KEY=${secretKey}`]; + + return { + domains, + envs, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index 4cd167a501..1bdb1ec1f5 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -1074,7 +1074,7 @@ export const templates: TemplateData[] = [ website: "https://penpot.app/", docs: "https://docs.penpot.app/", }, - tags: ["desing", "collaboration"], + tags: ["design", "collaboration"], load: () => import("./penpot/index").then((m) => m.generate), }, { @@ -1097,7 +1097,7 @@ export const templates: TemplateData[] = [ name: "Unsend", version: "v1.2.4", description: "Open source alternative to Resend,Sendgrid, Postmark etc. ", - logo: "unsend.png", // we defined the name and the extension of the logo + logo: "unsend.png", links: { github: "https://github.com/unsend-dev/unsend", website: "https://unsend.dev/", @@ -1276,11 +1276,11 @@ export const templates: TemplateData[] = [ version: "latest", description: "CouchDB is a document-oriented NoSQL database that excels at replication and horizontal scaling.", - logo: "couchdb.png", // we defined the name and the extension of the logo + logo: "couchdb.png", links: { - github: "lorem", - website: "lorem", - docs: "lorem", + github: "https://github.com/apache/couchdb", + website: "https://couchdb.apache.org/", + docs: "https://docs.couchdb.org/en/stable/", }, tags: ["database", "storage"], load: () => import("./couchdb/index").then((m) => m.generate), @@ -1312,4 +1312,33 @@ export const templates: TemplateData[] = [ tags: ["analytics", "bi", "dashboard", "database", "sql"], load: () => import("./superset/index").then((m) => m.generate), }, + { + id: "glance", + name: "Glance", + version: "latest", + description: + "A self-hosted dashboard that puts all your feeds in one place. Features RSS feeds, weather, bookmarks, site monitoring, and more in a minimal, fast interface.", + logo: "glance.png", + links: { + github: "https://github.com/glanceapp/glance", + docs: "https://github.com/glanceapp/glance/blob/main/docs/configuration.md", + }, + tags: ["dashboard", "monitoring", "widgets", "rss"], + load: () => import("./glance/index").then((m) => m.generate), + }, + { + id: "homarr", + name: "Homarr", + version: "latest", + description: + "A sleek, modern dashboard that puts all your apps and services in one place with Docker integration.", + logo: "homarr.png", + links: { + github: "https://github.com/homarr-labs/homarr", + docs: "https://homarr.dev/docs/getting-started/installation/docker", + website: "https://homarr.dev/", + }, + tags: ["dashboard", "monitoring"], + load: () => import("./homarr/index").then((m) => m.generate), + }, ]; diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index e297124dad..4c194e0fd1 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -577,6 +577,8 @@ export const deployRemotePreviewApplication = async ({ if (application.sourceType === "github") { command += await getGithubCloneCommand({ ...application, + appName: previewDeployment.appName, + branch: previewDeployment.branch, serverId: application.serverId, logPath: deployment.logPath, });