From 0d85fd0e3cb68c2fd9b9a57d9fe5b5bbd8d360e0 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 30 Jun 2024 22:31:23 -0600 Subject: [PATCH] feat: add metabase template --- public/templates/metabase.png | Bin 0 -> 30174 bytes templates/metabase/docker-compose.yml | 38 ++++++++++++++++++++++++++ templates/metabase/index.ts | 20 ++++++++++++++ templates/templates.ts | 15 ++++++++++ 4 files changed, 73 insertions(+) create mode 100644 public/templates/metabase.png create mode 100644 templates/metabase/docker-compose.yml create mode 100644 templates/metabase/index.ts diff --git a/public/templates/metabase.png b/public/templates/metabase.png new file mode 100644 index 0000000000000000000000000000000000000000..189e5a33ac101608fb9f67814746611e0a7d6552 GIT binary patch literal 30174 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
Hvvh2taRP(KVXGE6#5&c1w2ObVE} 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 YbZX2;3N*5i`4c7~DkD-Ltn2gt0BJmO-T(jq literal 0 HcmV?d00001 diff --git a/templates/metabase/docker-compose.yml b/templates/metabase/docker-compose.yml new file mode 100644 index 00000000..3eee3344 --- /dev/null +++ b/templates/metabase/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3.8" +services: + metabase: + image: metabase/metabase:v0.50.8 + volumes: + - /dev/urandom:/dev/random:ro + ports: + - ${METABASE_PORT} + environment: + MB_DB_TYPE: postgres + MB_DB_DBNAME: metabaseappdb + MB_DB_PORT: 5432 + MB_DB_USER: metabase + MB_DB_PASS: mysecretpassword + MB_DB_HOST: postgres + networks: + - dokploy-network + healthcheck: + test: curl --fail -I http://localhost:3000/api/health || exit 1 + interval: 15s + timeout: 5s + retries: 5 + labels: + - traefik.enable=true + - traefik.http.routers.${HASH}.rule=Host(`${METABASE_HOST}`) + - traefik.http.services.${HASH}.loadbalancer.server.port=${METABASE_PORT} + postgres: + image: postgres:14 + environment: + POSTGRES_USER: metabase + POSTGRES_DB: metabaseappdb + POSTGRES_PASSWORD: mysecretpassword + networks: + - dokploy-network + +networks: + dokploy-network: + external: true diff --git a/templates/metabase/index.ts b/templates/metabase/index.ts new file mode 100644 index 00000000..7ad5b98e --- /dev/null +++ b/templates/metabase/index.ts @@ -0,0 +1,20 @@ +import { + generateHash, + generateRandomDomain, + type Template, + type Schema, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainServiceHash = generateHash(schema.projectName); + const randomDomain = generateRandomDomain(schema); + const envs = [ + `METABASE_HOST=${randomDomain}`, + "METABASE_PORT=3000", + `HASH=${mainServiceHash}`, + ]; + + return { + envs, + }; +} diff --git a/templates/templates.ts b/templates/templates.ts index 128f394d..85fb8a94 100644 --- a/templates/templates.ts +++ b/templates/templates.ts @@ -289,4 +289,19 @@ export const templates: TemplateData[] = [ tags: ["storage"], load: () => import("./minio/index").then((m) => m.generate), }, + { + id: "metabase", + name: "Metabase", + version: "v0.50.8", + description: + "Metabase is an open source business intelligence tool that allows you to ask questions and visualize data.", + logo: "metabase.png", + links: { + github: "https://github.com/metabase/metabase", + website: "https://www.metabase.com/", + docs: "https://www.metabase.com/docs/", + }, + tags: ["database", "dashboard"], + load: () => import("./metabase/index").then((m) => m.generate), + }, ];