From cc71d109c92abcbbf988114bf4164b976b127867 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 27 Aug 2023 16:19:54 +0000 Subject: [PATCH 01/23] chore(deps): update gladysassistant/gladys docker tag to v4.27.2 (#1082) --- apps/gladys/config.json | 4 ++-- apps/gladys/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/gladys/config.json b/apps/gladys/config.json index 6db06e32..7963c4ff 100644 --- a/apps/gladys/config.json +++ b/apps/gladys/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": false, "id": "gladys", - "tipi_version": 16, - "version": "4.27.0", + "tipi_version": 17, + "version": "4.27.2", "categories": [ "automation" ], diff --git a/apps/gladys/docker-compose.yml b/apps/gladys/docker-compose.yml index 55ba0a0e..c576e43c 100644 --- a/apps/gladys/docker-compose.yml +++ b/apps/gladys/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: gladys: container_name: gladys - image: gladysassistant/gladys:v4.27.0 + image: gladysassistant/gladys:v4.27.2 privileged: true restart: on-failure stop_grace_period: 1m From 01469c9046d1c44ec0a1decba2e842c2580126b9 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Sun, 27 Aug 2023 16:15:53 -0400 Subject: [PATCH 02/23] Add Linkwarden (#1083) --- apps/linkwarden/config.json | 30 +++++++++++++ apps/linkwarden/docker-compose.yml | 57 ++++++++++++++++++++++++ apps/linkwarden/metadata/description.md | 30 +++++++++++++ apps/linkwarden/metadata/logo.jpg | Bin 0 -> 79033 bytes 4 files changed, 117 insertions(+) create mode 100644 apps/linkwarden/config.json create mode 100644 apps/linkwarden/docker-compose.yml create mode 100644 apps/linkwarden/metadata/description.md create mode 100644 apps/linkwarden/metadata/logo.jpg diff --git a/apps/linkwarden/config.json b/apps/linkwarden/config.json new file mode 100644 index 00000000..0eff16af --- /dev/null +++ b/apps/linkwarden/config.json @@ -0,0 +1,30 @@ +{ + "$schema": "../schema.json", + "name": "Linkwarden", + "port": 8199, + "available": true, + "exposable": true, + "id": "linkwarden", + "tipi_version": 1, + "supported_architectures": ["amd64"], + "version": "v1.0.1", + "categories": ["data"], + "description": "A self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.", + "short_desc": "A self-hosted, open-source collaborative bookmark manager", + "author": "Linkwarden", + "source": "https://github.com/linkwarden/linkwarden", + "form_fields": [ + { + "type": "random", + "label": "Linkwarden DB Password", + "min": 32, + "env_variable": "LINKWARDEN_DB_PASSWORD" + }, + { + "type": "random", + "label": "Linkwarden Nextauth Secret", + "min": 32, + "env_variable": "LINKWARDEN_NEXTAUTH_SECRET" + } + ] +} diff --git a/apps/linkwarden/docker-compose.yml b/apps/linkwarden/docker-compose.yml new file mode 100644 index 00000000..1c48fd82 --- /dev/null +++ b/apps/linkwarden/docker-compose.yml @@ -0,0 +1,57 @@ +version: "3.7" + +services: + linkwarden: + image: ghcr.io/selfhostedhub/linkwarden:v1.0.1 + container_name: linkwarden + environment: + - DATABASE_URL=postgresql://tipi:${LINKWARDEN_DB_PASSWORD}@linkwarden-db:5432/linkwarden + - NEXTAUTH_SECRET=${LINKWARDEN_NEXTAUTH_SECRET} + - NEXTAUTH_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/linkwarden:/data/data + ports: + - ${APP_PORT}:3000 + depends_on: + - linkwarden-db + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.linkwarden-web-redirect.redirectscheme.scheme: https + traefik.http.services.linkwarden.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.linkwarden-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.linkwarden-insecure.entrypoints: web + traefik.http.routers.linkwarden-insecure.service: linkwarden + traefik.http.routers.linkwarden-insecure.middlewares: linkwarden-web-redirect + # Websecure + traefik.http.routers.linkwarden.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.linkwarden.entrypoints: websecure + traefik.http.routers.linkwarden.service: linkwarden + traefik.http.routers.linkwarden.tls.certresolver: myresolver + # Local domain + traefik.http.routers.linkwarden-local-insecure.rule: Host(`linkwarden.${LOCAL_DOMAIN}`) + traefik.http.routers.linkwarden-local-insecure.entrypoints: web + traefik.http.routers.linkwarden-local-insecure.service: linkwarden + traefik.http.routers.linkwarden-local-insecure.middlewares: linkwarden-web-redirect + # Local domain secure + traefik.http.routers.linkwarden-local.rule: Host(`linkwarden.${LOCAL_DOMAIN}`) + traefik.http.routers.linkwarden-local.entrypoints: websecure + traefik.http.routers.linkwarden-local.service: linkwarden + traefik.http.routers.linkwarden-local.tls: true + + linkwarden-db: + container_name: linkwarden-db + image: postgres + restart: unless-stopped + environment: + - POSTGRES_USER=tipi + - POSTGRES_PASSWORD=${LINKWARDEN_DB_PASSWORD} + - POSTGRES_DB=linkwarden + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + networks: + - tipi_main_network diff --git a/apps/linkwarden/metadata/description.md b/apps/linkwarden/metadata/description.md new file mode 100644 index 00000000..980ba960 --- /dev/null +++ b/apps/linkwarden/metadata/description.md @@ -0,0 +1,30 @@ +# Linkwarden + +## [](https://github.com/linkwarden/linkwarden#intro--motivation)Intro & motivation + +**Linkwarden is a self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.** The objective is to organize useful webpages and articles you find across the web in one place, and since useful webpages can go away (see the inevitability of [Link Rot](https://www.howtogeek.com/786227/what-is-link-rot-and-how-does-it-threaten-the-web/)), Linkwarden also saves a copy of each webpage as a Screenshot and PDF, ensuring accessibility even if the original content is no longer available. + +Additionally, Linkwarden is designed with collaboration in mind, sharing links with the public and/or allowing multiple users to work together seamlessly. + +[![](https://github.com/linkwarden/linkwarden/raw/main/assets/showcase_image.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/showcase_image.png) + +**A bit of a "history"** Linkwarden has been completely rebuilt and redesigned from ground up, so pretty much the only thing it has in common with its predecessor is the idea behind it - bookmark management. + +## Features + +- ✅ Auto capture a screenshot and a PDF of each link. +- ✅ Organize links by collection, name, description and multiple tags. +- ✅ Collaborate on gathering links in a collection. +- ✅ Customize the permissions of each member. +- ✅ Share your collected links with the world. +- ✅ Search, filter and sort by link details. +- ✅ Responsive design and supports most browsers. + + +## Screenshots + +[![](https://github.com/linkwarden/linkwarden/raw/main/assets/collections.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/collections.png) + +[![](https://github.com/linkwarden/linkwarden/raw/main/assets/collaborators.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/collaborators.png) + +[![](https://github.com/linkwarden/linkwarden/raw/main/assets/link_details.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/link_details.png) \ No newline at end of file diff --git a/apps/linkwarden/metadata/logo.jpg b/apps/linkwarden/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..752347f9709f3d8afe1642c22f8627e4f792fdb9 GIT binary patch literal 79033 zcmbrlby!s2*C>8q1{jb=dVm3j79v#eeZpq`}_TK_j%@=b@o|v_Bwm7z4og8XX(!-K&&W-lmjp@FaQPg0sPsQ{E7=6aH zwg!N+G5{dZ2LQ5Z0KhZ+=NbC+|3MoJ{RoPt%Nc#x0FJ9nup#%*2sXq31||p#3mc3H!oedV!otA7BmqE-U@Sg_2DZ6t@CgotG^wx;xBlZ6 z+39^Iemrstuh&g;l+2HXHFZ3bn`f!vEUbb;Qu1257SW1}CNkN_AU3@j`xFc{|^1P6kFg+?Y}1cA|H zU}2M*yW#{V6`nBF_kDzrZJpjH=l4iyoS~qE3q6+7)YeIDU}kxw_00YCER}$?tc9DW zpcN`4x#&%kjOFvtuz^1-0RG=@AOVp862S41f&x4dAVd}b7D&`XV<(>V<(l_Aqh<Z?R_)ju~(kdXE| z8G@hxbKe{vG15mN0Hw;{>Q}|IR5MXB#KA5D$?swLSSbil#rBJ`@%rMRLfuIgw-VA( zR2_WoVD2GKY+wJ6TTd9+8EJ^^By1|r^rSr(Q%P~JcXv?JxDQ~79^&`@o*>M`W<_Ws z{=51AP=UV0-1``^Z}hm2qVF%|IG`L7GvVj*U;nw6>=h)jWq}jxMTcOrhN&y?Q%)NH zLi(>oBO6v;a|5Via7ik*>=6D=j!Sp{hiQKm>_ozt*J&5Ak)GHFw-suri=zpr-LxMZ z4TdXI_76zkY@a+x2EBgUA8Zu7LC=5c?wQk;H|zQ&PLgUTsJ2_eGwibgJ*E04n;4hs zbq-}c0uMkz82iYO_gosx`$u&a7Em2W6lLRF1HEi&oUVxfKUVg8WL6FSap!)<2io}UUk12X+^|;zwUk$rkV>v8AsO&Xe1AQ? zKQN9UG$WOae|@QAuJE)q+y|a9I0S8fa6+I~HiP>?{J9M(V{x`t7#90QgoT5-)`WI5 z)IyFX-`gbDMG4HroRNx^Jt{PPWM#Rr_>h)}E7vOEUmS2f)F~m2#5)`E1^e z6kaMXTxN_>D|2-5lbRSK^CWM03A2yaBvx#Q?m8E3V-`LN+5z$BSW8AH@J z1NVh61Oxa6Ox_;ph9WVQZDmDtd)6wQF+LQQBS1B8v2gI8h0=_`ujQ*!z-FqKSP6u0 zi4z5Wu^B&|7rO6+4c4j_I6){Sh2W*(6Q=$+k5-^6pN%9{maL&!NJ>xM0NgtT9^q(^ z%BrS_EtQdlVsbHy%H=ypW9nf@VZSL2auG1%8(R;zHbc3DlnPsZ4oZzEee%oW6bT|1 z&T$!2OQ`u=NYxR2RDSbwI?*PL>-i8yFxZ{^@>hHHEnfv{ih;54%hSEdXFi+)?>A=h z1Ahj?EDEA~MMLji$Ci~my8>YZ4}S4^4$koqP{z@#RKvCKfJ5D;A`I&F?voi1yVvOL z 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

Rg>))hAWQMl1Oc~phl9P-6 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 JCjR~5{{iPy+a>@2 literal 0 HcmV?d00001 From f664d3105dc3feb67297bdf8178370ac0c0af6ad Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Sun, 27 Aug 2023 21:42:54 -0400 Subject: [PATCH 03/23] Update Filestash to use Latest for ARM Compatibility (#1084) --- apps/filestash/config.json | 4 ++-- apps/filestash/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/filestash/config.json b/apps/filestash/config.json index 4573fd59..7118ac97 100644 --- a/apps/filestash/config.json +++ b/apps/filestash/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "filestash", - "tipi_version": 2, - "version": "397fd8b", + "tipi_version": 3, + "version": "latest", "categories": ["utilities"], "description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze", "short_desc": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze", diff --git a/apps/filestash/docker-compose.yml b/apps/filestash/docker-compose.yml index 6f53490e..006d215b 100644 --- a/apps/filestash/docker-compose.yml +++ b/apps/filestash/docker-compose.yml @@ -2,7 +2,7 @@ version: "2" services: filestash: container_name: filestash - image: machines/filestash:397fd8b + image: machines/filestash:latest restart: unless-stopped environment: - APPLICATION_URL=${APP_DOMAIN} From 55b7014f3302591e88647c8f0ee40384dbe2e147 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 27 Aug 2023 23:33:56 -0400 Subject: [PATCH 04/23] chore(deps): update grafana/grafana-oss docker tag to v10 (#695) * chore(deps): update grafana/grafana-oss docker tag to v10 * Update app version [ready] --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Tipi CI Co-authored-by: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> --- apps/grafana/config.json | 4 ++-- apps/grafana/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/grafana/config.json b/apps/grafana/config.json index b62d570a..95e324d8 100644 --- a/apps/grafana/config.json +++ b/apps/grafana/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "grafana", - "tipi_version": 11, - "version": "9.5.8", + "tipi_version": 12, + "version": "10.0.1", "categories": [ "data" ], diff --git a/apps/grafana/docker-compose.yml b/apps/grafana/docker-compose.yml index cd738e78..d8c870c6 100644 --- a/apps/grafana/docker-compose.yml +++ b/apps/grafana/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: grafana: container_name: grafana - image: grafana/grafana-oss:9.5.8 + image: grafana/grafana-oss:10.0.1 ports: - ${APP_PORT}:3000 volumes: From 22ba91617ab5f5d0556f695b729dfb77b16f3200 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 03:35:55 +0000 Subject: [PATCH 05/23] chore(deps): update grafana/grafana-oss docker tag to v10.1.0 (#1085) --- apps/grafana/config.json | 4 ++-- apps/grafana/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/grafana/config.json b/apps/grafana/config.json index 95e324d8..92786fa8 100644 --- a/apps/grafana/config.json +++ b/apps/grafana/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "grafana", - "tipi_version": 12, - "version": "10.0.1", + "tipi_version": 13, + "version": "10.1.0", "categories": [ "data" ], diff --git a/apps/grafana/docker-compose.yml b/apps/grafana/docker-compose.yml index d8c870c6..608d3ed6 100644 --- a/apps/grafana/docker-compose.yml +++ b/apps/grafana/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: grafana: container_name: grafana - image: grafana/grafana-oss:10.0.1 + image: grafana/grafana-oss:10.1.0 ports: - ${APP_PORT}:3000 volumes: From d77fc6d418e70bc1c58e9b512a299232e8b6f4ed Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Mon, 28 Aug 2023 20:45:36 -0400 Subject: [PATCH 06/23] Add ViewTube (#323) * Add Viewtube * Test Config * Update Names * Updates Secure * Update docker-compose.yml * Config Placeholder * Update docker-compose.yml * Final Changes * Update Viewtube --- apps/viewtube/config.json | 16 +++++++ apps/viewtube/docker-compose.yml | 66 ++++++++++++++++++++++++++ apps/viewtube/metadata/description.md | 44 +++++++++++++++++ apps/viewtube/metadata/logo.jpg | Bin 0 -> 16316 bytes apps/viewtube/metadata/optional.md | 37 +++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 apps/viewtube/config.json create mode 100644 apps/viewtube/docker-compose.yml create mode 100644 apps/viewtube/metadata/description.md create mode 100644 apps/viewtube/metadata/logo.jpg create mode 100644 apps/viewtube/metadata/optional.md diff --git a/apps/viewtube/config.json b/apps/viewtube/config.json new file mode 100644 index 00000000..6be4953d --- /dev/null +++ b/apps/viewtube/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "ViewTube", + "port": 8180, + "available": true, + "exposable": true, + "id": "viewtube", + "tipi_version": 1, + "version": "0.12.2", + "categories": ["media"], + "description": "The open source, privacy-conscious way to enjoy your favorite YouTube content.", + "short_desc": "The open source, privacy-conscious way to enjoy your favorite YouTube content.", + "author": "ViewTube", + "source": "https://github.com/ViewTube/viewtube", + "form_fields": [] +} diff --git a/apps/viewtube/docker-compose.yml b/apps/viewtube/docker-compose.yml new file mode 100644 index 00000000..46f386f7 --- /dev/null +++ b/apps/viewtube/docker-compose.yml @@ -0,0 +1,66 @@ +version: '3' + +services: + viewtube: + restart: unless-stopped + container_name: viewtube + image: mauriceo/viewtube:0.12.2 + depends_on: + - viewtube-mongodb + - viewtube-redis + volumes: + - ${APP_DATA_DIR}/data/viewtube:/data + environment: + - VIEWTUBE_DATABASE_HOST=viewtube-mongodb + - VIEWTUBE_REDIS_HOST=viewtube-redis + - VIEWTUBE_SECURE=true + - VIEWTUBE_CORS_ORIGIN=${APP_PROTOCOL:-http}://${APP_DOMAIN} + # - VIEWTUBE_YOUTUBE_COOKIE= + # - VIEWTUBE_YOUTUBE_IDENTIFIER= + ports: + - ${APP_PORT}:8066 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.viewtube-web-redirect.redirectscheme.scheme: https + traefik.http.services.viewtube.loadbalancer.server.port: 8066 + # Web + traefik.http.routers.viewtube-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.viewtube-insecure.entrypoints: web + traefik.http.routers.viewtube-insecure.service: viewtube + traefik.http.routers.viewtube-insecure.middlewares: viewtube-web-redirect + # Websecure + traefik.http.routers.viewtube.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.viewtube.entrypoints: websecure + traefik.http.routers.viewtube.service: viewtube + traefik.http.routers.viewtube.tls.certresolver: myresolver + # Local domain + traefik.http.routers.viewtube-local-insecure.rule: Host(`viewtube.${LOCAL_DOMAIN}`) + traefik.http.routers.viewtube-local-insecure.entrypoints: web + traefik.http.routers.viewtube-local-insecure.service: viewtube + traefik.http.routers.viewtube-local-insecure.middlewares: viewtube-web-redirect + # Local domain secure + traefik.http.routers.viewtube-local.rule: Host(`viewtube.${LOCAL_DOMAIN}`) + traefik.http.routers.viewtube-local.entrypoints: websecure + traefik.http.routers.viewtube-local.service: viewtube + traefik.http.routers.viewtube-local.tls: true + + viewtube-mongodb: + container_name: viewtube-mongodb + restart: unless-stopped + image: mongo:5 + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/db:/data/db + + viewtube-redis: + container_name: viewtube-redis + restart: unless-stopped + image: redis:7 + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/redis:/data diff --git a/apps/viewtube/metadata/description.md b/apps/viewtube/metadata/description.md new file mode 100644 index 00000000..429a6626 --- /dev/null +++ b/apps/viewtube/metadata/description.md @@ -0,0 +1,44 @@ +ViewTube is an alternative YouTube frontend that lets you watch, search and discover YouTube videos without ads or tracking. It's built to be mobile and desktop friendly, with dark and light themes, and a touch-friendly video player with gestures. You can create an account separately from YouTube, read comments, watch playlists, subscribe to channels and receive push notifications for new uploads It's built using [Nuxt](https://nuxt.com/) and [Nest](https://nestjs.com/). + +You can find the documentation at [viewtube.wiki](https://viewtube.wiki) + +## Features + +- Watch videos without ads or tracking +- Built from the ground up to be mobile and desktop friendly +- Dark and light themes +- Touch friendly video player with gestures +- Supports loop, speed, autoplay and volume +- Create an account separately from Youtube +- Read comments +- Search for videos +- Watch playlists +- Subscribe to channels and see their latest uploads +- Receive push notifications for subscribed channels +- Integrated SponsorBlock support + +## Where does ViewTube get the data from? + +ViewTube does not use the official Youtube API. It instead scrapes the data from the website using a combination of custom built tools and the following open source libraries. + +- [node-ytdl-core](https://github.com/fent/node-ytdl-core) +- [node-ytsr](https://github.com/TimeForANinja/node-ytsr) +- [node-ytpl](https://github.com/TimeForANinja/node-ytpl) +- [yt-comment-scraper](https://github.com/FreeTubeApp/yt-comment-scraper) +- [yt-channel-info](https://github.com/FreeTubeApp/yt-channel-info) + +## Screenshots + +### Homepage + +[![Screenshot-Homepage](https://camo.githubusercontent.com/7ca1b34ee39d918f86a7043a3ffae08b574d5630975255eb8840536e7e169248/68747470733a2f2f692e6962622e636f2f476b35744b51372f6c78743179306d6b2e6a7067)](https://camo.githubusercontent.com/7ca1b34ee39d918f86a7043a3ffae08b574d5630975255eb8840536e7e169248/68747470733a2f2f692e6962622e636f2f476b35744b51372f6c78743179306d6b2e6a7067) + +### Video + +[![Screenshot-Video](https://camo.githubusercontent.com/07ecf2f4a9e61eb326d2125375f674020cbf97b1a998defdeb21fd8d1aa6f8f7/68747470733a2f2f692e6962622e636f2f52544c327633662f6732656a663777662e6a7067)](https://camo.githubusercontent.com/07ecf2f4a9e61eb326d2125375f674020cbf97b1a998defdeb21fd8d1aa6f8f7/68747470733a2f2f692e6962622e636f2f52544c327633662f6732656a663777662e6a7067) + +### Channel + +[![Screenshot-Channel](https://camo.githubusercontent.com/b50d3f852326d5436cc32507eb2ee48d036092ae1cba3bc61485a8a4661d0ffd/68747470733a2f2f692e6962622e636f2f68396d663179642f366a3435616f35722e6a7067)](https://camo.githubusercontent.com/b50d3f852326d5436cc32507eb2ee48d036092ae1cba3bc61485a8a4661d0ffd/68747470733a2f2f692e6962622e636f2f68396d663179642f366a3435616f35722e6a7067) + + diff --git a/apps/viewtube/metadata/logo.jpg b/apps/viewtube/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c51877cbedcdf828e38b6a074069a65c4ec28d3d GIT binary patch literal 16316 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 Date: Tue, 29 Aug 2023 14:34:06 +0000 Subject: [PATCH 07/23] chore(deps): update ghcr.io/tandoorrecipes/recipes docker tag to v1.5.6 (#1090) --- apps/tandoor/config.json | 4 ++-- apps/tandoor/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/tandoor/config.json b/apps/tandoor/config.json index bbd0c49f..e29f89b1 100644 --- a/apps/tandoor/config.json +++ b/apps/tandoor/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "tandoor", - "tipi_version": 2, - "version": "1.5.5", + "tipi_version": 3, + "version": "1.5.6", "categories": [ "data" ], diff --git a/apps/tandoor/docker-compose.yml b/apps/tandoor/docker-compose.yml index 3c6bafb7..b8cfc771 100644 --- a/apps/tandoor/docker-compose.yml +++ b/apps/tandoor/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: tandoor: container_name: tandoor - image: ghcr.io/tandoorrecipes/recipes:1.5.5 + image: ghcr.io/tandoorrecipes/recipes:1.5.6 volumes: - ${APP_DATA_DIR}/data/staticfiles:/opt/recipes/staticfiles - ${APP_DATA_DIR}/data/mediafiles:/opt/recipes/mediafiles From 05b09bde613c534e6d4571fd4c8b278a0b5f3f84 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:44:11 +0000 Subject: [PATCH 08/23] chore(deps): update zerotier/zerotier docker tag to v1.12.1 (#1091) --- apps/zerotier/config.json | 4 ++-- apps/zerotier/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/zerotier/config.json b/apps/zerotier/config.json index 0a2494a2..06c40df3 100644 --- a/apps/zerotier/config.json +++ b/apps/zerotier/config.json @@ -5,8 +5,8 @@ "no_gui": true, "port": 9993, "id": "zerotier", - "tipi_version": 3, - "version": "1.10.6", + "tipi_version": 4, + "version": "1.12.1", "categories": [ "network", "security" diff --git a/apps/zerotier/docker-compose.yml b/apps/zerotier/docker-compose.yml index 03e8f541..0bb594a5 100644 --- a/apps/zerotier/docker-compose.yml +++ b/apps/zerotier/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: zerotier: container_name: zerotier - image: zerotier/zerotier:1.10.6 + image: zerotier/zerotier:1.12.1 restart: on-failure command: "${NETWORK_ID}" cap_add: From 17641b0832aa190e78e786204dc9816708f81cf2 Mon Sep 17 00:00:00 2001 From: Stavros Iliopoulos Date: Tue, 29 Aug 2023 22:40:52 +0300 Subject: [PATCH 09/23] Fix pihole error. (#1092) * Update docker-compose.yml * Update config.json --- apps/pihole/config.json | 2 +- apps/pihole/docker-compose.yml | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/pihole/config.json b/apps/pihole/config.json index 02e19ffe..a7491b2d 100644 --- a/apps/pihole/config.json +++ b/apps/pihole/config.json @@ -10,7 +10,7 @@ ] }, "id": "pihole", - "tipi_version": 8, + "tipi_version": 9, "version": "2023.05.2", "url_suffix": "/admin", "categories": [ diff --git a/apps/pihole/docker-compose.yml b/apps/pihole/docker-compose.yml index 558834fe..d649eb55 100644 --- a/apps/pihole/docker-compose.yml +++ b/apps/pihole/docker-compose.yml @@ -18,12 +18,10 @@ services: environment: TZ: ${TZ} WEBPASSWORD: ${APP_PASSWORD} - FTLCONF_REPLY_ADDR4: 10.21.21.201 cap_add: - NET_ADMIN networks: - tipi_main_network: - ipv4_address: 10.21.21.201 + - tipi_main_network labels: # Main traefik.enable: true From 983938fc056b7cc8a4d0e802820842a1160e11ae Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Tue, 29 Aug 2023 16:34:30 -0400 Subject: [PATCH 10/23] Update Ghost (#1093) - Fix URL Env to use the right schema - Added Setup Instructions --- apps/ghost/config.json | 2 +- apps/ghost/docker-compose.yml | 2 +- apps/ghost/metadata/description.md | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/ghost/config.json b/apps/ghost/config.json index e2edbcd5..744e519b 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,7 +5,7 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 41, + "tipi_version": 42, "version": "5.60.0", "categories": [ "social", diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index 3b3af6fe..173ff809 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -16,7 +16,7 @@ services: database__connection__user: tipi database__connection__password: ${GHOST_DATABASE_PASSWORD} database__connection__database: ghosttipi - url: http://localhost:${APP_PORT} + url: ${APP_PROTOCOL:-http}://${APP_DOMAIN} volumes: - ${APP_DATA_DIR}/content:/var/lib/ghost/content networks: diff --git a/apps/ghost/metadata/description.md b/apps/ghost/metadata/description.md index e5f88c67..b0e7fb1e 100644 --- a/apps/ghost/metadata/description.md +++ b/apps/ghost/metadata/description.md @@ -1,3 +1,6 @@ +# Install Information + +After Ghost is installed, head over to https://yourdomain.com/ghost/ to finish setup and create the admin account! # A painless self-hosted Blog Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members. From 2d6d58993f09d4d1bbb04c6013a9ea4154bbb5de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 21:04:45 +0000 Subject: [PATCH 11/23] chore(deps): update altran1502/immich-machine-learning docker tag to v1.76.0 (#1094) --- apps/immich/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 0619319f..2cc27c25 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -93,7 +93,7 @@ services: immich-machine-learning: container_name: immich-machine-learning - image: altran1502/immich-machine-learning:v1.75.2 + image: altran1502/immich-machine-learning:v1.76.0 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache From c05f25276e612a9bc05931502d2ba84f11a2afe3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 21:05:25 +0000 Subject: [PATCH 12/23] chore(deps): update altran1502/immich-proxy docker tag to v1.76.0 (#1095) --- apps/immich/config.json | 4 ++-- apps/immich/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/immich/config.json b/apps/immich/config.json index c0ef61ef..392d9f1a 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 38, - "version": "1.75.2", + "tipi_version": 39, + "version": "1.76.0", "categories": [ "data", "photography" diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 2cc27c25..6454d427 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: immich: container_name: immich - image: altran1502/immich-proxy:v1.75.2 + image: altran1502/immich-proxy:v1.76.0 ports: - ${APP_PORT}:8080 depends_on: From 3152f217cd6554d68e210dd8ebc7b4496dba0da1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 01:57:10 +0000 Subject: [PATCH 13/23] chore(deps): update altran1502/immich-server docker tag to v1.76.0 (#1097) --- apps/immich/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 6454d427..c9922103 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -43,7 +43,7 @@ services: immich-server: container_name: immich-server - image: altran1502/immich-server:v1.75.2 + image: altran1502/immich-server:v1.76.0 command: ["start-server.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -68,7 +68,7 @@ services: immich-microservices: container_name: immich-microservices - image: altran1502/immich-server:v1.75.2 + image: altran1502/immich-server:v1.76.0 command: ["start-microservices.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload From 061ea584b16ccda58f645f901ec17b4c6511ca5e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 01:57:40 +0000 Subject: [PATCH 14/23] chore(deps): update ghcr.io/diced/zipline docker tag to v3.7.4 (#1096) --- apps/zipline/config.json | 4 ++-- apps/zipline/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/zipline/config.json b/apps/zipline/config.json index 57a5099c..8d0b8edd 100644 --- a/apps/zipline/config.json +++ b/apps/zipline/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "zipline", - "tipi_version": 4, - "version": "3.7.3", + "tipi_version": 5, + "version": "3.7.4", "categories": [ "media" ], diff --git a/apps/zipline/docker-compose.yml b/apps/zipline/docker-compose.yml index 7383e75b..0ee0bdb7 100644 --- a/apps/zipline/docker-compose.yml +++ b/apps/zipline/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.7' services: zipline: container_name: zipline - image: ghcr.io/diced/zipline:3.7.3 + image: ghcr.io/diced/zipline:3.7.4 ports: - '${APP_PORT}:3000' restart: unless-stopped From ce7e7dd0a2cfbd2d2cb7402ea35814d294588173 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 05:09:39 +0000 Subject: [PATCH 15/23] chore(deps): update altran1502/immich-web docker tag to v1.76.0 (#1098) --- apps/immich/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index c9922103..07bd957f 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -114,7 +114,7 @@ services: immich-web: container_name: immich-web - image: altran1502/immich-web:v1.75.2 + image: altran1502/immich-web:v1.76.0 restart: unless-stopped networks: - tipi_main_network From 6d41a7e473c015967d3aa4315da5a61dac2f41d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 08:10:59 +0000 Subject: [PATCH 16/23] chore(deps): update lscr.io/linuxserver/transmission docker tag to v4.0.4 (#1099) --- apps/transmission/config.json | 4 ++-- apps/transmission/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/transmission/config.json b/apps/transmission/config.json index f49923e7..90003e07 100644 --- a/apps/transmission/config.json +++ b/apps/transmission/config.json @@ -10,8 +10,8 @@ ] }, "id": "transmission", - "tipi_version": 7, - "version": "4.0.3", + "tipi_version": 8, + "version": "4.0.4", "categories": [ "utilities" ], diff --git a/apps/transmission/docker-compose.yml b/apps/transmission/docker-compose.yml index 5c058ed6..cff63cce 100644 --- a/apps/transmission/docker-compose.yml +++ b/apps/transmission/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: transmission: - image: lscr.io/linuxserver/transmission:4.0.3 + image: lscr.io/linuxserver/transmission:4.0.4 container_name: transmission dns: - ${DNS_IP} From b7889272884f2133173f2149dd4b2b6456e5b4ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 14:49:36 +0000 Subject: [PATCH 17/23] chore(deps): update altran1502/immich-machine-learning docker tag to v1.76.1 (#1101) --- apps/immich/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 07bd957f..54adea94 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -93,7 +93,7 @@ services: immich-machine-learning: container_name: immich-machine-learning - image: altran1502/immich-machine-learning:v1.76.0 + image: altran1502/immich-machine-learning:v1.76.1 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache From 8e1dbec7272b1ae95ae0a829a0469dc2a7352cc1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 14:50:09 +0000 Subject: [PATCH 18/23] chore(deps): update altran1502/immich-proxy docker tag to v1.76.1 (#1102) --- apps/immich/config.json | 4 ++-- apps/immich/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/immich/config.json b/apps/immich/config.json index 392d9f1a..4de53fce 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 39, - "version": "1.76.0", + "tipi_version": 40, + "version": "1.76.1", "categories": [ "data", "photography" diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 54adea94..1bc93640 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: immich: container_name: immich - image: altran1502/immich-proxy:v1.76.0 + image: altran1502/immich-proxy:v1.76.1 ports: - ${APP_PORT}:8080 depends_on: From 243895478569afc101e57cae8d6b939e10c8da71 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:22:12 +0000 Subject: [PATCH 19/23] chore(deps): update altran1502/immich-server docker tag to v1.76.1 (#1104) --- apps/immich/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 1bc93640..59eba079 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -43,7 +43,7 @@ services: immich-server: container_name: immich-server - image: altran1502/immich-server:v1.76.0 + image: altran1502/immich-server:v1.76.1 command: ["start-server.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -68,7 +68,7 @@ services: immich-microservices: container_name: immich-microservices - image: altran1502/immich-server:v1.76.0 + image: altran1502/immich-server:v1.76.1 command: ["start-microservices.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload From 1da59d0505b45cf01969ab04ae4b084f0b0b4e7d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:22:27 +0000 Subject: [PATCH 20/23] chore(deps): update altran1502/immich-web docker tag to v1.76.1 (#1105) --- apps/immich/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 59eba079..57e03410 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -114,7 +114,7 @@ services: immich-web: container_name: immich-web - image: altran1502/immich-web:v1.76.0 + image: altran1502/immich-web:v1.76.1 restart: unless-stopped networks: - tipi_main_network From c60a31a6118f90db3d99bc2ba46ac2a7e4f103d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 18:39:11 +0000 Subject: [PATCH 21/23] chore(deps): update lscr.io/linuxserver/bookstack docker tag to v23.08.20230830 (#1106) --- apps/bookstack/config.json | 4 ++-- apps/bookstack/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/bookstack/config.json b/apps/bookstack/config.json index d8274bb4..c3bd64a5 100644 --- a/apps/bookstack/config.json +++ b/apps/bookstack/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8119, "id": "bookstack", - "tipi_version": 11, - "version": "23.06.20230703", + "tipi_version": 12, + "version": "23.08.20230830", "description": "BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information. Default login: admin@admin.com password: password", "short_desc": "BookStack is a self-hosted platform for organising and storing information.", "author": "Dan Brown", diff --git a/apps/bookstack/docker-compose.yml b/apps/bookstack/docker-compose.yml index c2caaca6..917790df 100644 --- a/apps/bookstack/docker-compose.yml +++ b/apps/bookstack/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: bookstack: - image: lscr.io/linuxserver/bookstack:23.06.20230703 + image: lscr.io/linuxserver/bookstack:23.08.20230830 container_name: bookstack environment: - APP_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} From 87c4f851db0fb4a77c8287f5980e03dd722b6989 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 18:39:18 +0000 Subject: [PATCH 22/23] chore(deps): update svhd/logto docker tag to v1.8.0 (#1107) --- apps/logto/config.json | 4 ++-- apps/logto/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/logto/config.json b/apps/logto/config.json index 96098e61..4aaf6f95 100644 --- a/apps/logto/config.json +++ b/apps/logto/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "logto", - "tipi_version": 6, - "version": "1.7.0", + "tipi_version": 7, + "version": "1.8.0", "force_expose": true, "categories": [ "security" diff --git a/apps/logto/docker-compose.yml b/apps/logto/docker-compose.yml index 006f3a50..2ab4dac3 100644 --- a/apps/logto/docker-compose.yml +++ b/apps/logto/docker-compose.yml @@ -4,7 +4,7 @@ services: depends_on: logto-db: condition: service_healthy - image: svhd/logto:1.7.0 + image: svhd/logto:1.8.0 container_name: logto entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"] ports: From 381af8166481367934b2f5acf64ebc376b67754e Mon Sep 17 00:00:00 2001 From: Stavros Iliopoulos Date: Wed, 30 Aug 2023 22:03:20 +0300 Subject: [PATCH 23/23] Add stirling-pdf and fix filebrowser. (#1100) * Add stirling-pdf. * Delete apps/stirling-pdf/metadata/stirling.png * Update description.md * Update description.md * Update docker-compose.yml * Update docker-compose.yml --- README.md | 1 + apps/filebrowser/docker-compose.yml | 4 +- apps/filebrowser/metadata/description.md | 4 +- apps/stirling-pdf/config.json | 20 +++++++ apps/stirling-pdf/docker-compose.yml | 40 ++++++++++++++ apps/stirling-pdf/metadata/description.md | 64 ++++++++++++++++++++++ apps/stirling-pdf/metadata/logo.jpg | Bin 0 -> 18046 bytes 7 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 apps/stirling-pdf/config.json create mode 100644 apps/stirling-pdf/docker-compose.yml create mode 100644 apps/stirling-pdf/metadata/description.md create mode 100644 apps/stirling-pdf/metadata/logo.jpg diff --git a/README.md b/README.md index 1b730980..7ad20717 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [SimpleX SMP](https://github.com/simplex-chat/simplexmq) - A reference implementation of the SimpleX Messaging Protocol for simplex queues over public networks. - [Sonarr](https://github.com/Sonarr/Sonarr) - TV show manager for Usenet and BitTorrent - [Sshwifty](https://github.com/nirui/sshwifty/) - Web SSH & Telnet (WebSSH & WebTelnet client) +- [Stirling-PDF](https://github.com/Frooodle/Stirling-PDF) - Locally hosted web application that allows you to perform various operations on PDF files. - [Syncthing](https://github.com/syncthing/syncthing) - Continuous File Synchronization - [Tailscale](https://github.com/tailscale/tailscale) - The easiest, most secure way to use WireGuard and 2FA - [Tandoor](https://github.com/TandoorRecipes/recipes) - Drop your collection of links and notes. Get Tandoor and never look back onto a time without recipe management, storage, sharing and collaborative cooking! diff --git a/apps/filebrowser/docker-compose.yml b/apps/filebrowser/docker-compose.yml index 00cc0598..d3421d18 100644 --- a/apps/filebrowser/docker-compose.yml +++ b/apps/filebrowser/docker-compose.yml @@ -5,12 +5,10 @@ services: image: filebrowser/filebrowser:s6 ports: - ${APP_PORT}:80 - environment: - - PUID=1000 - - PGID=1000 volumes: - ${ROOT_FOLDER_HOST}/app-data:/srv/app-data - ${ROOT_FOLDER_HOST}/media:/srv/media + - ${APP_DATA_DIR}/data/general:/srv/general - ${APP_DATA_DIR}/data/db:/database - ${APP_DATA_DIR}/data/config:/config networks: diff --git a/apps/filebrowser/metadata/description.md b/apps/filebrowser/metadata/description.md index 3c7355e1..8160c31e 100644 --- a/apps/filebrowser/metadata/description.md +++ b/apps/filebrowser/metadata/description.md @@ -4,9 +4,9 @@ filebrowser provides a file managing interface within a specified directory and - **username**: admin - **password**: admin -
+ ## Features Please refer to our docs at [https://filebrowser.org/features](https://filebrowser.org/features) -![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif) \ No newline at end of file +![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif) diff --git a/apps/stirling-pdf/config.json b/apps/stirling-pdf/config.json new file mode 100644 index 00000000..11db4928 --- /dev/null +++ b/apps/stirling-pdf/config.json @@ -0,0 +1,20 @@ +{ + "$schema": "../schema.json", + "name": "Stirling-PDF", + "port": 8234, + "available": true, + "exposable": true, + "id": "stirling-pdf", + "tipi_version": 1, + "version": "0.13.0", + "categories": [ + "data", + "utilities" + ], + "description": "Locally hosted web application that allows you to perform various operations on PDF files.", + "short_desc": "Powerful locally hosted web based PDF manipulation tool.", + "author": "Frooodle", + "source": "https://github.com/Frooodle/Stirling-PDF/", + "form_fields": [] + } + \ No newline at end of file diff --git a/apps/stirling-pdf/docker-compose.yml b/apps/stirling-pdf/docker-compose.yml new file mode 100644 index 00000000..ec57f2ff --- /dev/null +++ b/apps/stirling-pdf/docker-compose.yml @@ -0,0 +1,40 @@ +version: "3.7" +services: + stirling-pdf: + image: ghcr.io/frooodle/s-pdf:0.13.0 + restart: unless-stopped + container_name: stirling-pdf + privileged: true + ports: + - ${APP_PORT}:8080 + volumes: + - ${APP_DATA_DIR}/datatrainingData:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages + - ${APP_DATA_DIR}/dataextraConfigs:/configs + - ${APP_DATA_DIR}/datacustomFiles:/customFiles/ + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.stirling-pdf-web-redirect.redirectscheme.scheme: https + traefik.http.services.stirling-pdf.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.stirling-pdf-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.stirling-pdf-insecure.entrypoints: web + traefik.http.routers.stirling-pdf-insecure.service: stirling-pdf + traefik.http.routers.stirling-pdf-insecure.middlewares: stirling-pdf-web-redirect + # Websecure + traefik.http.routers.stirling-pdf.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.stirling-pdf.entrypoints: websecure + traefik.http.routers.stirling-pdf.service: stirling-pdf + traefik.http.routers.stirling-pdf.tls.certresolver: myresolver + # Local domain + traefik.http.routers.stirling-pdf-local-insecure.rule: Host(`stirling-pdf.${LOCAL_DOMAIN}`) + traefik.http.routers.stirling-pdf-local-insecure.entrypoints: web + traefik.http.routers.stirling-pdf-local-insecure.service: stirling-pdf + traefik.http.routers.stirling-pdf-local-insecure.middlewares: stirling-pdf-web-redirect + # Local domain secure + traefik.http.routers.stirling-pdf-local.rule: Host(`stirling-pdf.${LOCAL_DOMAIN}`) + traefik.http.routers.stirling-pdf-local.entrypoints: websecure + traefik.http.routers.stirling-pdf-local.service: stirling-pdf + traefik.http.routers.stirling-pdf-local.tls: true diff --git a/apps/stirling-pdf/metadata/description.md b/apps/stirling-pdf/metadata/description.md new file mode 100644 index 00000000..94a53866 --- /dev/null +++ b/apps/stirling-pdf/metadata/description.md @@ -0,0 +1,64 @@ +


Stirling-PDF

+

+ +This is a powerful locally hosted web based PDF manipulation tool using docker that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application started as a 100% ChatGPT-made application and has evolved to include a wide range of features to handle all your PDF needs. + +Stirling PDF makes no outbound calls for any record keeping or tracking. + +All files and PDFs are either purely client side, in server memory only during the execution of the task or within a temporay file only for execution of the task. +Any file which has been downloaded by the user will have already been deleted from the server by that time. + +Feel free to request any features or bug fixes either in github issues or our [Discord](https://discord.gg/Cn8pWhQRxZ) + +## Features +- Full interactive GUI for merging/splitting/rotating/moving PDFs and their pages. +- Split PDFs into multiple files at specified page numbers or extract all pages as individual files. +- Merge multiple PDFs together into a single resultant file +- Convert PDFs to and from images +- Reorganize PDF pages into different orders. +- Add/Generate signatures +- Format PDFs into a multi-paged page +- Scale page contents size by set % +- Adjust Contrast +- Crop PDF +- Auto Split PDF (With physically scanned page dividers) +- Flatten PDFs +- Repair PDFs +- Detect and remove blank pages +- Compare 2 PDFs and show differences in text +- Add images to PDFs +- Rotating PDFs in 90 degree increments. +- Compressing PDFs to decrease their filesize. (Using OCRMyPDF) +- Add and remove passwords +- Set PDF Permissions +- Add watermark(s) +- Convert Any common file to PDF (using LibreOffice) +- Convert PDF to Word/Powerpoint/Others (using LibreOffice) +- Convert HTML to PDF +- URL to PDF +- Extract images from PDF +- Extract images from Scans +- Add page numbers +- Auto rename file by detecting PDF header text +- OCR on PDF (Using OCRMyPDF) +- PDF/A conversion (Using OCRMyPDF) +- Edit metadata +- Dark mode support. +- Custom download options (see [here](https://github.com/Frooodle/Stirling-PDF/blob/main/images/settings.png) for example) +- Parallel file processing and downloads +- API for integration with external scripts + +For a overview of the tasks and the technology each uses please view [groups.md](https://github.com/Frooodle/Stirling-PDF/blob/main/Groups.md) +Hosted instance/demo of the app can be seen [here](https://pdf.adminforge.de/) hosted by the team at adminforge.de + +## Technologies used +- Spring Boot + Thymeleaf +- PDFBox +- IText7 +- [LibreOffice](https://www.libreoffice.org/discover/libreoffice/) for advanced conversions +- [OcrMyPdf](https://github.com/ocrmypdf/OCRmyPDF) +- HTML, CSS, JavaScript +- Docker +- PDF.js +- PDF-LIB.js + diff --git a/apps/stirling-pdf/metadata/logo.jpg b/apps/stirling-pdf/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ee8682a909ccff5d9fc8abfa9e3d7cf688a8612 GIT binary patch literal 18046 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 F{|D&t%D(^r literal 0 HcmV?d00001