From 5f2581020b0c7aa4a1b329a2d3ac4f3b55af2c77 Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:36:57 +0200 Subject: [PATCH 01/57] [+] Template: Duplicati MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **Duplicati**: Duplicati is an open-source backup solution, allowing you to safeguard your data with ease through scheduled backups and encryption. --- templates/compose/duplicati.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 templates/compose/duplicati.yaml diff --git a/templates/compose/duplicati.yaml b/templates/compose/duplicati.yaml new file mode 100644 index 000000000..0314f82e7 --- /dev/null +++ b/templates/compose/duplicati.yaml @@ -0,0 +1,20 @@ +# documentation: https://duplicati.readthedocs.io/en/latest/02-installation/ +# slogan: Duplicati is an open-source backup solution, allowing you to safeguard your data with ease through scheduled backups and encryption. +# tags: backup, encryption + +services: + duplicati: + image: lscr.io/linuxserver/duplicati:latest + environment: + - SERVICE_FQDN_DUPLICATI + - PUID=1000 + - PGID=1000 + - TZ=Europe/Madrid + volumes: + - duplicati-config:/config + - duplicati-backups:/backups + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8200"] + interval: 2s + timeout: 10s + retries: 15 From f78c49fc82a061654c869754245e3904f383c58e Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:40:38 +0200 Subject: [PATCH 02/57] [+] Template: Whoogle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **Whoogle**: Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection. --- templates/compose/whoogle.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 templates/compose/whoogle.yaml diff --git a/templates/compose/whoogle.yaml b/templates/compose/whoogle.yaml new file mode 100644 index 000000000..fca52f8c2 --- /dev/null +++ b/templates/compose/whoogle.yaml @@ -0,0 +1,13 @@ +# documentation: https://github.com/benbusby/whoogle-search#install +# slogan: Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection. + +services: + whoogle: + image: benbusby/whoogle-search:latest + environment: + - SERVICE_FQDN_WHOOGLE + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5000"] + interval: 2s + timeout: 10s + retries: 15 From 6950ead041c5ce7583ef91c5013963cf6af07712 Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:46:52 +0200 Subject: [PATCH 03/57] [+] Template: Jellyfin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **Jellyfin**: Jellyfin is an open-source media server for hosting and streaming your media collection, providing an alternative to proprietary media platforms. --- templates/compose/jellyfin.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 templates/compose/jellyfin.yaml diff --git a/templates/compose/jellyfin.yaml b/templates/compose/jellyfin.yaml new file mode 100644 index 000000000..c3cb90541 --- /dev/null +++ b/templates/compose/jellyfin.yaml @@ -0,0 +1,22 @@ +# documentation: https://jellyfin.org/docs/ +# slogan: Jellyfin is an open-source media server for hosting and streaming your media collection, providing an alternative to proprietary media platforms. +# tags: media, server, movies, tv, music + +services: + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + environment: + - SERVICE_FQDN_JELLYFIN + - PUID=1000 + - PGID=1000 + - TZ=Europe/Madrid + - JELLYFIN_PublishedServerUrl=$SERVICE_FQDN_JELLYFIN + volumes: + - jellyfin-config:/config + - jellyfin-tvshows:/data/tvshows + - jellyfin-movies:/data/movies + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8096"] + interval: 2s + timeout: 10s + retries: 15 From fcc8a7f0edf380347f9f38640cde31df5b0c231c Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:50:55 +0200 Subject: [PATCH 04/57] [!] Template Fix: Whoogle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ› **Bug Fix**: โ„น๏ธ **Whoogle**: Tags section was not added, it's now fixed. --- templates/compose/whoogle.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/compose/whoogle.yaml b/templates/compose/whoogle.yaml index fca52f8c2..bb9fcf223 100644 --- a/templates/compose/whoogle.yaml +++ b/templates/compose/whoogle.yaml @@ -1,5 +1,6 @@ # documentation: https://github.com/benbusby/whoogle-search#install # slogan: Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection. +# tags: privacy, search engine services: whoogle: From 3fcac0ac3545112b8cce576f054b0216249635c1 Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:57:03 +0200 Subject: [PATCH 05/57] [+] Template: phpMyAdmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **phpMyAdmin**: phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface. --- templates/compose/phpmyadmin.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 templates/compose/phpmyadmin.yaml diff --git a/templates/compose/phpmyadmin.yaml b/templates/compose/phpmyadmin.yaml new file mode 100644 index 000000000..4243362c0 --- /dev/null +++ b/templates/compose/phpmyadmin.yaml @@ -0,0 +1,21 @@ +# documentation: https://docs.phpmyadmin.net/en/latest/ +# slogan: phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface. +# tags: database management + +services: + phpmyadmin: + image: lscr.io/linuxserver/phpmyadmin:latest + environment: + - SERVICE_FQDN_PHPMYADMIN + - PUID=1000 + - PGID=1000 + - TZ=Europe/Madrid + - PMA_ARBITRARY=1 + - PMA_ABSOLUTE_URI=$SERVICE_FQDN_PHPMYADMIN + volumes: + - phpmyadmin-config:/config + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 2s + timeout: 10s + retries: 15 From fcd0d8d3591ec258d3550a9ae7e31ef8d195034b Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Wed, 25 Oct 2023 22:22:20 +0200 Subject: [PATCH 06/57] [+] Template: BudgE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **BudgE**: Budge is an open-source 'budgeting with envelopes' personal finance app, helping you manage your finances effectively. --- templates/compose/budge.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 templates/compose/budge.yaml diff --git a/templates/compose/budge.yaml b/templates/compose/budge.yaml new file mode 100644 index 000000000..379b5a6c3 --- /dev/null +++ b/templates/compose/budge.yaml @@ -0,0 +1,19 @@ +# documentation: https://github.com/linuxserver/budge +# slogan: BudgE is an open-source 'budgeting with envelopes' personal finance app, helping you manage your finances effectively. +# tags: personal finance, budgeting, expense tracking + +services: + budge: + image: lscr.io/linuxserver/budge:latest + environment: + - SERVICE_FQDN_BUDGE + - PUID=1000 + - PGID=1000 + - TZ=Europe/Madrid + volumes: + - budge-config:/config + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 2s + timeout: 10s + retries: 15 From 722ff15fbd6ccaa2703b52c61b6419ce823e32cc Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Thu, 26 Oct 2023 11:21:31 +0200 Subject: [PATCH 07/57] [+] Template: Vaultwarden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **Vaultwarden**: Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected. --- templates/compose/vaultwarden.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 templates/compose/vaultwarden.yaml diff --git a/templates/compose/vaultwarden.yaml b/templates/compose/vaultwarden.yaml new file mode 100644 index 000000000..5ced66f43 --- /dev/null +++ b/templates/compose/vaultwarden.yaml @@ -0,0 +1,16 @@ +# documentation: https://github.com/dani-garcia/vaultwarden/wiki/FAQs +# slogan: Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected. +# tags: password manager, security + +services: + vaultwarden: + image: vaultwarden/server:latest + environment: + - SERVICE_FQDN_VAULTWARDEN + volumes: + - vaultwarden-data:/data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 2s + timeout: 10s + retries: 15 From fe092bb7a530358bfc290dc626e938835f213210 Mon Sep 17 00:00:00 2001 From: Hermann Kao <5721889-itishermann@users.noreply.gitlab.com> Date: Thu, 26 Oct 2023 23:29:59 +0200 Subject: [PATCH 08/57] add service template for kuzzle --- templates/compose/kuzzle.yaml | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 templates/compose/kuzzle.yaml diff --git a/templates/compose/kuzzle.yaml b/templates/compose/kuzzle.yaml new file mode 100644 index 000000000..81f01a4c7 --- /dev/null +++ b/templates/compose/kuzzle.yaml @@ -0,0 +1,63 @@ +# documentation: https://docs.kuzzle.io/ +# slogan: Kuzzle is a generic backend offering the basic building blocks common to every application. +# tags: backend, api, realtime, websocket, mqtt, rest, sdk, iot, geofencing, low-code + +services: + + redis: + image: redis:6.2.4 + command: redis-server --appendonly yes + container_name: kuzzle_redis + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 1s + timeout: 3s + retries: 30 + + elasticsearch: + image: kuzzleio/elasticsearch:7 + container_name: kuzzle_elasticsearch + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:9200" ] + interval: 2s + timeout: 2s + retries: 10 + ulimits: + nofile: 65536 + + kuzzle: + image: kuzzleio/kuzzle:latest + environment: + - SERVICE_FQDN_KUZZLE_7512 + - kuzzle_services__storageEngine__client__node=http://elasticsearch:9200 + - kuzzle_services__storageEngine__commonMapping__dynamic=true + - kuzzle_services__internalCache__node__host=redis + - kuzzle_services__memoryStorage__node__host=redis + - kuzzle_server__protocols__mqtt__enabled=true + - kuzzle_server__protocols__mqtt__developmentMode=false + - kuzzle_limits__loginsPerSecond=50 + # - NODE_ENV=${NODE_ENV:-development} + - NODE_ENV=production + # - DEBUG=${DEBUG:-kuzzle:*,-kuzzle:network:protocols:websocket,-kuzzle:events} + - DEBUG=${DEBUG:-kuzzle:cluster:sync} + - DEBUG_DEPTH=${DEBUG_DEPTH:-0} + - DEBUG_MAX_ARRAY_LENGTH=${DEBUG_MAX_ARRAY:-100} + - DEBUG_EXPAND=${DEBUG_EXPAND:-off} + - DEBUG_SHOW_HIDDEN={$DEBUG_SHOW_HIDDEN:-on} + - DEBUG_COLORS=${DEBUG_COLORS:-on} + cap_add: + - SYS_PTRACE + ulimits: + nofile: 65536 + sysctls: + - net.core.somaxconn=8192 + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:7512/_healthcheck" ] + timeout: 1s + interval: 2s + retries: 30 + depends_on: + redis: + condition: service_healthy + elasticsearch: + condition: service_healthy From 632dbd155b7c64123694bae812251e9640d63ca2 Mon Sep 17 00:00:00 2001 From: Hermann Kao <5721889-itishermann@users.noreply.gitlab.com> Date: Fri, 27 Oct 2023 00:18:06 +0200 Subject: [PATCH 09/57] add service template for moodle based on bitnami images --- templates/compose/moodle.yaml | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 templates/compose/moodle.yaml diff --git a/templates/compose/moodle.yaml b/templates/compose/moodle.yaml new file mode 100644 index 000000000..52c5d0a83 --- /dev/null +++ b/templates/compose/moodle.yaml @@ -0,0 +1,39 @@ +# documentation: https://moodle.org +# slogan: Moodle is the worldโ€™s most customisable and trusted eLearning solution that empowers educators to improve our world. +# tags: moodle, elearning, education, lms, cms, open, source, low, code + +services: + mariadb: + image: mariadb:11.1 + environment: + - ALLOW_EMPTY_PASSWORD=no + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=bitnami_moodle + - MYSQL_USER=$SERVICE_USER_MARIADB + - MYSQL_PASSWORD=$SERVICE_PASSWORD_MARIADB + - MARIADB_CHARACTER_SET=utf8mb4 + - MARIADB_COLLATE=utf8mb4_unicode_ci + volumes: + - mariadb-data:/var/lib/mysql + + moodle: + image: docker.io/bitnami/moodle:4.3 + environment: + - MOODLE_DATABASE_HOST=mariadb + - MOODLE_DATABASE_PORT_NUMBER=3306 + - MOODLE_DATABASE_USER=$SERVICE_USER_MARIADB + - MOODLE_DATABASE_NAME=bitnami_moodle + - MOODLE_DATABASE_PASSWORD=$SERVICE_PASSWORD_MARIADB + - ALLOW_EMPTY_PASSWORD=no + - SERVICE_FQDN_MOODLE_8080 + - SERVICE_FQDN_MOODLE_8443 + - MOODLE_USERNAME=$SERVICE_USER_MOODLE + - MOODLE_PASSWORD=$SERVICE_PASSWORD_MOODLE + - MOODLE_EMAIL=user@example.com + - MOODLE_SITE_NAME=${MOODLE_SITE_NAME:-New Site} + + volumes: + - moodle_data:/bitnami/moodle + - moodledata_data:/bitnami/moodledata + depends_on: + - mariadb From a7dc62aaa0597342a5bbf2dd20cca3ddbfa6f318 Mon Sep 17 00:00:00 2001 From: Hermann Kao <5721889-itishermann@users.noreply.gitlab.com> Date: Fri, 27 Oct 2023 00:42:15 +0200 Subject: [PATCH 10/57] add service template for rabbitmq --- templates/compose/rabbitmq.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 templates/compose/rabbitmq.yaml diff --git a/templates/compose/rabbitmq.yaml b/templates/compose/rabbitmq.yaml new file mode 100644 index 000000000..4633ba952 --- /dev/null +++ b/templates/compose/rabbitmq.yaml @@ -0,0 +1,17 @@ +# documentation: https://www.rabbitmq.com/documentation.html +# slogan: With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers +# tags: message broker, message queue, message-oriented middleware, MOM, AMQP, MQTT, STOMP, messaging + +services: + rabbitmq: + image: rabbitmq:3.8-management + environment: + - SERVICE_FQDN_RABBITMQ_15672 + - SERVICE_FQDN_RABBITMQ_5672 + - RABBITMQ_DEFAULT_USER=$SERVICE_USER_RABBITMQ + - RABBITMQ_DEFAULT_PASS=$SERVICE_PASSWORD_RABBITMQ + healthcheck: + test: rabbitmq-diagnostics -q ping + interval: 30s + timeout: 30s + retries: 3 From 7925228f979a0eb49e8ca86bdaa1ee25cefd7184 Mon Sep 17 00:00:00 2001 From: Hermann Kao <38349706+itishermann@users.noreply.github.com> Date: Fri, 27 Oct 2023 01:41:07 +0200 Subject: [PATCH 11/57] add service template for sonarqube --- templates/compose/sonarqube.yaml | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 templates/compose/sonarqube.yaml diff --git a/templates/compose/sonarqube.yaml b/templates/compose/sonarqube.yaml new file mode 100644 index 000000000..76e9bb78d --- /dev/null +++ b/templates/compose/sonarqube.yaml @@ -0,0 +1,35 @@ +# documentation: https://hub.docker.com/_/sonarqube/ +# slogan: SonarQube is a self-managed, automatic code review tool that systematically helps you deliver Clean Code +# tags: sonarqube, code-review, clean-code, quality, code-quality, code-analysis, code-smells, code-coverage, code-security + +services: + sonarqube: + image: sonarqube:community + hostname: sonarqube + container_name: sonarqube + environment: + - SONAR_JDBC_URL=jdbc:postgresql://postgresql:5432/${POSTGRES_DB:-sonar} + - SONAR_JDBC_USERNAME=$SERVICE_USER_POSTGRES + - SONAR_JDBC_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - SERVICE_FQDN_SONARQUBE_9000 + volumes: + - sonarqube_data:/opt/sonarqube/data + - sonarqube_extensions:/opt/sonarqube/extensions + - sonarqube_logs:/opt/sonarqube/logs + depends_on: + postgresql: + condition: service_healthy + postgresql: + image: postgres:15-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-sonar} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + From d3d133ed1fa80955ee1f8ec05965bb718cabd0a7 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 27 Oct 2023 12:07:48 +0200 Subject: [PATCH 12/57] version++ --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index 235f3db1e..e5bd40ee5 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // 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.108', + 'release' => '4.0.0-beta.109', // 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 f3852a439..de5c5d268 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Fri, 27 Oct 2023 12:21:14 +0200 Subject: [PATCH 13/57] [+] Template: FileBrowser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ†• **New Template**: -> โ„น๏ธ **FileBrowser**: FileBrowser simplifies file and folder management on various storage systems. --- templates/compose/filebrowser.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 templates/compose/filebrowser.yaml diff --git a/templates/compose/filebrowser.yaml b/templates/compose/filebrowser.yaml new file mode 100644 index 000000000..3cdf8fe23 --- /dev/null +++ b/templates/compose/filebrowser.yaml @@ -0,0 +1,20 @@ +# documentation: https://filebrowser.org/configuration +# slogan: FileBrowser simplifies file and folder management on various storage systems. +# tags: file-management, storage-access, data-organization, file-utilization, administration-tool + +services: + filebrowser: + image: filebrowser/filebrowser:latest + environment: + - SERVICE_FQDN_FILEBROWSER + - PUID=1000 + - PGID=1000 + volumes: + - filebrowser-srv:/srv + - filebrowser-database:/database/filebrowser.db + - filebrowser-config:/config/settings.json + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 2s + timeout: 10s + retries: 15 From 728a9f88eb0c57713229085fe103f0f8fe4d2d97 Mon Sep 17 00:00:00 2001 From: TheH2SO4 <69685986+theh2so4@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:23:16 +0200 Subject: [PATCH 14/57] [!] Template: FileBrowser --- templates/compose/filebrowser.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/filebrowser.yaml b/templates/compose/filebrowser.yaml index 3cdf8fe23..900964f87 100644 --- a/templates/compose/filebrowser.yaml +++ b/templates/compose/filebrowser.yaml @@ -1,5 +1,5 @@ # documentation: https://filebrowser.org/configuration -# slogan: FileBrowser simplifies file and folder management on various storage systems. +# slogan: FileBrowser is a self-hosted, web-based file manager and file explorer with a user-friendly interface. It allows you to manage and organize your files and directories directly from your web browser. # tags: file-management, storage-access, data-organization, file-utilization, administration-tool services: From e3958d96265aded3861b068d6e576b435e5f3d8a Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 27 Oct 2023 14:22:35 +0200 Subject: [PATCH 15/57] added a few services --- templates/compose/kuzzle.yaml | 3 - templates/compose/moodle.yaml | 10 ++- templates/compose/rabbitmq.yaml | 6 +- templates/compose/sonarqube.yaml | 13 ++-- templates/service-templates.json | 102 +++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 18 deletions(-) diff --git a/templates/compose/kuzzle.yaml b/templates/compose/kuzzle.yaml index 81f01a4c7..d9ea70629 100644 --- a/templates/compose/kuzzle.yaml +++ b/templates/compose/kuzzle.yaml @@ -7,7 +7,6 @@ services: redis: image: redis:6.2.4 command: redis-server --appendonly yes - container_name: kuzzle_redis healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 1s @@ -16,7 +15,6 @@ services: elasticsearch: image: kuzzleio/elasticsearch:7 - container_name: kuzzle_elasticsearch healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:9200" ] interval: 2s @@ -36,7 +34,6 @@ services: - kuzzle_server__protocols__mqtt__enabled=true - kuzzle_server__protocols__mqtt__developmentMode=false - kuzzle_limits__loginsPerSecond=50 - # - NODE_ENV=${NODE_ENV:-development} - NODE_ENV=production # - DEBUG=${DEBUG:-kuzzle:*,-kuzzle:network:protocols:websocket,-kuzzle:events} - DEBUG=${DEBUG:-kuzzle:cluster:sync} diff --git a/templates/compose/moodle.yaml b/templates/compose/moodle.yaml index 52c5d0a83..df5bce6f1 100644 --- a/templates/compose/moodle.yaml +++ b/templates/compose/moodle.yaml @@ -19,21 +19,19 @@ services: moodle: image: docker.io/bitnami/moodle:4.3 environment: + - SERVICE_FQDN_MOODLE - MOODLE_DATABASE_HOST=mariadb - MOODLE_DATABASE_PORT_NUMBER=3306 - MOODLE_DATABASE_USER=$SERVICE_USER_MARIADB - MOODLE_DATABASE_NAME=bitnami_moodle - MOODLE_DATABASE_PASSWORD=$SERVICE_PASSWORD_MARIADB - ALLOW_EMPTY_PASSWORD=no - - SERVICE_FQDN_MOODLE_8080 - - SERVICE_FQDN_MOODLE_8443 - - MOODLE_USERNAME=$SERVICE_USER_MOODLE + - MOODLE_USERNAME=${MOODLE_USERNAME:-user} - MOODLE_PASSWORD=$SERVICE_PASSWORD_MOODLE - MOODLE_EMAIL=user@example.com - MOODLE_SITE_NAME=${MOODLE_SITE_NAME:-New Site} - volumes: - - moodle_data:/bitnami/moodle - - moodledata_data:/bitnami/moodledata + - moodle-data:/bitnami/moodle + - moodledata-data:/bitnami/moodledata depends_on: - mariadb diff --git a/templates/compose/rabbitmq.yaml b/templates/compose/rabbitmq.yaml index 4633ba952..b28171f1a 100644 --- a/templates/compose/rabbitmq.yaml +++ b/templates/compose/rabbitmq.yaml @@ -1,12 +1,12 @@ +# ignore: true # documentation: https://www.rabbitmq.com/documentation.html -# slogan: With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers +# slogan: With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers. # tags: message broker, message queue, message-oriented middleware, MOM, AMQP, MQTT, STOMP, messaging services: rabbitmq: - image: rabbitmq:3.8-management + image: rabbitmq:3 environment: - - SERVICE_FQDN_RABBITMQ_15672 - SERVICE_FQDN_RABBITMQ_5672 - RABBITMQ_DEFAULT_USER=$SERVICE_USER_RABBITMQ - RABBITMQ_DEFAULT_PASS=$SERVICE_PASSWORD_RABBITMQ diff --git a/templates/compose/sonarqube.yaml b/templates/compose/sonarqube.yaml index 76e9bb78d..3f3f5d8e5 100644 --- a/templates/compose/sonarqube.yaml +++ b/templates/compose/sonarqube.yaml @@ -1,3 +1,4 @@ +# ignore: true # documentation: https://hub.docker.com/_/sonarqube/ # slogan: SonarQube is a self-managed, automatic code review tool that systematically helps you deliver Clean Code # tags: sonarqube, code-review, clean-code, quality, code-quality, code-analysis, code-smells, code-coverage, code-security @@ -5,17 +6,17 @@ services: sonarqube: image: sonarqube:community - hostname: sonarqube - container_name: sonarqube environment: + - SERVICE_FQDN_SONARQUBE_9000 - SONAR_JDBC_URL=jdbc:postgresql://postgresql:5432/${POSTGRES_DB:-sonar} - SONAR_JDBC_USERNAME=$SERVICE_USER_POSTGRES - SONAR_JDBC_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - SERVICE_FQDN_SONARQUBE_9000 volumes: - - sonarqube_data:/opt/sonarqube/data - - sonarqube_extensions:/opt/sonarqube/extensions - - sonarqube_logs:/opt/sonarqube/logs + - sonarqube-data:/opt/sonarqube + - sonarqube-conf:/opt/sonarqube/conf + - sonarqube-extensions:/opt/sonarqube/extensions + - sonarqube-logs:/opt/sonarqube/logs + - sonarqube-bundled-plugins:/opt/sonarqube/lib/bundled-plugins depends_on: postgresql: condition: service_healthy diff --git a/templates/service-templates.json b/templates/service-templates.json index 883fbfe5a..31f4928e6 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -33,6 +33,16 @@ "activities" ] }, + "budge": { + "documentation": "https:\/\/github.com\/linuxserver\/budge", + "slogan": "BudgE is an open-source 'budgeting with envelopes' personal finance app, helping you manage your finances effectively.", + "compose": "c2VydmljZXM6CiAgYnVkZ2U6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvYnVkZ2U6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0JVREdFCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnYnVkZ2UtY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", + "tags": [ + "personal finance", + "budgeting", + "expense tracking" + ] + }, "code-server": { "documentation": "https:\/\/coder.com\/docs\/code-server\/latest\/guide", "slogan": "Code-Server is a self-hosted, web-based code editor that enables remote coding and collaboration from any device, anywhere.", @@ -66,6 +76,15 @@ "base" ] }, + "duplicati": { + "documentation": "https:\/\/duplicati.readthedocs.io\/en\/latest\/02-installation\/", + "slogan": "Duplicati is an open-source backup solution, allowing you to safeguard your data with ease through scheduled backups and encryption.", + "compose": "c2VydmljZXM6CiAgZHVwbGljYXRpOgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL2R1cGxpY2F0aTpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fRFVQTElDQVRJCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZHVwbGljYXRpLWNvbmZpZzovY29uZmlnJwogICAgICAtICdkdXBsaWNhdGktYmFja3VwczovYmFja3VwcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MjAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", + "tags": [ + "backup", + "encryption" + ] + }, "emby": { "documentation": "https:\/\/emby.media\/support\/articles\/Home.html", "slogan": "A media server software that allows you to organize, stream, and access your multimedia content effortlessly, making it easy to enjoy your favorite movies, TV shows, music, and more.", @@ -99,6 +118,18 @@ "user-feedback" ] }, + "filebrowser": { + "documentation": "https:\/\/filebrowser.org\/configuration", + "slogan": "FileBrowser is a self-hosted, web-based file manager and file explorer with a user-friendly interface. It allows you to manage and organize your files and directories directly from your web browser.", + "compose": "c2VydmljZXM6CiAgZmlsZWJyb3dzZXI6CiAgICBpbWFnZTogJ2ZpbGVicm93c2VyL2ZpbGVicm93c2VyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GSUxFQlJPV1NFUgogICAgICAtIFBVSUQ9MTAwMAogICAgICAtIFBHSUQ9MTAwMAogICAgdm9sdW1lczoKICAgICAgLSAnZmlsZWJyb3dzZXItc3J2Oi9zcnYnCiAgICAgIC0gJ2ZpbGVicm93c2VyLWRhdGFiYXNlOi9kYXRhYmFzZS9maWxlYnJvd3Nlci5kYicKICAgICAgLSAnZmlsZWJyb3dzZXItY29uZmlnOi9jb25maWcvc2V0dGluZ3MuanNvbicKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", + "tags": [ + "file-management", + "storage-access", + "data-organization", + "file-utilization", + "administration-tool" + ] + }, "ghost": { "documentation": "https:\/\/ghost.org\/docs", "slogan": "Ghost is a popular open-source content management system (CMS) and blogging platform, known for its simplicity and focus on content creation.", @@ -156,6 +187,35 @@ "interface" ] }, + "jellyfin": { + "documentation": "https:\/\/jellyfin.org\/docs\/", + "slogan": "Jellyfin is an open-source media server for hosting and streaming your media collection, providing an alternative to proprietary media platforms.", + "compose": "c2VydmljZXM6CiAgamVsbHlmaW46CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvamVsbHlmaW46bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0pFTExZRklOCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIEpFTExZRklOX1B1Ymxpc2hlZFNlcnZlclVybD0kU0VSVklDRV9GUUROX0pFTExZRklOCiAgICB2b2x1bWVzOgogICAgICAtICdqZWxseWZpbi1jb25maWc6L2NvbmZpZycKICAgICAgLSAnamVsbHlmaW4tdHZzaG93czovZGF0YS90dnNob3dzJwogICAgICAtICdqZWxseWZpbi1tb3ZpZXM6L2RhdGEvbW92aWVzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwOTYnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", + "tags": [ + "media", + "server", + "movies", + "tv", + "music" + ] + }, + "kuzzle": { + "documentation": "https:\/\/docs.kuzzle.io\/", + "slogan": "Kuzzle is a generic backend offering the basic building blocks common to every application.", + "compose": "c2VydmljZXM6CiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjYuMi40JwogICAgY29tbWFuZDogJ3JlZGlzLXNlcnZlciAtLWFwcGVuZG9ubHkgeWVzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogMXMKICAgICAgdGltZW91dDogM3MKICAgICAgcmV0cmllczogMzAKICBlbGFzdGljc2VhcmNoOgogICAgaW1hZ2U6ICdrdXp6bGVpby9lbGFzdGljc2VhcmNoOjcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6OTIwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDJzCiAgICAgIHJldHJpZXM6IDEwCiAgICB1bGltaXRzOgogICAgICBub2ZpbGU6IDY1NTM2CiAga3V6emxlOgogICAgaW1hZ2U6ICdrdXp6bGVpby9rdXp6bGU6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0tVWlpMRV83NTEyCiAgICAgIC0gJ2t1enpsZV9zZXJ2aWNlc19fc3RvcmFnZUVuZ2luZV9fY2xpZW50X19ub2RlPWh0dHA6Ly9lbGFzdGljc2VhcmNoOjkyMDAnCiAgICAgIC0ga3V6emxlX3NlcnZpY2VzX19zdG9yYWdlRW5naW5lX19jb21tb25NYXBwaW5nX19keW5hbWljPXRydWUKICAgICAgLSBrdXp6bGVfc2VydmljZXNfX2ludGVybmFsQ2FjaGVfX25vZGVfX2hvc3Q9cmVkaXMKICAgICAgLSBrdXp6bGVfc2VydmljZXNfX21lbW9yeVN0b3JhZ2VfX25vZGVfX2hvc3Q9cmVkaXMKICAgICAgLSBrdXp6bGVfc2VydmVyX19wcm90b2NvbHNfX21xdHRfX2VuYWJsZWQ9dHJ1ZQogICAgICAtIGt1enpsZV9zZXJ2ZXJfX3Byb3RvY29sc19fbXF0dF9fZGV2ZWxvcG1lbnRNb2RlPWZhbHNlCiAgICAgIC0ga3V6emxlX2xpbWl0c19fbG9naW5zUGVyU2Vjb25kPTUwCiAgICAgIC0gTk9ERV9FTlY9cHJvZHVjdGlvbgogICAgICAtICdERUJVRz0ke0RFQlVHOi1rdXp6bGU6Y2x1c3RlcjpzeW5jfScKICAgICAgLSAnREVCVUdfREVQVEg9JHtERUJVR19ERVBUSDotMH0nCiAgICAgIC0gJ0RFQlVHX01BWF9BUlJBWV9MRU5HVEg9JHtERUJVR19NQVhfQVJSQVk6LTEwMH0nCiAgICAgIC0gJ0RFQlVHX0VYUEFORD0ke0RFQlVHX0VYUEFORDotb2ZmfScKICAgICAgLSAnREVCVUdfU0hPV19ISURERU49eyRERUJVR19TSE9XX0hJRERFTjotb259JwogICAgICAtICdERUJVR19DT0xPUlM9JHtERUJVR19DT0xPUlM6LW9ufScKICAgIGNhcF9hZGQ6CiAgICAgIC0gU1lTX1BUUkFDRQogICAgdWxpbWl0czoKICAgICAgbm9maWxlOiA2NTUzNgogICAgc3lzY3RsczoKICAgICAgLSBuZXQuY29yZS5zb21heGNvbm49ODE5MgogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0Ojc1MTIvX2hlYWx0aGNoZWNrJwogICAgICB0aW1lb3V0OiAxcwogICAgICBpbnRlcnZhbDogMnMKICAgICAgcmV0cmllczogMzAKICAgIGRlcGVuZHNfb246CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIGVsYXN0aWNzZWFyY2g6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkK", + "tags": [ + "backend", + "api", + "realtime", + "websocket", + "mqtt", + "rest", + "sdk", + "iot", + "geofencing", + "low-code" + ] + }, "metube": { "documentation": "https:\/\/github.com\/alexta69\/metube", "slogan": "A web GUI for youtube-dl with playlist support. It enables you to effortlessly download videos from YouTube and dozens of other sites.", @@ -179,6 +239,22 @@ "api" ] }, + "moodle": { + "documentation": "https:\/\/moodle.org", + "slogan": "Moodle is the world\u2019s most customisable and trusted eLearning solution that empowers educators to improve our world.", + "compose": "c2VydmljZXM6CiAgbWFyaWFkYjoKICAgIGltYWdlOiAnbWFyaWFkYjoxMS4xJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gQUxMT1dfRU1QVFlfUEFTU1dPUkQ9bm8KICAgICAgLSBNWVNRTF9ST09UX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1JPT1QKICAgICAgLSBNWVNRTF9EQVRBQkFTRT1iaXRuYW1pX21vb2RsZQogICAgICAtIE1ZU1FMX1VTRVI9JFNFUlZJQ0VfVVNFUl9NQVJJQURCCiAgICAgIC0gTVlTUUxfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfTUFSSUFEQgogICAgICAtIE1BUklBREJfQ0hBUkFDVEVSX1NFVD11dGY4bWI0CiAgICAgIC0gTUFSSUFEQl9DT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaQogICAgdm9sdW1lczoKICAgICAgLSAnbWFyaWFkYi1kYXRhOi92YXIvbGliL215c3FsJwogIG1vb2RsZToKICAgIGltYWdlOiAnZG9ja2VyLmlvL2JpdG5hbWkvbW9vZGxlOjQuMycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NT09ETEUKICAgICAgLSBNT09ETEVfREFUQUJBU0VfSE9TVD1tYXJpYWRiCiAgICAgIC0gTU9PRExFX0RBVEFCQVNFX1BPUlRfTlVNQkVSPTMzMDYKICAgICAgLSBNT09ETEVfREFUQUJBU0VfVVNFUj0kU0VSVklDRV9VU0VSX01BUklBREIKICAgICAgLSBNT09ETEVfREFUQUJBU0VfTkFNRT1iaXRuYW1pX21vb2RsZQogICAgICAtIE1PT0RMRV9EQVRBQkFTRV9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9NQVJJQURCCiAgICAgIC0gQUxMT1dfRU1QVFlfUEFTU1dPUkQ9bm8KICAgICAgLSAnTU9PRExFX1VTRVJOQU1FPSR7TU9PRExFX1VTRVJOQU1FOi11c2VyfScKICAgICAgLSBNT09ETEVfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfTU9PRExFCiAgICAgIC0gTU9PRExFX0VNQUlMPXVzZXJAZXhhbXBsZS5jb20KICAgICAgLSAnTU9PRExFX1NJVEVfTkFNRT0ke01PT0RMRV9TSVRFX05BTUU6LU5ldyBTaXRlfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ21vb2RsZS1kYXRhOi9iaXRuYW1pL21vb2RsZScKICAgICAgLSAnbW9vZGxlZGF0YS1kYXRhOi9iaXRuYW1pL21vb2RsZWRhdGEnCiAgICBkZXBlbmRzX29uOgogICAgICAtIG1hcmlhZGIK", + "tags": [ + "moodle", + "elearning", + "education", + "lms", + "cms", + "open", + "source", + "low", + "code" + ] + }, "n8n-with-postgresql": { "documentation": "https:\/\/docs.n8n.io\/hosting\/", "slogan": "n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model.", @@ -247,6 +323,14 @@ "teamwork" ] }, + "phpmyadmin": { + "documentation": "https:\/\/docs.phpmyadmin.net\/en\/latest\/", + "slogan": "phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface.", + "compose": "c2VydmljZXM6CiAgcGhwbXlhZG1pbjoKICAgIGltYWdlOiAnbHNjci5pby9saW51eHNlcnZlci9waHBteWFkbWluOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9QSFBNWUFETUlOCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIFBNQV9BUkJJVFJBUlk9MQogICAgICAtIFBNQV9BQlNPTFVURV9VUkk9JFNFUlZJQ0VfRlFETl9QSFBNWUFETUlOCiAgICB2b2x1bWVzOgogICAgICAtICdwaHBteWFkbWluLWNvbmZpZzovY29uZmlnJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", + "tags": [ + "database management" + ] + }, "pocketbase": { "documentation": "https:\/\/pocketbase.io\/docs\/", "slogan": "Open Source backend for your next SaaS and Mobile app in 1 file", @@ -296,6 +380,24 @@ "real-time" ] }, + "vaultwarden": { + "documentation": "https:\/\/github.com\/dani-garcia\/vaultwarden\/wiki\/FAQs", + "slogan": "Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected.", + "compose": "c2VydmljZXM6CiAgdmF1bHR3YXJkZW46CiAgICBpbWFnZTogJ3ZhdWx0d2FyZGVuL3NlcnZlcjpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVkFVTFRXQVJERU4KICAgIHZvbHVtZXM6CiAgICAgIC0gJ3ZhdWx0d2FyZGVuLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", + "tags": [ + "password manager", + "security" + ] + }, + "whoogle": { + "documentation": "https:\/\/github.com\/benbusby\/whoogle-search#install", + "slogan": "Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection.", + "compose": "c2VydmljZXM6CiAgd2hvb2dsZToKICAgIGltYWdlOiAnYmVuYnVzYnkvd2hvb2dsZS1zZWFyY2g6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1dIT09HTEUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo1MDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", + "tags": [ + "privacy", + "search engine" + ] + }, "wordpress-with-mariadb": { "documentation": "https:\/\/wordpress.org\/documentation\/", "slogan": "WordPress with MariaDB. Wordpress is open source software you can use to create a beautiful website, blog, or app.", From c6253658ca61f4323d76c4ed46106ad30fc585f1 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 1 Nov 2023 12:19:08 +0100 Subject: [PATCH 16/57] feat: restart application fix: a few things in application deployment job --- .../Livewire/Project/Application/Heading.php | 14 +++ app/Jobs/ApplicationDeploymentJob.php | 90 +++++++++++++------ bootstrap/helpers/applications.php | 3 +- ...100437_add_restart_to_deployment_queue.php | 28 ++++++ .../components/applications/navbar.blade.php | 11 ++- 5 files changed, 117 insertions(+), 29 deletions(-) create mode 100644 database/migrations/2023_11_01_100437_add_restart_to_deployment_queue.php diff --git a/app/Http/Livewire/Project/Application/Heading.php b/app/Http/Livewire/Project/Application/Heading.php index 0cb25b172..be96d4ffa 100644 --- a/app/Http/Livewire/Project/Application/Heading.php +++ b/app/Http/Livewire/Project/Application/Heading.php @@ -65,4 +65,18 @@ class Heading extends Component $this->application->save(); $this->application->refresh(); } + public function restart() { + $this->setDeploymentUuid(); + queue_application_deployment( + application_id: $this->application->id, + deployment_uuid: $this->deploymentUuid, + restart_only: true, + ); + return redirect()->route('project.application.deployment', [ + 'project_uuid' => $this->parameters['project_uuid'], + 'application_uuid' => $this->parameters['application_uuid'], + 'deployment_uuid' => $this->deploymentUuid, + 'environment_name' => $this->parameters['environment_name'], + ]); + } } diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 583342015..c056fb650 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -44,6 +44,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted private int $pull_request_id; private string $commit; private bool $force_rebuild; + private bool $restart_only; private ?string $dockerImage = null; private ?string $dockerImageTag = null; @@ -94,6 +95,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->pull_request_id = $this->application_deployment_queue->pull_request_id; $this->commit = $this->application_deployment_queue->commit; $this->force_rebuild = $this->application_deployment_queue->force_rebuild; + $this->restart_only = $this->application_deployment_queue->restart_only; $source = data_get($this->application, 'source'); if ($source) { @@ -182,7 +184,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->application->git_repository = "$gitHost:$gitRepo"; } try { - if ($this->application->dockerfile) { + if ($this->restart_only) { + $this->just_restart(); + } else if ($this->application->dockerfile) { $this->deploy_simple_dockerfile(); } else if ($this->application->build_pack === 'dockerimage') { $this->deploy_dockerimage_buildpack(); @@ -264,6 +268,49 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted // [executeInDocker($this->deployment_uuid, "docker compose --project-directory {$this->workdir} up -d"), "hidden" => true], // ); // } + private function generate_image_names() + { + if ($this->application->dockerfile) { + $this->build_image_name = Str::lower("{$this->application->git_repository}:build"); + $this->production_image_name = Str::lower("{$this->application->uuid}:latest"); + } else if ($this->application->build_pack === 'dockerimage') { + $this->production_image_name = Str::lower("{$this->dockerImage}:{$this->dockerImageTag}"); + } else if ($this->pull_request_id !== 0) { + $this->build_image_name = Str::lower("{$this->application->uuid}:pr-{$this->pull_request_id}-build"); + $this->production_image_name = Str::lower("{$this->application->uuid}:pr-{$this->pull_request_id}"); + } else { + $tag = Str::of("{$this->commit}-{$this->application->id}-{$this->pull_request_id}"); + if (strlen($tag) > 128) { + $tag = $tag->substr(0, 128); + } + $this->build_image_name = Str::lower("{$this->application->git_repository}:{$tag}-build"); + $this->production_image_name = Str::lower("{$this->application->uuid}:{$tag}"); + } + ray('Build Image Name: ' . $this->build_image_name . ' & Production Image Name: ' . $this->production_image_name)->green(); + } + private function just_restart() + { + $this->execute_remote_command( + [ + "echo 'Starting deployment of {$this->application->git_repository}:{$this->application->git_branch}.'" + ], + ); + $this->prepare_builder_image(); + $this->check_git_if_build_needed(); + $this->set_base_dir(); + $this->generate_image_names(); + $this->execute_remote_command([ + "docker images -q {$this->production_image_name} 2>/dev/null", "hidden" => true, "save" => "local_image_found" + ]); + if (str($this->saved_outputs->get('local_image_found'))->isNotEmpty()) { + $this->generate_compose_file(); + $this->rolling_update(); + return; + } + $this->execute_remote_command([ + "echo 'Cannot find image {$this->production_image_name} locally. Please redeploy the application.'", + ]); + } private function save_environment_variables() { $envs = collect([]); @@ -291,9 +338,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted executeInDocker($this->deployment_uuid, "echo '$dockerfile_base64' | base64 -d > $this->workdir/Dockerfile") ], ); - $this->build_image_name = Str::lower("{$this->application->git_repository}:build"); - $this->production_image_name = Str::lower("{$this->application->uuid}:latest"); - // ray('Build Image Name: ' . $this->build_image_name . ' & Production Image Name: ' . $this->production_image_name)->green(); + $this->generate_image_names(); $this->generate_compose_file(); $this->generate_build_env_variables(); $this->add_build_env_variables_to_dockerfile(); @@ -311,7 +356,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted "echo 'Starting deployment of {$this->dockerImage}:{$this->dockerImageTag}.'" ], ); - $this->production_image_name = Str::lower("{$this->dockerImage}:{$this->dockerImageTag}"); + $this->generate_image_names(); $this->prepare_builder_image(); $this->generate_compose_file(); $this->rolling_update(); @@ -330,14 +375,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->prepare_builder_image(); $this->clone_repository(); $this->set_base_dir(); - $tag = Str::of("{$this->commit}-{$this->application->id}-{$this->pull_request_id}"); - if (strlen($tag) > 128) { - $tag = $tag->substr(0, 128); - } - - $this->build_image_name = Str::lower("{$this->application->git_repository}:{$tag}-build"); - $this->production_image_name = Str::lower("{$this->application->uuid}:{$tag}"); - // ray('Build Image Name: ' . $this->build_image_name . ' & Production Image Name: ' . $this->production_image_name)->green(); + $this->generate_image_names(); $this->cleanup_git(); $this->generate_compose_file(); $this->generate_build_env_variables(); @@ -355,15 +393,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->prepare_builder_image(); $this->check_git_if_build_needed(); $this->set_base_dir(); - $tag = Str::of("{$this->commit}-{$this->application->id}-{$this->pull_request_id}"); - if (strlen($tag) > 128) { - $tag = $tag->substr(0, 128); - } - - $this->build_image_name = Str::lower("{$this->application->git_repository}:{$tag}-build"); - $this->production_image_name = Str::lower("{$this->application->uuid}:{$tag}"); - // ray('Build Image Name: ' . $this->build_image_name . ' & Production Image Name: ' . $this->production_image_name)->green(); - + $this->generate_image_names(); if (!$this->force_rebuild) { $this->execute_remote_command([ "docker images -q {$this->production_image_name} 2>/dev/null", "hidden" => true, "save" => "local_image_found" @@ -396,7 +426,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted { if (count($this->application->ports_mappings_array) > 0) { $this->execute_remote_command( - ["echo -n 'Application has ports mapped to the host system, rolling update is not supported. Stopping current container.'"], + ["echo -n 'Application has ports mapped to the host system, rolling update is not supported.'"], ); $this->stop_running_container(force: true); $this->start_by_compose_file(); @@ -545,7 +575,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted ); } - $this->commit = $this->saved_outputs->get('git_commit_sha')->before("\t"); + if ($this->saved_outputs->get('git_commit_sha')) { + $this->commit = $this->saved_outputs->get('git_commit_sha')->before("\t"); + } } private function clone_repository() { @@ -596,7 +628,11 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted } if ($this->application->deploymentType() === 'deploy_key') { $this->fullRepoUrl = $this->application->git_repository; - $private_key = base64_encode($this->application->private_key->private_key); + $private_key = data_get($this->application, 'private_key.private_key'); + if (is_null($private_key)) { + throw new Exception('Private key not found. Please add a private key to the application and try again.'); + } + $private_key = base64_encode($private_key); $git_clone_command = "GIT_SSH_COMMAND=\"ssh -o ConnectTimeout=30 -p {$this->customPort} -o Port={$this->customPort} -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /root/.ssh/id_rsa\" {$git_clone_command} {$this->application->git_repository} {$this->basedir}"; $git_clone_command = $this->set_git_import_settings($git_clone_command); $commands = collect([ @@ -907,12 +943,12 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf"); if ($this->newVersionIsHealthy || $force) { $this->execute_remote_command( ["echo -n 'Removing old version of your application.'"], - [executeInDocker($this->deployment_uuid, "docker rm -f $this->currently_running_container_name >/dev/null 2>&1"), "hidden" => true], + [executeInDocker($this->deployment_uuid, "docker rm -f $this->currently_running_container_name >/dev/null 2>&1"), "hidden" => true, "ignore_errors" => true], ); } else { $this->execute_remote_command( ["echo -n 'New version is not healthy, rolling back to the old version.'"], - [executeInDocker($this->deployment_uuid, "docker rm -f $this->container_name >/dev/null 2>&1"), "hidden" => true], + [executeInDocker($this->deployment_uuid, "docker rm -f $this->container_name >/dev/null 2>&1"), "hidden" => true, "ignore_errors" => true], ); } } diff --git a/bootstrap/helpers/applications.php b/bootstrap/helpers/applications.php index 427ef5a57..d78d19992 100644 --- a/bootstrap/helpers/applications.php +++ b/bootstrap/helpers/applications.php @@ -4,7 +4,7 @@ use App\Jobs\ApplicationDeploymentJob; use App\Models\Application; use App\Models\ApplicationDeploymentQueue; -function queue_application_deployment(int $application_id, string $deployment_uuid, int | null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false) +function queue_application_deployment(int $application_id, string $deployment_uuid, int | null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false, bool $restart_only = false) { $deployment = ApplicationDeploymentQueue::create([ 'application_id' => $application_id, @@ -12,6 +12,7 @@ function queue_application_deployment(int $application_id, string $deployment_uu 'pull_request_id' => $pull_request_id, 'force_rebuild' => $force_rebuild, 'is_webhook' => $is_webhook, + 'restart_only' => $restart_only, 'commit' => $commit, ]); $queued_deployments = ApplicationDeploymentQueue::where('application_id', $application_id)->where('status', 'queued')->get()->sortByDesc('created_at'); diff --git a/database/migrations/2023_11_01_100437_add_restart_to_deployment_queue.php b/database/migrations/2023_11_01_100437_add_restart_to_deployment_queue.php new file mode 100644 index 000000000..608fdd924 --- /dev/null +++ b/database/migrations/2023_11_01_100437_add_restart_to_deployment_queue.php @@ -0,0 +1,28 @@ +boolean('restart_only')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('application_deployment_queues', function (Blueprint $table) { + $table->dropColumn('restart_only'); + }); + } +}; diff --git a/resources/views/components/applications/navbar.blade.php b/resources/views/components/applications/navbar.blade.php index d38790789..cab687b98 100644 --- a/resources/views/components/applications/navbar.blade.php +++ b/resources/views/components/applications/navbar.blade.php @@ -17,7 +17,7 @@ @if ($application->status !== 'exited') + +
{{ $outputs }}
From be8ea78b1bb959340b8f7a05f5c0f36e484664e2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 1 Nov 2023 14:06:15 +0100 Subject: [PATCH 19/57] feat: deployment logs fullscreen --- resources/css/app.css | 2 +- .../application/deployment-logs.blade.php | 61 ++++++++++++------- .../project/shared/get-logs.blade.php | 2 +- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/resources/css/app.css b/resources/css/app.css index 76d7f19a5..246dc98df 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -122,5 +122,5 @@ tr td:first-child { @apply pt-2 pb-10; } .fullscreen { - @apply fixed top-0 left-0 w-full h-full z-[9999] bg-coolgray-200; + @apply fixed top-0 left-0 w-full h-full z-[9999] bg-coolgray-200 overflow-y-auto scrollbar ; } diff --git a/resources/views/livewire/project/application/deployment-logs.blade.php b/resources/views/livewire/project/application/deployment-logs.blade.php index f354083b3..a37f7e377 100644 --- a/resources/views/livewire/project/application/deployment-logs.blade.php +++ b/resources/views/livewire/project/application/deployment-logs.blade.php @@ -1,4 +1,4 @@ -
+
@if (data_get($application_deployment_queue, 'status') === 'in_progress')
Deployment is @@ -12,25 +12,44 @@ class="text-warning">{{ Str::headline(data_get($application_deployment_queue, 'status')) }}.
@endif -
- - @if (decode_remote_command_output($application_deployment_queue)->count() > 0) - @foreach (decode_remote_command_output($application_deployment_queue) as $line) -
$line['type'] == 'stdout', - 'text-error' => $line['type'] == 'stderr', - 'text-warning' => $line['hidden'], - ])>[{{ $line['timestamp'] }}] @if ($line['hidden']) -
COMMAND:
{{ $line['command'] }}

