diff --git a/blueprints/domain-locker/docker-compose.yml b/blueprints/domain-locker/docker-compose.yml new file mode 100644 index 00000000..d4d8b541 --- /dev/null +++ b/blueprints/domain-locker/docker-compose.yml @@ -0,0 +1,52 @@ +version: "3.8" + +services: + postgres: + image: postgres:15-alpine + restart: unless-stopped + environment: + POSTGRES_DB: ${DL_PG_NAME:-domain_locker} + POSTGRES_USER: ${DL_PG_USER:-postgres} + POSTGRES_PASSWORD: ${DL_PG_PASSWORD:-changeme2420} + expose: + - "5432" + volumes: + - postgres_data:/var/lib/postgresql/data + # - ./db/schema.sql:/docker-entrypoint-initdb.d/init-schema.sql:ro + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DL_PG_USER:-postgres}"] + interval: 5s + timeout: 3s + retries: 10 + + app: + image: lissy93/domain-locker:latest + restart: unless-stopped + environment: + NODE_ENV: "production" + DL_ENV_TYPE: ${DL_ENV_TYPE:-selfHosted} + DL_PG_HOST: ${DL_PG_HOST:-postgres} + DL_PG_PORT: ${DL_PG_PORT:-5432} + DL_PG_USER: ${DL_PG_USER:-postgres} + DL_PG_PASSWORD: ${DL_PG_PASSWORD:-changeme2420} + DL_PG_NAME: ${DL_PG_NAME:-domain_locker} + expose: + - "3000" + depends_on: + - postgres + + updater: + image: alpine:3.20 + restart: unless-stopped + depends_on: + - app + command: > + /bin/sh -c " + apk add --no-cache curl && + echo '0 3 * * * /usr/bin/curl -s -X POST http://app:3000/api/domain-updater' > /etc/crontabs/root && + echo '0 4 * * * /usr/bin/curl -s -X POST http://app:3000/api/expiration-reminders' >> /etc/crontabs/root && + crond -f -L /dev/stdout + " + +volumes: + postgres_data: {} diff --git a/blueprints/domain-locker/image.png b/blueprints/domain-locker/image.png new file mode 100644 index 00000000..001512e3 Binary files /dev/null and b/blueprints/domain-locker/image.png differ diff --git a/blueprints/domain-locker/template.toml b/blueprints/domain-locker/template.toml new file mode 100644 index 00000000..902d49e2 --- /dev/null +++ b/blueprints/domain-locker/template.toml @@ -0,0 +1,33 @@ +[variables] +main_domain = "${domain}" +pg_password = "${password:32}" + +[config] +[[config.domains]] +serviceName = "app" +port = 3000 +host = "${main_domain}" + +[config.env] +NODE_ENV = "production" +DL_ENV_TYPE = "selfHosted" +DL_PG_HOST = "postgres" +DL_PG_PORT = "5432" +DL_PG_USER = "postgres" +DL_PG_PASSWORD = "${pg_password}" +DL_PG_NAME = "domain_locker" + +# OPTIONAL ENV VARS (uncomment as needed) +# DL_BASE_URL = "http://localhost:3000" +# DL_TURNSTILE_KEY = "" +# DL_GLITCHTIP_DSN = "" +# DL_PLAUSIBLE_URL = "" +# DL_PLAUSIBLE_SITE = "" +# DL_DOMAIN_INFO_API = "" +# DL_DOMAIN_SUBS_API = "" +# DL_DISABLE_WRITE_METHODS = "false" + +[[config.mounts]] +# Example mount for PostgreSQL persistence (already defined in compose volumes) +# filePath = "/var/lib/postgresql/data" +# content = "" diff --git a/meta.json b/meta.json index 4a02dadf..b1b69a2c 100644 --- a/meta.json +++ b/meta.json @@ -1462,6 +1462,24 @@ "document-signing" ] }, + { + "id": "domain-locker", + "name": "Domain Locker", + "version": "latest", + "description": "Domain Locker is an open-source tool for tracking domain expirations and sending renewal reminders.", + "logo": "image.png", + "links": { + "github": "https://github.com/Lissy93/domain-locker", + "website": "https://domain-locker.com/", + "docs": "https://github.com/Lissy93/domain-locker#readme" + }, + "tags": [ + "domains", + "monitoring", + "utilities", + "postgres" + ] + }, { "id": "doublezero", "name": "Double Zero",