diff --git a/.github/workflows/renovate-app-version.sh b/.github/workflows/renovate-app-version.sh new file mode 100755 index 00000000..fa6764f5 --- /dev/null +++ b/.github/workflows/renovate-app-version.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# This script copies the version from docker-compose.yml to config.json. + +app_name=$1 + +# find all docker-compose files under apps/$app_name (there should be only one) +docker_compose_files=$(find apps/$app_name -name docker-compose.yml) + +for docker_compose_file in $docker_compose_files +do + # Assuming that the app version will be from the first docker image + first_service=$(yq '.services | keys | .[0]' $docker_compose_file) + + image=$(yq .services.$first_service.image $docker_compose_file) + + # Only apply changes if the format is : + if [[ "$image" == *":"* ]]; then + version=$(cut -d ":" -f2- <<< "$image") + + # Trim the "v" prefix + trimmed_version=${version/#"v"} + + # Find config file + config_file=${docker_compose_file/docker-compose.yml/config.json} + + current_config_version=$(jq -r '.version' $config_file) + + # Update the version in config.json, but only if there's a change + if [[ "$current_config_version" != "$trimmed_version" ]]; then + contents="$(jq --arg trimmed_version "$trimmed_version" '.version=$trimmed_version' $config_file)" + echo "${contents}" > $config_file + + tipi_version=$(jq -r '.tipi_version' $config_file) + tipi_version=$((tipi_version + 1)) + contents="$(jq --argjson tipi_version $tipi_version '.tipi_version=$tipi_version' $config_file)" + echo "${contents}" > $config_file + fi + fi +done \ No newline at end of file diff --git a/.github/workflows/renovate-app-version.yml b/.github/workflows/renovate-app-version.yml new file mode 100644 index 00000000..bbfc825f --- /dev/null +++ b/.github/workflows/renovate-app-version.yml @@ -0,0 +1,39 @@ +name: Update app version in Renovate Branches + +on: + push: + branches: [ 'renovate/*' ] + +jobs: + update-app-version: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Configure repo + run: | + git config --local user.email "githubaction@githubaction.com" + git config --local user.name "github-action update-app-version" + + - name: Get list of updated files by the last commit in this branch separated by space + id: updated-files + run: | + echo "::set-output name=files::$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }} | tr '\n' ' ')" + + - name: Run renovate-app-version.sh on updated files + run: | + IFS=' ' read -ra files <<< "${{ steps.updated-files.outputs.files }}" + + for file in "${files[@]}"; do + if [[ $file == *"docker-compose.yml"* ]]; then + app_name=$(echo $file | cut -d'/' -f 2) + ./.github/workflows/renovate-app-version.sh $app_name + fi + done + + - name: Commit & Push Changes + run: | + git add "apps/*/config.json" && git commit -m "Update app version" --no-verify && git push || true diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 00000000..fc0404de --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,30 @@ +name: Renovate + +on: + workflow_dispatch: + inputs: + log-level: + type: choice + description: Select log level for Renovate + options: + - trace + - debug + - info + - warn + - error + default: into + required: false + schedule: + # The "*" (#42, asterisk) character has special semantics in YAML, so this + # string has to be quoted. + - cron: '0/15 * * * *' +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2.0.0 + - name: Self-hosted Renovate + uses: renovatebot/github-action@v32.118.0 + with: + token: ${{ secrets.RENOVATE_TOKEN }} diff --git a/.gitignore b/.gitignore index 504afef8..5e3c552a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ package-lock.json +github.secrets diff --git a/README.md b/README.md index ce0ec8ce..823b8545 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Ghost](https://github.com/TryGhost/Ghost) - Ghost - Turn your audience into a business - [Gitea](https://github.com/go-gitea/gitea) - Gitea - A painless self-hosted Git service - [Gotify](https://github.com/gotify/server) - Gotify - Simple server for sending and receiving notification messages +- [Haven](https://github.com/havenweb/haven) - Haven is a self-hosted private blog and feedreader you can use instead of Facebook - [Headscale](https://github.com/juanfont/headscale) - An open source, self-hosted implementation of the Tailscale control server - [Homarr](https://github.com/ajnart/homarr) - A homepage for your server - [Home Assistant](https://github.com/home-assistant/core) - Open source home automation that puts local control and privacy first @@ -26,6 +27,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Joplin](https://github.com/laurent22/joplin) - Privacy focused note-taking app - [Libreddit](https://github.com/spikecodes/libreddit) - Private front-end for Reddit - [LibreTranslate](https://github.com/LibreTranslate/LibreTranslate) - Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup +- [Lidarr](https://github.com/Lidarr/Lidarr) - Looks and smells like Sonarr but made for music. - [Mealie](https://github.com/hay-kot/mealie) - Self-hosted recipe manager and meal planner. - [Monero Daemon](https://github.com/monero-project/monero/) - A network daemon for Monero: the secure, private, untraceable cryptocurrency - [Monero p2pool Daemon](https://github.com/SChernykh/p2pool) - Decentralized pool for Monero mining @@ -41,6 +43,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [PrivateBin](https://github.com/PrivateBin/PrivateBin) - A minimalist, open source online pastebin where the server has zero knowledge of pasted data - [Prowlarr](https://github.com/Prowlarr/Prowlarr/) - A torrent/usenet indexer manager/proxy - [Proxitok](https://github.com/pablouser1/ProxiTok) - Open source alternative frontend for TikTok made using PHP +- [qBittorrent](https://github.com/qbittorrent/qBittorrent) - BitTorrent client - [Radarr](https://github.com/Radarr/Radarr) - Movie collection manager for Usenet and BitTorrent users - [Readarr](https://github.com/Readarr/Readarr) - Book Manager and Automation (Sonarr for Ebooks) - [Resilio Sync](https://github.com/bt-sync) - Fast, reliable, and simple file sync and share solution diff --git a/apps/adguard/config.json b/apps/adguard/config.json index c7b1e9d6..8b490e34 100644 --- a/apps/adguard/config.json +++ b/apps/adguard/config.json @@ -2,8 +2,9 @@ "$schema": "../schema.json", "name": "Adguard", "available": true, - "tipi_version": 2, - "version": "0.107.13", + "exposable": true, + "tipi_version": 5, + "version": "0.107.18", "port": 8104, "id": "adguard", "categories": ["network", "security"], diff --git a/apps/adguard/docker-compose.yml b/apps/adguard/docker-compose.yml index bfcd7331..4209589c 100644 --- a/apps/adguard/docker-compose.yml +++ b/apps/adguard/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: adguard: - image: adguard/adguardhome:v0.107.13 + image: adguard/adguardhome:v0.107.18 container_name: adguard volumes: - "${APP_DATA_DIR}/data/work:/opt/adguardhome/work" @@ -14,3 +14,10 @@ services: - ${NETWORK_INTERFACE:-0.0.0.0}:53:53/tcp - ${NETWORK_INTERFACE:-0.0.0.0}:53:53/udp - ${APP_PORT}:80 + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.adguard.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.adguard.entrypoints: websecure + traefik.http.routers.adguard.service: adguard + traefik.http.routers.adguard.tls.certresolver: myresolver + traefik.http.services.adguard.loadbalancer.server.port: 80 diff --git a/apps/bazarr/config.json b/apps/bazarr/config.json new file mode 100644 index 00000000..08d774c0 --- /dev/null +++ b/apps/bazarr/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "Bazarr", + "available": true, + "exposable": true, + "port": 6767, + "id": "bazarr", + "tipi_version": 3, + "version": "1.1.2", + "categories": ["media", "utilities"], + "description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.", + "short_desc": "A companion application to Sonarr and Radarr that manages and downloads subtitles", + "author": "morpheus65535", + "source": "https://github.com/morpheus65535/bazarr", + "form_fields": [] +} diff --git a/apps/bazarr/docker-compose.yml b/apps/bazarr/docker-compose.yml new file mode 100644 index 00000000..c4886aa9 --- /dev/null +++ b/apps/bazarr/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3.7" +services: + bazarr: + image: lscr.io/linuxserver/bazarr:1.1.2 + container_name: bazarr + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + dns: + - ${DNS_IP} + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/data:/config + - ${ROOT_FOLDER_HOST}/media:/media + ports: + - ${APP_PORT}:6767 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.bazarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.bazarr.entrypoints: websecure + traefik.http.routers.bazarr.service: bazarr + traefik.http.routers.bazarr.tls.certresolver: myresolver + traefik.http.services.bazarr.loadbalancer.server.port: 6767 diff --git a/apps/bazarr/metadata/description.md b/apps/bazarr/metadata/description.md new file mode 100644 index 00000000..0928256d --- /dev/null +++ b/apps/bazarr/metadata/description.md @@ -0,0 +1,66 @@ +# Bazarr + +Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you. + +Be aware that Bazarr doesn't scan disk to detect series and movies: It only takes care of the series and movies that are indexed in Sonarr and Radarr. + +## Major Features Include: + +- Support for major platforms: Windows, Linux, macOS, Raspberry Pi, etc. +- Automatically add new series and episodes from Sonarr +- Automatically add new movies from Radarr +- Series or movies based configuration for subtitles languages +- Scan your existing library for internal and external subtitles and download any missing +- Keep history of what was downloaded from where and when +- Manual search so you can download subtitles on demand +- Upgrade subtitles previously downloaded when a better one is found +- Ability to delete external subtitles from disk +- Currently support 184 subtitles languages with support for forced/foreign subtitles (depending of providers) +- And a beautiful UI based on Sonarr + +## Supported subtitles providers: + +- Addic7ed +- Argenteam +- Assrt +- BetaSeries +- BSplayer +- Embedded Subtitles +- Gestdown.info +- GreekSubtitles +- Hosszupuska +- LegendasDivx +- LegendasTV +- Karagarga.in +- Ktuvit (Get `hashed_password` using method described [here](https://github.com/XBMCil/service.subtitles.ktuvit)) +- Napiprojekt +- Napisy24 +- Nekur +- OpenSubtitles.org +- Podnapisi +- RegieLive +- Sous-Titres.eu +- Subdivx +- subf2m.co +- Subs.sab.bz +- Subs4Free +- Subs4Series +- Subscene +- Subscenter +- Subsunacs.net +- SubSynchro +- Subtitrari-noi.ro +- subtitri.id.lv +- Subtitulamos.tv +- Sucha +- Supersubtitles +- Titlovi +- Titrari.ro +- Titulky.com +- TuSubtitulo +- TVSubtitles +- Wizdom +- XSubs +- Yavka.net +- YIFY Subtitles +- Zimuku diff --git a/apps/bazarr/metadata/logo.jpg b/apps/bazarr/metadata/logo.jpg new file mode 100644 index 00000000..4db5d20b Binary files /dev/null and b/apps/bazarr/metadata/logo.jpg differ diff --git a/apps/booksonic/config.json b/apps/booksonic/config.json index 3278fdd6..7d3eea2e 100644 --- a/apps/booksonic/config.json +++ b/apps/booksonic/config.json @@ -2,8 +2,9 @@ "$schema": "../schema.json", "name": "Booksonic", "available": true, + "exposable": true, "port": 8040, - "tipi_version": 2, + "tipi_version": 3, "version": "latest", "id": "booksonic", "categories": ["books", "media"], diff --git a/apps/booksonic/docker-compose.yml b/apps/booksonic/docker-compose.yml index ddc345f9..b42e1792 100644 --- a/apps/booksonic/docker-compose.yml +++ b/apps/booksonic/docker-compose.yml @@ -16,4 +16,11 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.booksonic.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.booksonic.entrypoints: websecure + traefik.http.routers.booksonic.service: booksonic + traefik.http.routers.booksonic.tls.certresolver: myresolver + traefik.http.services.booksonic.loadbalancer.server.port: 4040 \ No newline at end of file diff --git a/apps/bookstack/config.json b/apps/bookstack/config.json index 81ba551a..ed5dd51b 100644 --- a/apps/bookstack/config.json +++ b/apps/bookstack/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Bookstack", "available": true, + "exposable": true, "port": 8119, "id": "bookstack", - "tipi_version": 2, - "version": "22.07.3", + "tipi_version": 5, + "version": "22.10.20221021", "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 574c834a..cd5f70e7 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:22.07.3 + image: lscr.io/linuxserver/bookstack:22.10.20221021 container_name: bookstack environment: - APP_URL=http://${INTERNAL_IP}:${APP_PORT} @@ -20,6 +20,13 @@ services: - bookstack-db networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.bookstack.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.bookstack.entrypoints: websecure + traefik.http.routers.bookstack.service: bookstack + traefik.http.routers.bookstack.tls.certresolver: myresolver + traefik.http.services.bookstack.loadbalancer.server.port: 80 bookstack-db: image: lscr.io/linuxserver/mariadb diff --git a/apps/bookstack/metadata/logo.jpg b/apps/bookstack/metadata/logo.jpg index de8aa4d1..67fddffc 100644 Binary files a/apps/bookstack/metadata/logo.jpg and b/apps/bookstack/metadata/logo.jpg differ diff --git a/apps/calibre-web/config.json b/apps/calibre-web/config.json index 6f5e4c93..0bcbd813 100644 --- a/apps/calibre-web/config.json +++ b/apps/calibre-web/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "Calibre-Web - EBook Reader", "available": true, + "exposable": true, "port": 8100, - "tipi_version": 1, - "version": "0.6.18", + "tipi_version": 3, + "version": "0.6.19", "id": "calibre-web", "categories": ["books"], "description": "On the initial setup screen, enter /books as your calibre library location. \n Default admin login: Username: admin Password: admin123", diff --git a/apps/calibre-web/docker-compose.yml b/apps/calibre-web/docker-compose.yml index da5bd292..fd4b4f51 100644 --- a/apps/calibre-web/docker-compose.yml +++ b/apps/calibre-web/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: calibre-web: - image: lscr.io/linuxserver/calibre-web:0.6.18 + image: lscr.io/linuxserver/calibre-web:0.6.19 container_name: calibre-web environment: - PUID=1000 @@ -15,3 +15,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.calibre-web.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.calibre-web.entrypoints: websecure + traefik.http.routers.calibre-web.service: calibre-web + traefik.http.routers.calibre-web.tls.certresolver: myresolver + traefik.http.services.calibre-web.loadbalancer.server.port: 8083 diff --git a/apps/code-server/config.json b/apps/code-server/config.json index e750fa24..6f3cfaef 100644 --- a/apps/code-server/config.json +++ b/apps/code-server/config.json @@ -2,11 +2,14 @@ "$schema": "../schema.json", "name": "Code-Server - Web VS Code", "available": true, + "exposable": true, "port": 8101, "id": "code-server", - "tipi_version": 1, - "version": "4.5.1", - "categories": ["development"], + "tipi_version": 5, + "version": "4.8.3", + "categories": [ + "development" + ], "description": "", "short_desc": "Code-server is VS Code running on a remote server, accessible through the browser.", "author": "https://github.com/coder", diff --git a/apps/code-server/docker-compose.yml b/apps/code-server/docker-compose.yml index 6d5d3336..301732f8 100644 --- a/apps/code-server/docker-compose.yml +++ b/apps/code-server/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: code-server: - image: lscr.io/linuxserver/code-server:4.5.1 + image: lscr.io/linuxserver/code-server:4.8.3 container_name: code-server environment: - PUID=1000 @@ -17,3 +17,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.code-server.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.code-server.entrypoints: websecure + traefik.http.routers.code-server.service: code-server + traefik.http.routers.code-server.tls.certresolver: myresolver + traefik.http.services.code-server.loadbalancer.server.port: 8443 diff --git a/apps/filebrowser/config.json b/apps/filebrowser/config.json index d357c030..1e7bab8e 100644 --- a/apps/filebrowser/config.json +++ b/apps/filebrowser/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "File Browser", "available": true, + "exposable": true, "port": 8096, "id": "filebrowser", - "tipi_version": 1, + "tipi_version": 2, "version": "s6", "categories": ["utilities"], "description": "Reliable and Performant File Management Desktop Sync and File Sharing\n Default credentials: admin / admin", diff --git a/apps/filebrowser/docker-compose.yml b/apps/filebrowser/docker-compose.yml index 5e1d0cf1..f062502d 100644 --- a/apps/filebrowser/docker-compose.yml +++ b/apps/filebrowser/docker-compose.yml @@ -15,3 +15,10 @@ services: - ${APP_DATA_DIR}/data/config:/config networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.filebrowser.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.filebrowser.entrypoints: websecure + traefik.http.routers.filebrowser.service: filebrowser + traefik.http.routers.filebrowser.tls.certresolver: myresolver + traefik.http.services.filebrowser.loadbalancer.server.port: 80 diff --git a/apps/firefly-iii/config.json b/apps/firefly-iii/config.json index 166525ba..89c6e157 100644 --- a/apps/firefly-iii/config.json +++ b/apps/firefly-iii/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "Firefly III", "available": true, + "exposable": true, "port": 8115, - "tipi_version": 1, - "version": "latest", + "tipi_version": 3, + "version": "version-5.7.11", "id": "firefly-iii", "categories": ["finance"], "description": "", diff --git a/apps/firefly-iii/docker-compose.yml b/apps/firefly-iii/docker-compose.yml index 58159244..44369aa8 100644 --- a/apps/firefly-iii/docker-compose.yml +++ b/apps/firefly-iii/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: firefly-iii: - image: fireflyiii/core:latest + image: fireflyiii/core:version-5.7.11 container_name: firefly-iii restart: unless-stopped volumes: @@ -42,6 +42,13 @@ services: - APP_URL=http://localhost:${APP_PORT} networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.firefly-iii.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.firefly-iii.entrypoints: websecure + traefik.http.routers.firefly-iii.service: firefly-iii + traefik.http.routers.firefly-iii.tls.certresolver: myresolver + traefik.http.services.firefly-iii.loadbalancer.server.port: 8080 firefly-iii-db: container_name: firefly-iii-db diff --git a/apps/freshrss/config.json b/apps/freshrss/config.json index 596424dc..c73cd4d6 100644 --- a/apps/freshrss/config.json +++ b/apps/freshrss/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8086, "id": "freshrss", - "tipi_version": 2, - "version": "1.19.2", + "tipi_version": 3, + "version": "1.20.0", "categories": ["utilities"], "description": "FreshRSS is a self-hosted RSS feed aggregator like Leed or Kriss Feed.\nIt is lightweight, easy to work with, powerful, and customizable.\n\nIt is a multi-user application with an anonymous reading mode. It supports custom tags. There is an API for (mobile) clients, and a Command-Line Interface.\n\nThanks to the WebSub standard (formerly PubSubHubbub), FreshRSS is able to receive instant push notifications from compatible sources, such as Mastodon, Friendica, WordPress, Blogger, FeedBurner, etc.\n\nFreshRSS natively supports basic Web scraping, based on XPath, for Web sites not providing any RSS / Atom feed.\n\nFinally, it supports extensions for further tuning.", "short_desc": "A free, self-hostable aggregator… ", diff --git a/apps/freshrss/docker-compose.yml b/apps/freshrss/docker-compose.yml index fad93148..aefb4b69 100644 --- a/apps/freshrss/docker-compose.yml +++ b/apps/freshrss/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: freshrss: - image: lscr.io/linuxserver/freshrss:1.19.2 + image: lscr.io/linuxserver/freshrss:1.20.0 container_name: freshrss environment: - PUID=1000 @@ -21,12 +21,4 @@ services: traefik.http.routers.freshrss.entrypoints: websecure traefik.http.routers.freshrss.service: freshrss traefik.http.routers.freshrss.tls.certresolver: myresolver - traefik.http.services.freshrss.loadbalancer.server.port: 80 - - # labels: - # traefik.enable: true - # traefik.http.routers.freshrss.rule: Host(`freshrss.tipi.home`) - # traefik.http.routers.freshrss.service: freshrss - # traefik.http.routers.freshrss.tls: true - # traefik.http.routers.freshrss.entrypoints: websecure - # traefik.http.services.freshrss.loadbalancer.server.port: 80 + traefik.http.services.freshrss.loadbalancer.server.port: 80 \ No newline at end of file diff --git a/apps/ghost/config.json b/apps/ghost/config.json index 0af16ee4..e49ff344 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,9 +5,12 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 2, - "version": "5.7.0", - "categories": ["social", "media"], + "tipi_version": 6, + "version": "5.22.9", + "categories": [ + "social", + "media" + ], "description": "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.", "short_desc": "Ghost - Turn your audience into a business.", "author": "TryGhost", diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index 4486a4a6..c0ccf44d 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.9' services: ghost: - image: ghost:5.7.0 + image: ghost:5.22.9 container_name: ghost depends_on: - ghostdb diff --git a/apps/gitea/config.json b/apps/gitea/config.json index ebe24b16..b78aca55 100644 --- a/apps/gitea/config.json +++ b/apps/gitea/config.json @@ -3,9 +3,10 @@ "name": "Gitea", "port": 8108, "available": true, + "exposable": true, "id": "gitea", - "tipi_version": 1, - "version": "1.16.8", + "tipi_version": 3, + "version": "1.17.3", "categories": ["development"], "description": "Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, and GitLab. Gitea is a fork of Gogs. See the Gitea Announcement blog post to read about the justification for a fork.", "short_desc": "Gitea - Git with a cup of tea · A painless self-hosted Git service. · Cross-platform · Easy to install · Lightweight · Open Source.", diff --git a/apps/gitea/docker-compose.yml b/apps/gitea/docker-compose.yml index 50dc6a48..606706b2 100644 --- a/apps/gitea/docker-compose.yml +++ b/apps/gitea/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: gitea: - image: gitea/gitea:1.16.8 + image: gitea/gitea:1.17.3 container_name: gitea environment: - USER_UID=1000 @@ -13,8 +13,6 @@ services: - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: unless-stopped - networks: - - tipi_main_network volumes: - ${APP_DATA_DIR}/data/gitea:/data ports: @@ -22,6 +20,15 @@ services: - "222:22" depends_on: - gitea-db + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.gitea.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.gitea.entrypoints: websecure + traefik.http.routers.gitea.service: gitea + traefik.http.routers.gitea.tls.certresolver: myresolver + traefik.http.services.gitea.loadbalancer.server.port: 3000 gitea-db: container_name: gitea-db diff --git a/apps/gotify/metadata/logo.jpg b/apps/gotify/metadata/logo.jpg index 45e1ba21..4b685d4f 100644 Binary files a/apps/gotify/metadata/logo.jpg and b/apps/gotify/metadata/logo.jpg differ diff --git a/apps/haven/config.json b/apps/haven/config.json index 38085bc3..116e3acd 100644 --- a/apps/haven/config.json +++ b/apps/haven/config.json @@ -2,9 +2,9 @@ "$schema": "../schema.json", "name": "Haven", "available": true, + "exposable": true, "port": 8130, "id": "haven", - "exposable": true, "tipi_version": 1, "version": "a0280ce", "categories": ["social"], diff --git a/apps/homarr/config.json b/apps/homarr/config.json index 0c41f249..a43cc1a0 100644 --- a/apps/homarr/config.json +++ b/apps/homarr/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Homarr", "available": true, + "exposable": true, "port": 8102, "id": "homarr", - "tipi_version": 2, - "version": "0.9.2", + "tipi_version": 4, + "version": "0.10.3", "categories": ["utilities"], "description": "A homepage for your server.", "short_desc": "Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place.", diff --git a/apps/homarr/docker-compose.yml b/apps/homarr/docker-compose.yml index b6d05a8f..5067f8b1 100644 --- a/apps/homarr/docker-compose.yml +++ b/apps/homarr/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: homarr: container_name: homarr - image: ghcr.io/ajnart/homarr:0.9.2 + image: ghcr.io/ajnart/homarr:0.10.3 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/config:/app/data/configs @@ -11,3 +11,10 @@ services: - ${APP_PORT}:7575 networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.homarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.homarr.entrypoints: websecure + traefik.http.routers.homarr.service: homarr + traefik.http.routers.homarr.tls.certresolver: myresolver + traefik.http.services.homarr.loadbalancer.server.port: 7575 diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 7f05f845..63442937 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -1,6 +1,25 @@ version: "3.7" services: + immich: + container_name: immich + image: altran1502/immich-proxy:release + ports: + - ${APP_PORT}:8080 + depends_on: + - immich-web + - immich-server + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.immich.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.immich.entrypoints: websecure + traefik.http.routers.immich.service: immich + traefik.http.routers.immich.tls.certresolver: myresolver + traefik.http.services.immich.loadbalancer.server.port: 8080 + immich-server: container_name: immich-server image: altran1502/immich-server:release @@ -93,23 +112,6 @@ services: networks: - tipi_main_network - immich: - container_name: immich - image: altran1502/immich-proxy:release - ports: - - ${APP_PORT}:8080 - depends_on: - - immich-web - - immich-server - restart: unless-stopped - networks: - - tipi_main_network - labels: - traefik.enable: ${APP_EXPOSED} - traefik.http.routers.immich.rule: Host(`${APP_DOMAIN}`) - traefik.http.routers.immich.entrypoints: websecure - traefik.http.routers.immich.service: immich - traefik.http.routers.immich.tls.certresolver: myresolver - traefik.http.services.immich.loadbalancer.server.port: 8080 + diff --git a/apps/immich/metadata/logo.jpg b/apps/immich/metadata/logo.jpg index 8173d092..c3523b80 100644 Binary files a/apps/immich/metadata/logo.jpg and b/apps/immich/metadata/logo.jpg differ diff --git a/apps/invidious/config.json b/apps/invidious/config.json index a1db11fc..0410f2d5 100644 --- a/apps/invidious/config.json +++ b/apps/invidious/config.json @@ -6,7 +6,8 @@ "port": 8095, "id": "invidious", "version": "latest", - "tipi_version": 2, + "tipi_version": 4, + "supported_architectures": ["arm64", "amd64"], "categories": ["media", "social"], "description": "Invidious is an open source alternative front-end to YouTube.", "short_desc": "An alternative front-end to YouTube", diff --git a/apps/invidious/docker-compose.arm.yml b/apps/invidious/docker-compose.arm64.yml similarity index 93% rename from apps/invidious/docker-compose.arm.yml rename to apps/invidious/docker-compose.arm64.yml index c9d8ace4..b3759d1d 100644 --- a/apps/invidious/docker-compose.arm.yml +++ b/apps/invidious/docker-compose.arm64.yml @@ -1,7 +1,6 @@ version: "3.7" services: invidious: - user: 1000:1000 container_name: invidious image: quay.io/invidious/invidious:latest-arm64 restart: unless-stopped @@ -24,7 +23,8 @@ services: timeout: 5s retries: 2 depends_on: - - invidious-db + invidious-db: + condition: service_healthy networks: - tipi_main_network labels: @@ -36,9 +36,8 @@ services: traefik.http.services.invidious.loadbalancer.server.port: 3000 invidious-db: - user: 1000:1000 container_name: invidious-db - image: docker.io/library/postgres:14 + image: postgres:14 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data diff --git a/apps/invidious/docker-compose.yml b/apps/invidious/docker-compose.yml index ff64140d..c208b148 100644 --- a/apps/invidious/docker-compose.yml +++ b/apps/invidious/docker-compose.yml @@ -1,7 +1,6 @@ version: "3.7" services: invidious: - user: 1000:1000 container_name: invidious image: quay.io/invidious/invidious:latest restart: unless-stopped @@ -25,7 +24,8 @@ services: timeout: 5s retries: 2 depends_on: - - invidious-db + invidious-db: + condition: service_healthy networks: - tipi_main_network labels: @@ -37,9 +37,8 @@ services: traefik.http.services.invidious.loadbalancer.server.port: 3000 invidious-db: - user: 1000:1000 container_name: invidious-db - image: docker.io/library/postgres:14 + image: postgres:14 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data diff --git a/apps/jackett/config.json b/apps/jackett/config.json index ccfb990c..4b40966a 100644 --- a/apps/jackett/config.json +++ b/apps/jackett/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Jackett", "available": true, + "exposable": true, "port": 8097, "id": "jackett", - "tipi_version": 1, - "version": "0.20.1342", + "tipi_version": 4, + "version": "0.20.2236", "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr, SickRage, CouchPotato, Mylar3, Lidarr, DuckieTV, qBittorrent, Nefarious etc.) into tracker-site-specific http queries, parses the html or json response, and then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches.", "short_desc": "API Support for your favorite torrent trackers ", "categories": ["media", "utilities"], diff --git a/apps/jackett/docker-compose.yml b/apps/jackett/docker-compose.yml index 90462991..5b0824bf 100644 --- a/apps/jackett/docker-compose.yml +++ b/apps/jackett/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jackett: - image: lscr.io/linuxserver/jackett:0.20.1342 + image: lscr.io/linuxserver/jackett:0.20.2236 container_name: jackett environment: - PUID=1000 @@ -18,3 +18,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.jackett.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.jackett.entrypoints: websecure + traefik.http.routers.jackett.service: jackett + traefik.http.routers.jackett.tls.certresolver: myresolver + traefik.http.services.jackett.loadbalancer.server.port: 9117 diff --git a/apps/jellyfin/config.json b/apps/jellyfin/config.json index 14383337..df70d356 100644 --- a/apps/jellyfin/config.json +++ b/apps/jellyfin/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8091, "id": "jellyfin", - "tipi_version": 2, - "version": "10.8.4", + "tipi_version": 4, + "version": "10.8.7", "categories": ["media"], "description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it. We welcome anyone who is interested in joining us in our quest!", "short_desc": "A media server for your home collection", diff --git a/apps/jellyfin/docker-compose.yml b/apps/jellyfin/docker-compose.yml index 1642e0c1..ef0c9d1e 100644 --- a/apps/jellyfin/docker-compose.yml +++ b/apps/jellyfin/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jellyfin: - image: lscr.io/linuxserver/jellyfin:10.8.4 + image: lscr.io/linuxserver/jellyfin:10.8.7 container_name: jellyfin volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/joplin/config.json b/apps/joplin/config.json index 3de317a6..1bc24764 100644 --- a/apps/joplin/config.json +++ b/apps/joplin/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8099, "id": "joplin", - "tipi_version": 2, - "version": "2.7.4", + "tipi_version": 4, + "version": "2.9.7", "categories": ["utilities"], "description": "Default credentials: admin@localhost / admin", "short_desc": "Note taking and to-do application with synchronisation", diff --git a/apps/joplin/docker-compose.yml b/apps/joplin/docker-compose.yml index ede61cfd..7f8059df 100644 --- a/apps/joplin/docker-compose.yml +++ b/apps/joplin/docker-compose.yml @@ -1,22 +1,9 @@ version: "3.7" services: - db-joplin: - container_name: db-joplin - image: postgres:14.2 - volumes: - - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data - restart: unless-stopped - environment: - - POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD} - - POSTGRES_USER=tipi - - POSTGRES_DB=joplin - networks: - - tipi_main_network - joplin: container_name: joplin - image: florider89/joplin-server:2.7.4 + image: florider89/joplin-server:2.9.7 restart: unless-stopped depends_on: - db-joplin @@ -46,3 +33,16 @@ services: traefik.http.services.joplin.loadbalancer.passhostheader: true traefik.http.middlewares.joplin-sslheader.headers.customrequestheaders.X-Forwarded-Proto: http traefik.http.routers.joplin-sslheader.middlewares: joplin-sslheader@docker + + db-joplin: + container_name: db-joplin + image: postgres:14.2 + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + restart: unless-stopped + environment: + - POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD} + - POSTGRES_USER=tipi + - POSTGRES_DB=joplin + networks: + - tipi_main_network diff --git a/apps/libreddit/docker-compose.arm.yml b/apps/libreddit/docker-compose.arm.yml index b9001bf0..7b1bffef 100644 --- a/apps/libreddit/docker-compose.arm.yml +++ b/apps/libreddit/docker-compose.arm.yml @@ -2,7 +2,7 @@ version: "3.7" services: libreddit: container_name: libreddit - image: spikecodes/libreddit:arm + image: spikecodes/libreddit:armv7 dns: - ${DNS_IP} ports: diff --git a/apps/libreddit/docker-compose.arm64.yml b/apps/libreddit/docker-compose.arm64.yml new file mode 100644 index 00000000..b9001bf0 --- /dev/null +++ b/apps/libreddit/docker-compose.arm64.yml @@ -0,0 +1,19 @@ +version: "3.7" +services: + libreddit: + container_name: libreddit + image: spikecodes/libreddit:arm + dns: + - ${DNS_IP} + ports: + - ${APP_PORT}:8080 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.libreddit.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.libreddit.entrypoints: websecure + traefik.http.routers.libreddit.service: libreddit + traefik.http.routers.libreddit.tls.certresolver: myresolver + traefik.http.services.libreddit.loadbalancer.server.port: 8080 \ No newline at end of file diff --git a/apps/libreddit/docker-compose.yml b/apps/libreddit/docker-compose.yml index 9cb9e884..1651d615 100644 --- a/apps/libreddit/docker-compose.yml +++ b/apps/libreddit/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: libreddit: container_name: libreddit - image: spikecodes/libreddit + image: spikecodes/libreddit:latest dns: - ${DNS_IP} ports: diff --git a/apps/librephotos/config.json b/apps/librephotos/config.json new file mode 100644 index 00000000..ab0fa362 --- /dev/null +++ b/apps/librephotos/config.json @@ -0,0 +1,50 @@ +{ + "$schema": "../schema.json", + "name": "LibrePhotos", + "port": 8132, + "available": true, + "exposable": true, + "id": "librephotos", + "tipi_version": 4, + "version": "2022w41", + "supported_architectures": ["amd64", "arm64"], + "categories": ["photography"], + "description": "", + "short_desc": "", + "author": "Niaz Faridani-Rad", + "source": "https://github.com/LibrePhotos/librephotos", + "form_fields": [ + { + "type": "email", + "label": "LibrePhotos admin email", + "required": true, + "env_variable": "LIBREPHOTOS_EMAIL" + }, + { + "type": "text", + "label": "LibrePhotos admin username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "LIBREPHOTOS_USERNAME" + }, + { + "type": "password", + "label": "LibrePhotos admin password", + "max": 50, + "min": 8, + "required": true, + "env_variable": "LIBREPHOTOS_PASSWORD" + }, + { + "type": "random", + "label": "DB password", + "env_variable": "LIBREPHOTOS_DB_PASSWORD" + }, + { + "type": "random", + "label": "Secret key", + "env_variable": "LIBREPHOTOS_SECRET_KEY" + } + ] +} diff --git a/apps/librephotos/data/cache/.gitkeep b/apps/librephotos/data/cache/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/logs/.gitkeep b/apps/librephotos/data/logs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/protected_media/.gitkeep b/apps/librephotos/data/protected_media/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/proxy/nginx.conf b/apps/librephotos/data/proxy/nginx.conf new file mode 100644 index 00000000..e324b37b --- /dev/null +++ b/apps/librephotos/data/proxy/nginx.conf @@ -0,0 +1,62 @@ +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log debug; + +events { + worker_connections 1024; +} + +http { + server { + listen 80; + + location / { + # React routes are entirely on the App side in the web broswer + # Always proxy to root with the same page request when nginx 404s + error_page 404 /; + proxy_intercept_errors on; + proxy_set_header Host $host; + proxy_pass http://librephotos-frontend:3000/; + } + location ~ ^/(api|media)/ { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host librephotos-backend; + include uwsgi_params; + proxy_pass http://librephotos-backend:8001; + } + # needed for webpack-dev-server + location /ws { + proxy_pass http://librephotos-frontend:3000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + # Django media + location /protected_media { + internal; + alias /protected_media/; + } + + location /static/drf-yasg { + proxy_pass http://librephotos-backend:8001; + } + + location /data { + internal; + alias /data/; + } + + # Original Photos + location /original { + internal; + alias /data/; + } + # Nextcloud Original Photos + location /nextcloud_original { + internal; + alias /data/nextcloud_media/; + } + } +} \ No newline at end of file diff --git a/apps/librephotos/data/scan/.gitkeep b/apps/librephotos/data/scan/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/docker-compose.yml b/apps/librephotos/docker-compose.yml new file mode 100644 index 00000000..279c3043 --- /dev/null +++ b/apps/librephotos/docker-compose.yml @@ -0,0 +1,91 @@ +version: "3.7" +services: + librephotos: + image: reallibrephotos/librephotos-proxy:2022w41 + container_name: librephotos + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/scan:/data + - ${APP_DATA_DIR}/data/protected_media:/protected_media + - ${APP_DATA_DIR}/data/proxy/nginx.conf:/etc/nginx/nginx.conf:ro + ports: + - ${APP_PORT}:80 + depends_on: + - librephotos-backend + - librephotos-frontend + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.librephotos.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.librephotos.entrypoints: websecure + traefik.http.routers.librephotos.service: librephotos + traefik.http.routers.librephotos.tls.certresolver: myresolver + traefik.http.services.librephotos.loadbalancer.server.port: 80 + + librephotos-db: + image: postgres:14 + container_name: librephotos-db + restart: unless-stopped + environment: + POSTGRES_PASSWORD: ${LIBREPHOTOS_DB_PASSWORD} + POSTGRES_USER: tipi + POSTGRES_DB: librephotos + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + #Checking health of Postgres db + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] + interval: 5s + timeout: 5s + retries: 5 + networks: + - tipi_main_network + + librephotos-frontend: + image: reallibrephotos/librephotos-frontend:2022w41 + container_name: librephotos-frontend + restart: unless-stopped + depends_on: + - librephotos-backend + networks: + - tipi_main_network + + librephotos-backend: + image: reallibrephotos/librephotos:2022w41 + container_name: librephotos-backend + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/scan:/data + - ${APP_DATA_DIR}/data/protected_media:/protected_media + - ${APP_DATA_DIR}/data/logs:/logs + - ${APP_DATA_DIR}/data/cache:/root/.cache + environment: + - SECRET_KEY=${LIBREPHOTOS_SECRET_KEY} + - BACKEND_HOST=librephotos-backend + - ADMIN_EMAIL=${LIBREPHOTOS_EMAIL} + - ADMIN_USERNAME=${LIBREPHOTOS_USERNAME} + - ADMIN_PASSWORD=${LIBREPHOTOS_PASSWORD} + - DB_BACKEND=postgresql + - DB_NAME=librephotos + - DB_USER=tipi + - DB_PASS=${LIBREPHOTOS_DB_PASSWORD} + - DB_HOST=librephotos-db + - DB_PORT=5432 + - REDIS_HOST=librephotos-redis + - REDIS_PORT=6379 + - ALLOW_UPLOAD=true + - DEBUG=0 + # Wait for Postgres + depends_on: + librephotos-db: + condition: service_healthy + networks: + - tipi_main_network + + librephotos-redis: + image: redis:6 + container_name: librephotos-redis + restart: unless-stopped + networks: + - tipi_main_network \ No newline at end of file diff --git a/apps/librephotos/metadata/description.md b/apps/librephotos/metadata/description.md new file mode 100644 index 00000000..3ca6df28 --- /dev/null +++ b/apps/librephotos/metadata/description.md @@ -0,0 +1,24 @@ +- The [demo is available here](https://demo2.librephotos.com/). User is ```demo```, password is ```demo1234```. +- You can watch development videos on [Niaz Faridani-Rad's channel](https://www.youtube.com/channel/UCZJ2pk2BPKxwbuCV9LWDR0w) +- You can join our [Discord](https://discord.gg/xwRvtSDGWb). + +![](https://github.com/LibrePhotos/librephotos/blob/dev/screenshots/mockups_main_fhd.png?raw=true) +Mockup designed by rawpixel.com / Freepik + +## Installation + +Step-by-step installation instructions are available in our [documentation](https://docs.librephotos.com/1/) + +## Features + + - Support for all types of photos including raw photos + - Support for videos + - Timeline view + - Scans pictures on the file system + - Multiuser support + - Generate albums based on events like "Thursday in Berlin" + - Face recognition / Face classification + - Reverse geocoding + - Object / Scene detection + - Semantic image search + - Search by metadata \ No newline at end of file diff --git a/apps/librephotos/metadata/logo.jpg b/apps/librephotos/metadata/logo.jpg new file mode 100644 index 00000000..f3a448ff Binary files /dev/null and b/apps/librephotos/metadata/logo.jpg differ diff --git a/apps/libretranslate/config.json b/apps/libretranslate/config.json index a6a7b18b..8efc4604 100644 --- a/apps/libretranslate/config.json +++ b/apps/libretranslate/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8121, "id": "libretranslate", - "tipi_version": 1, - "version": "v1.2.9", + "tipi_version": 2, + "version": "1.3.1", "categories": ["utilities"], "description": "Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.", "short_desc": "Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup.", diff --git a/apps/libretranslate/docker-compose.yml b/apps/libretranslate/docker-compose.yml index b8e05cc4..317bf92f 100644 --- a/apps/libretranslate/docker-compose.yml +++ b/apps/libretranslate/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: libretranslate: container_name: libretranslate - image: libretranslate/libretranslate:v1.2.9 + image: libretranslate/libretranslate:v1.3.1 dns: - ${DNS_IP} ports: diff --git a/apps/libretranslate/metadata/logo.jpg b/apps/libretranslate/metadata/logo.jpg index 9eb63999..ca220a20 100644 Binary files a/apps/libretranslate/metadata/logo.jpg and b/apps/libretranslate/metadata/logo.jpg differ diff --git a/apps/lidarr/config.json b/apps/lidarr/config.json new file mode 100644 index 00000000..69581336 --- /dev/null +++ b/apps/lidarr/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "Lidarr", + "available": true, + "exposable": true, + "port": 8131, + "id": "lidarr", + "tipi_version": 1, + "version": "1.0.2.2592", + "categories": ["media", "music"], + "description": "Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", + "short_desc": " Looks and smells like Sonarr but made for music.", + "author": "lidarr.audio", + "source": "https://github.com/Lidarr/Lidarr", + "form_fields": [] +} diff --git a/apps/lidarr/docker-compose.yml b/apps/lidarr/docker-compose.yml new file mode 100644 index 00000000..a35f3e75 --- /dev/null +++ b/apps/lidarr/docker-compose.yml @@ -0,0 +1,25 @@ +version: "3.7" +services: + lidarr: + image: lscr.io/linuxserver/lidarr:1.0.2 + container_name: lidarr + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/data:/config + - ${ROOT_FOLDER_HOST}/media:/media + ports: + - ${APP_PORT}:8686 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.lidarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.lidarr.entrypoints: websecure + traefik.http.routers.lidarr.service: lidarr + traefik.http.routers.lidarr.tls.certresolver: myresolver + traefik.http.services.lidarr.loadbalancer.server.port: 8686 \ No newline at end of file diff --git a/apps/lidarr/metadata/description.md b/apps/lidarr/metadata/description.md new file mode 100644 index 00000000..e02b2454 --- /dev/null +++ b/apps/lidarr/metadata/description.md @@ -0,0 +1,17 @@ +## Looks and smells like Sonarr but made for music. + +Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. + +### Major Features Include + +- Support for major platforms: Windows, Linux, macOS, Raspberry Pi, etc. +- Automatically detects new tracks. +- Can scan your existing library and download any missing tracks. +- Can watch for better quality of the tracks you already have and do an automatic upgrade. +- Automatic failed download handling will try another release if one fails +- Manual search so you can pick any release or to see why a release was not downloaded automatically +- Fully configurable track renaming +- Full integration with SABnzbd and NZBGet +- Full integration with Kodi, Plex (notification, library update, metadata) +- Full support for specials and multi-album releases +- And a beautiful UI diff --git a/apps/lidarr/metadata/logo.jpg b/apps/lidarr/metadata/logo.jpg new file mode 100644 index 00000000..4e0c175a Binary files /dev/null and b/apps/lidarr/metadata/logo.jpg differ diff --git a/apps/mealie/config.json b/apps/mealie/config.json index b76f5c3a..9e764ea3 100644 --- a/apps/mealie/config.json +++ b/apps/mealie/config.json @@ -3,8 +3,9 @@ "name": "Mealie", "port": 8114, "available": true, + "exposable": true, "id": "mealie", - "tipi_version": 1, + "tipi_version": 2, "version": "v0.5.6", "description": "Mealie is a self-hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications. Default username / password is changeme@email.com / MyPassword", "short_desc": "Mealie is a self-hosted recipe manager and meal planner.", diff --git a/apps/mealie/docker-compose.yml b/apps/mealie/docker-compose.yml index af1f452a..f273884d 100644 --- a/apps/mealie/docker-compose.yml +++ b/apps/mealie/docker-compose.yml @@ -12,4 +12,11 @@ services: volumes: - ${APP_DATA_DIR}/data:/app/data networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.mealie.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mealie.entrypoints: websecure + traefik.http.routers.mealie.service: mealie + traefik.http.routers.mealie.tls.certresolver: myresolver + traefik.http.services.mealie.loadbalancer.server.port: 80 \ No newline at end of file diff --git a/apps/memos/config.json b/apps/memos/config.json new file mode 100644 index 00000000..7ee5d995 --- /dev/null +++ b/apps/memos/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Memos", + "available": true, + "exposable": true, + "port": 5230, + "id": "memos", + "tipi_version": 1, + "version": "0.7.2", + "categories": ["utilities"], + "description": "Memo hub for knowledge management and collaboration.", + "short_desc": "Memo hub for knowledge management and collaboration.", + "author": "boojack", + "website": "https://usememos.com/", + "source": "https://github.com/usememos/memos", + "supported_architectures": ["arm64", "amd64"], + "form_fields": [] +} diff --git a/apps/memos/docker-compose.yml b/apps/memos/docker-compose.yml new file mode 100644 index 00000000..315d823f --- /dev/null +++ b/apps/memos/docker-compose.yml @@ -0,0 +1,19 @@ +version: "3.7" +services: + memos: + image: neosmemo/memos:0.7.2 + container_name: memos + volumes: + - ${APP_DATA_DIR}/memos:/var/opt/memos + ports: + - ${APP_PORT}:5230 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.memos.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.memos.entrypoints: websecure + traefik.http.routers.memos.service: memos + traefik.http.routers.memos.tls.certresolver: myresolver + traefik.http.services.memos.loadbalancer.server.port: 5230 \ No newline at end of file diff --git a/apps/memos/metadata/description.md b/apps/memos/metadata/description.md new file mode 100755 index 00000000..3debd86d --- /dev/null +++ b/apps/memos/metadata/description.md @@ -0,0 +1,10 @@ +## An open-source, self-hosted memo hub for knowledge management and collaboration. + +- Open source and free forever; +- Support for self-hosting with Docker in seconds; +- Plain textarea first and support some useful markdown syntax; +- Collaborate and share with your teammates; +- RESTful API for self-service. + + +![Screenshot](https://raw.githubusercontent.com/usememos/memos/main/resources/demo.webp) \ No newline at end of file diff --git a/apps/memos/metadata/logo.jpg b/apps/memos/metadata/logo.jpg new file mode 100644 index 00000000..30c01514 Binary files /dev/null and b/apps/memos/metadata/logo.jpg differ diff --git a/apps/minecraft-server/config.json b/apps/minecraft-server/config.json new file mode 100644 index 00000000..6967b90c --- /dev/null +++ b/apps/minecraft-server/config.json @@ -0,0 +1,26 @@ +{ + "$schema": "../schema.json", + "name": "Minecraft Server", + "available": true, + "exposable": true, + "no_gui": true, + "port": 25565, + "id": "minecraft-server", + "tipi_version": 1, + "version": "latest", + "categories": ["gaming"], + "description": "Minecraft Server", + "short_desc": "Run a minecraft server", + "author": "Geoff Bourne", + "source": "https://github.com/itzg/docker-minecraft-server", + "form_fields": [ + { + "type": "text", + "label": "Minecraft version", + "hint": "The version of Minecraft to use, leave empty for latest", + "placeholder": "1.18.2", + "required": false, + "env_variable": "MC_VERSION" + } + ] +} diff --git a/apps/minecraft-server/docker-compose.yml b/apps/minecraft-server/docker-compose.yml new file mode 100644 index 00000000..b5f3725b --- /dev/null +++ b/apps/minecraft-server/docker-compose.yml @@ -0,0 +1,25 @@ +version: "3.7" + +services: + minecraft-server: + container_name: minecraft-server + image: itzg/minecraft-server + ports: + - ${APP_PORT}:25565 + environment: + EULA: "TRUE" + VERSION: ${MC_VERSION:-LATEST} + tty: true + stdin_open: true + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/minecraft-data:/data + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.minecraft-server.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.minecraft-server.entrypoints: websecure + traefik.http.routers.minecraft-server.service: minecraft-server + traefik.http.routers.minecraft-server.tls.certresolver: myresolver + traefik.http.services.minecraft-server.loadbalancer.server.port: 25565 \ No newline at end of file diff --git a/apps/minecraft-server/metadata/description.md b/apps/minecraft-server/metadata/description.md new file mode 100644 index 00000000..d4cec3df --- /dev/null +++ b/apps/minecraft-server/metadata/description.md @@ -0,0 +1,9 @@ +Minecraft Server that will automatically download selected version at startup + +Once you have installed the app, the server will be available on port 25565 (default Minecraft port). + +In order to enter the server console run the following command on your server: + +``` +docker exec -i mc rcon-cli +``` diff --git a/apps/minecraft-server/metadata/logo.jpg b/apps/minecraft-server/metadata/logo.jpg new file mode 100644 index 00000000..26464862 Binary files /dev/null and b/apps/minecraft-server/metadata/logo.jpg differ diff --git a/apps/moneroblock/metadata/logo.jpg b/apps/moneroblock/metadata/logo.jpg index 75b02711..642ac250 100644 Binary files a/apps/moneroblock/metadata/logo.jpg and b/apps/moneroblock/metadata/logo.jpg differ diff --git a/apps/monerod/config.json b/apps/monerod/config.json index ffc0b42d..f677faaf 100644 --- a/apps/monerod/config.json +++ b/apps/monerod/config.json @@ -5,12 +5,14 @@ "exposable": true, "port": 18080, "id": "monerod", - "tipi_version": 1, - "version": "latest", + "tipi_version": 2, + "version": "v0.18.1.1", "categories": ["finance"], "description": "A device on the Internet running the Monero software, with a full copy of the Monero blockchain, actively assisting the Monero network. This is a simple and straightforward Dockerized monerod built from source and exposing standard ports. Please note that running this requires >50GB of free disk space and is best run on solid-state (SSD) storage.", "short_desc": "Monero is a private, decentralized cryptocurrency that keeps your finances confidential and secure.", "author": "sethforprivacy", "source": "https://github.com/sethforprivacy/simple-monerod-docker", - "form_fields": [] + "form_fields": [], + "uid": 1000, + "gid": 1000 } diff --git a/apps/monerod/docker-compose.yml b/apps/monerod/docker-compose.yml index 91246f48..f7e7d5de 100644 --- a/apps/monerod/docker-compose.yml +++ b/apps/monerod/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: monerod: - image: sethsimmons/simple-monerod:latest + image: sethsimmons/simple-monerod:v0.18.1.1 dns: - ${DNS_IP} ports: diff --git a/apps/n8n/config.json b/apps/n8n/config.json index ed9f4549..1b9363a9 100644 --- a/apps/n8n/config.json +++ b/apps/n8n/config.json @@ -2,11 +2,14 @@ "$schema": "../schema.json", "name": "n8n", "available": true, + "exposable": true, "port": 8094, "id": "n8n", - "tipi_version": 2, - "version": "0.195.5", - "categories": ["automation"], + "tipi_version": 9, + "version": "0.202.1", + "categories": [ + "automation" + ], "description": "n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source code, be available to self-host, and allow you to add your own custom functions, logic and apps. n8n's node-based approach makes it highly versatile, enabling you to connect anything to everything.", "short_desc": "Workflow Automation Tool. Alternative to Zapier", "author": "n8n.io", diff --git a/apps/n8n/docker-compose.yml b/apps/n8n/docker-compose.yml index efb85ae8..e416e74d 100644 --- a/apps/n8n/docker-compose.yml +++ b/apps/n8n/docker-compose.yml @@ -1,22 +1,9 @@ version: "3.7" services: - db-n8n: - container_name: db-n8n - image: postgres:14.2 - restart: on-failure - volumes: - - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data - environment: - - POSTGRES_PASSWORD=${DB_PASSWORD} - - POSTGRES_USER=tipi - - POSTGRES_DB=n8n - networks: - - tipi_main_network - n8n: container_name: n8n - image: n8nio/n8n:0.195.5 + image: n8nio/n8n:0.202.1 restart: unless-stopped ports: - ${APP_PORT}:5678 @@ -34,3 +21,25 @@ services: - db-n8n networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.n8n.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.n8n.entrypoints: websecure + traefik.http.routers.n8n.service: n8n + traefik.http.routers.n8n.tls.certresolver: myresolver + traefik.http.services.n8n.loadbalancer.server.port: 5678 + + db-n8n: + container_name: db-n8n + image: postgres:14.2 + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_USER=tipi + - POSTGRES_DB=n8n + networks: + - tipi_main_network + + diff --git a/apps/navidrome/config.json b/apps/navidrome/config.json index c1988935..07a00cbb 100644 --- a/apps/navidrome/config.json +++ b/apps/navidrome/config.json @@ -5,9 +5,12 @@ "exposable": true, "id": "navidrome", "description": "Modern Music Server and Streamer compatible with Subsonic/Airsonic", - "tipi_version": 1, - "version": "0.47.5", - "categories": ["media", "music"], + "tipi_version": 3, + "version": "0.48.0", + "categories": [ + "media", + "music" + ], "short_desc": "A selfhosted music server", "author": "https://github.com/Bvoxl", "source": "https://github.com/navidrome/navidrome/", diff --git a/apps/navidrome/docker-compose.yml b/apps/navidrome/docker-compose.yml index 3ab05e84..31b27751 100644 --- a/apps/navidrome/docker-compose.yml +++ b/apps/navidrome/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: navidrome: container_name: navidrome - image: deluan/navidrome:latest + image: deluan/navidrome:0.48.0 ports: - ${APP_PORT}:4533 restart: unless-stopped diff --git a/apps/navidrome/metadata/logo.jpg b/apps/navidrome/metadata/logo.jpg index d2dfcabf..48831fc9 100644 Binary files a/apps/navidrome/metadata/logo.jpg and b/apps/navidrome/metadata/logo.jpg differ diff --git a/apps/nextcloud/config.json b/apps/nextcloud/config.json index f70d220b..7b625bfc 100644 --- a/apps/nextcloud/config.json +++ b/apps/nextcloud/config.json @@ -5,9 +5,11 @@ "exposable": true, "port": 8083, "id": "nextcloud", - "tipi_version": 4, - "version": "24.0.4", - "categories": ["data"], + "tipi_version": 6, + "version": "25.0.0-apache", + "categories": [ + "data" + ], "description": "Nextcloud is a self-hosted, open source, and fully-featured cloud storage solution for your personal files, office documents, and photos.", "short_desc": "Productivity platform that keeps you in control", "author": "Nextcloud GmbH", diff --git a/apps/nextcloud/docker-compose.yml b/apps/nextcloud/docker-compose.yml index afa11302..037ad95d 100644 --- a/apps/nextcloud/docker-compose.yml +++ b/apps/nextcloud/docker-compose.yml @@ -1,44 +1,9 @@ version: "3.7" services: - db-nextcloud: - container_name: db-nextcloud - image: postgres:14.2 - restart: on-failure - volumes: - - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data - environment: - - POSTGRES_PASSWORD=tipi - - POSTGRES_USER=tipi - - POSTGRES_DB=nextcloud - networks: - - tipi_main_network - - redis-nextcloud: - container_name: redis-nextcloud - user: "1000:1000" - image: redis:6.2.6 - restart: on-failure - volumes: - - "${APP_DATA_DIR}/data/redis:/data" - networks: - - tipi_main_network - - cron: - image: nextcloud:24.0.4-apache - restart: on-failure - volumes: - - ${APP_DATA_DIR}/data/nextcloud:/var/www/html - entrypoint: /cron.sh - depends_on: - - db-nextcloud - - redis-nextcloud - networks: - - tipi_main_network - nextcloud: container_name: nextcloud - image: nextcloud:24.0.4-apache + image: nextcloud:25.0.0-apache restart: unless-stopped ports: - ${APP_PORT}:80 @@ -80,3 +45,40 @@ services: traefik.http.middlewares.nextcloud.headers.customRequestHeaders.X-Forwarded-Proto: https traefik.http.middlewares.nextcloud-https.redirectscheme.scheme: https traefik.http.routers.nextcloud-http.middlewares: nextcloud-https@docker + + db-nextcloud: + container_name: db-nextcloud + image: postgres:14.2 + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=tipi + - POSTGRES_USER=tipi + - POSTGRES_DB=nextcloud + networks: + - tipi_main_network + + redis-nextcloud: + container_name: redis-nextcloud + user: "1000:1000" + image: redis:6.2.6 + restart: on-failure + volumes: + - "${APP_DATA_DIR}/data/redis:/data" + networks: + - tipi_main_network + + cron: + image: nextcloud:25.0.0-apache + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/nextcloud:/var/www/html + entrypoint: /cron.sh + depends_on: + - db-nextcloud + - redis-nextcloud + networks: + - tipi_main_network + + diff --git a/apps/nodered/config.json b/apps/nodered/config.json index 40ebe7e3..10a4d241 100644 --- a/apps/nodered/config.json +++ b/apps/nodered/config.json @@ -3,9 +3,10 @@ "name": "Node-RED", "port": 8111, "available": true, + "exposable": true, "id": "nodered", - "tipi_version": 1, - "version": "3.0.0", + "tipi_version": 3, + "version": "3.0.2", "categories": ["automation"], "description": "Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.", "short_desc": "Low-code programming for event-driven applications", diff --git a/apps/nodered/docker-compose.yml b/apps/nodered/docker-compose.yml index 6784593a..058b9582 100644 --- a/apps/nodered/docker-compose.yml +++ b/apps/nodered/docker-compose.yml @@ -3,11 +3,18 @@ version: "3.7" services: nodered: container_name: nodered - image: nodered/node-red:3.0.0 + image: nodered/node-red:3.0.2 restart: unless-stopped ports: - ${APP_PORT}:1880 volumes: - ${APP_DATA_DIR}/data:/data networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.nodered.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nodered.entrypoints: websecure + traefik.http.routers.nodered.service: nodered + traefik.http.routers.nodered.tls.certresolver: myresolver + traefik.http.services.nodered.loadbalancer.server.port: 1880 \ No newline at end of file diff --git a/apps/overseerr/config.json b/apps/overseerr/config.json index 3882a766..84bbbd54 100644 --- a/apps/overseerr/config.json +++ b/apps/overseerr/config.json @@ -1,15 +1,16 @@ -{ - "$schema": "../schema.json", - "name": "Overseerr", - "available": true, - "port": 8116, - "id": "overseerr", - "tipi_version": 1, - "version": "1.29.0", - "categories": ["media", "utilities"], - "description": "Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services, such as Sonarr, Radarr, and Plex!", - "short_desc": "Request management and media discovery tool for the Plex ecosystem", - "author": "sct", - "source": "https://github.com/sct/overseerr", - "form_fields": [] -} +{ + "$schema": "../schema.json", + "name": "Overseerr", + "available": true, + "exposable": true, + "port": 8116, + "id": "overseerr", + "tipi_version": 3, + "version": "1.30.1", + "categories": ["media", "utilities"], + "description": "Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services, such as Sonarr, Radarr, and Plex!", + "short_desc": "Request management and media discovery tool for the Plex ecosystem", + "author": "sct", + "source": "https://github.com/sct/overseerr", + "form_fields": [] +} diff --git a/apps/overseerr/docker-compose.yml b/apps/overseerr/docker-compose.yml index 1bf47aa7..0b95cb2e 100644 --- a/apps/overseerr/docker-compose.yml +++ b/apps/overseerr/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: overseerr: container_name: overseerr - image: sctx/overseerr:1.29.0 + image: sctx/overseerr:1.30.1 environment: - TZ=${TZ} volumes: @@ -14,3 +14,10 @@ services: - ${DNS_IP} networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.overseerr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.overseerr.entrypoints: websecure + traefik.http.routers.overseerr.service: overseerr + traefik.http.routers.overseerr.tls.certresolver: myresolver + traefik.http.services.overseerr.loadbalancer.server.port: 5055 diff --git a/apps/photoprism/docker-compose.arm.yml b/apps/photoprism/docker-compose.arm.yml new file mode 100644 index 00000000..d75bd770 --- /dev/null +++ b/apps/photoprism/docker-compose.arm.yml @@ -0,0 +1,64 @@ +version: "3.7" +services: + photoprism: + image: photoprism/photoprism:armv7 + container_name: photoprism + depends_on: + - photoprism-db + restart: unless-stopped + ports: + - "${APP_PORT}:2342" + environment: + PHOTOPRISM_ADMIN_PASSWORD: ${PHOTOPRISM_ADMIN_PASSWORD} + PHOTOPRISM_SITE_URL: "${APP_PROTOCOL:-http}://${APP_DOMAIN}/" + PHOTOPRISM_ORIGINALS_LIMIT: 5000 + PHOTOPRISM_HTTP_COMPRESSION: "gzip" + PHOTOPRISM_LOG_LEVEL: "info" + PHOTOPRISM_PUBLIC: "false" + PHOTOPRISM_READONLY: "false" + PHOTOPRISM_EXPERIMENTAL: "false" + PHOTOPRISM_DISABLE_CHOWN: "false" + PHOTOPRISM_DISABLE_WEBDAV: "false" + PHOTOPRISM_DISABLE_SETTINGS: "false" + PHOTOPRISM_DISABLE_TENSORFLOW: "false" + PHOTOPRISM_DISABLE_FACES: "false" + PHOTOPRISM_DISABLE_CLASSIFICATION: "false" + PHOTOPRISM_DISABLE_RAW: "false" + PHOTOPRISM_RAW_PRESETS: "false" + PHOTOPRISM_JPEG_QUALITY: 85 + PHOTOPRISM_DETECT_NSFW: "false" + PHOTOPRISM_UPLOAD_NSFW: "true" + PHOTOPRISM_DATABASE_DRIVER: "mysql" + PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306" + PHOTOPRISM_DATABASE_NAME: "photoprism" + PHOTOPRISM_DATABASE_USER: "photoprism" + PHOTOPRISM_DATABASE_PASSWORD: "${DB_PASSWORD}" + PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" + working_dir: "/photoprism" + volumes: + - "${ROOT_FOLDER_HOST}/media/data/images:/photoprism/originals" + - "${APP_DATA_DIR}/data/photoprism/storage:/photoprism/storage" + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.photoprism.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.photoprism.entrypoints: websecure + traefik.http.routers.photoprism.service: photoprism + traefik.http.routers.photoprism.tls.certresolver: myresolver + traefik.http.services.photoprism.loadbalancer.server.port: 2342 + + photoprism-db: + restart: unless-stopped + image: mariadb:10.8 + container_name: photoprism-db + command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120 + volumes: + - "${APP_DATA_DIR}/data/mariadb:/var/lib/mysql" + environment: + MARIADB_DATABASE: "photoprism" + MARIADB_USER: "photoprism" + MARIADB_PASSWORD: "${DB_PASSWORD}" + MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" + networks: + - tipi_main_network diff --git a/apps/photoprism/docker-compose.arm64.yml b/apps/photoprism/docker-compose.arm64.yml new file mode 100644 index 00000000..d4ee1e8e --- /dev/null +++ b/apps/photoprism/docker-compose.arm64.yml @@ -0,0 +1,64 @@ +version: "3.7" +services: + photoprism: + image: photoprism/photoprism:latest + container_name: photoprism + depends_on: + - photoprism-db + restart: unless-stopped + ports: + - "${APP_PORT}:2342" + environment: + PHOTOPRISM_ADMIN_PASSWORD: ${PHOTOPRISM_ADMIN_PASSWORD} + PHOTOPRISM_SITE_URL: "${APP_PROTOCOL:-http}://${APP_DOMAIN}/" + PHOTOPRISM_ORIGINALS_LIMIT: 5000 + PHOTOPRISM_HTTP_COMPRESSION: "gzip" + PHOTOPRISM_LOG_LEVEL: "info" + PHOTOPRISM_PUBLIC: "false" + PHOTOPRISM_READONLY: "false" + PHOTOPRISM_EXPERIMENTAL: "false" + PHOTOPRISM_DISABLE_CHOWN: "false" + PHOTOPRISM_DISABLE_WEBDAV: "false" + PHOTOPRISM_DISABLE_SETTINGS: "false" + PHOTOPRISM_DISABLE_TENSORFLOW: "false" + PHOTOPRISM_DISABLE_FACES: "false" + PHOTOPRISM_DISABLE_CLASSIFICATION: "false" + PHOTOPRISM_DISABLE_RAW: "false" + PHOTOPRISM_RAW_PRESETS: "false" + PHOTOPRISM_JPEG_QUALITY: 85 + PHOTOPRISM_DETECT_NSFW: "false" + PHOTOPRISM_UPLOAD_NSFW: "true" + PHOTOPRISM_DATABASE_DRIVER: "mysql" + PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306" + PHOTOPRISM_DATABASE_NAME: "photoprism" + PHOTOPRISM_DATABASE_USER: "photoprism" + PHOTOPRISM_DATABASE_PASSWORD: "${DB_PASSWORD}" + PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" + working_dir: "/photoprism" + volumes: + - "${ROOT_FOLDER_HOST}/media/data/images:/photoprism/originals" + - "${APP_DATA_DIR}/data/photoprism/storage:/photoprism/storage" + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.photoprism.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.photoprism.entrypoints: websecure + traefik.http.routers.photoprism.service: photoprism + traefik.http.routers.photoprism.tls.certresolver: myresolver + traefik.http.services.photoprism.loadbalancer.server.port: 2342 + + photoprism-db: + restart: unless-stopped + image: mariadb:10.8 + container_name: photoprism-db + command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120 + volumes: + - "${APP_DATA_DIR}/data/mariadb:/var/lib/mysql" + environment: + MARIADB_DATABASE: "photoprism" + MARIADB_USER: "photoprism" + MARIADB_PASSWORD: "${DB_PASSWORD}" + MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" + networks: + - tipi_main_network diff --git a/apps/pihole/config.json b/apps/pihole/config.json index d8eb7b5a..51770489 100644 --- a/apps/pihole/config.json +++ b/apps/pihole/config.json @@ -2,12 +2,13 @@ "$schema": "../schema.json", "name": "Pi-hole", "available": true, + "exposable": true, "port": 8081, "requirements": { "ports": [53] }, "id": "pihole", - "tipi_version": 2, + "tipi_version": 3, "version": "2022.09.4", "categories": ["network", "security"], "description": "The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content without installing any client-side software.", @@ -22,7 +23,7 @@ "min": 3, "required": true, "env_variable": "APP_PASSWORD" - }, + }, { "type": "ip", "label": "Network Interface (default: 0.0.0.0)", diff --git a/apps/pihole/docker-compose.yml b/apps/pihole/docker-compose.yml index d0bd5550..5b4ecd4f 100644 --- a/apps/pihole/docker-compose.yml +++ b/apps/pihole/docker-compose.yml @@ -1,25 +1,13 @@ version: "3.7" services: - # unbound: - # image: "klutchell/unbound" - # container_name: unbound - # restart: unless-stopped - # volumes: - # - "${APP_DATA_DIR}/data/unbound:/etc/unbound" - # networks: - # tipi_main_network: - # ipv4_address: 10.21.21.200 - pihole: - # depends_on: [unbound] container_name: pihole image: pihole/pihole:2022.09.4 restart: unless-stopped hostname: pihole dns: - 127.0.0.1 - # - 10.21.21.200 # Points to unbound ports: - ${NETWORK_INTERFACE:-0.0.0.0}:53:53/tcp - ${NETWORK_INTERFACE:-0.0.0.0}:53:53/udp @@ -30,10 +18,16 @@ services: environment: TZ: ${TZ} WEBPASSWORD: ${APP_PASSWORD} - # PIHOLE_DNS_: 10.21.21.200 # Points to unbound FTLCONF_REPLY_ADDR4: 10.21.21.201 cap_add: - NET_ADMIN networks: tipi_main_network: ipv4_address: 10.21.21.201 + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.pihole.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.pihole.entrypoints: websecure + traefik.http.routers.pihole.service: pihole + traefik.http.routers.pihole.tls.certresolver: myresolver + traefik.http.services.pihole.loadbalancer.server.port: 80 diff --git a/apps/plex/config.json b/apps/plex/config.json index 273c62a1..41e4e1eb 100644 --- a/apps/plex/config.json +++ b/apps/plex/config.json @@ -5,10 +5,12 @@ "exposable": true, "port": 32400, "id": "plex", - "tipi_version": 5, - "version": "1.28.2", + "tipi_version": 7, + "version": "1.29.2", "url_suffix": "/web", - "categories": ["media"], + "categories": [ + "media" + ], "description": "", "short_desc": "Stream Movies & TV Shows", "author": "plexinc", diff --git a/apps/plex/docker-compose.yml b/apps/plex/docker-compose.yml index 5ec3bf7e..e21c12a5 100644 --- a/apps/plex/docker-compose.yml +++ b/apps/plex/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: plex: - image: lscr.io/linuxserver/plex:1.28.2 + image: lscr.io/linuxserver/plex:1.29.2 container_name: plex network_mode: host environment: diff --git a/apps/portainer/config.json b/apps/portainer/config.json index 344e499a..f05feeda 100644 --- a/apps/portainer/config.json +++ b/apps/portainer/config.json @@ -3,10 +3,11 @@ "name": "Portainer", "port": 9443, "available": true, + "exposable": true, "https": true, "id": "portainer", - "tipi_version": 4, - "version": "2.15.1", + "tipi_version": 6, + "version": "2.16.0-alpine", "categories": ["utilities"], "description": "", "short_desc": "Making Docker and Kubernetes management easy.", diff --git a/apps/portainer/docker-compose.yml b/apps/portainer/docker-compose.yml index eaa2cf8a..e51ce3f8 100644 --- a/apps/portainer/docker-compose.yml +++ b/apps/portainer/docker-compose.yml @@ -2,13 +2,20 @@ version: "3.7" services: portainer: - image: portainer/portainer-ce:2.15.1-alpine + image: portainer/portainer-ce:2.16.0-alpine container_name: portainer restart: unless-stopped ports: - - "${APP_PORT}:9443" + - ${APP_PORT}:9443 volumes: - /var/run/docker.sock:/var/run/docker.sock - "${APP_DATA_DIR}/data:/data" networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.portainer.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.portainer.entrypoints: websecure + traefik.http.routers.portainer.service: portainer + traefik.http.routers.portainer.tls.certresolver: myresolver + traefik.http.services.portainer.loadbalancer.server.port: 9443 \ No newline at end of file diff --git a/apps/privatebin/config.json b/apps/privatebin/config.json index 71297e1d..b1320a90 100644 --- a/apps/privatebin/config.json +++ b/apps/privatebin/config.json @@ -12,5 +12,7 @@ "short_desc": "A minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bits AES.", "author": "PrivateBin", "source": "https://github.com/PrivateBin/PrivateBin", - "form_fields": [] + "form_fields": [], + "uid": 65534, + "gid": 82 } diff --git a/apps/privatebin/metadata/logo.jpg b/apps/privatebin/metadata/logo.jpg index baa135a0..f3be92b0 100644 Binary files a/apps/privatebin/metadata/logo.jpg and b/apps/privatebin/metadata/logo.jpg differ diff --git a/apps/prowlarr/config.json b/apps/prowlarr/config.json index a687407c..631a3e4f 100644 --- a/apps/prowlarr/config.json +++ b/apps/prowlarr/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "Prowlarr", "available": true, + "exposable": true, "port": 8109, "id": "prowlarr", - "tipi_version": 1, + "tipi_version": 2, "version": "develop", "categories": ["media", "utilities"], "description": "Prowlarr is an indexer manager/proxy built on the popular *arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports management of both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Lidarr, Mylar3, Radarr, Readarr, and Sonarr offering complete management of your indexers with no per app Indexer setup required (we do it all).", diff --git a/apps/prowlarr/docker-compose.yml b/apps/prowlarr/docker-compose.yml index 629babec..b2248623 100644 --- a/apps/prowlarr/docker-compose.yml +++ b/apps/prowlarr/docker-compose.yml @@ -14,3 +14,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.prowlarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.prowlarr.entrypoints: websecure + traefik.http.routers.prowlarr.service: prowlarr + traefik.http.routers.prowlarr.tls.certresolver: myresolver + traefik.http.services.prowlarr.loadbalancer.server.port: 9696 diff --git a/apps/proxitok/config.json b/apps/proxitok/config.json index df7e57ff..211202f7 100644 --- a/apps/proxitok/config.json +++ b/apps/proxitok/config.json @@ -2,11 +2,12 @@ "$schema": "../schema.json", "name": "ProxiTok", "available": true, + "exposable": true, "port": 8118, "id": "proxitok", "categories": ["social"], "description": "", - "tipi_version": 1, + "tipi_version": 2, "version": "1.0.0", "short_desc": "Open source alternative frontend for TikTok made using PHP ", "author": "pablouser1", diff --git a/apps/proxitok/docker-compose.yml b/apps/proxitok/docker-compose.yml index 4a2451ac..1d89ef70 100644 --- a/apps/proxitok/docker-compose.yml +++ b/apps/proxitok/docker-compose.yml @@ -6,7 +6,7 @@ services: image: ghcr.io/pablouser1/proxitok:master restart: unless-stopped ports: - - "${APP_PORT}:80" + - ${APP_PORT}:80 environment: - "LATTE_CACHE=/cache" - "API_CACHE=redis" @@ -20,6 +20,13 @@ services: - proxitok-signer networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.proxitok.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.proxitok.entrypoints: websecure + traefik.http.routers.proxitok.service: proxitok + traefik.http.routers.proxitok.tls.certresolver: myresolver + traefik.http.services.proxitok.loadbalancer.server.port: 80 proxitok-redis: container_name: proxitok-redis diff --git a/apps/qbittorrent/config.json b/apps/qbittorrent/config.json new file mode 100644 index 00000000..0d55acd5 --- /dev/null +++ b/apps/qbittorrent/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "qBittorrent", + "available": true, + "exposable": true, + "port": 8133, + "id": "qbittorrent", + "tipi_version": 2, + "version": "4.4.5", + "categories": ["utilities"], + "description": "qBittorrent is a fast, easy, and free BitTorrent client.", + "short_desc": "Fast, easy, and free BitTorrent client", + "author": "qBittorrent project", + "source": "https://github.com/qbittorrent/qBittorrent", + "form_fields": [] +} diff --git a/apps/qbittorrent/data/config/.gitkeep b/apps/qbittorrent/data/config/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/qbittorrent/docker-compose.yml b/apps/qbittorrent/docker-compose.yml new file mode 100644 index 00000000..ead18112 --- /dev/null +++ b/apps/qbittorrent/docker-compose.yml @@ -0,0 +1,30 @@ +version: "3.7" +services: + qbittorrent: + image: lscr.io/linuxserver/qbittorrent:4.4.5 + container_name: qbittorrent + dns: + - ${DNS_IP} + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + - WEBUI_PORT=${APP_PORT} + volumes: + - ${APP_DATA_DIR}/data/config:/config + - ${ROOT_FOLDER_HOST}/media/torrents:/downloads + ports: + - ${APP_PORT}:${APP_PORT} + - 6881:6881 + - 6881:6881/udp + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.qbittorrent.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.qbittorrent.entrypoints: websecure + traefik.http.routers.qbittorrent.service: qbittorrent + traefik.http.routers.qbittorrent.tls.certresolver: myresolver + traefik.http.services.qbittorrent.loadbalancer.server.port: ${APP_PORT} + diff --git a/apps/qbittorrent/metadata/description.md b/apps/qbittorrent/metadata/description.md new file mode 100644 index 00000000..6d97c0f2 --- /dev/null +++ b/apps/qbittorrent/metadata/description.md @@ -0,0 +1,8 @@ +## Fast, easy, and free BitTorrent client + +The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library. + +## Credentials + +Username: admin +Password: adminadmin \ No newline at end of file diff --git a/apps/qbittorrent/metadata/logo.jpg b/apps/qbittorrent/metadata/logo.jpg new file mode 100644 index 00000000..5a383aca Binary files /dev/null and b/apps/qbittorrent/metadata/logo.jpg differ diff --git a/apps/radarr/config.json b/apps/radarr/config.json index dbec6420..c2e68cb6 100644 --- a/apps/radarr/config.json +++ b/apps/radarr/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Radarr", "available": true, + "exposable": true, "port": 8088, "id": "radarr", - "tipi_version": 1, - "version": "4.1.0", + "tipi_version": 3, + "version": "4.2.4", "categories": ["media", "utilities"], "description": "Radarr is a movie collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new movies and will interface with clients and indexers to grab, sort, and rename them. It can also be configured to automatically upgrade the quality of existing files in the library when a better quality format becomes available. Note that only one type of a given movie is supported. If you want both an 4k version and 1080p version of a given movie you will need multiple instances.", "short_desc": "Movie collection manager for Usenet and BitTorrent users.", diff --git a/apps/radarr/docker-compose.yml b/apps/radarr/docker-compose.yml index 8a880300..7430f0fc 100644 --- a/apps/radarr/docker-compose.yml +++ b/apps/radarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: radarr: - image: lscr.io/linuxserver/radarr:4.1.0 + image: lscr.io/linuxserver/radarr:4.2.4 container_name: radarr environment: - PUID=1000 @@ -18,3 +18,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.radarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.radarr.entrypoints: websecure + traefik.http.routers.radarr.service: radarr + traefik.http.routers.radarr.tls.certresolver: myresolver + traefik.http.services.radarr.loadbalancer.server.port: 7878 diff --git a/apps/readarr/config.json b/apps/readarr/config.json index 7d709465..ba538c46 100644 --- a/apps/readarr/config.json +++ b/apps/readarr/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "Readarr", "available": true, + "exposable": true, "port": 8112, "id": "readarr", - "tipi_version": 2, + "tipi_version": 3, "version": "develop", "categories": ["books", "media"], "description": "", diff --git a/apps/readarr/docker-compose.yml b/apps/readarr/docker-compose.yml index 3e97ccd5..de91dc69 100644 --- a/apps/readarr/docker-compose.yml +++ b/apps/readarr/docker-compose.yml @@ -18,3 +18,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.readarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.readarr.entrypoints: websecure + traefik.http.routers.readarr.service: readarr + traefik.http.routers.readarr.tls.certresolver: myresolver + traefik.http.services.readarr.loadbalancer.server.port: 8787 diff --git a/apps/resilio-sync/docker-compose.yml b/apps/resilio-sync/docker-compose.yml index a2dab643..c8fccd5a 100644 --- a/apps/resilio-sync/docker-compose.yml +++ b/apps/resilio-sync/docker-compose.yml @@ -15,4 +15,11 @@ services: - 55555:55555 restart: unless-stopped networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.resilio-sync.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.resilio-sync.entrypoints: websecure + traefik.http.routers.resilio-sync.service: resilio-sync + traefik.http.routers.resilio-sync.tls.certresolver: myresolver + traefik.http.services.resilio-sync.loadbalancer.server.port: 8888 \ No newline at end of file diff --git a/apps/schema.json b/apps/schema.json index d3acf326..1bf8e1cd 100644 --- a/apps/schema.json +++ b/apps/schema.json @@ -15,6 +15,9 @@ "exposable": { "type": "boolean" }, + "no_gui": { + "type": "boolean" + }, "port": { "type": "integer", "minimum": 0, @@ -23,6 +26,12 @@ "https": { "type": "boolean" }, + "uid": { + "type": "integer" + }, + "gid": { + "type": "integer" + }, "requirements": { "type": "object", "properties": { @@ -36,6 +45,14 @@ } } }, + "supported_architectures": { + "type": "array", + "items": [ + { + "type": "string" + } + ] + }, "id": { "type": "string", "pattern": "^[a-z0-9-_]+$" diff --git a/apps/searxng/config.json b/apps/searxng/config.json index d0ffafb8..83da82b0 100644 --- a/apps/searxng/config.json +++ b/apps/searxng/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8127, "id": "searxng", - "tipi_version": 1, - "version": "latest", + "tipi_version": 3, + "version": "2022.11.11-3a765113", "categories": ["social"], "description": "SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled.", "short_desc": "Privacy-respecting, hackable metasearch engine", diff --git a/apps/searxng/docker-compose.yml b/apps/searxng/docker-compose.yml index 6a261867..ba95b9e4 100644 --- a/apps/searxng/docker-compose.yml +++ b/apps/searxng/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: searxng: container_name: searxng - image: searxng/searxng:latest + image: searxng/searxng:2022.11.11-3a765113 restart: unless-stopped networks: - tipi_main_network diff --git a/apps/searxng/metadata/logo.jpg b/apps/searxng/metadata/logo.jpg index 9a1380d6..40e9a7ad 100644 Binary files a/apps/searxng/metadata/logo.jpg and b/apps/searxng/metadata/logo.jpg differ diff --git a/apps/sonarr/config.json b/apps/sonarr/config.json index 2076b498..424077d4 100644 --- a/apps/sonarr/config.json +++ b/apps/sonarr/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Sonarr", "available": true, + "exposable": true, "port": 8098, "id": "sonarr", - "tipi_version": 1, - "version": "3.0.8", + "tipi_version": 3, + "version": "3.0.9", "categories": ["media", "utilities"], "description": "Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", "short_desc": "TV show manager for Usenet and BitTorrent", diff --git a/apps/sonarr/docker-compose.yml b/apps/sonarr/docker-compose.yml index f797679e..768bb532 100644 --- a/apps/sonarr/docker-compose.yml +++ b/apps/sonarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: sonarr: - image: lscr.io/linuxserver/sonarr:3.0.8 + image: lscr.io/linuxserver/sonarr:3.0.9 container_name: sonarr environment: - PUID=1000 @@ -18,3 +18,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.sonarr.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.sonarr.entrypoints: websecure + traefik.http.routers.sonarr.service: sonarr + traefik.http.routers.sonarr.tls.certresolver: myresolver + traefik.http.services.sonarr.loadbalancer.server.port: 8989 diff --git a/apps/syncthing/config.json b/apps/syncthing/config.json index 0b201a3e..838b4002 100644 --- a/apps/syncthing/config.json +++ b/apps/syncthing/config.json @@ -2,10 +2,11 @@ "$schema": "../schema.json", "name": "Syncthing", "available": true, + "exposable": true, "port": 8090, "id": "syncthing", - "tipi_version": 1, - "version": "1.20", + "tipi_version": 3, + "version": "1.22", "categories": ["data", "utilities"], "description": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. We strive to fulfill the goals below. The goals are listed in order of importance, the most important one being the first. This is the summary version of the goal list - for more commentary, see the full Goals document.", "short_desc": "Peer-to-peer file synchronization between your devices", diff --git a/apps/syncthing/docker-compose.yml b/apps/syncthing/docker-compose.yml index 78ddbced..6cd7f31f 100644 --- a/apps/syncthing/docker-compose.yml +++ b/apps/syncthing/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: syncthing: container_name: syncthing - image: syncthing/syncthing:1.20 + image: syncthing/syncthing:1.22 stop_grace_period: 1m hostname: tipi environment: @@ -19,3 +19,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.syncthing.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.syncthing.entrypoints: websecure + traefik.http.routers.syncthing.service: syncthing + traefik.http.routers.syncthing.tls.certresolver: myresolver + traefik.http.services.syncthing.loadbalancer.server.port: 8384 diff --git a/apps/tailscale/config.json b/apps/tailscale/config.json index d53f98cc..9a3a35d7 100644 --- a/apps/tailscale/config.json +++ b/apps/tailscale/config.json @@ -4,9 +4,12 @@ "available": true, "port": 8093, "id": "tailscale", - "tipi_version": 1, - "version": "v1.29.10", - "categories": ["network", "security"], + "tipi_version": 2, + "version": "1.33.19", + "categories": [ + "network", + "security" + ], "description": "Zero config VPN. Installs on any device in minutes, manages firewall rules for you, and works from anywhere.", "short_desc": "The easiest, most secure way to use WireGuard and 2FA.", "author": "© Tailscale Inc.", diff --git a/apps/tailscale/docker-compose.yml b/apps/tailscale/docker-compose.yml index e96f48c8..a0df1801 100644 --- a/apps/tailscale/docker-compose.yml +++ b/apps/tailscale/docker-compose.yml @@ -4,7 +4,7 @@ services: tailscale: container_name: tailscale network_mode: "host" # TODO: Find a way to remove this - image: tailscale/tailscale:v1.29.10 + image: tailscale/tailscale:v1.33.19 privileged: true restart: on-failure stop_grace_period: 1m diff --git a/apps/tautulli/config.json b/apps/tautulli/config.json index 54d783e7..695ca15d 100644 --- a/apps/tautulli/config.json +++ b/apps/tautulli/config.json @@ -2,11 +2,15 @@ "$schema": "../schema.json", "name": "Tautulli", "available": true, + "exposable": true, "port": 8181, "id": "tautulli", - "tipi_version": 1, - "version": "2.10.2", - "categories": ["media", "utilities"], + "tipi_version": 4, + "version": "2.10.5", + "categories": [ + "media", + "utilities" + ], "description": "Tautulli is a 3rd party application that you can run alongside your Plex Media Server to monitor activity and track various statistics. Most importantly, these statistics include what has been watched, who watched it, when and where they watched it, and how it was watched. The only thing missing is \"why they watched it\", but who am I to question your 42 plays of Frozen. All statistics are presented in a nice and clean interface with many tables and graphs, which makes it easy to brag about your server to everyone else.", "short_desc": "Monitoring and tracking tool for Plex Media Server.", "author": "JonnyWong16", diff --git a/apps/tautulli/docker-compose.yml b/apps/tautulli/docker-compose.yml index 214585a8..0feed15a 100644 --- a/apps/tautulli/docker-compose.yml +++ b/apps/tautulli/docker-compose.yml @@ -2,7 +2,7 @@ version: "2.1" services: tautulli: container_name: tautulli - image: lscr.io/linuxserver/tautulli:2.10.2 + image: lscr.io/linuxserver/tautulli:2.10.5 environment: - PUID=1000 - PGID=1000 @@ -13,4 +13,11 @@ services: - ${APP_PORT}:8181 restart: unless-stopped networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.tautulli.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.tautulli.entrypoints: websecure + traefik.http.routers.tautulli.service: tautulli + traefik.http.routers.tautulli.tls.certresolver: myresolver + traefik.http.services.tautulli.loadbalancer.server.port: 8181 \ No newline at end of file diff --git a/apps/tautulli/metadata/logo.jpg b/apps/tautulli/metadata/logo.jpg index 2980112c..71864de6 100644 Binary files a/apps/tautulli/metadata/logo.jpg and b/apps/tautulli/metadata/logo.jpg differ diff --git a/apps/teddit/metadata/logo.jpg b/apps/teddit/metadata/logo.jpg index 18a66a2b..62c7db00 100644 Binary files a/apps/teddit/metadata/logo.jpg and b/apps/teddit/metadata/logo.jpg differ diff --git a/apps/transmission/config.json b/apps/transmission/config.json index e95d48b8..de88045f 100644 --- a/apps/transmission/config.json +++ b/apps/transmission/config.json @@ -2,12 +2,13 @@ "$schema": "../schema.json", "name": "Transmission", "available": true, + "exposable": true, "port": 8089, "requirements": { "ports": [51413] }, "id": "transmission", - "tipi_version": 1, + "tipi_version": 2, "version": "latest", "categories": ["utilities"], "description": "Transmission is a fast, easy, and free BitTorrent client.", diff --git a/apps/transmission/docker-compose.yml b/apps/transmission/docker-compose.yml index 2a2e9299..1f477cab 100644 --- a/apps/transmission/docker-compose.yml +++ b/apps/transmission/docker-compose.yml @@ -25,3 +25,10 @@ services: restart: unless-stopped networks: - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.transmission.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.transmission.entrypoints: websecure + traefik.http.routers.transmission.service: transmission + traefik.http.routers.transmission.tls.certresolver: myresolver + traefik.http.services.transmission.loadbalancer.server.port: 9091 diff --git a/apps/tubearchivist/config.json b/apps/tubearchivist/config.json index 575430e0..46b6d0e4 100644 --- a/apps/tubearchivist/config.json +++ b/apps/tubearchivist/config.json @@ -7,6 +7,7 @@ "id": "tubearchivist", "tipi_version": 1, "version": "latest", + "supported_architectures": ["amd64", "arm64"], "categories": ["media"], "description": "Once your YouTube video collection grows, it becomes hard to search and find a specific video. That's where Tube Archivist comes in: By indexing your video collection with metadata from YouTube, you can organize, search and enjoy your archived YouTube videos without hassle offline through a convenient web interface.", "short_desc": "Your self-hosted YouTube media server", @@ -34,7 +35,6 @@ "label": "Elasticsearch Password", "max": 50, "min": 3, - "required": true, "env_variable": "ELASTIC_PASSWORD" } ] diff --git a/apps/tubearchivist/metadata/logo.jpg b/apps/tubearchivist/metadata/logo.jpg index c167a36b..dd6e56e9 100644 Binary files a/apps/tubearchivist/metadata/logo.jpg and b/apps/tubearchivist/metadata/logo.jpg differ diff --git a/apps/uptime-kuma/metadata/logo.jpg b/apps/uptime-kuma/metadata/logo.jpg index 4c208f7b..21e520e4 100644 Binary files a/apps/uptime-kuma/metadata/logo.jpg and b/apps/uptime-kuma/metadata/logo.jpg differ diff --git a/apps/vaultwarden/config.json b/apps/vaultwarden/config.json index cae8a404..b0ebc3b2 100644 --- a/apps/vaultwarden/config.json +++ b/apps/vaultwarden/config.json @@ -5,9 +5,11 @@ "exposable": true, "port": 8107, "id": "vaultwarden", - "tipi_version": 2, - "version": "1.25.1", - "categories": ["utilities"], + "tipi_version": 3, + "version": "1.26.0", + "categories": [ + "utilities" + ], "description": "Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.", "short_desc": "All your passwords in your control!", "author": "Daniel García", diff --git a/apps/vaultwarden/docker-compose.yml b/apps/vaultwarden/docker-compose.yml index 65d6ca4e..b592aadb 100644 --- a/apps/vaultwarden/docker-compose.yml +++ b/apps/vaultwarden/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: vaultwarden: - image: vaultwarden/server:1.25.2 + image: vaultwarden/server:1.26.0 container_name: vaultwarden restart: unless-stopped ports: diff --git a/apps/wg-easy/config.json b/apps/wg-easy/config.json index 1245a16b..507cccc1 100644 --- a/apps/wg-easy/config.json +++ b/apps/wg-easy/config.json @@ -2,12 +2,13 @@ "$schema": "../schema.json", "name": "Wireguard", "available": true, + "exposable": true, "port": 8082, "requirements": { "ports": [51820] }, "id": "wg-easy", - "tipi_version": 3, + "tipi_version": 4, "version": "7", "categories": ["network"], "description": "Access your homeserver from anywhere even on your mobile device. Wireguard-easy is a simple tool to configure and manage Wireguard VPN servers. It is written in Go and uses the official Wireguard client. You have to open and redirect port 51820 to your homeserver in order to connect.", diff --git a/apps/wg-easy/docker-compose.yml b/apps/wg-easy/docker-compose.yml index 93af5a0a..17da08b8 100644 --- a/apps/wg-easy/docker-compose.yml +++ b/apps/wg-easy/docker-compose.yml @@ -21,4 +21,11 @@ services: - net.ipv4.conf.all.src_valid_mark=1 - net.ipv4.ip_forward=1 networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.wg-easy.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.wg-easy.entrypoints: websecure + traefik.http.routers.wg-easy.service: wg-easy + traefik.http.routers.wg-easy.tls.certresolver: myresolver + traefik.http.services.wg-easy.loadbalancer.server.port: 51821 \ No newline at end of file diff --git a/apps/your-spotify/config.json b/apps/your-spotify/config.json index f1ad7bf5..027dc705 100644 --- a/apps/your-spotify/config.json +++ b/apps/your-spotify/config.json @@ -2,9 +2,10 @@ "$schema": "../schema.json", "name": "Your Spotify", "available": true, + "exposable": true, "port": 8103, "id": "your-spotify", - "tipi_version": 1, + "tipi_version": 2, "version": "latest", "categories": ["music", "utilities"], "description": "Self hosted Spotify tracking dashboard.", diff --git a/apps/your-spotify/docker-compose.yml b/apps/your-spotify/docker-compose.yml index 32e542e1..742e6ea8 100644 --- a/apps/your-spotify/docker-compose.yml +++ b/apps/your-spotify/docker-compose.yml @@ -1,6 +1,26 @@ version: "3" services: + your-spotify: + container_name: your-spotify + image: yooooomi/your_spotify_client + depends_on: + - your-spotify-server + restart: unless-stopped + ports: + - ${APP_PORT}:3000 + environment: + - API_ENDPOINT=http://${INTERNAL_IP}:32500 + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.your-spotify.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.your-spotify.entrypoints: websecure + traefik.http.routers.your-spotify.service: your-spotify + traefik.http.routers.your-spotify.tls.certresolver: myresolver + traefik.http.services.your-spotify.loadbalancer.server.port: 3000 + your-spotify-server: container_name: your-spotify-server image: yooooomi/your_spotify_server @@ -32,15 +52,3 @@ services: networks: - tipi_main_network - your-spotify: - container_name: your-spotify - image: yooooomi/your_spotify_client - depends_on: - - your-spotify-server - restart: unless-stopped - ports: - - ${APP_PORT}:3000 - environment: - - API_ENDPOINT=http://${INTERNAL_IP}:32500 - networks: - - tipi_main_network diff --git a/apps/zerotier/config.json b/apps/zerotier/config.json index 6ac8adb7..8fb6f2bc 100644 --- a/apps/zerotier/config.json +++ b/apps/zerotier/config.json @@ -1,6 +1,6 @@ { "$schema": "../schema.json", - "name": "Zerotier", + "name": "ZeroTier", "available": true, "port": 9993, "id": "zerotier", @@ -11,7 +11,7 @@ "short_desc": "Easy to use zero configuration VPN.", "author": "© ZeroTier Inc.", "source": "https://github.com/zerotier/ZeroTierOne", - "website": "hhttps://www.zerotier.com", + "website": "https://www.zerotier.com", "form_fields": [ { "type": "text", diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..77b47280 --- /dev/null +++ b/renovate.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ], + "gitIgnoredAuthors": [ + "githubaction@githubaction.com" + ], + "dependencyDashboard": true, + "enabledManagers": ["docker-compose", "dockerfile"] +}