From 6bb98a9b8dee1989d38c9b1b391bff78e83173f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ajsel=20=C5=BDili=C4=87?= <33603067+ajselzilic@users.noreply.github.com> Date: Sat, 8 Nov 2025 06:43:09 +0100 Subject: [PATCH] feat: Add plunk template (#494) --- blueprints/plunk/docker-compose.yml | 58 ++++++++++++++++++++++++++++ blueprints/plunk/logo.png | Bin 0 -> 27266 bytes blueprints/plunk/template.toml | 30 ++++++++++++++ meta.json | 18 +++++++++ 4 files changed, 106 insertions(+) create mode 100644 blueprints/plunk/docker-compose.yml create mode 100644 blueprints/plunk/logo.png create mode 100644 blueprints/plunk/template.toml diff --git a/blueprints/plunk/docker-compose.yml b/blueprints/plunk/docker-compose.yml new file mode 100644 index 00000000..914001cf --- /dev/null +++ b/blueprints/plunk/docker-compose.yml @@ -0,0 +1,58 @@ +# IMPORTANT: Plunk requires HTTPS to work properly +# go to the "Domains" tab and enable HTTPS for your domain + +services: + plunk: + image: driaug/plunk + expose: + - "3000" + depends_on: + db: + condition: service_healthy + redis: + condition: service_started + environment: + REDIS_URL: ${REDIS_URL} + DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} + JWT_SECRET: ${JWT_SECRET} + AWS_REGION: ${AWS_REGION} + AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} + AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} + AWS_SES_CONFIGURATION_SET: ${AWS_SES_CONFIGURATION_SET} + APP_URI: ${APP_URI} + NEXT_PUBLIC_API_URI: ${APP_URI}/api + API_URI: ${APP_URI}/api + DISABLE_SIGNUPS: ${DISABLE_SIGNUPS} + entrypoint: ["/app/entry.sh"] + restart: unless-stopped + + db: + image: postgres:alpine + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_DB: ${POSTGRES_DB} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 10s + retries: 5 + timeout: 10s + restart: unless-stopped + expose: + - 5432 + + redis: + image: redis:alpine + restart: unless-stopped + expose: + - 6379 + volumes: + - redis_data:/data + +volumes: + postgres_data: + driver: local + redis_data: + driver: local \ No newline at end of file diff --git a/blueprints/plunk/logo.png b/blueprints/plunk/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0022f5a9060ec2dfac876ae862ee5299bfd15e9d GIT binary patch literal 27266 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