OUTPUT: - @endif{{ $line['output'] }}@if ($line['hidden']) - @endif -
- @endforeach - @else - No logs yet. - @endif -
+
+
+ + + + @if (decode_remote_command_output($application_deployment_queue)->count() > 0) + @foreach (decode_remote_command_output($application_deployment_queue) as $line) +
$line['type'] == 'stdout', + 'text-error' => $line['type'] == 'stderr', + 'text-warning' => $line['hidden'], + ])>[{{ $line['timestamp'] }}] @if ($line['hidden']) +
COMMAND:
{{ $line['command'] }}

OUTPUT: + @endif{{ $line['output'] }}@if ($line['hidden']) + @endif +
+ @endforeach + @else + No logs yet. + @endif +
+
diff --git a/resources/views/livewire/project/shared/get-logs.blade.php b/resources/views/livewire/project/shared/get-logs.blade.php index 3514d4cdb..ee1b6b07e 100644 --- a/resources/views/livewire/project/shared/get-logs.blade.php +++ b/resources/views/livewire/project/shared/get-logs.blade.php @@ -16,7 +16,7 @@
+ class="relative flex flex-col-reverse w-full p-4 pt-6 overflow-y-auto text-xs text-white border border-solid rounded scrollbar border-coolgray-300" :class="fullscreen ? '' : 'max-h-[32rem]'"> -
diff --git a/resources/views/livewire/project/application/previews.blade.php b/resources/views/livewire/project/application/previews.blade.php index 5e5d4d024..19e61376b 100644 --- a/resources/views/livewire/project/application/previews.blade.php +++ b/resources/views/livewire/project/application/previews.blade.php @@ -83,6 +83,12 @@ Preview @endif + + + Get Deployment Logs + +
@endforeach diff --git a/resources/views/livewire/project/shared/get-logs.blade.php b/resources/views/livewire/project/shared/get-logs.blade.php index ee1b6b07e..137bd9dbb 100644 --- a/resources/views/livewire/project/shared/get-logs.blade.php +++ b/resources/views/livewire/project/shared/get-logs.blade.php @@ -17,13 +17,13 @@
- -
+
diff --git a/resources/views/livewire/project/application/previews.blade.php b/resources/views/livewire/project/application/previews.blade.php index 19e61376b..8f78ea517 100644 --- a/resources/views/livewire/project/application/previews.blade.php +++ b/resources/views/livewire/project/application/previews.blade.php @@ -78,11 +78,9 @@ Redeploy @endif - @if (data_get($preview, 'status') !== 'exited') - Remove - Preview - - @endif + Remove + Preview + diff --git a/resources/views/livewire/project/shared/get-logs.blade.php b/resources/views/livewire/project/shared/get-logs.blade.php index 137bd9dbb..16b2853cf 100644 --- a/resources/views/livewire/project/shared/get-logs.blade.php +++ b/resources/views/livewire/project/shared/get-logs.blade.php @@ -13,17 +13,18 @@ Refresh -
-
- -