From 1653fcbddc1ea82275b5a1b17238a1216fa90264 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 11:58:55 +0200 Subject: [PATCH 01/55] feat: add ntfy template --- public/svgs/ntfy.svg | 1 + templates/compose/ntfy.yaml | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 public/svgs/ntfy.svg create mode 100644 templates/compose/ntfy.yaml diff --git a/public/svgs/ntfy.svg b/public/svgs/ntfy.svg new file mode 100644 index 0000000000..9e5b5136fd --- /dev/null +++ b/public/svgs/ntfy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml new file mode 100644 index 0000000000..ec8c39d284 --- /dev/null +++ b/templates/compose/ntfy.yaml @@ -0,0 +1,26 @@ +# documentation: https://docs.ntfy.sh/ +# slogan: ntfy is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API. +# tags: ntfy, notification, push notification, pub-sub, notify +# logo: svgs/ntfy.svg +# port: 80 + +services: + ntfy: + image: binwiederhier/ntfy + container_name: ntfy + command: + - serve + environment: + - SERVICE_FQDN_NTFY + - TZ=Europe/Berlin + user: 1000:1000 + volumes: + - ntfy-cache:/var/cache/ntfy + - ntfy:/etc/ntfy + healthcheck: + test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] + interval: 60s + timeout: 10s + retries: 3 + start_period: 40s + restart: unless-stopped From dfb9081d4e9db3d93106dcefadadf2ea1030c26f Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 18 Aug 2024 12:32:20 +0200 Subject: [PATCH 02/55] Add traccar to service templates --- templates/compose/traccar.yml | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 templates/compose/traccar.yml diff --git a/templates/compose/traccar.yml b/templates/compose/traccar.yml new file mode 100644 index 0000000000..d22385a75a --- /dev/null +++ b/templates/compose/traccar.yml @@ -0,0 +1,48 @@ +# documentation: https://www.traccar.org/documentation/ +# slogan: Traccar is a free and open source modern GPS tracking system. +# tags: traccar,gps,tracking,open,source +# logo: +# port: 8082 + +services: + traccar: + image: traccar/traccar + environment: + - SERVICE_FQDN_TRACCAR_8082 + - SERVICE_FQDN_TRACCAR_5159=/api + - CONFIG_USE_ENVIRONMENT_VARIABLES=true + - DATABASE_USER=$SERVICE_USER_POSTGRES + - DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES + volumes: + - type: bind + source: ./srv/traccar/conf/traccar.xml + target: /opt/traccar/conf/traccar.xml + content: | + + + + ./conf/default.xml + org.postgresql.Driver + jdbc:postgresql://postgres:5432/traccar + + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8082"] + interval: 5s + timeout: 20s + retries: 10 + depends_on: + postgres: + condition: service_healthy + postgres: + image: postgres:16-alpine + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=traccar + volumes: + - traccar-db-data:/var/lib/postgresql/data/ + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 From fd4316e2ed29bb9d6b44ce78d091d9ad3b3f22d1 Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 18 Aug 2024 13:10:19 +0200 Subject: [PATCH 03/55] Update traccar.yml --- templates/compose/traccar.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/templates/compose/traccar.yml b/templates/compose/traccar.yml index d22385a75a..00ba1b699b 100644 --- a/templates/compose/traccar.yml +++ b/templates/compose/traccar.yml @@ -9,7 +9,7 @@ services: image: traccar/traccar environment: - SERVICE_FQDN_TRACCAR_8082 - - SERVICE_FQDN_TRACCAR_5159=/api + - SERVICE_FQDN_TRACCAR_API_5159 - CONFIG_USE_ENVIRONMENT_VARIABLES=true - DATABASE_USER=$SERVICE_USER_POSTGRES - DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES @@ -25,11 +25,6 @@ services: org.postgresql.Driver jdbc:postgresql://postgres:5432/traccar - healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:8082"] - interval: 5s - timeout: 20s - retries: 10 depends_on: postgres: condition: service_healthy From 58831b89925b4d5cf26c46fb6324bce2e4059e00 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:11:24 +0200 Subject: [PATCH 04/55] fix: signup --- templates/compose/ntfy.yaml | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index ec8c39d284..8502384279 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -11,14 +11,39 @@ services: command: - serve environment: - - SERVICE_FQDN_NTFY - - TZ=Europe/Berlin - user: 1000:1000 + - TZ=${TZ:-UTC} + - 'NTFY_BASE_URL=${SERVICE_FQDN_NTFY}' + - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db + - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db + - NTFY_AUTH_DEFAULT_ACCESS=read-write + - 'NTFY_UPSTREAM_BASE_URL=https://ntfy.sh' + - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} + - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} + - NTFY_CACHE_DURATION=${NTFY_CACHE_DURATION:-24h} + - NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=${NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT:-1G} + - NTFY_ATTACHMENT_FILE_SIZE_LIMIT=${NTFY_ATTACHMENT_FILE_SIZE_LIMIT:-10M} + - NTFY_ATTACHMENT_EXPIRY_DURATION=${NTFY_ATTACHMENT_EXPIRY_DURATION:-24h} + - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.deine-domain.de} + - NTFY_SMTP_SENDER_USER=${NTFY_SMTP_SENDER_USER:-no-reply@de} + - NTFY_SMTP_SENDER_PASS=${NTFY_SMTP_SENDER_PASS:-password} + - NTFY_SMTP_SENDER_FROM=${NTFY_SMTP_SENDER_FROM:-no-reply@de} + - NTFY_KEEPALIVE_INTERVAL=${NTFY_KEEPALIVE_INTERVAL:-5m} + - NTFY_MANAGER_INTERVAL=${NTFY_MANAGER_INTERVAL:-5m} + - NTFY_VISITOR_MESSAGE_DAILY_LIMIT=${NTFY_VISITOR_MESSAGE_DAILY_LIMIT:-100} + - NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT=${NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT:-1G} + - NTFY_UPSTREAM_BASE_URL=${SERVICE_FQDN_NTFY} + - NTFY_UPSTREAM_ACCESS_TOKEN=${UPSTREAM_ACCESS_TOKEN} + - NTFY_AUTH_DEFAULT_ACCESS=${NTFY_AUTH_DEFAULT_ACCESS:-read-write} + - NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY} + - NTFY_WEB_PUSH_PRIVATE_KEY=${NTFY_WEB_PUSH_PRIVATE_KEY} + - NTFY_WEB_PUSH_EMAIL_ADDRESS=${NTFY_WEB_PUSH_EMAIL_ADDRESS} volumes: - - ntfy-cache:/var/cache/ntfy - - ntfy:/etc/ntfy + - ./cache:/var/cache/ntfy + - ./db:/var/lib/ntfy/ healthcheck: - test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] + test: + - CMD-SHELL + - 'wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo ''"healthy"\s*:\s*true'' || exit 1' interval: 60s timeout: 10s retries: 3 From d5e6a643aaa0b9b3a67be1b556ccd1277f2b70bd Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:16:14 +0200 Subject: [PATCH 05/55] cleanup --- templates/compose/ntfy.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index 8502384279..06187a3685 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -12,11 +12,11 @@ services: - serve environment: - TZ=${TZ:-UTC} - - 'NTFY_BASE_URL=${SERVICE_FQDN_NTFY}' + - NTFY_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db - NTFY_AUTH_DEFAULT_ACCESS=read-write - - 'NTFY_UPSTREAM_BASE_URL=https://ntfy.sh' + - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh} - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} - NTFY_CACHE_DURATION=${NTFY_CACHE_DURATION:-24h} @@ -41,9 +41,7 @@ services: - ./cache:/var/cache/ntfy - ./db:/var/lib/ntfy/ healthcheck: - test: - - CMD-SHELL - - 'wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo ''"healthy"\s*:\s*true'' || exit 1' + test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] interval: 60s timeout: 10s retries: 3 From 2fc0ce172050e530b415463d15eccbfab8e68ff5 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:18:07 +0200 Subject: [PATCH 06/55] remove duplicated env --- templates/compose/ntfy.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index 06187a3685..3914136a51 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -15,7 +15,6 @@ services: - NTFY_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db - - NTFY_AUTH_DEFAULT_ACCESS=read-write - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh} - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} @@ -23,7 +22,7 @@ services: - NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=${NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT:-1G} - NTFY_ATTACHMENT_FILE_SIZE_LIMIT=${NTFY_ATTACHMENT_FILE_SIZE_LIMIT:-10M} - NTFY_ATTACHMENT_EXPIRY_DURATION=${NTFY_ATTACHMENT_EXPIRY_DURATION:-24h} - - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.deine-domain.de} + - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.your-domain.de} - NTFY_SMTP_SENDER_USER=${NTFY_SMTP_SENDER_USER:-no-reply@de} - NTFY_SMTP_SENDER_PASS=${NTFY_SMTP_SENDER_PASS:-password} - NTFY_SMTP_SENDER_FROM=${NTFY_SMTP_SENDER_FROM:-no-reply@de} @@ -31,7 +30,6 @@ services: - NTFY_MANAGER_INTERVAL=${NTFY_MANAGER_INTERVAL:-5m} - NTFY_VISITOR_MESSAGE_DAILY_LIMIT=${NTFY_VISITOR_MESSAGE_DAILY_LIMIT:-100} - NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT=${NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT:-1G} - - NTFY_UPSTREAM_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_UPSTREAM_ACCESS_TOKEN=${UPSTREAM_ACCESS_TOKEN} - NTFY_AUTH_DEFAULT_ACCESS=${NTFY_AUTH_DEFAULT_ACCESS:-read-write} - NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY} From e1bcae7aafb83563e1b34aceef5d15d079c2211d Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:50:57 +0200 Subject: [PATCH 07/55] add resend.yaml --- templates/compose/resend.yaml | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 templates/compose/resend.yaml diff --git a/templates/compose/resend.yaml b/templates/compose/resend.yaml new file mode 100644 index 0000000000..d722287476 --- /dev/null +++ b/templates/compose/resend.yaml @@ -0,0 +1,63 @@ +# documentation: https://docs.unsend.dev/get-started/self-hosting +# slogan: Unsend is an open-source alternative to Resend, Sendgrid, Mailgun and Postmark etc. +# tags: resend, mailer, marketing emails, transaction emails, self-hosting, postmark +# logo: svgs/unsend.svg +# port: 3000 + +services: + postgres: + image: postgres:16 + container_name: unsend-db-prod + restart: always + environment: + - POSTGRES_USER=${SERVICE_POSTGRES_USER:?err} + - POSTGRES_PASSWORD=${SERVICE_POSTGRES_PASSWORD:?err} + - POSTGRES_DB=${SERVICE_POSTGRES_DB:?err} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + interval: 10s + timeout: 5s + retries: 5 + # ports: + # - "5432:5432" + volumes: + - unsend-db:/var/lib/postgresql/data + + redis: + image: redis:7 + container_name: unsend-redis-prod + restart: always + # ports: + # - "6379:6379" + volumes: + - unsend-cache:/data + command: ["redis-server", "--maxmemory-policy", "noeviction"] + + unsend: + image: unsend/unsend:latest + container_name: unsend + restart: always + ports: + - ${PORT:-3000}:${PORT:-3000} + environment: + - PORT=${PORT:-3000} + - DATABASE_URL=postgresql://postgres:${SERVICE_POSTGRES_PASSWORD}@postgres:5432/resend + - NEXTAUTH_URL=${SERVICE_NEXTAUTH_URL:?err} + - NEXTAUTH_SECRET=${SERVICE_NEXTAUTH_SECRET:?err} + - AWS_ACCESS_KEY=${SERVICE_AWS_ACCESS_KEY:?err} + - AWS_SECRET_KEY=${SERVICE_AWS_SECRET_KEY:?err} + - AWS_DEFAULT_REGION=${SERVICE_AWS_DEFAULT_REGION:?err} + - GITHUB_ID=${SERVICE_GITHUB_ID:?err} + - GITHUB_SECRET=${SERVICE_GITHUB_SECRET:?err} + - REDIS_URL=redis://redis:6379 + - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false} + - API_RATE_LIMIT=${SERVICE_API_RATE_LIMIT:-1} + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_started + +volumes: + unsend-db: + unsend-cache: From 4b14c7e2205fab9fdcbf7673be301cb9d0a2dc57 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:52:11 +0200 Subject: [PATCH 08/55] remove comments --- templates/compose/resend.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/templates/compose/resend.yaml b/templates/compose/resend.yaml index d722287476..b8b528a756 100644 --- a/templates/compose/resend.yaml +++ b/templates/compose/resend.yaml @@ -18,8 +18,6 @@ services: interval: 10s timeout: 5s retries: 5 - # ports: - # - "5432:5432" volumes: - unsend-db:/var/lib/postgresql/data @@ -27,8 +25,6 @@ services: image: redis:7 container_name: unsend-redis-prod restart: always - # ports: - # - "6379:6379" volumes: - unsend-cache:/data command: ["redis-server", "--maxmemory-policy", "noeviction"] From cf99ec70e9a19487176e614e55bf2233bcbabb45 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:52:31 +0200 Subject: [PATCH 09/55] add svg --- public/svgs/unsend.svg | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 public/svgs/unsend.svg diff --git a/public/svgs/unsend.svg b/public/svgs/unsend.svg new file mode 100644 index 0000000000..f5ff6fabc6 --- /dev/null +++ b/public/svgs/unsend.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From f3360beafeae3317a693d51bc46c71f529bcb193 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Thu, 22 Aug 2024 16:38:36 +0200 Subject: [PATCH 10/55] feat: add cloudbeaver template --- public/svgs/cloudbeaver.svg | 7 +++++++ templates/compose/cloudbeaver.yaml | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 public/svgs/cloudbeaver.svg create mode 100644 templates/compose/cloudbeaver.yaml diff --git a/public/svgs/cloudbeaver.svg b/public/svgs/cloudbeaver.svg new file mode 100644 index 0000000000..4a76347669 --- /dev/null +++ b/public/svgs/cloudbeaver.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/templates/compose/cloudbeaver.yaml b/templates/compose/cloudbeaver.yaml new file mode 100644 index 0000000000..6ca82eecf9 --- /dev/null +++ b/templates/compose/cloudbeaver.yaml @@ -0,0 +1,18 @@ +# documentation: https://dbeaver.com/docs/cloudbeaver/ +# slogan: CloudBeaver is a lightweight web application designed for comprehensive data management. +# tags: dbeaver, data management, data, database, mysql, postgres, sqlite, sql, mongodb +# logo: svgs/cloudbeaver.svg + +services: + cloudbeaver: + restart: unless-stopped + image: dbeaver/cloudbeaver:24.1.5 + volumes: + - cloudbeaver:/opt/cloudbeaver/workspace + environment: + - SERVICE_FQDN_CLOUDBEAVER_8978 + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8978/"] + interval: 5s + timeout: 20s + retries: 10 From a4dedb8369adb040259bbeae3b46e12aaa0957e1 Mon Sep 17 00:00:00 2001 From: Franck Kerbiriou Date: Thu, 22 Aug 2024 22:30:45 +0200 Subject: [PATCH 11/55] Add Nextcloud with Postgres --- .../compose/nextcloud-with-postgres.yaml | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 templates/compose/nextcloud-with-postgres.yaml diff --git a/templates/compose/nextcloud-with-postgres.yaml b/templates/compose/nextcloud-with-postgres.yaml new file mode 100644 index 0000000000..15a2c97b67 --- /dev/null +++ b/templates/compose/nextcloud-with-postgres.yaml @@ -0,0 +1,52 @@ +# documentation: https://docs.nextcloud.com +# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. +# tags: cloud, collaboration, communication, filestorage, data +# logo: svgs/nextcloud.svg + +services: + nextcloud: + image: lscr.io/linuxserver/nextcloud:latest + environment: + - SERVICE_FQDN_NEXTCLOUD + - PUID=1000 + - PGID=1000 + - TZ=Europe/Paris + - POSTGRES_DB=${POSTGRES_DB:-nextcloud} + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_HOST=postgresql + - REDIS_HOST=redis + - REDIS_PORT=6379 + volumes: + - nextcloud-config:/config + - nextcloud-data:/data + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + postgresql: + image: postgres:16-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-nextcloud} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + redis: + image: "redis:7.4-alpine" + volumes: + - "redis-data:/data" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 From 15733eaa55fd1cfc307d3aa359b89e2e88f3bc82 Mon Sep 17 00:00:00 2001 From: Pilpin Date: Sat, 24 Aug 2024 12:49:33 +0200 Subject: [PATCH 12/55] Add freshrss to service templates --- templates/compose/freshrss.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 templates/compose/freshrss.yaml diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml new file mode 100644 index 0000000000..607d44a2e9 --- /dev/null +++ b/templates/compose/freshrss.yaml @@ -0,0 +1,17 @@ +# documentation: https://docs.gitea.com +# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. +# tags: version control, collaboration, code, hosting, lightweight, postgresql +# logo: svgs/gitea.svg + +services: + freshrss: + image: freshrss/freshrss:latest + environment: + - SERVICE_FQDN_FRESHRSS_80 + - POSTGRES_DB=freshrss + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - 'CRON_MIN=1,31' + volumes: + - freshrss_data:/var/www/FreshRSS/data + - freshrss_extensions:/var/www/FreshRSS/extensions From 3c720357115aa2bc6ce35c228a1a19c9c11e6dfc Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 25 Aug 2024 00:06:22 +0200 Subject: [PATCH 13/55] Update documentation part of yaml --- templates/compose/freshrss.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml index 607d44a2e9..1c5eb0ce44 100644 --- a/templates/compose/freshrss.yaml +++ b/templates/compose/freshrss.yaml @@ -1,7 +1,6 @@ -# documentation: https://docs.gitea.com -# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. -# tags: version control, collaboration, code, hosting, lightweight, postgresql -# logo: svgs/gitea.svg +# documentation: https://freshrss.org/index.html +# slogan: A free, self-hostable feed aggregator. +# tags: rss, feed services: freshrss: From 135eb83da454d59178d48d8dbeff949b26fd561d Mon Sep 17 00:00:00 2001 From: givanz Date: Sun, 25 Aug 2024 16:27:02 +0300 Subject: [PATCH 14/55] Add Vvveb CMS template --- public/svgs/vvveb.svg | 1 + templates/compose/vvveb-with-mariadb.yml | 38 ++++++++++++++++++++ templates/compose/vvveb-without-database.yml | 18 ++++++++++ templates/compose/vvveb.yml | 38 ++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 public/svgs/vvveb.svg create mode 100644 templates/compose/vvveb-with-mariadb.yml create mode 100644 templates/compose/vvveb-without-database.yml create mode 100644 templates/compose/vvveb.yml diff --git a/public/svgs/vvveb.svg b/public/svgs/vvveb.svg new file mode 100644 index 0000000000..2b66b3087b --- /dev/null +++ b/public/svgs/vvveb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/vvveb-with-mariadb.yml b/templates/compose/vvveb-with-mariadb.yml new file mode 100644 index 0000000000..7e1d663fa4 --- /dev/null +++ b/templates/compose/vvveb-with-mariadb.yml @@ -0,0 +1,38 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=mysqli #sqlite,pgsql + - DB_HOST=mariadb + - DB_USER=$SERVICE_USER_VVVEB + - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB + - DB_NAME=vvveb + depends_on: + - mariadb + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 + mariadb: + image: mariadb:11 + volumes: + - mariadb-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=vvveb + - MYSQL_USER=$SERVICE_USER_VVVEB + - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/vvveb-without-database.yml b/templates/compose/vvveb-without-database.yml new file mode 100644 index 0000000000..f1e92de638 --- /dev/null +++ b/templates/compose/vvveb-without-database.yml @@ -0,0 +1,18 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=sqlite #mysqli,pgsql + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 diff --git a/templates/compose/vvveb.yml b/templates/compose/vvveb.yml new file mode 100644 index 0000000000..43ec27c1a8 --- /dev/null +++ b/templates/compose/vvveb.yml @@ -0,0 +1,38 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=mysqli #sqlite,pgsql + - DB_HOST=mysql + - DB_USER=$SERVICE_USER_VVVEB + - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB + - DB_NAME=vvveb + depends_on: + - mysql + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 + mysql: + image: mysql:8.4.2 + volumes: + - mysql-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=vvveb + - MYSQL_USER=$SERVICE_USER_VVVEB + - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 From d469f4bc8fb6c22e1ecb35df07553e7266abc94f Mon Sep 17 00:00:00 2001 From: Niccolo Borgioli Date: Thu, 5 Sep 2024 20:25:04 +0200 Subject: [PATCH 15/55] add cryptgeon template --- templates/compose/cryptgeon.yaml | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 templates/compose/cryptgeon.yaml diff --git a/templates/compose/cryptgeon.yaml b/templates/compose/cryptgeon.yaml new file mode 100644 index 0000000000..f31b37f683 --- /dev/null +++ b/templates/compose/cryptgeon.yaml @@ -0,0 +1,37 @@ +# documentation: https://github.com/cupcakearmy/cryptgeon +# slogan: Secure note / file sharing service inspired by PrivNote. +# tags: cryptgeon, secure, note, sharing, privnote, file, sharing + +services: + redis: + image: "redis:7-alpine" + command: "redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 2 + app: + image: "cupcakearmy/cryptgeon:latest" + depends_on: + - redis + environment: + - "SIZE_LIMIT=${SIZE_LIMIT:-4 MiB}" + - "MAX_VIEWS=${MAX_VIEWS:-100}" + - "MAX_EXPIRATION=${MAX_EXPIRATION:-360}" + - "ALLOW_ADVANCED=${ALLOW_ADVANCED:-true}" + - "ALLOW_FILES=${ALLOW_FILES:-true}" + - SERVICE_FQDN_CRYPTGEON_8000 + healthcheck: + test: + - CMD + - curl + - "--fail" + - "http://127.0.0.1:8000/api/live/" + interval: 1m + timeout: 3s + retries: 2 + start_period: 5s From b8fcdf74e682eee7d1985821ae2875c219bf520c Mon Sep 17 00:00:00 2001 From: nizetic Date: Sat, 14 Sep 2024 12:45:03 +0200 Subject: [PATCH 16/55] Add kimai template --- public/svgs/kimai.svg | 67 ++++++++++++++++++++++++++++++++++++ templates/compose/kimai.yaml | 52 ++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 public/svgs/kimai.svg create mode 100644 templates/compose/kimai.yaml diff --git a/public/svgs/kimai.svg b/public/svgs/kimai.svg new file mode 100644 index 0000000000..35b1469726 --- /dev/null +++ b/public/svgs/kimai.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/compose/kimai.yaml b/templates/compose/kimai.yaml new file mode 100644 index 0000000000..26cd3da1c0 --- /dev/null +++ b/templates/compose/kimai.yaml @@ -0,0 +1,52 @@ +# documentation: https://www.kimai.org/ +# slogan: Open source time-tracking app. +# tags: time-tracking, open-source +# logo: svgs/kimai.svg +# port: 8001 + +services: + mysql: + image: mysql:8.3 + container_name: kimai_db + volumes: + - mysql:/var/lib/mysql + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE:-kimai} + - MYSQL_USER=${MYSQL_USER:-kimaiuser} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQL_ROOT} + command: --default-storage-engine innodb + restart: unless-stopped + healthcheck: + test: mysqladmin -p$$MYSQL_ROOT_PASSWORD ping -h localhost + interval: 20s + start_period: 10s + timeout: 10s + retries: 3 + + kimai: + image: kimai/kimai2:apache-latest + container_name: kimai + depends_on: + mysql: + condition: service_healthy + volumes: + - data:/opt/kimai/var/data + environment: + - SERVICE_FQDN_KIMAI + - APP_SECRET=${SERVICE_PASSWORD_APP_SECRET} + - MAILER_FROM=${MAILER_FROM:-kimai@example.com} + - MAILER_URL=${MAILER_URL:-null://null} + - ADMINMAIL=${ADMINMAIL:-admin@kimai.local} + - ADMINPASS=${SERVICE_PASSWORD_ADMINPASS} + - DATABASE_URL=mysql://${MYSQL_USER}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0 + - TRUSTED_HOSTS=localhost + restart: unless-stopped + labels: + - traefik.enable=true + - traefik.http.routers.kimai.entryPoints=http + - traefik.http.services.kimai.loadbalancer.server.port=8001 + +volumes: + data: + mysql: From 8166163b00265d9014be80404bf8a8ce0666e6e5 Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 21:58:13 +0200 Subject: [PATCH 17/55] feat: add immich service --- public/svgs/immich.svg | 66 +++++++++++++++++++++++++ templates/compose/immich.yaml | 91 +++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 public/svgs/immich.svg create mode 100644 templates/compose/immich.yaml diff --git a/public/svgs/immich.svg b/public/svgs/immich.svg new file mode 100644 index 0000000000..9d844a772b --- /dev/null +++ b/public/svgs/immich.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml new file mode 100644 index 0000000000..de6e5fddf1 --- /dev/null +++ b/templates/compose/immich.yaml @@ -0,0 +1,91 @@ +# documentation: https://immich.app/docs/overview/introduction +# slogan: Self-hosted photo and video management solution. +# tags: photo,video,management,server,cloud,storage,sharing,metadata,face,recognition +# logo: svgs/immich.svg +# port: 2283 + +name: immich + +x-shared-env: &shared-env + environment: + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + # Uninitialized variables, editable in Coolify UI + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=${DB_PASSWORD:-postgres} # Default: "postgres", can be overridden + - DB_USERNAME=${DB_USERNAME:-postgres} # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + # Optional timezone variable, uninitialized, editable in Coolify UI\ + - TZ=${TZ:-Etc/UTC} + +services: + immich-server: + container_name: immich_server + image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} + # extends: + # file: hwaccel.transcoding.yml + # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding + volumes: + # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file + - ${UPLOAD_LOCATION}:/usr/src/app/upload + - /etc/localtime:/etc/localtime:ro + <<: *shared-env + ports: + - 2283:3001 + depends_on: + - redis + - database + restart: always + healthcheck: + disable: false + + immich-machine-learning: + container_name: immich_machine_learning + # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. + # Example tag: ${IMMICH_VERSION:-release}-cuda + image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} + # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration + # file: hwaccel.ml.yml + # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable + volumes: + - model-cache:/cache + <<: *shared-env + restart: always + healthcheck: + disable: false + + redis: + container_name: immich_redis + image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792 + healthcheck: + test: redis-cli ping || exit 1 + restart: always + + database: + container_name: immich_postgres + image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 + environment: + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_INITDB_ARGS: '--data-checksums' + volumes: + # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file + - ${DB_DATA_LOCATION}:/var/lib/postgresql/data + healthcheck: + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 + interval: 5m + start_interval: 30s + start_period: 5m + command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] + restart: always + +volumes: + model-cache: From c5fd7ba48ab8572b90ee46b065b8afd13c889471 Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 22:20:48 +0200 Subject: [PATCH 18/55] feat: auto generate url --- templates/compose/immich.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index de6e5fddf1..047e8817b5 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -18,15 +18,15 @@ x-shared-env: &shared-env - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify # Default values, editable in Coolify UI - - DB_PASSWORD=${DB_PASSWORD:-postgres} # Default: "postgres", can be overridden - - DB_USERNAME=${DB_USERNAME:-postgres} # Default: "postgres", can be overridden + - DB_PASSWORD=${SERVICE_PASSWORD_IMMICH} # Default: "postgres", can be overridden + - DB_USERNAME=${SERVICE_USER_IMMICH} # Default: "postgres", can be overridden - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden # Optional timezone variable, uninitialized, editable in Coolify UI\ - TZ=${TZ:-Etc/UTC} services: - immich-server: + immich: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: @@ -37,8 +37,10 @@ services: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro <<: *shared-env - ports: - - 2283:3001 + environment: + - SERVICE_FQDN_IMMICH=/ + - _APP_URL=$SERVICE_FQDN_IMMICH + - SERVICE_FQDN_IMMICH_3001 depends_on: - redis - database From dd8d0a62d84cef95ca690680da8bfce4016d6b7d Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 22:44:21 +0200 Subject: [PATCH 19/55] feat: refactored to work with coolify auto env vars --- templates/compose/immich.yaml | 51 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index 047e8817b5..2feed55ad0 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -6,25 +6,6 @@ name: immich -x-shared-env: &shared-env - environment: - # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables - - # Hardcoded values, not editable in Coolify UI - - UPLOAD_LOCATION=./library # The location where your uploaded files are stored - - DB_DATA_LOCATION=./postgres # The location where your database files are stored - - # Uninitialized variables, editable in Coolify UI - - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify - - # Default values, editable in Coolify UI - - DB_PASSWORD=${SERVICE_PASSWORD_IMMICH} # Default: "postgres", can be overridden - - DB_USERNAME=${SERVICE_USER_IMMICH} # Default: "postgres", can be overridden - - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden - - # Optional timezone variable, uninitialized, editable in Coolify UI\ - - TZ=${TZ:-Etc/UTC} - services: immich: container_name: immich_server @@ -36,11 +17,21 @@ services: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro - <<: *shared-env environment: - - SERVICE_FQDN_IMMICH=/ - - _APP_URL=$SERVICE_FQDN_IMMICH - SERVICE_FQDN_IMMICH_3001 + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden + - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + - TZ=${TZ:-Etc/UTC} depends_on: - redis - database @@ -58,7 +49,21 @@ services: # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache - <<: *shared-env + environment: + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden + - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + - TZ=${TZ:-Etc/UTC} restart: always healthcheck: disable: false From dce02c157689fa4f28d2ab53ebf5db330db5fed3 Mon Sep 17 00:00:00 2001 From: Daniel Alves Date: Thu, 3 Oct 2024 11:42:32 -0300 Subject: [PATCH 20/55] feat: add Homebox template --- public/svgs/homebox.svg | 11 +++++++++++ templates/compose/homebox.yaml | 29 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 public/svgs/homebox.svg create mode 100644 templates/compose/homebox.yaml diff --git a/public/svgs/homebox.svg b/public/svgs/homebox.svg new file mode 100644 index 0000000000..08670bbb92 --- /dev/null +++ b/public/svgs/homebox.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/templates/compose/homebox.yaml b/templates/compose/homebox.yaml new file mode 100644 index 0000000000..859af7b92e --- /dev/null +++ b/templates/compose/homebox.yaml @@ -0,0 +1,29 @@ +# documentation: https://github.com/hay-kot/homebox +# slogan: Homebox is a self-hosted file management solution. +# tags: homebox,file-management,self-hosted +# logo: svgs/homebox.svg +# port: 7745 + +version: "3.8" + +services: + homebox: + image: ghcr.io/hay-kot/homebox:latest + container_name: "homebox" + restart: unless-stopped + environment: + - SERVICE_FQDN_HOMEBOX_7745 + - HBOX_LOG_LEVEL=info + - HBOX_LOG_FORMAT=text + - HBOX_WEB_MAX_UPLOAD_SIZE=10 + volumes: + - homebox-data:/data/ + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:7745"] + interval: 5s + timeout: 20s + retries: 10 + +volumes: + homebox-data: + driver: local From 43e8ab7ec6f2c9ff60cd650bfa44bf82cf05612c Mon Sep 17 00:00:00 2001 From: Adrian Barrio Date: Fri, 4 Oct 2024 11:34:56 +0200 Subject: [PATCH 21/55] feat: add qbittorrent template --- public/svgs/qbittorrent.svg | 16 ++++++++++ templates/compose/qbittorrent.yaml | 47 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 public/svgs/qbittorrent.svg create mode 100644 templates/compose/qbittorrent.yaml diff --git a/public/svgs/qbittorrent.svg b/public/svgs/qbittorrent.svg new file mode 100644 index 0000000000..69d8cf62ae --- /dev/null +++ b/public/svgs/qbittorrent.svg @@ -0,0 +1,16 @@ + + + qbittorrent-new-light + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/compose/qbittorrent.yaml b/templates/compose/qbittorrent.yaml new file mode 100644 index 0000000000..718a32ab82 --- /dev/null +++ b/templates/compose/qbittorrent.yaml @@ -0,0 +1,47 @@ +# documentation: https://docs.linuxserver.io/images/docker-qbittorrent/ +# slogan: The qBittorrent project aims to provide an open-source software alternative to ΞΌTorrent. +# tags: torrent, streaming, webui +# logo: svgs/qbittorrent.svg +# port: 8080 + +services: + qbit: + image: "lscr.io/linuxserver/qbittorrent:latest" + environment: + - WEBUI_PORT=8080 + - PUID=1000 + - PGID=1000 + volumes: + - "data-qbittorrent:/config" + - "data-downloads:/downloads" + - "data-torrents:/torrents" + healthcheck: + test: + - CMD + - wget + - "-q" + - "--spider" + - "http://127.0.0.1:8080/" + interval: 5s + timeout: 20s + retries: 10 + vuetorrent-backend: + image: "ghcr.io/vuetorrent/vuetorrent-backend:latest" + environment: + - SERVICE_FQDN_QBITORRENT_8080 + - PORT=8080 + - "QBIT_BASE=http://qbit:8080" + - RELEASE_TYPE=stable + - "UPDATE_VT_CRON=0 * * * *" + volumes: + - "data-config:/config" + healthcheck: + test: + - CMD + - wget + - "-q" + - "--spider" + - "http://127.0.0.1:8080/" + interval: 5s + timeout: 20s + retries: 10 From 5d7d7179c4ebe7d6070307caf669ca7190ab8854 Mon Sep 17 00:00:00 2001 From: Daniel Alves Date: Fri, 4 Oct 2024 14:39:27 -0300 Subject: [PATCH 22/55] feat: add owncloud service and logo --- public/svgs/owncloud.svg | 84 +++++++++++++++++++++++++++++ templates/compose/owncloud.yaml | 93 +++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 public/svgs/owncloud.svg create mode 100644 templates/compose/owncloud.yaml diff --git a/public/svgs/owncloud.svg b/public/svgs/owncloud.svg new file mode 100644 index 0000000000..83631e3f5d --- /dev/null +++ b/public/svgs/owncloud.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/owncloud.yaml b/templates/compose/owncloud.yaml new file mode 100644 index 0000000000..b9111587d8 --- /dev/null +++ b/templates/compose/owncloud.yaml @@ -0,0 +1,93 @@ +# documentation: https://owncloud.com/docs +# slogan: ownCloud with Open Web UI integrates file management with a powerful, user-friendly interface. +# tags: owncloud,file-management,open-web-ui,integration,cloud +# logo: svgs/owncloud.svg +# port: 8080 + +version: "3.9" +services: + owncloud: + image: "owncloud/server:latest" + container_name: owncloud_server + restart: unless-stopped + depends_on: + - mariadb + - redis + environment: + - SERVICE_FQDN_OWNCLOUD_8080 + - "OWNCLOUD_DOMAIN=127.0.0.1:8080" + - "OWNCLOUD_TRUSTED_DOMAINS=${OWNCLOUD_TRUSTED_DOMAINS:-localhost,127.0.0.1}" + - OWNCLOUD_DB_TYPE=mysql + - OWNCLOUD_DB_NAME=owncloud + - OWNCLOUD_DB_USERNAME=owncloud + - "OWNCLOUD_DB_PASSWORD=owncloud" + - OWNCLOUD_DB_HOST=mariadb + - "OWNCLOUD_ADMIN_USERNAME=${ADMIN_USER:-owncloud}" + - "OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD:-owncloud}" + - OWNCLOUD_MYSQL_UTF8MB4=true + - OWNCLOUD_REDIS_ENABLED=true + - OWNCLOUD_REDIS_HOST=redis + healthcheck: + test: + - CMD + - /usr/bin/healthcheck + interval: 30s + timeout: 10s + retries: 5 + volumes: + - "files:/mnt/data" + ports: + - "8080:8080" + + mariadb: + image: "mariadb:latest" + container_name: owncloud_mariadb + restart: unless-stopped + environment: + - MYSQL_ROOT_PASSWORD=owncloud + - MYSQL_USER=owncloud + - MYSQL_PASSWORD=owncloud + - MYSQL_DATABASE=owncloud + - TZ=auto + command: + - "--character-set-server=utf8mb4" + - "--collation-server=utf8mb4_bin" + - "--max-allowed-packet=128M" + - "--innodb-log-file-size=64M" + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - "mysql:/var/lib/mysql" + ports: + - "3306:3306" + + redis: + image: "redis:6" + container_name: owncloud_redis + restart: unless-stopped + command: + - "--databases" + - "1" + healthcheck: + test: + - CMD + - redis-cli + - ping + interval: 10s + timeout: 5s + retries: 5 + volumes: + - "redis:/data" + ports: + - "6379:6379" + +volumes: + files: + driver: local + mysql: + driver: local + redis: + driver: local From 36f0874b23a6b602452b52f00db64408ed7379cf Mon Sep 17 00:00:00 2001 From: Alex Renoki Date: Sat, 5 Oct 2024 06:16:31 +0300 Subject: [PATCH 23/55] Added flowise --- public/svgs/flowise.png | Bin 0 -> 7230 bytes templates/compose/flowise-with-databases.yaml | 93 ++++++++++++++++++ templates/compose/flowise.yaml | 35 +++++++ 3 files changed, 128 insertions(+) create mode 100644 public/svgs/flowise.png create mode 100644 templates/compose/flowise-with-databases.yaml create mode 100644 templates/compose/flowise.yaml diff --git a/public/svgs/flowise.png b/public/svgs/flowise.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0be0d2a7f4fbffb3f9eea9f938f8c3460c0b7a GIT binary patch literal 7230 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 VHBCY=|9rtaTI%|0wW_b9{|7Qx<|P0C literal 0 HcmV?d00001 diff --git a/templates/compose/flowise-with-databases.yaml b/templates/compose/flowise-with-databases.yaml new file mode 100644 index 0000000000..78d163760b --- /dev/null +++ b/templates/compose/flowise-with-databases.yaml @@ -0,0 +1,93 @@ +# documentation: https://docs.flowiseai.com/ +# slogan: Flowise is an open source low-code tool for developers to build customized LLM orchestration flows & AI agents. Also deploys Redis, Postgres and other services. +# tags: lowcode, nocode, ai, llm, openai, anthropic, machine-learning, rag, agents, chatbot, api, team, bot, flows +# logo: svgs/flowise.png +# port: 3001 + +version: "3" + +volumes: + flowise_data: + pg_record_manager_data: + redis_cache_data: + qdrant_data: + +services: + flowise: + image: flowiseai/flowise + restart: always + depends_on: + pg_record_manager: + condition: service_healthy + redis_cache: + condition: service_healthy + qdrant: + condition: service_healthy + environment: + - SERVICE_FQDN_FLOWISE_3001 + - DEBUG=false + - DISABLE_FLOWISE_TELEMETRY=true + - PORT=3001 + - DATABASE_PATH=/root/.flowise + - APIKEY_PATH=/root/.flowise + - SECRETKEY_PATH=/root/.flowise + - LOG_PATH=/root/.flowise/logs + - BLOB_STORAGE_PATH=/root/.flowise/storage + - FLOWISE_USERNAME=${SERVICE_USER_FLOWISE} + - FLOWISE_PASSWORD=${SERVICE_PASSWORD_FLOWISE} + volumes: + - flowise_data:/root/.flowise + healthcheck: + test: + - CMD-SHELL + - wget + - --no-verbose + - --tries=1 + - --spider + - http://localhost:3001 + interval: 5s + timeout: 5s + retries: 3 + pg_record_manager: + image: "postgres:16" + restart: always + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-record_manager} + volumes: + - pg_record_manager_data:/var/lib/postgresql/data + healthcheck: + test: + - CMD-SHELL + - "pg_isready -h localhost -U $${POSTGRES_USER} -d $${POSTGRES_DB}" + interval: 5s + timeout: 5s + retries: 3 + redis_cache: + image: "redis:7" + restart: always + volumes: + - redis_cache_data:/data + healthcheck: + test: + - CMD-SHELL + - "redis-cli -h localhost -p 6379 ping" + interval: 5s + timeout: 5s + retries: 3 + qdrant: + image: "qdrant/qdrant:latest" + restart: always + environment: + - SERVICE_FQDN_QDRANT_6333 + - QDRANT__SERVICE__API_KEY=${SERVICE_PASSWORD_QDRANTAPIKEY} + volumes: + - "qdrant_data:/qdrant/storage" + healthcheck: + test: + - CMD-SHELL + - bash -c ':> /dev/tcp/127.0.0.1/6333' || exit 1 + interval: 5s + timeout: 5s + retries: 3 diff --git a/templates/compose/flowise.yaml b/templates/compose/flowise.yaml new file mode 100644 index 0000000000..dc5095e1e9 --- /dev/null +++ b/templates/compose/flowise.yaml @@ -0,0 +1,35 @@ +# documentation: https://docs.flowiseai.com/ +# slogan: Flowise is an open source low-code tool for developers to build customized LLM orchestration flows & AI agents. +# tags: lowcode, nocode, ai, llm, openai, anthropic, machine-learning, rag, agents, chatbot, api, team, bot, flows +# logo: svgs/flowise.png +# port: 3001 + +services: + flowise: + image: flowiseai/flowise + restart: always + environment: + - SERVICE_FQDN_FLOWISE_3001 + - DEBUG=false + - DISABLE_FLOWISE_TELEMETRY=true + - PORT=3001 + - DATABASE_PATH=/root/.flowise + - APIKEY_PATH=/root/.flowise + - SECRETKEY_PATH=/root/.flowise + - LOG_PATH=/root/.flowise/logs + - BLOB_STORAGE_PATH=/root/.flowise/storage + - FLOWISE_USERNAME=${SERVICE_USER_FLOWISE} + - FLOWISE_PASSWORD=${SERVICE_PASSWORD_FLOWISE} + volumes: + - flowise_data:/root/.flowise + healthcheck: + test: + - CMD-SHELL + - wget + - --no-verbose + - --tries=1 + - --spide + - http://localhost:3001 + interval: 5s + timeout: 5s + retries: 3 From 57e646a91ef08a874aaa7bc4f4774bba5253c8ed Mon Sep 17 00:00:00 2001 From: Osama Riaz Date: Sun, 6 Oct 2024 03:00:56 +0500 Subject: [PATCH 24/55] feat: affine service template and logo --- public/svgs/affine.svg | 88 +++++++++++++++++++++++++++++++++++ templates/compose/affine.yaml | 71 ++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 public/svgs/affine.svg create mode 100644 templates/compose/affine.yaml diff --git a/public/svgs/affine.svg b/public/svgs/affine.svg new file mode 100644 index 0000000000..d8063e9206 --- /dev/null +++ b/public/svgs/affine.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/affine.yaml b/templates/compose/affine.yaml new file mode 100644 index 0000000000..c863b80316 --- /dev/null +++ b/templates/compose/affine.yaml @@ -0,0 +1,71 @@ +# documentation: https://docs.affine.pro/docs/self-host-affine +# slogan: AFFiNE is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative. +# tags: knowledge-management,notion,miro,workspace +# logo: svgs/affine.svg + +services: + affine: + image: 'ghcr.io/toeverything/affine-graphql:stable' + command: + - sh + - '-c' + - 'node ./scripts/self-host-predeploy && node ./dist/index.js' + ports: + - ':3010' + - ':5555' + depends_on: + redis: + condition: service_healthy + postgres: + condition: service_healthy + volumes: + - '~/.affine/self-host/config:/root/.affine/config' + - '~/.affine/self-host/storage:/root/.affine/storage' + logging: + driver: json-file + options: + max-size: 1000m + environment: + - SERVICE_FQDN_AFFINE + - 'NODE_OPTIONS="--import=./scripts/register.js"' + - AFFINE_CONFIG_PATH=/root/.affine/config + - REDIS_SERVER_HOST=redis + - 'DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine}' + - NODE_ENV=production + - AFFINE_SERVER_HOST=$SERVICE_FQDN_AFFINE + - AFFINE_SERVER_EXTERNAL_URL=$SERVICE_FQDN_AFFINE + - MAILER_HOST=$MAILER_HOST + - MAILER_PORT=$MAILER_PORT + - MAILER_USER=$MAILER_USER + - MAILER_PASSWORD=$MAILER_PASSWORD + - MAILER_SENDER=$MAILER_SENDER + redis: + image: redis + volumes: + - '~/.affine/self-host/redis:/data' + healthcheck: + test: + - CMD + - redis-cli + - '--raw' + - incr + - ping + interval: 10s + timeout: 5s + retries: 5 + postgres: + image: postgres + volumes: + - '~/.affine/self-host/postgres:/var/lib/postgresql/data' + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U affine' + interval: 10s + timeout: 5s + retries: 5 + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - 'POSTGRES_DB=${POSTGRES_DB:-affine}' + - PGDATA=/var/lib/postgresql/data/pgdata From 0f5e75f9bfac892254948d9faa81ff9aa9da40a0 Mon Sep 17 00:00:00 2001 From: "Alexander G." Date: Mon, 7 Oct 2024 11:26:05 +0300 Subject: [PATCH 25/55] Update flowise-with-databases.yaml --- templates/compose/flowise-with-databases.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/templates/compose/flowise-with-databases.yaml b/templates/compose/flowise-with-databases.yaml index 78d163760b..d78079b621 100644 --- a/templates/compose/flowise-with-databases.yaml +++ b/templates/compose/flowise-with-databases.yaml @@ -4,8 +4,6 @@ # logo: svgs/flowise.png # port: 3001 -version: "3" - volumes: flowise_data: pg_record_manager_data: From 2522ecf83263758fab962316aaa0f6593131f4f2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 8 Oct 2024 17:08:26 +0200 Subject: [PATCH 26/55] chore: Update version to 4.0.0-beta.357 --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index 14f8ff5f1a..25cf7e423d 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.356', + 'release' => '4.0.0-beta.357', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index b33115d86f..ee8ab588ef 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Tue, 8 Oct 2024 17:08:35 +0200 Subject: [PATCH 27/55] fix: select server view --- resources/views/livewire/project/new/select.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index cbed5b6bda..d8f6affdbe 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -204,8 +204,8 @@ function searchResources() { } } - @endif + @if ($current_step === 'servers')

