diff --git a/apps/dokploy/public/templates/hoarder.svg b/apps/dokploy/public/templates/hoarder.svg new file mode 100644 index 00000000..dc8f9f4b --- /dev/null +++ b/apps/dokploy/public/templates/hoarder.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/dokploy/templates/hoarder/docker-compose.yml b/apps/dokploy/templates/hoarder/docker-compose.yml new file mode 100644 index 00000000..93e59469 --- /dev/null +++ b/apps/dokploy/templates/hoarder/docker-compose.yml @@ -0,0 +1,45 @@ +services: + web: + image: ghcr.io/hoarder-app/hoarder:0.22.0 + restart: unless-stopped + volumes: + - hoarder-data:/data + ports: + - 3000 + environment: + - DISABLE_SIGNUPS + - NEXTAUTH_URL + - NEXTAUTH_SECRET + - MEILI_ADDR=http://meilisearch:7700 + - BROWSER_WEB_URL=http://chrome:9222 + - DATA_DIR=/data + chrome: + image: gcr.io/zenika-hub/alpine-chrome:124 + restart: unless-stopped + command: + - --no-sandbox + - --disable-gpu + - --disable-dev-shm-usage + - --remote-debugging-address=0.0.0.0 + - --remote-debugging-port=9222 + - --hide-scrollbars + meilisearch: + image: getmeili/meilisearch:v1.6 + restart: unless-stopped + environment: + - MEILI_MASTER_KEY + - MEILI_NO_ANALYTICS="true" + volumes: + - meilisearch-data:/meili_data + healthcheck: + test: + - CMD + - curl + - '-f' + - 'http://127.0.0.1:7700/health' + interval: 2s + timeout: 10s + retries: 15 +volumes: + meilisearch-data: + hoarder-data: \ No newline at end of file diff --git a/apps/dokploy/templates/hoarder/index.ts b/apps/dokploy/templates/hoarder/index.ts new file mode 100644 index 00000000..d1c656e1 --- /dev/null +++ b/apps/dokploy/templates/hoarder/index.ts @@ -0,0 +1,34 @@ +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 meiliMasterKey = generateBase64(32); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 3000, + serviceName: "web", + }, + ]; + + const envs = [ + `NEXTAUTH_SECRET=${nextSecret}`, + `MEILI_MASTER_KEY=${meiliMasterKey}`, + `NEXTAUTH_URL=http://${mainDomain}`, + ]; + + return { + domains, + envs, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index d39465a8..8975dea1 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -707,6 +707,21 @@ export const templates: TemplateData[] = [ tags: ["self-hosted", "open-source", "manager"], load: () => import("./hi-events/index").then((m) => m.generate), }, + { + id: "hoarder", + name: "Hoarder", + version: "0.22.0", + description: + 'Hoarder is an open source "Bookmark Everything" app that uses AI for automatically tagging the content you throw at it.', + logo: "hoarder.svg", + links: { + github: "https://github.com/hoarder/hoarder", + website: "https://hoarder.app/", + docs: "https://docs.hoarder.app/", + }, + tags: ["self-hosted", "bookmarks", "link-sharing"], + load: () => import("./hoarder/index").then((m) => m.generate), + }, { id: "windows", name: "Windows (dockerized)",