diff --git a/apps/dokploy/public/templates/aptabase.svg b/apps/dokploy/public/templates/aptabase.svg new file mode 100644 index 000000000..3cb71ecfa --- /dev/null +++ b/apps/dokploy/public/templates/aptabase.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/apps/dokploy/templates/aptabase/docker-compose.yml b/apps/dokploy/templates/aptabase/docker-compose.yml new file mode 100644 index 000000000..057aec9d7 --- /dev/null +++ b/apps/dokploy/templates/aptabase/docker-compose.yml @@ -0,0 +1,45 @@ +services: + aptabase_db: + container_name: aptabase_db + image: postgres:15-alpine + restart: always + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: aptabase + POSTGRES_PASSWORD: sTr0NGp4ssw0rd + + aptabase_events_db: + container_name: aptabase_events_db + image: clickhouse/clickhouse-server:23.8.16.16-alpine + restart: always + volumes: + - events-db-data:/var/lib/clickhouse + environment: + CLICKHOUSE_USER: aptabase + CLICKHOUSE_PASSWORD: sTr0NGp4ssw0rd + ulimits: + nofile: + soft: 262144 + hard: 262144 + + aptabase: + container_name: aptabase_app + image: ghcr.io/aptabase/aptabase:main + restart: always + depends_on: + - aptabase_events_db + - aptabase_db + ports: + - 8000:8080 + environment: + BASE_URL: http://localhost:8000 # replace with your ip or domain, including port if needed + AUTH_SECRET: c4rI4x8kz5DgKJ1is5Eiu9bNncSQ6ROD # get a strong secret from https://randomkeygen.com/ + DATABASE_URL: Server=aptabase_db;Port=5432;User Id=aptabase;Password=sTr0NGp4ssw0rd;Database=aptabase + CLICKHOUSE_URL: Host=aptabase_events_db;Port=8123;Username=aptabase;Password=sTr0NGp4ssw0rd + +volumes: + db-data: + driver: local + events-db-data: + driver: local diff --git a/apps/dokploy/templates/aptabase/index.ts b/apps/dokploy/templates/aptabase/index.ts new file mode 100644 index 000000000..6a6cb527b --- /dev/null +++ b/apps/dokploy/templates/aptabase/index.ts @@ -0,0 +1,36 @@ +import { + type DomainSchema, + type Schema, + type Template, + generateBase64, + generateRandomDomain, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainDomain = generateRandomDomain(schema); + const authSecret = generateBase64(32); + const postgresPassword = generateBase64(16); + const clickhousePassword = generateBase64(16); + + const domains: DomainSchema[] = [ + { + host: mainDomain, + port: 8000, + serviceName: "aptabase", + }, + ]; + + const envs = [ + `BASE_URL=http://${mainDomain}`, + `AUTH_SECRET=${authSecret}`, + `POSTGRES_PASSWORD=${postgresPassword}`, + `CLICKHOUSE_PASSWORD=${clickhousePassword}`, + `DATABASE_URL=Server=aptabase_db;Port=5432;User Id=aptabase;Password=${postgresPassword};Database=aptabase`, + `CLICKHOUSE_URL=Host=aptabase_events_db;Port=8123;Username=aptabase;Password=${clickhousePassword}`, + ]; + + return { + envs, + domains, + }; +} diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index bf7831812..336ab400e 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -423,4 +423,19 @@ export const templates: TemplateData[] = [ tags: ["chat"], load: () => import("./soketi/index").then((m) => m.generate), }, + { + id: "aptabase", + name: "Aptabase", + version: "v1.0.0", + description: "Aptabase is a self-hosted web analytics platform that lets you track website traffic and user behavior.", + logo: "aptabase.svg", + links: { + github: "https://github.com/aptabase/aptabase", + website: "https://aptabase.com/", + docs: "https://github.com/aptabase/aptabase/blob/main/README.md", + }, + tags: ["analytics", "self-hosted"], + load: () => import("./aptabase/index").then((m) => m.generate), + }, + ];