Merge branch 'master' into app/gandi-livedns
39
.github/workflows/renovate-app-version.sh
vendored
Executable file
|
@ -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 <image>:<version>
|
||||
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
|
39
.github/workflows/renovate-app-version.yml
vendored
Normal file
|
@ -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
|
30
.github/workflows/renovate.yml
vendored
Normal file
|
@ -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 }}
|
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
node_modules/
|
||||
package-lock.json
|
||||
github.secrets
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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
|
||||
|
|
16
apps/bazarr/config.json
Normal file
|
@ -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": []
|
||||
}
|
27
apps/bazarr/docker-compose.yml
Normal file
|
@ -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
|
66
apps/bazarr/metadata/description.md
Normal file
|
@ -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
|
BIN
apps/bazarr/metadata/logo.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
|
@ -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"],
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 27 KiB |
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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": "",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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… ",
|
||||
|
|
|
@ -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
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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
|
||||
|
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
|
@ -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"],
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 33 KiB |
|
@ -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",
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,7 +2,7 @@ version: "3.7"
|
|||
services:
|
||||
libreddit:
|
||||
container_name: libreddit
|
||||
image: spikecodes/libreddit:arm
|
||||
image: spikecodes/libreddit:armv7
|
||||
dns:
|
||||
- ${DNS_IP}
|
||||
ports:
|
||||
|
|
19
apps/libreddit/docker-compose.arm64.yml
Normal file
|
@ -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
|
|
@ -2,7 +2,7 @@ version: "3.7"
|
|||
services:
|
||||
libreddit:
|
||||
container_name: libreddit
|
||||
image: spikecodes/libreddit
|
||||
image: spikecodes/libreddit:latest
|
||||
dns:
|
||||
- ${DNS_IP}
|
||||
ports:
|
||||
|
|
50
apps/librephotos/config.json
Normal file
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
0
apps/librephotos/data/cache/.gitkeep
vendored
Normal file
0
apps/librephotos/data/logs/.gitkeep
Normal file
0
apps/librephotos/data/protected_media/.gitkeep
Normal file
62
apps/librephotos/data/proxy/nginx.conf
Normal file
|
@ -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/;
|
||||
}
|
||||
}
|
||||
}
|
0
apps/librephotos/data/scan/.gitkeep
Normal file
91
apps/librephotos/docker-compose.yml
Normal file
|
@ -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
|
24
apps/librephotos/metadata/description.md
Normal file
|
@ -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)
|
||||
<sub>Mockup designed by rawpixel.com / Freepik</sub>
|
||||
|
||||
## 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
|
BIN
apps/librephotos/metadata/logo.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
|
@ -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.",
|
||||
|
|
|
@ -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:
|
||||
|
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
16
apps/lidarr/config.json
Normal file
|
@ -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": []
|
||||
}
|
25
apps/lidarr/docker-compose.yml
Normal file
|
@ -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
|
17
apps/lidarr/metadata/description.md
Normal file
|
@ -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
|
BIN
apps/lidarr/metadata/logo.jpg
Normal file
After Width: | Height: | Size: 47 KiB |
|
@ -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.",
|
||||
|
|
|
@ -12,4 +12,11 @@ services:
|
|||
volumes:
|
||||
- ${APP_DATA_DIR}/data:/app/data
|
||||
networks:
|
||||
- tipi_main_network
|
||||
- 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
|
18
apps/memos/config.json
Normal file
|
@ -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": []
|
||||
}
|
19
apps/memos/docker-compose.yml
Normal file
|
@ -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
|
10
apps/memos/metadata/description.md
Executable file
|
@ -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)
|
BIN
apps/memos/metadata/logo.jpg
Normal file
After Width: | Height: | Size: 76 KiB |
26
apps/minecraft-server/config.json
Normal file
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
25
apps/minecraft-server/docker-compose.yml
Normal file
|
@ -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
|
9
apps/minecraft-server/metadata/description.md
Normal file
|
@ -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
|
||||
```
|
BIN
apps/minecraft-server/metadata/logo.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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/",
|
||||
|
|
|
@ -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
|
||||
|
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
- 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
|
|
@ -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": []
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
64
apps/photoprism/docker-compose.arm.yml
Normal file
|
@ -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
|
64
apps/photoprism/docker-compose.arm64.yml
Normal file
|
@ -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
|
|
@ -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)",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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
|
||||
- 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
|
|
@ -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
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
@ -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).",
|
||||
|
|
|
@ -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
|
||||
|
|