From b4d313eb5feb221eae7e2911b59ca90d730f7128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Kaizr?= Date: Sat, 10 Jun 2023 10:08:41 +0200 Subject: [PATCH 1/5] updated libreddit - changed docker image, version by tag instead SHA hash --- public/v4/apps/libreddit.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/public/v4/apps/libreddit.yml b/public/v4/apps/libreddit.yml index 4a796ce1c..6ebecbdac 100644 --- a/public/v4/apps/libreddit.yml +++ b/public/v4/apps/libreddit.yml @@ -1,25 +1,25 @@ captainVersion: 4 services: $$cap_appname: - image: spikecodes/libreddit@$$cap_libreddit_version + image: libreddit/libreddit@$$cap_libreddit_version restart: always caproverExtra: containerHttpPort: '8080' caproverOneClickApp: variables: - id: $$cap_libreddit_version - label: Libreddit Docker Image SHA Hash - defaultValue: sha256:34882b799cc1d58becfc80cf3fec15bae945bf28715f5fba7af05825642f8a8e - description: Check out their Docker page for the valid tags https://hub.docker.com/r/spikecodes/libreddit/tags/ + label: Libreddit Docker Image Tag + defaultValue: latest + description: Check out their Docker page for the valid tags https://hub.docker.com/r/libreddit/libreddit/tags instructions: start: >- Alternative private front-end to Reddit. Libreddit hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat. - For more details, see: https://github.com/spikecodes/libreddit + For more details, see: https://github.com/libreddit/libreddit end: >- Aaaand you're done! 😄 Your service is available at http://$$cap_appname.$$cap_root_domain - displayName: Libreddit + displayName: Libreddit-test isOfficial: true description: Alternative private front-end to Reddit. Libreddit hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat. - documentation: 'Taken from https://github.com/spikecodes/libreddit ' + documentation: 'Taken from https://github.com/libreddit/libreddit ' From 7a09ad7a6b04c4a95e94a8a796ab935b38de4894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Kaizr?= Date: Sat, 10 Jun 2023 10:12:17 +0200 Subject: [PATCH 2/5] fixed version tag --- public/v4/apps/libreddit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/v4/apps/libreddit.yml b/public/v4/apps/libreddit.yml index 6ebecbdac..fd2aa5ac5 100644 --- a/public/v4/apps/libreddit.yml +++ b/public/v4/apps/libreddit.yml @@ -1,7 +1,7 @@ captainVersion: 4 services: $$cap_appname: - image: libreddit/libreddit@$$cap_libreddit_version + image: libreddit/libreddit:$$cap_libreddit_version restart: always caproverExtra: containerHttpPort: '8080' @@ -19,7 +19,7 @@ caproverOneClickApp: end: >- Aaaand you're done! 😄 Your service is available at http://$$cap_appname.$$cap_root_domain - displayName: Libreddit-test + displayName: Libreddit isOfficial: true description: Alternative private front-end to Reddit. Libreddit hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat. documentation: 'Taken from https://github.com/libreddit/libreddit ' From 037a395c215972e9d7a98294fd63119634c0eb91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojte=CC=8Cch=20Kaizr?= Date: Sat, 10 Jun 2023 10:31:46 +0200 Subject: [PATCH 3/5] returned SHA tag, no other tags than latest in docker repo --- public/v4/apps/libreddit.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/v4/apps/libreddit.yml b/public/v4/apps/libreddit.yml index fd2aa5ac5..a0aea0d84 100644 --- a/public/v4/apps/libreddit.yml +++ b/public/v4/apps/libreddit.yml @@ -1,15 +1,15 @@ captainVersion: 4 services: $$cap_appname: - image: libreddit/libreddit:$$cap_libreddit_version + image: libreddit/libreddit@$$cap_libreddit_version restart: always caproverExtra: containerHttpPort: '8080' caproverOneClickApp: variables: - id: $$cap_libreddit_version - label: Libreddit Docker Image Tag - defaultValue: latest + label: Libreddit Docker Image SHA Hash + defaultValue: sha256:e79a5d6f6836b5a9351340433b1c26e8571ded943a5318f41ae939d314434c84 description: Check out their Docker page for the valid tags https://hub.docker.com/r/libreddit/libreddit/tags instructions: start: >- @@ -17,7 +17,7 @@ caproverOneClickApp: For more details, see: https://github.com/libreddit/libreddit end: >- - Aaaand you're done! 😄 + Aaaand you're done! 😄 Just wait a few moments before the app is deployed. Your service is available at http://$$cap_appname.$$cap_root_domain displayName: Libreddit isOfficial: true From 0568b7dcbf6d1b17316afa7f94790aaa0a3c1e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojte=CC=8Cch=20Kaizr?= Date: Wed, 6 Dec 2023 14:53:04 +0100 Subject: [PATCH 4/5] keycloak fixes --- public/v4/apps/keycloak.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/public/v4/apps/keycloak.yml b/public/v4/apps/keycloak.yml index 30d274141..18a09214e 100644 --- a/public/v4/apps/keycloak.yml +++ b/public/v4/apps/keycloak.yml @@ -35,19 +35,20 @@ services: - ENV KC_DB_URL=jdbc:postgresql://srv-captain--$$cap_appname-db/keycloak - ENV KC_DB_USERNAME=keycloak - ENV KC_DB_PASSWORD=$$cap_pg_pass - - ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--optimized --hostname=$$cap_appname.$$cap_root_domain", "--proxy=edge"] + - ENV KC_HOSTNAME=$$cap_appname.$$cap_root_domain + - ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--optimized", "--proxy=edge"] caproverOneClickApp: variables: - id: $$cap_postgres_version label: Postgres Version - defaultValue: '10.21' - description: Check out their DB page for any valid major tested https://www.keycloak.org/server/db + defaultValue: '15' + description: Check out Keycloak DB page for any valid major tested https://www.keycloak.org/server/db validRegex: /^([^\s^\/])+$/ - id: $$cap_keycloak_version label: Keycloak Version - defaultValue: 20.0.3 - description: v20.0.3 current as of 2023-01-13. Check out their Docker page for the valid tags https://quay.io/repository/keycloak/keycloak?tab=tags + defaultValue: '23.0.1' + description: v23.0.1 current as of 2023-12-06. Check out Keycloak Docker page for the valid tags https://quay.io/repository/keycloak/keycloak?tab=tags validRegex: /^([^\s^\/])+$/ - id: $$cap_pg_pass label: Postgres Password @@ -57,6 +58,7 @@ caproverOneClickApp: - id: $$cap_keycloak_admin label: Keycloak admin user description: 'Login username for the admin web user.' + defaultValue: 'admin' validRegex: /.{1,}/ - id: $$cap_keycloak_password label: Keycloak admin password @@ -85,7 +87,7 @@ caproverOneClickApp: IMPORTANT: It will take up to 1 minutes for Keycloak to be ready. Before that, you might see 502 error page. - displayName: 'Keycloack' + displayName: 'Keycloak' isOfficial: true description: Keycloak is an open source identity and access management solution documentation: Taken from https://github.com/keycloak/keycloak-containers/blob/main/docker-compose-examples/keycloak-postgres.yml From 5e851bc4543c6347d0decb5c9b35c5094d761a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojte=CC=8Cch=20Kaizr?= Date: Thu, 28 Nov 2024 08:41:43 +0100 Subject: [PATCH 5/5] added linkace - bookmark archive app --- public/v4/apps/linkace.yml | 117 ++++++++++++++++++++++++++++++++++++ public/v4/logos/linkace.png | Bin 0 -> 8101 bytes 2 files changed, 117 insertions(+) create mode 100644 public/v4/apps/linkace.yml create mode 100644 public/v4/logos/linkace.png diff --git a/public/v4/apps/linkace.yml b/public/v4/apps/linkace.yml new file mode 100644 index 000000000..738b95735 --- /dev/null +++ b/public/v4/apps/linkace.yml @@ -0,0 +1,117 @@ +captainVersion: 4 +services: + $$cap_appname: + restart: always + depends_on: + - $$cap_appname-db + environment: + COMPOSE_PROJECT_NAME: $$cap_appname + APP_URL: http://$$cap_appname.$$cap_root_domain + APP_KEY: $$cap_gen_random_hex(32) + DB_CONNECTION: mysql + DB_HOST: srv-captain--$$cap_appname-db + DB_PORT: 3306 + DB_DATABASE: $$cap_linkace_db_name + DB_USERNAME: $$cap_linkace_db_user + DB_PASSWORD: $$cap_linkace_db_pass + SESSION_DRIVER: redis + CACHE_DRIVER: redis + REDIS_HOST: srv-captain--$$cap_appname-redis + REDIS_PASSWORD: $$cap_linkace_redis_pass + REDIS_PORT: 6379 + MAIL_DRIVER: smtp + MAIL_HOST: $$cap_linkace_mail_host + MAIL_PORT: $$cap_linkace_mail_port + MAIL_USERNAME: $$cap_linkace_mail_username + MAIL_PASSWORD: $$cap_linkace_mail_password + MAIL_ENCRYPTION: $$cap_linkace_mail_encryption + MAIL_FROM_ADDRESS: $$cap_linkace_mail_from_address + MAIL_FROM_NAME: $$cap_linkace_mail_from_name + caproverExtra: + containerHttpPort: '80' + dockerfileLines: + - FROM linkace/linkace:$$cap_sw_version-simple + - RUN chmod 666 /app/.env + volumes: + - $$cap_appname-data:/app + $$cap_appname-db: + image: mariadb:11.4.4 + restart: always + depends_on: + - $$cap_appname-redis + environment: + MYSQL_ROOT_PASSWORD: $$cap_gen_random_hex(32) + MYSQL_DATABASE: $$cap_linkace_db_name + MYSQL_USER: $$cap_linkace_db_user + MYSQL_PASSWORD: $$cap_linkace_db_pass + volumes: + - $$cap_appname-db:/var/lib/mysql + caproverExtra: + notExposeAsWebApp: 'true' + $$cap_appname-redis: + image: bitnami/redis:$$cap_linkace_redis_version + restart: unless-stopped + environment: + REDIS_PASSWORD: $$cap_linkace_redis_pass + caproverExtra: + notExposeAsWebApp: 'true' +caproverOneClickApp: + variables: + - id: $$cap_sw_version + label: LinkAce Version + defaultValue: 'v1.15.4' + description: Check out their Docker Hub page for the valid tags https://hub.docker.com/r/linkace/linkace/tags. Do NOT use `-simple` tags, suffix is added automatically. + - id: $$cap_linkace_db_user + label: Database User + defaultValue: linkace + description: Database user for LinkAce + - id: $$cap_linkace_db_pass + label: Database Password + defaultValue: $$cap_gen_random_hex(32) + description: Database password for LinkAce + - id: $$cap_linkace_db_name + label: Database Name + defaultValue: linkace + description: Database name for LinkAce + - id: $$cap_linkace_redis_version + label: Redis Version + defaultValue: '7.2' + description: Check out their Docker Hub page for the valid tags https://hub.docker.com/_/redis/tags + - id: $$cap_linkace_redis_pass + label: Redis Password + defaultValue: $$cap_gen_random_hex(32) + description: Redis password for LinkAce + - id: $$cap_linkace_mail_host + label: Mail Host + defaultValue: smtp.example.com + description: SMTP server hostname + - id: $$cap_linkace_mail_port + label: Mail Port + defaultValue: '465' + description: SMTP server port + - id: $$cap_linkace_mail_username + label: Mail Username + defaultValue: + description: SMTP server username + - id: $$cap_linkace_mail_password + label: Mail Password + defaultValue: + description: SMTP server password + - id: $$cap_linkace_mail_encryption + label: Mail Encryption + defaultValue: ssl + description: SMTP server encryption + - id: $$cap_linkace_mail_from_address + label: Mail From Address + defaultValue: + description: Email address to send emails from + - id: $$cap_linkace_mail_from_name + label: Mail From Name + defaultValue: + description: Name to send emails from + instructions: + start: LinkAce is a self-hosted tool for effortlessly archiving, organizing, and sharing your favorite web links. With a clean interface, you can save articles, bookmark tools, and preserve important content long-term. Easily categorize and retrieve your links, or share your collection with others. + end: LinkAce is successfully deployed. + displayName: LinkAce + description: LinkAce is a self-hosted tool for effortlessly archiving, organizing, and sharing your favorite web links. + documentation: See https://hub.docker.com/r/linkace/linkace/tags for tags and other variables diff --git a/public/v4/logos/linkace.png b/public/v4/logos/linkace.png new file mode 100644 index 0000000000000000000000000000000000000000..100acb9a2fab7b914f32301f3c2e70228268d3e8 GIT binary patch literal 8101 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