Select a server

From 6ac2a1f9e78fd43330902f167677f8441d28a8d7 Mon Sep 17 00:00:00 2001 From: Darren Sisson Date: Tue, 8 Oct 2024 17:28:26 +0100 Subject: [PATCH 28/55] fix glitchtip template --- templates/compose/glitchtip.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/templates/compose/glitchtip.yaml b/templates/compose/glitchtip.yaml index a8e4848b09..0acbf6dfbd 100644 --- a/templates/compose/glitchtip.yaml +++ b/templates/compose/glitchtip.yaml @@ -53,7 +53,6 @@ services: - postgres - redis environment: - - SERVICE_FQDN_GLITCHTIP - DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip} - SECRET_KEY=$SERVICE_BASE64_64_ENCRYPTION - EMAIL_URL=${EMAIL_URL:-consolemail://} From a95a62bb6456722d8247d88d6a872edc633fd078 Mon Sep 17 00:00:00 2001 From: wkng Date: Wed, 9 Oct 2024 12:39:48 +0000 Subject: [PATCH 29/55] update community-edition and postgres to latest versions --- templates/compose/plausible.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/plausible.yaml b/templates/compose/plausible.yaml index 7db12cb005..e02e92d389 100644 --- a/templates/compose/plausible.yaml +++ b/templates/compose/plausible.yaml @@ -6,7 +6,7 @@ services: plausible: - image: "ghcr.io/plausible/community-edition:v2.1" + image: "ghcr.io/plausible/community-edition:v2.1.4" command: 'sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"' environment: - SERVICE_FQDN_PLAUSIBLE @@ -22,7 +22,7 @@ services: image: bytemark/smtp plausible_db: - image: "postgres:14-alpine" + image: "postgres:16-alpine" volumes: - "db-data:/var/lib/postgresql/data" environment: From 7c3a9d2f71a54e21be945a9371a04967f6e5062e Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:07:21 +0200 Subject: [PATCH 30/55] fix cloudbeaver --- templates/compose/cloudbeaver.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/compose/cloudbeaver.yaml b/templates/compose/cloudbeaver.yaml index 6ca82eecf9..a21b004530 100644 --- a/templates/compose/cloudbeaver.yaml +++ b/templates/compose/cloudbeaver.yaml @@ -2,13 +2,13 @@ # slogan: CloudBeaver is a lightweight web application designed for comprehensive data management. # tags: dbeaver, data management, data, database, mysql, postgres, sqlite, sql, mongodb # logo: svgs/cloudbeaver.svg +# port: 8978 services: cloudbeaver: - restart: unless-stopped - image: dbeaver/cloudbeaver:24.1.5 + image: dbeaver/cloudbeaver:24 volumes: - - cloudbeaver:/opt/cloudbeaver/workspace + - cloudbeaver-data:/opt/cloudbeaver/workspace environment: - SERVICE_FQDN_CLOUDBEAVER_8978 healthcheck: From 67b7d15aca1282eabbea9007a105195a3c09915e Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:21:37 +0200 Subject: [PATCH 31/55] fix freshrss --- templates/compose/freshrss.yaml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml index 1c5eb0ce44..e861ef51a1 100644 --- a/templates/compose/freshrss.yaml +++ b/templates/compose/freshrss.yaml @@ -1,16 +1,20 @@ # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed +# logo: svgs/freshrss.svg +# port: 80 services: freshrss: image: freshrss/freshrss:latest environment: - SERVICE_FQDN_FRESHRSS_80 - - POSTGRES_DB=freshrss - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - 'CRON_MIN=1,31' + - CRON_MIN=${CRON_MIN:-1,31} volumes: - - freshrss_data:/var/www/FreshRSS/data - - freshrss_extensions:/var/www/FreshRSS/extensions + - freshrss-data:/var/www/FreshRSS/data + - freshrss-extensions:/var/www/FreshRSS/extensions + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] + interval: 5s + timeout: 20s + retries: 3 From aa7d950f507f9fd97adbd0db947bf111667d7ac2 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:27:45 +0200 Subject: [PATCH 32/55] fix freshrss logo --- public/svgs/freshrss.png | Bin 0 -> 14801 bytes templates/compose/freshrss.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/svgs/freshrss.png diff --git a/public/svgs/freshrss.png b/public/svgs/freshrss.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a75118f93d05313314f65764102669bafc4566 GIT binary patch literal 14801 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 Date: Wed, 9 Oct 2024 15:57:29 +0200 Subject: [PATCH 33/55] Feat: Other DB options for freshrss --- templates/compose/freshrss-with-mariadb.yaml | 38 +++++++++++++++++ templates/compose/freshrss-with-mysql.yaml | 38 +++++++++++++++++ .../compose/freshrss-with-postgresql.yaml | 41 +++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 templates/compose/freshrss-with-mariadb.yaml create mode 100644 templates/compose/freshrss-with-mysql.yaml create mode 100644 templates/compose/freshrss-with-postgresql.yaml diff --git a/templates/compose/freshrss-with-mariadb.yaml b/templates/compose/freshrss-with-mariadb.yaml new file mode 100644 index 0000000000..b280d883e3 --- /dev/null +++ b/templates/compose/freshrss-with-mariadb.yaml @@ -0,0 +1,38 @@ +# documentation: https://freshrss.org/index.html +# slogan: A free, self-hostable feed aggregator. +# tags: rss, feed +# logo: svgs/freshrss.png +# port: 80 + +services: + freshrss: + image: freshrss/freshrss:latest + environment: + - SERVICE_FQDN_FRESHRSS_80 + - CRON_MIN=${CRON_MIN:-1,31} + - MARIADB_DB=${MARIADB_DATABASE:-freshrss} + - MARIADB_USER=${SERVICE_USER_MARIADB} + - MARIADB_PASSWORD=${SERVICE_PASSWORD_MARIADB} + volumes: + - freshrss-data:/var/www/FreshRSS/data + - freshrss-extensions:/var/www/FreshRSS/extensions + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] + interval: 5s + timeout: 20s + retries: 3 + + mariadb: + image: mariadb:11 + volumes: + - mariadb-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=${MARIADB_DATABASE:-freshrss} + - MYSQL_USER=${SERVICE_USER_MARIADB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/freshrss-with-mysql.yaml b/templates/compose/freshrss-with-mysql.yaml new file mode 100644 index 0000000000..6e6be93202 --- /dev/null +++ b/templates/compose/freshrss-with-mysql.yaml @@ -0,0 +1,38 @@ +# documentation: https://freshrss.org/index.html +# slogan: A free, self-hostable feed aggregator. +# tags: rss, feed +# logo: svgs/freshrss.png +# port: 80 + +services: + freshrss: + image: freshrss/freshrss:latest + environment: + - SERVICE_FQDN_FRESHRSS_80 + - CRON_MIN=${CRON_MIN:-1,31} + - MYSQL_DB=${MYSQL_DATABASE:-freshrss} + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + volumes: + - freshrss-data:/var/www/FreshRSS/data + - freshrss-extensions:/var/www/FreshRSS/extensions + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] + interval: 5s + timeout: 20s + retries: 3 + + mysql: + image: mysql:8 + volumes: + - mysql-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=${MYSQL_DATABASE:-freshrss} + - MYSQL_USER=$SERVICE_USER_MYSQL + - MYSQL_PASSWORD=$SERVICE_PASSWORD_MYSQL + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/freshrss-with-postgresql.yaml b/templates/compose/freshrss-with-postgresql.yaml new file mode 100644 index 0000000000..8928dfd562 --- /dev/null +++ b/templates/compose/freshrss-with-postgresql.yaml @@ -0,0 +1,41 @@ +# documentation: https://freshrss.org/index.html +# slogan: A free, self-hostable feed aggregator. +# tags: rss, feed +# logo: svgs/freshrss.png +# port: 80 + +services: + freshrss: + image: freshrss/freshrss:latest + environment: + - SERVICE_FQDN_FRESHRSS_80 + - CRON_MIN=${CRON_MIN:-1,31} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-freshrss} + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_HOST=postgresql + volumes: + - freshrss-data:/var/www/FreshRSS/data + - freshrss-extensions:/var/www/FreshRSS/extensions + depends_on: + freshrss-db: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] + interval: 5s + timeout: 20s + retries: 3 + + freshrss-db: + image: postgres:16 + volumes: + - freshrss-postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-freshrss} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 From 974325e6b8a4f87728bbc91fbfd2f65161f102e1 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:02:00 +0200 Subject: [PATCH 34/55] disable other DBs for now as login seems broken with them --- templates/compose/freshrss-with-mariadb.yaml | 1 + templates/compose/freshrss-with-mysql.yaml | 1 + templates/compose/freshrss-with-postgresql.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/templates/compose/freshrss-with-mariadb.yaml b/templates/compose/freshrss-with-mariadb.yaml index b280d883e3..4b95f61214 100644 --- a/templates/compose/freshrss-with-mariadb.yaml +++ b/templates/compose/freshrss-with-mariadb.yaml @@ -1,3 +1,4 @@ +# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed diff --git a/templates/compose/freshrss-with-mysql.yaml b/templates/compose/freshrss-with-mysql.yaml index 6e6be93202..a6ccd06404 100644 --- a/templates/compose/freshrss-with-mysql.yaml +++ b/templates/compose/freshrss-with-mysql.yaml @@ -1,3 +1,4 @@ +# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed diff --git a/templates/compose/freshrss-with-postgresql.yaml b/templates/compose/freshrss-with-postgresql.yaml index 8928dfd562..4f8ed30569 100644 --- a/templates/compose/freshrss-with-postgresql.yaml +++ b/templates/compose/freshrss-with-postgresql.yaml @@ -1,3 +1,4 @@ +# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed From 097f24394c0722e93ef1a6ebb03737c683d4d96e Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:20:11 +0200 Subject: [PATCH 35/55] fix traccar --- public/svgs/traccar.png | Bin 0 -> 22009 bytes .../compose/{traccar.yml => traccar.yaml} | 25 +++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 public/svgs/traccar.png rename templates/compose/{traccar.yml => traccar.yaml} (63%) diff --git a/public/svgs/traccar.png b/public/svgs/traccar.png new file mode 100644 index 0000000000000000000000000000000000000000..c747aea05407bc78019b28dbb5cec82ac73f872c GIT binary patch literal 22009 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 F{{m9gF)#oC literal 0 HcmV?d00001 diff --git a/templates/compose/traccar.yml b/templates/compose/traccar.yaml similarity index 63% rename from templates/compose/traccar.yml rename to templates/compose/traccar.yaml index 00ba1b699b..5aa0887fe9 100644 --- a/templates/compose/traccar.yml +++ b/templates/compose/traccar.yaml @@ -1,18 +1,18 @@ # documentation: https://www.traccar.org/documentation/ # slogan: Traccar is a free and open source modern GPS tracking system. # tags: traccar,gps,tracking,open,source -# logo: +# logo: svgs/traccar.png # port: 8082 services: traccar: - image: traccar/traccar + image: traccar/traccar:latest environment: - SERVICE_FQDN_TRACCAR_8082 - - SERVICE_FQDN_TRACCAR_API_5159 - - CONFIG_USE_ENVIRONMENT_VARIABLES=true - - DATABASE_USER=$SERVICE_USER_POSTGRES - - DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - SERVICE_FQDN_TRACCARAPI_5159 + - CONFIG_USE_ENVIRONMENT_VARIABLES=${CONFIG_USE_ENVIRONMENT_VARIABLES:-true} + - DATABASE_USER=${SERVICE_USER_POSTGRES} + - DATABASE_PASSWORD=${SERVICE_PASSWORD_POSTGRES} volumes: - type: bind source: ./srv/traccar/conf/traccar.xml @@ -28,14 +28,21 @@ services: depends_on: postgres: condition: service_healthy + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8082/ping"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 15s + postgres: image: postgres:16-alpine environment: - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - POSTGRES_DB=traccar + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-traccar} volumes: - - traccar-db-data:/var/lib/postgresql/data/ + - traccar-postgresql-data:/var/lib/postgresql/data/ healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s From 689c875884b8c2b8a329f8bcffbaaa044d51da20 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:33:30 +0200 Subject: [PATCH 36/55] fix vvveb --- ...th-mariadb.yml => vvveb-with-mariadb.yaml} | 27 ++++++++++--------- .../{vvveb.yml => vvveb-with-mysql.yaml} | 27 ++++++++++--------- ...{vvveb-without-database.yml => vvveb.yaml} | 6 ++--- 3 files changed, 33 insertions(+), 27 deletions(-) rename templates/compose/{vvveb-with-mariadb.yml => vvveb-with-mariadb.yaml} (57%) rename templates/compose/{vvveb.yml => vvveb-with-mysql.yaml} (57%) rename templates/compose/{vvveb-without-database.yml => vvveb.yaml} (81%) diff --git a/templates/compose/vvveb-with-mariadb.yml b/templates/compose/vvveb-with-mariadb.yaml similarity index 57% rename from templates/compose/vvveb-with-mariadb.yml rename to templates/compose/vvveb-with-mariadb.yaml index 7e1d663fa4..a20c70a46f 100644 --- a/templates/compose/vvveb-with-mariadb.yml +++ b/templates/compose/vvveb-with-mariadb.yaml @@ -2,35 +2,38 @@ # slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. # tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql # logo: svgs/vvveb.svg +# port: 80 services: vvveb: image: vvveb/vvvebcms:latest volumes: - - vvveb-files:/var/www/html + - vvveb-data:/var/www/html environment: - - SERVICE_FQDN_VVVEB - - DB_ENGINE=mysqli #sqlite,pgsql + - SERVICE_FQDN_VVVEB_80 + - DB_ENGINE=mysqli - DB_HOST=mariadb - - DB_USER=$SERVICE_USER_VVVEB - - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB - - DB_NAME=vvveb + - DB_USER=${SERVICE_USER_VVVEB} + - DB_PASSWORD=${SERVICE_PASSWORD_VVVEB} + - DB_NAME=${MARIADB_DATABASE:-vvveb} depends_on: - - mariadb + mariadb: + condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1"] interval: 2s timeout: 10s retries: 10 + mariadb: image: mariadb:11 volumes: - - mariadb-data:/var/lib/mysql + - vvveb-mariadb-data:/var/lib/mysql environment: - - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT - - MYSQL_DATABASE=vvveb - - MYSQL_USER=$SERVICE_USER_VVVEB - - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + - MYSQL_DATABASE=${MARIADB_DATABASE:-vvveb} + - MYSQL_USER=${SERVICE_USER_VVVEB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_VVVEB} healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 5s diff --git a/templates/compose/vvveb.yml b/templates/compose/vvveb-with-mysql.yaml similarity index 57% rename from templates/compose/vvveb.yml rename to templates/compose/vvveb-with-mysql.yaml index 43ec27c1a8..64b4b264ad 100644 --- a/templates/compose/vvveb.yml +++ b/templates/compose/vvveb-with-mysql.yaml @@ -2,35 +2,38 @@ # slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. # tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql # logo: svgs/vvveb.svg +# port: 80 services: vvveb: image: vvveb/vvvebcms:latest volumes: - - vvveb-files:/var/www/html + - vvveb-data:/var/www/html environment: - - SERVICE_FQDN_VVVEB - - DB_ENGINE=mysqli #sqlite,pgsql + - SERVICE_FQDN_VVVEB_80 + - DB_ENGINE=mysqli - DB_HOST=mysql - - DB_USER=$SERVICE_USER_VVVEB - - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB - - DB_NAME=vvveb + - DB_USER=${SERVICE_USER_VVVEB} + - DB_PASSWORD=${SERVICE_PASSWORD_VVVEB} + - DB_NAME=${MYSQL_DATABASE:-vvveb} depends_on: - - mysql + mysql: + condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1"] interval: 2s timeout: 10s retries: 10 + mysql: image: mysql:8.4.2 volumes: - - mysql-data:/var/lib/mysql + - vvveb-mysql-data:/var/lib/mysql environment: - - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT - - MYSQL_DATABASE=vvveb - - MYSQL_USER=$SERVICE_USER_VVVEB - - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + - MYSQL_DATABASE=${MYSQL_DATABASE:-vvveb} + - MYSQL_USER=${SERVICE_USER_VVVEB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_VVVEB} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] interval: 5s diff --git a/templates/compose/vvveb-without-database.yml b/templates/compose/vvveb.yaml similarity index 81% rename from templates/compose/vvveb-without-database.yml rename to templates/compose/vvveb.yaml index f1e92de638..11b71a7e9a 100644 --- a/templates/compose/vvveb-without-database.yml +++ b/templates/compose/vvveb.yaml @@ -2,15 +2,15 @@ # slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. # tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql # logo: svgs/vvveb.svg +# port: 80 services: vvveb: image: vvveb/vvvebcms:latest volumes: - - vvveb-files:/var/www/html + - vvveb-data:/var/www/html environment: - - SERVICE_FQDN_VVVEB - - DB_ENGINE=sqlite #mysqli,pgsql + - SERVICE_FQDN_VVVEB_80 healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1"] interval: 2s From 53dfda903f9ac49962419cb46880cd7cf212ed5f Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:38:26 +0200 Subject: [PATCH 37/55] fix freshrss with other Dbs --- templates/compose/freshrss-with-mariadb.yaml | 6 ++++-- templates/compose/freshrss-with-mysql.yaml | 6 ++++-- templates/compose/freshrss-with-postgresql.yaml | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/templates/compose/freshrss-with-mariadb.yaml b/templates/compose/freshrss-with-mariadb.yaml index 4b95f61214..fe066ffb60 100644 --- a/templates/compose/freshrss-with-mariadb.yaml +++ b/templates/compose/freshrss-with-mariadb.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed @@ -17,13 +16,16 @@ services: volumes: - freshrss-data:/var/www/FreshRSS/data - freshrss-extensions:/var/www/FreshRSS/extensions + depends_on: + freshrss-db: + condition: service_healthy healthcheck: test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] interval: 5s timeout: 20s retries: 3 - mariadb: + freshrss-db: image: mariadb:11 volumes: - mariadb-data:/var/lib/mysql diff --git a/templates/compose/freshrss-with-mysql.yaml b/templates/compose/freshrss-with-mysql.yaml index a6ccd06404..ca3726a124 100644 --- a/templates/compose/freshrss-with-mysql.yaml +++ b/templates/compose/freshrss-with-mysql.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed @@ -17,13 +16,16 @@ services: volumes: - freshrss-data:/var/www/FreshRSS/data - freshrss-extensions:/var/www/FreshRSS/extensions + depends_on: + freshrss-db: + condition: service_healthy healthcheck: test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"] interval: 5s timeout: 20s retries: 3 - mysql: + freshrss-db: image: mysql:8 volumes: - mysql-data:/var/lib/mysql diff --git a/templates/compose/freshrss-with-postgresql.yaml b/templates/compose/freshrss-with-postgresql.yaml index 4f8ed30569..8928dfd562 100644 --- a/templates/compose/freshrss-with-postgresql.yaml +++ b/templates/compose/freshrss-with-postgresql.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://freshrss.org/index.html # slogan: A free, self-hostable feed aggregator. # tags: rss, feed From 3ba76c5068004350ce94abda5d878f87e2bc1b8f Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:03:43 +0200 Subject: [PATCH 38/55] fix nextcloud postgres --- .../compose/nextcloud-with-postgres.yaml | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/templates/compose/nextcloud-with-postgres.yaml b/templates/compose/nextcloud-with-postgres.yaml index 15a2c97b67..7adebf71cf 100644 --- a/templates/compose/nextcloud-with-postgres.yaml +++ b/templates/compose/nextcloud-with-postgres.yaml @@ -2,42 +2,50 @@ # slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. # tags: cloud, collaboration, communication, filestorage, data # logo: svgs/nextcloud.svg +# port: 80 services: nextcloud: image: lscr.io/linuxserver/nextcloud:latest environment: - - SERVICE_FQDN_NEXTCLOUD + - SERVICE_FQDN_NEXTCLOUD_80 - PUID=1000 - PGID=1000 - - TZ=Europe/Paris + - TZ=${TZ:-Europe/Paris} - POSTGRES_DB=${POSTGRES_DB:-nextcloud} - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - POSTGRES_HOST=postgresql + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_HOST=nextcloud-db - REDIS_HOST=redis - REDIS_PORT=6379 volumes: - nextcloud-config:/config - nextcloud-data:/data + depends_on: + nextcloud-db: + condition: service_healthy + redis: + condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] interval: 2s timeout: 10s retries: 15 - postgresql: + + nextcloud-db: image: postgres:16-alpine volumes: - postgresql-data:/var/lib/postgresql/data environment: - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} - POSTGRES_DB=${POSTGRES_DB:-nextcloud} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 + redis: image: "redis:7.4-alpine" volumes: From 28852fd7059a37c492a57723848d994ecc7ff6ed Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:03:53 +0200 Subject: [PATCH 39/55] fix nextcloud sqlite --- templates/compose/nextcloud.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/templates/compose/nextcloud.yaml b/templates/compose/nextcloud.yaml index 33858ee15a..d0b2c2a593 100644 --- a/templates/compose/nextcloud.yaml +++ b/templates/compose/nextcloud.yaml @@ -2,15 +2,16 @@ # slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. # tags: cloud, collaboration, communication, filestorage, data # logo: svgs/nextcloud.svg +# port: 80 services: nextcloud: image: lscr.io/linuxserver/nextcloud:latest environment: - - SERVICE_FQDN_NEXTCLOUD + - SERVICE_FQDN_NEXTCLOUD_80 - PUID=1000 - PGID=1000 - - TZ=Europe/Madrid + - TZ=${TZ:-Europe/Madrid} volumes: - nextcloud-config:/config - nextcloud-data:/data From 32aaf95444b3fd94b5bd9bc5736821032c9ea8c6 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:07:53 +0200 Subject: [PATCH 40/55] Update nextcloud-with-postgres.yaml --- templates/compose/nextcloud-with-postgres.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/nextcloud-with-postgres.yaml b/templates/compose/nextcloud-with-postgres.yaml index 7adebf71cf..503fb4b826 100644 --- a/templates/compose/nextcloud-with-postgres.yaml +++ b/templates/compose/nextcloud-with-postgres.yaml @@ -35,7 +35,7 @@ services: nextcloud-db: image: postgres:16-alpine volumes: - - postgresql-data:/var/lib/postgresql/data + - nextcloud-postgresql-data:/var/lib/postgresql/data environment: - POSTGRES_USER=${SERVICE_USER_POSTGRES} - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} @@ -49,7 +49,7 @@ services: redis: image: "redis:7.4-alpine" volumes: - - "redis-data:/data" + - "nextcloud-redis-data:/data" healthcheck: test: - CMD From 1ddfbaa9d5f0f375ce302990707c84d5d7998f25 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:08:08 +0200 Subject: [PATCH 41/55] Feat: Nextcloud MariaDB and MySQL versions --- templates/compose/nextcloud-with-mariadb.yaml | 61 +++++++++++++++++++ templates/compose/nextcloud-with-mysql.yaml | 61 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 templates/compose/nextcloud-with-mariadb.yaml create mode 100644 templates/compose/nextcloud-with-mysql.yaml diff --git a/templates/compose/nextcloud-with-mariadb.yaml b/templates/compose/nextcloud-with-mariadb.yaml new file mode 100644 index 0000000000..5cab4f0bbc --- /dev/null +++ b/templates/compose/nextcloud-with-mariadb.yaml @@ -0,0 +1,61 @@ +# documentation: https://docs.nextcloud.com +# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. +# tags: cloud, collaboration, communication, filestorage, data +# logo: svgs/nextcloud.svg +# port: 80 + +services: + nextcloud: + image: lscr.io/linuxserver/nextcloud:latest + environment: + - SERVICE_FQDN_NEXTCLOUD_80 + - PUID=1000 + - PGID=1000 + - TZ=${TZ:-Europe/Paris} + - MYSQL_DATABASE=${MARIADB_DATABASE:-nextcloud} + - MYSQL_USER=${SERVICE_USER_MARIADB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - MYSQL_HOST=nextcloud-db + - REDIS_HOST=redis + - REDIS_PORT=6379 + volumes: + - nextcloud-config:/config + - nextcloud-data:/data + depends_on: + nextcloud-db: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + + nextcloud-db: + image: mariadb:11 + volumes: + - nextcloud-mariadb-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + - MYSQL_DATABASE=${MARIADB_DATABASE:-nextcloud} + - MYSQL_USER=${SERVICE_USER_MARIADB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: "redis:7.4-alpine" + volumes: + - "nextcloud-redis-data:/data" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 diff --git a/templates/compose/nextcloud-with-mysql.yaml b/templates/compose/nextcloud-with-mysql.yaml new file mode 100644 index 0000000000..f8f6b972fa --- /dev/null +++ b/templates/compose/nextcloud-with-mysql.yaml @@ -0,0 +1,61 @@ +# documentation: https://docs.nextcloud.com +# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. +# tags: cloud, collaboration, communication, filestorage, data +# logo: svgs/nextcloud.svg +# port: 80 + +services: + nextcloud: + image: lscr.io/linuxserver/nextcloud:latest + environment: + - SERVICE_FQDN_NEXTCLOUD_80 + - PUID=1000 + - PGID=1000 + - TZ=${TZ:-Europe/Paris} + - MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud} + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_HOST=nextcloud-db + - REDIS_HOST=redis + - REDIS_PORT=6379 + volumes: + - nextcloud-config:/config + - nextcloud-data:/data + depends_on: + nextcloud-db: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + + nextcloud-db: + image: mysql:8.4.2 + volumes: + - nextcloud-mysql-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + - MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud} + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: "redis:7.4-alpine" + volumes: + - "nextcloud-redis-data:/data" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 From 416e6368b963bb4b935f5c283838a210fea78fe9 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:23:10 +0200 Subject: [PATCH 42/55] fix kimai --- templates/compose/kimai.yaml | 42 +++++++++++++++--------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/templates/compose/kimai.yaml b/templates/compose/kimai.yaml index 26cd3da1c0..ba73ba9805 100644 --- a/templates/compose/kimai.yaml +++ b/templates/compose/kimai.yaml @@ -6,24 +6,20 @@ services: mysql: - image: mysql:8.3 - container_name: kimai_db + image: mysql:8 volumes: - - mysql:/var/lib/mysql + - kimai-mysql-data:/var/lib/mysql environment: - MYSQL_DATABASE=${MYSQL_DATABASE:-kimai} - - MYSQL_USER=${MYSQL_USER:-kimaiuser} + - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQL_ROOT} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} command: --default-storage-engine innodb - restart: unless-stopped healthcheck: - test: mysqladmin -p$$MYSQL_ROOT_PASSWORD ping -h localhost - interval: 20s - start_period: 10s - timeout: 10s - retries: 3 - + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 kimai: image: kimai/kimai2:apache-latest container_name: kimai @@ -31,22 +27,18 @@ services: mysql: condition: service_healthy volumes: - - data:/opt/kimai/var/data + - kimai-data:/opt/kimai/var/data environment: - - SERVICE_FQDN_KIMAI - - APP_SECRET=${SERVICE_PASSWORD_APP_SECRET} + - SERVICE_FQDN_KIMAI_8001 + - APP_SECRET=${SERVICE_PASSWORD_APPSECRET} - MAILER_FROM=${MAILER_FROM:-kimai@example.com} - MAILER_URL=${MAILER_URL:-null://null} - ADMINMAIL=${ADMINMAIL:-admin@kimai.local} - ADMINPASS=${SERVICE_PASSWORD_ADMINPASS} - - DATABASE_URL=mysql://${MYSQL_USER}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0 + - DATABASE_URL=mysql://${SERVICE_USER_MYSQL}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0 - TRUSTED_HOSTS=localhost - restart: unless-stopped - labels: - - traefik.enable=true - - traefik.http.routers.kimai.entryPoints=http - - traefik.http.services.kimai.loadbalancer.server.port=8001 - -volumes: - data: - mysql: + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8001"] + interval: 2s + timeout: 10s + retries: 15 From aa2e170160b0dc73ec4647fb70910fa008735488 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:38:27 +0200 Subject: [PATCH 43/55] fix unsend service --- templates/compose/resend.yaml | 59 ---------------------------------- templates/compose/unsend.yaml | 60 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 59 deletions(-) delete mode 100644 templates/compose/resend.yaml create mode 100644 templates/compose/unsend.yaml diff --git a/templates/compose/resend.yaml b/templates/compose/resend.yaml deleted file mode 100644 index b8b528a756..0000000000 --- a/templates/compose/resend.yaml +++ /dev/null @@ -1,59 +0,0 @@ -# documentation: https://docs.unsend.dev/get-started/self-hosting -# slogan: Unsend is an open-source alternative to Resend, Sendgrid, Mailgun and Postmark etc. -# tags: resend, mailer, marketing emails, transaction emails, self-hosting, postmark -# logo: svgs/unsend.svg -# port: 3000 - -services: - postgres: - image: postgres:16 - container_name: unsend-db-prod - restart: always - environment: - - POSTGRES_USER=${SERVICE_POSTGRES_USER:?err} - - POSTGRES_PASSWORD=${SERVICE_POSTGRES_PASSWORD:?err} - - POSTGRES_DB=${SERVICE_POSTGRES_DB:?err} - healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] - interval: 10s - timeout: 5s - retries: 5 - volumes: - - unsend-db:/var/lib/postgresql/data - - redis: - image: redis:7 - container_name: unsend-redis-prod - restart: always - volumes: - - unsend-cache:/data - command: ["redis-server", "--maxmemory-policy", "noeviction"] - - unsend: - image: unsend/unsend:latest - container_name: unsend - restart: always - ports: - - ${PORT:-3000}:${PORT:-3000} - environment: - - PORT=${PORT:-3000} - - DATABASE_URL=postgresql://postgres:${SERVICE_POSTGRES_PASSWORD}@postgres:5432/resend - - NEXTAUTH_URL=${SERVICE_NEXTAUTH_URL:?err} - - NEXTAUTH_SECRET=${SERVICE_NEXTAUTH_SECRET:?err} - - AWS_ACCESS_KEY=${SERVICE_AWS_ACCESS_KEY:?err} - - AWS_SECRET_KEY=${SERVICE_AWS_SECRET_KEY:?err} - - AWS_DEFAULT_REGION=${SERVICE_AWS_DEFAULT_REGION:?err} - - GITHUB_ID=${SERVICE_GITHUB_ID:?err} - - GITHUB_SECRET=${SERVICE_GITHUB_SECRET:?err} - - REDIS_URL=redis://redis:6379 - - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false} - - API_RATE_LIMIT=${SERVICE_API_RATE_LIMIT:-1} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_started - -volumes: - unsend-db: - unsend-cache: diff --git a/templates/compose/unsend.yaml b/templates/compose/unsend.yaml new file mode 100644 index 0000000000..6929e5dc12 --- /dev/null +++ b/templates/compose/unsend.yaml @@ -0,0 +1,60 @@ +# documentation: https://docs.unsend.dev/get-started/self-hosting +# slogan: Unsend is an open-source alternative to Resend, Sendgrid, Mailgun and Postmark etc. +# tags: resend, mailer, marketing emails, transaction emails, self-hosting, postmark +# logo: svgs/unsend.svg +# port: 3000 + +services: + postgres: + image: postgres:16 + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${SERVICE_DB_POSTGRES:-unsend} + healthcheck: + test: ["CMD", "pg_isready", "-U", "${SERVICE_USER_POSTGRES}"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - unsend-postgres-data:/var/lib/postgresql/data + + redis: + image: redis:7 + volumes: + - unsend-redis-data:/data + command: ["redis-server", "--maxmemory-policy", "noeviction"] + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 + + unsend: + image: unsend/unsend:latest + environment: + - SERVICE_FQDN_UNSEND_3000 + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${SERVICE_DB_POSTGRES:-unsend} + - NEXTAUTH_URL=${SERVICE_FQDN_UNSEND} + - NEXTAUTH_SECRET=${SERVICE_BASE64_64_NEXTAUTHSECRET} + - AWS_ACCESS_KEY=${SERVICE_AWS_ACCESS_KEY} + - AWS_SECRET_KEY=${SERVICE_AWS_SECRET_KEY} + - AWS_DEFAULT_REGION=${SERVICE_AWS_DEFAULT_REGION} + - GITHUB_ID=${SERVICE_GITHUB_ID:-1234567890} + - GITHUB_SECRET=${SERVICE_GITHUB_SECRET:-abcde1234567890} + - REDIS_URL=redis://redis:6379 + - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false} + - API_RATE_LIMIT=${SERVICE_API_RATE_LIMIT:-1} + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 From 987b7a9e2dee64e07c545aa666e561844a5b8717 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:42:19 +0200 Subject: [PATCH 44/55] fix ntfy --- templates/compose/ntfy.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index 3914136a51..47b66a1247 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -7,12 +7,12 @@ services: ntfy: image: binwiederhier/ntfy - container_name: ntfy command: - serve environment: - - TZ=${TZ:-UTC} + - SERVICE_FQDN_NTFY_80 - NTFY_BASE_URL=${SERVICE_FQDN_NTFY} + - TZ=${TZ:-UTC} - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh} @@ -36,12 +36,11 @@ services: - NTFY_WEB_PUSH_PRIVATE_KEY=${NTFY_WEB_PUSH_PRIVATE_KEY} - NTFY_WEB_PUSH_EMAIL_ADDRESS=${NTFY_WEB_PUSH_EMAIL_ADDRESS} volumes: - - ./cache:/var/cache/ntfy - - ./db:/var/lib/ntfy/ + - ntfy-cache:/var/cache/ntfy + - ntfy-db:/var/lib/ntfy/ healthcheck: test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] interval: 60s timeout: 10s retries: 3 start_period: 40s - restart: unless-stopped From a61ced89f0a45ce68788306d4cc84c418e3be5f1 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:50:23 +0200 Subject: [PATCH 45/55] fix glitchtip healthchecks --- templates/compose/glitchtip.yaml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/templates/compose/glitchtip.yaml b/templates/compose/glitchtip.yaml index 0acbf6dfbd..2f0b0100c3 100644 --- a/templates/compose/glitchtip.yaml +++ b/templates/compose/glitchtip.yaml @@ -12,12 +12,13 @@ services: - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} - POSTGRES_DB=${POSTGRESQL_DATABASE:-glitchtip} volumes: - - pg-data:/var/lib/postgresql/data + - glitchtip-postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 + redis: image: redis healthcheck: @@ -25,11 +26,14 @@ services: interval: 5s timeout: 20s retries: 10 + web: image: glitchtip/glitchtip depends_on: - - postgres - - redis + postgres: + condition: service_healthy + redis: + condition: service_healthy environment: - SERVICE_FQDN_GLITCHTIP_8080 - DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip} @@ -46,12 +50,15 @@ services: interval: 5s timeout: 20s retries: 10 + worker: image: glitchtip/glitchtip command: ./bin/run-celery-with-beat.sh depends_on: - - postgres - - redis + postgres: + condition: service_healthy + redis: + condition: service_healthy environment: - DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip} - SECRET_KEY=$SERVICE_BASE64_64_ENCRYPTION @@ -67,12 +74,15 @@ services: interval: 5s timeout: 20s retries: 10 + migrate: image: glitchtip/glitchtip restart: "no" depends_on: - - postgres - - redis + postgres: + condition: service_healthy + redis: + condition: service_healthy command: "./manage.py migrate" environment: - DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip} From df7494b0f0426cf9b6bae31627d0f7615e7fc3d7 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:59:08 +0200 Subject: [PATCH 46/55] fix qbittorrent --- templates/compose/qbittorrent.yaml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/templates/compose/qbittorrent.yaml b/templates/compose/qbittorrent.yaml index 718a32ab82..f7a4ad878f 100644 --- a/templates/compose/qbittorrent.yaml +++ b/templates/compose/qbittorrent.yaml @@ -8,13 +8,13 @@ services: qbit: image: "lscr.io/linuxserver/qbittorrent:latest" environment: - - WEBUI_PORT=8080 + - WEBUI_PORT=${WEBUI_PORT:-8080} - PUID=1000 - PGID=1000 volumes: - - "data-qbittorrent:/config" - - "data-downloads:/downloads" - - "data-torrents:/torrents" + - qbittorrent-config:/config + - qbittorrent-downloads:/downloads + - qbittorrent-torrents:/torrents healthcheck: test: - CMD @@ -25,16 +25,17 @@ services: interval: 5s timeout: 20s retries: 10 + vuetorrent-backend: image: "ghcr.io/vuetorrent/vuetorrent-backend:latest" environment: - SERVICE_FQDN_QBITORRENT_8080 - - PORT=8080 - - "QBIT_BASE=http://qbit:8080" - - RELEASE_TYPE=stable - - "UPDATE_VT_CRON=0 * * * *" + - PORT=${WEBUI_PORT:-8080} + - QBIT_BASE=${SERVICE_FQDN_QBITORRENT} + - RELEASE_TYPE=${RELEASE_TYPE:-stable} + - UPDATE_VT_CRON=${UPDATE_VT_CRON:-"0 * * * *"} volumes: - - "data-config:/config" + - vuetorrent-config:/config healthcheck: test: - CMD From b0743076f38f4d10f09a2b40c0d8ee5a8abaaa16 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:04:03 +0200 Subject: [PATCH 47/55] fix homebox --- templates/compose/homebox.yaml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/templates/compose/homebox.yaml b/templates/compose/homebox.yaml index 859af7b92e..f7c09ed310 100644 --- a/templates/compose/homebox.yaml +++ b/templates/compose/homebox.yaml @@ -4,18 +4,14 @@ # logo: svgs/homebox.svg # port: 7745 -version: "3.8" - services: homebox: image: ghcr.io/hay-kot/homebox:latest - container_name: "homebox" - restart: unless-stopped environment: - SERVICE_FQDN_HOMEBOX_7745 - - HBOX_LOG_LEVEL=info - - HBOX_LOG_FORMAT=text - - HBOX_WEB_MAX_UPLOAD_SIZE=10 + - HBOX_LOG_LEVEL=${HBOX_LOG_LEVEL:-info} + - HBOX_LOG_FORMAT=${HBOX_LOG_FORMAT:-text} + - HBOX_WEB_MAX_UPLOAD_SIZE=${HBOX_WEB_MAX_UPLOAD_SIZE:-10} volumes: - homebox-data:/data/ healthcheck: @@ -23,7 +19,3 @@ services: interval: 5s timeout: 20s retries: 10 - -volumes: - homebox-data: - driver: local From b10a22960f749edf3682e35a654826b1a72a2bae Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:23:02 +0200 Subject: [PATCH 48/55] fix cryptgeon --- templates/compose/cryptgeon.yaml | 42 +++++++++++++++++--------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/templates/compose/cryptgeon.yaml b/templates/compose/cryptgeon.yaml index f31b37f683..c544b36d98 100644 --- a/templates/compose/cryptgeon.yaml +++ b/templates/compose/cryptgeon.yaml @@ -1,30 +1,22 @@ # documentation: https://github.com/cupcakearmy/cryptgeon # slogan: Secure note / file sharing service inspired by PrivNote. # tags: cryptgeon, secure, note, sharing, privnote, file, sharing +# logo: svgs/cryptgeon.svg +# port: 8000 services: - redis: - image: "redis:7-alpine" - command: "redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru" - healthcheck: - test: - - CMD - - redis-cli - - PING - interval: 5s - timeout: 10s - retries: 2 app: - image: "cupcakearmy/cryptgeon:latest" - depends_on: - - redis + image: cupcakearmy/cryptgeon:latest environment: - - "SIZE_LIMIT=${SIZE_LIMIT:-4 MiB}" - - "MAX_VIEWS=${MAX_VIEWS:-100}" - - "MAX_EXPIRATION=${MAX_EXPIRATION:-360}" - - "ALLOW_ADVANCED=${ALLOW_ADVANCED:-true}" - - "ALLOW_FILES=${ALLOW_FILES:-true}" - SERVICE_FQDN_CRYPTGEON_8000 + - SIZE_LIMIT=${SIZE_LIMIT:-4 MiB} + - MAX_VIEWS=${MAX_VIEWS:-100} + - MAX_EXPIRATION=${MAX_EXPIRATION:-360} + - ALLOW_ADVANCED=${ALLOW_ADVANCED:-true} + - ALLOW_FILES=${ALLOW_FILES:-true} + depends_on: + redis: + condition: service_healthy healthcheck: test: - CMD @@ -35,3 +27,15 @@ services: timeout: 3s retries: 2 start_period: 5s + + redis: + image: redis:7-alpine + command: "redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 2 From 751a3dcd85676e188bef6b83de176e68018d1ffd Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:32:38 +0200 Subject: [PATCH 49/55] fix cryptgeon logo --- public/svgs/cryptgeon.png | Bin 0 -> 77470 bytes templates/compose/cryptgeon.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/svgs/cryptgeon.png diff --git a/public/svgs/cryptgeon.png b/public/svgs/cryptgeon.png new file mode 100644 index 0000000000000000000000000000000000000000..be121cfd082f63e4599a0a5ad11577a0d959c0a1 GIT binary patch literal 77470 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 Y4s7b#`uKB?akabW?e0se+#YuP|4}xp9RL6T literal 0 HcmV?d00001 diff --git a/templates/compose/cryptgeon.yaml b/templates/compose/cryptgeon.yaml index c544b36d98..942b1601c6 100644 --- a/templates/compose/cryptgeon.yaml +++ b/templates/compose/cryptgeon.yaml @@ -1,7 +1,7 @@ # documentation: https://github.com/cupcakearmy/cryptgeon # slogan: Secure note / file sharing service inspired by PrivNote. # tags: cryptgeon, secure, note, sharing, privnote, file, sharing -# logo: svgs/cryptgeon.svg +# logo: svgs/cryptgeon.png # port: 8000 services: From 7da6b016f5eb4fcf55acd7edfc234769317b1548 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:03:21 +0200 Subject: [PATCH 50/55] fix owncloud --- templates/compose/owncloud.yaml | 76 ++++++++++++--------------------- 1 file changed, 28 insertions(+), 48 deletions(-) diff --git a/templates/compose/owncloud.yaml b/templates/compose/owncloud.yaml index b9111587d8..6c29ddbe77 100644 --- a/templates/compose/owncloud.yaml +++ b/templates/compose/owncloud.yaml @@ -1,31 +1,31 @@ +# ignore: true # documentation: https://owncloud.com/docs -# slogan: ownCloud with Open Web UI integrates file management with a powerful, user-friendly interface. +# slogan: OwnCloud with Open Web UI integrates file management with a powerful, user-friendly interface. # tags: owncloud,file-management,open-web-ui,integration,cloud # logo: svgs/owncloud.svg # port: 8080 -version: "3.9" services: owncloud: - image: "owncloud/server:latest" - container_name: owncloud_server - restart: unless-stopped + image: owncloud/server:latest depends_on: - - mariadb - - redis + mariadb: + condition: service_healthy + redis: + condition: service_healthy environment: - SERVICE_FQDN_OWNCLOUD_8080 - - "OWNCLOUD_DOMAIN=127.0.0.1:8080" - - "OWNCLOUD_TRUSTED_DOMAINS=${OWNCLOUD_TRUSTED_DOMAINS:-localhost,127.0.0.1}" + - OWNCLOUD_DOMAIN=${SERVICE_FQDN_OWNCLOUD} + - OWNCLOUD_TRUSTED_DOMAINS=${SERVICE_FQDN_OWNCLOUD} # This is a comma separated list of domains that are trusted by the server (No Protocol) - OWNCLOUD_DB_TYPE=mysql - - OWNCLOUD_DB_NAME=owncloud - - OWNCLOUD_DB_USERNAME=owncloud - - "OWNCLOUD_DB_PASSWORD=owncloud" - OWNCLOUD_DB_HOST=mariadb - - "OWNCLOUD_ADMIN_USERNAME=${ADMIN_USER:-owncloud}" - - "OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD:-owncloud}" - - OWNCLOUD_MYSQL_UTF8MB4=true - - OWNCLOUD_REDIS_ENABLED=true + - OWNCLOUD_DB_NAME=${DB_NAME:-owncloud} + - OWNCLOUD_DB_USERNAME=${SERVICE_USER_MARIADB} + - OWNCLOUD_DB_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - OWNCLOUD_ADMIN_USERNAME=${SERVICE_USER_OWNCLOUD} + - OWNCLOUD_ADMIN_PASSWORD=${SERVICE_PASSWORD_OWNCLOUD} + - OWNCLOUD_MYSQL_UTF8MB4=${MYSQL_UTF8MB4:-true} + - OWNCLOUD_REDIS_ENABLED=${REDIS_ENABLED:-true} - OWNCLOUD_REDIS_HOST=redis healthcheck: test: @@ -35,19 +35,15 @@ services: timeout: 10s retries: 5 volumes: - - "files:/mnt/data" - ports: - - "8080:8080" + - owncloud-data:/mnt/data mariadb: - image: "mariadb:latest" - container_name: owncloud_mariadb - restart: unless-stopped + image: mariadb:latest environment: - - MYSQL_ROOT_PASSWORD=owncloud - - MYSQL_USER=owncloud - - MYSQL_PASSWORD=owncloud - - MYSQL_DATABASE=owncloud + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MARIADBROOT} + - MYSQL_USER=${SERVICE_USER_MARIADB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - MYSQL_DATABASE=${DB_NAME:-owncloud} - TZ=auto command: - "--character-set-server=utf8mb4" @@ -55,19 +51,15 @@ services: - "--max-allowed-packet=128M" - "--innodb-log-file-size=64M" healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] - interval: 10s - timeout: 5s - retries: 5 + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 volumes: - - "mysql:/var/lib/mysql" - ports: - - "3306:3306" + - owncloud-mysql-data:/var/lib/mysql redis: - image: "redis:6" - container_name: owncloud_redis - restart: unless-stopped + image: redis:6 command: - "--databases" - "1" @@ -79,15 +71,3 @@ services: interval: 10s timeout: 5s retries: 5 - volumes: - - "redis:/data" - ports: - - "6379:6379" - -volumes: - files: - driver: local - mysql: - driver: local - redis: - driver: local From e66b455b871dda7e0fc954c2faac0f8679867e8f Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:43:00 +0200 Subject: [PATCH 51/55] fix immich service --- templates/compose/immich.yaml | 87 +++++++++++++---------------------- 1 file changed, 33 insertions(+), 54 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index 2feed55ad0..63cef6d453 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -4,38 +4,28 @@ # logo: svgs/immich.svg # port: 2283 -name: immich - services: immich: - container_name: immich_server - image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} + image: ghcr.io/immich-app/immich-server:release # extends: # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: - # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - - ${UPLOAD_LOCATION}:/usr/src/app/upload + - immich-uploads:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro environment: - SERVICE_FQDN_IMMICH_3001 - # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables - # Hardcoded values, not editable in Coolify UI - - UPLOAD_LOCATION=./library # The location where your uploaded files are stored - - DB_DATA_LOCATION=./postgres # The location where your database files are stored - - - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify - - # Default values, editable in Coolify UI - - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden - - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden - - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden - + - UPLOAD_LOCATION=./library + - DB_DATA_LOCATION=./postgres + - DB_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - DB_USERNAME=$SERVICE_USER_POSTGRES + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} - TZ=${TZ:-Etc/UTC} depends_on: - - redis - - database - restart: always + redis: + condition: service_healthy + database: + condition: service_healthy healthcheck: disable: false @@ -43,56 +33,45 @@ services: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda - image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} + image: ghcr.io/immich-app/immich-machine-learning:release # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache environment: - # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables - - # Hardcoded values, not editable in Coolify UI - - UPLOAD_LOCATION=./library # The location where your uploaded files are stored - - DB_DATA_LOCATION=./postgres # The location where your database files are stored - - - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify - - # Default values, editable in Coolify UI - - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden - - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden - - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden - + - UPLOAD_LOCATION=./library + - DB_DATA_LOCATION=./postgres + - DB_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - DB_USERNAME=$SERVICE_USER_POSTGRES + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} - TZ=${TZ:-Etc/UTC} restart: always healthcheck: disable: false redis: - container_name: immich_redis - image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792 + image: redis:7.4-alpine healthcheck: - test: redis-cli ping || exit 1 - restart: always + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 database: - container_name: immich_postgres image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 environment: - POSTGRES_PASSWORD: ${DB_PASSWORD} - POSTGRES_USER: ${DB_USERNAME} - POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_PASSWORD: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_USER: ${SERVICE_USER_POSTGRES} + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - - ${DB_DATA_LOCATION}:/var/lib/postgresql/data + - immich-postgres-data:/var/lib/postgresql/data healthcheck: - test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 - interval: 5m - start_interval: 30s - start_period: 5m - command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] - restart: always - -volumes: - model-cache: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 From 2a1c1e872ae468a27d83d4d22ee7282624382783 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:46:15 +0200 Subject: [PATCH 52/55] Update immich.yaml --- templates/compose/immich.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index 63cef6d453..b3525cc585 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -38,7 +38,7 @@ services: # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - - model-cache:/cache + - immich-model-cache:/cache environment: - UPLOAD_LOCATION=./library - DB_DATA_LOCATION=./postgres @@ -46,7 +46,6 @@ services: - DB_USERNAME=$SERVICE_USER_POSTGRES - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} - TZ=${TZ:-Etc/UTC} - restart: always healthcheck: disable: false From 5ab347da76f768c2c5e9bbafbc8e698821a47b0e Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 23:25:53 +0200 Subject: [PATCH 53/55] fix affine --- templates/compose/affine.yaml | 46 ++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/templates/compose/affine.yaml b/templates/compose/affine.yaml index c863b80316..ac06ffa49a 100644 --- a/templates/compose/affine.yaml +++ b/templates/compose/affine.yaml @@ -2,47 +2,53 @@ # slogan: AFFiNE is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative. # tags: knowledge-management,notion,miro,workspace # logo: svgs/affine.svg +# port: 3010 services: affine: - image: 'ghcr.io/toeverything/affine-graphql:stable' + image: ghcr.io/toeverything/affine-graphql:stable command: - sh - '-c' - 'node ./scripts/self-host-predeploy && node ./dist/index.js' ports: - - ':3010' - - ':5555' + - ${AFFINE_PORT:-55555}:5555 depends_on: redis: - condition: service_healthy + condition: service_healthy postgres: condition: service_healthy volumes: - - '~/.affine/self-host/config:/root/.affine/config' - - '~/.affine/self-host/storage:/root/.affine/storage' + - affine-config:/root/.affine/config + - affine-storage:/root/.affine/storage logging: driver: json-file options: max-size: 1000m environment: - - SERVICE_FQDN_AFFINE - - 'NODE_OPTIONS="--import=./scripts/register.js"' + - SERVICE_FQDN_AFFINE_3010 + - NODE_OPTIONS=--import=./scripts/register.js - AFFINE_CONFIG_PATH=/root/.affine/config - REDIS_SERVER_HOST=redis - - 'DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine}' + - DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine} - NODE_ENV=production - AFFINE_SERVER_HOST=$SERVICE_FQDN_AFFINE - AFFINE_SERVER_EXTERNAL_URL=$SERVICE_FQDN_AFFINE - - MAILER_HOST=$MAILER_HOST - - MAILER_PORT=$MAILER_PORT - - MAILER_USER=$MAILER_USER - - MAILER_PASSWORD=$MAILER_PASSWORD - - MAILER_SENDER=$MAILER_SENDER + - MAILER_HOST=${MAILER_HOST} + - MAILER_PORT=${MAILER_PORT} + - MAILER_USER=${MAILER_USER} + - MAILER_PASSWORD=${MAILER_PASSWORD} + - MAILER_SENDER=${MAILER_SENDER} + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/3010' || exit 1"] + interval: 5s + timeout: 20s + retries: 3 + redis: image: redis volumes: - - '~/.affine/self-host/redis:/data' + - affine-redis-data:/data healthcheck: test: - CMD @@ -54,9 +60,9 @@ services: timeout: 5s retries: 5 postgres: - image: postgres + image: postgres:16 volumes: - - '~/.affine/self-host/postgres:/var/lib/postgresql/data' + - affine-postgres-data:/var/lib/postgresql/data healthcheck: test: - CMD-SHELL @@ -65,7 +71,7 @@ services: timeout: 5s retries: 5 environment: - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - 'POSTGRES_DB=${POSTGRES_DB:-affine}' + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-affine} - PGDATA=/var/lib/postgresql/data/pgdata From 41c20ebc879de21af6bbbe2113447a60dd51b365 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 9 Oct 2024 23:29:14 +0200 Subject: [PATCH 54/55] Update affine.yaml --- templates/compose/affine.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/compose/affine.yaml b/templates/compose/affine.yaml index ac06ffa49a..97be09cdb5 100644 --- a/templates/compose/affine.yaml +++ b/templates/compose/affine.yaml @@ -1,5 +1,5 @@ # documentation: https://docs.affine.pro/docs/self-host-affine -# slogan: AFFiNE is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative. +# slogan: Affine is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative. # tags: knowledge-management,notion,miro,workspace # logo: svgs/affine.svg # port: 3010 @@ -11,8 +11,6 @@ services: - sh - '-c' - 'node ./scripts/self-host-predeploy && node ./dist/index.js' - ports: - - ${AFFINE_PORT:-55555}:5555 depends_on: redis: condition: service_healthy From 1f44b236a588d688b4f6188ee4f2a07f6e2ead36 Mon Sep 17 00:00:00 2001 From: Adrian Barrio Date: Thu, 10 Oct 2024 09:14:28 +0200 Subject: [PATCH 55/55] feat: add LibreTranslate template --- public/svgs/libretranslate.svg | 1 + templates/compose/libretranslate.yaml | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 public/svgs/libretranslate.svg create mode 100644 templates/compose/libretranslate.yaml diff --git a/public/svgs/libretranslate.svg b/public/svgs/libretranslate.svg new file mode 100644 index 0000000000..103d47d609 --- /dev/null +++ b/public/svgs/libretranslate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/libretranslate.yaml b/templates/compose/libretranslate.yaml new file mode 100644 index 0000000000..69b9e44667 --- /dev/null +++ b/templates/compose/libretranslate.yaml @@ -0,0 +1,19 @@ +# documentation: https://libretranslate.com/docs/ +# slogan: Free and open-source machine translation API, entirely self-hosted. +# tags: translate, api +# logo: svgs/libretranslate.svg +# port: 5000 + +services: + libretranslate: + image: "libretranslate/libretranslate:latest" + environment: + - SERVICE_FQDN_LIBRETRANSLATE_5000 + - LT_SSL=true + - LT_UPDATE_MODELS=true + - LT_LOAD_ONLY=en,es,fr,de,ja + volumes: + - api-keys:/app/db + - models:/home/libretranslate/.local + healthcheck: + test: ["CMD-SHELL", "./venv/bin/python scripts/healthcheck.py"]

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