Merge branch 'master' into app/immich

This commit is contained in:
Nicolas Meienberger 2022-09-24 17:13:34 +02:00
commit 9352d10139
71 changed files with 3044 additions and 51 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules/
package-lock.json

View File

@ -1,17 +1,21 @@
# Tipi App Store ⛺️
This is the official repository for the Tipi App Store. It contains all the apps that are available for download on [Tipi](https://github.com/meienberger/runtipi).
## Apps available
- [Adguard Home](https://github.com/AdguardTeam/AdGuardHome) - Adguard Home DNS adblocker
- [Booksonic](https://github.com/popeen) - A server for streaming your audiobooks
- [Bookstack](https://github.com/BookStackApp/BookStack) - Simple, easy-to-use platform for organising and storing information.
- [Calibre-Web](https://github.com/janeczku/calibre-web) - Web Ebook Reader
- [Code-Server](https://github.com/coder/code-server) - Web VS Code
- [Cryptpad](https://github.com/xwiki-labs/cryptpad) - Collaboration suite, end-to-end encrypted and open-source
- [Filebrowser](https://github.com/filebrowser/filebrowser) - Web File Browser
- [Firefly III](https://github.com/firefly-iii/firefly-iii) - A personal finances manager
- [Freshrss](https://github.com/FreshRSS/FreshRSS) - A free, self-hostable RSS aggregator
- [Gitea](https://github.com/go-gitea/gitea) - Gitea - A painless self-hosted Git service
- [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
- [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
- [Invidious](https://github.com/iv-org/invidious) - An alternative front-end to YouTube
@ -19,7 +23,10 @@ This is the official repository for the Tipi App Store. It contains all the apps
- [Jellyfin](https://github.com/jellyfin/jellyfin) - A media server for your home collection
- [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
- [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
- [n8n](https://github.com/n8n-io/n8n) - Workflow Automation Tool
- [Nextcloud](https://github.com/nextcloud/server) - A safe home for all your data
- [Nitter](https://github.com/zedeus/nitter) - Alternative Twitter front-end
@ -29,20 +36,29 @@ This is the official repository for the Tipi App Store. It contains all the apps
- [Pihole](https://github.com/pi-hole/pi-hole) - A black hole for Internet advertisements
- [Plex](https://github.com/plexinc/pms-docker) - Stream Movies & TV Shows
- [Portainer](https://github.com/portainer/portainer) - Making Docker and Kubernetes management easy.
- [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
- [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
- [SearXNG](https://github.com/searxng/searxng) - SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled
- [Send](https://gitlab.com/timvisee/send) - Simple, private file sharing
- [Sonarr](https://github.com/Sonarr/Sonarr) - TV show manager for Usenet and BitTorrent
- [Syncthing](https://github.com/syncthing/syncthing) - Continuous File Synchronization
- [Tailscale](https://github.com/tailscale/tailscale) - The easiest, most secure way to use WireGuard and 2FA
- [Tautulli](https://github.com/Tautulli/Tautulli) - A Python based monitoring and tracking tool for Plex Media Server
- [Teddit](https://codeberg.org/teddit/teddit) - Alternative Reddit front-end focused on privacy https://teddit.net
- [Transmission](https://github.com/transmission/transmission) - Fast, easy, and free BitTorrent client
- [Wireguard Easy](https://github.com/WeeJeWel/wg-easy) - WireGuard VPN + Web-based Admin UI
- [Tube Archivist](https://github.com/tubearchivist/tubearchivist) - Your self-hosted YouTube media server
- [Uptime Kuma](https://github.com/louislam/uptime-kuma) - A fancy self-hosted monitoring tool
- [Vaultwarden](https://github.com/dani-garcia/vaultwarden) - Unofficial Bitwarden compatible server
- [Wireguard Easy](https://github.com/WeeJeWel/wg-easy) - WireGuard VPN + Web-based Admin UI
- [ZeroTier](https://github.com/zerotier/ZeroTierOne) - Easy to use zero configuration VPN.
## How to sumbit an app
If you want to see new apps on Tipi you can either :
- [Open an issue]() on this repository and some members of the community will add it
If you want to see new apps on Tipi you can either:
- [Open an issue](https://github.com/meienberger/runtipi-appstore/issues) on this repository and members of the community will add it
- Fork this repo and create the necessary files for a Tipi app. Follow this [guide](https://github.com/meienberger/runtipi/wiki/Adding-your-own-app)

View File

@ -18,7 +18,13 @@ interface AppConfig {
available: boolean;
}
const networkExceptions = ["pihole", "tailscale", "homeassistant", "plex"];
const networkExceptions = [
"pihole",
"tailscale",
"homeassistant",
"plex",
"zerotier",
];
const getAppConfigs = (): AppConfig[] => {
const apps: AppConfig[] = [];

View File

@ -2,8 +2,8 @@
"$schema": "../schema.json",
"name": "Adguard",
"available": true,
"tipi_version": 1,
"version": "0.107.7",
"tipi_version": 2,
"version": "0.107.13",
"port": 8104,
"id": "adguard",
"categories": ["network", "security"],
@ -14,5 +14,12 @@
"requirements": {
"ports": [53]
},
"form_fields": []
"form_fields": [
{
"type": "ip",
"label": "Network Interface (default: 0.0.0.0)",
"required": false,
"env_variable": "NETWORK_INTERFACE"
}
]
}

View File

@ -2,7 +2,7 @@
version: "3.7"
services:
adguard:
image: adguard/adguardhome:v0.107.7
image: adguard/adguardhome:v0.107.13
container_name: adguard
volumes:
- "${APP_DATA_DIR}/data/work:/opt/adguardhome/work"
@ -11,6 +11,6 @@ services:
networks:
- tipi_main_network
ports:
- 53:53/tcp
- 53:53/udp
- ${NETWORK_INTERFACE:-0.0.0.0}:53:53/tcp
- ${NETWORK_INTERFACE:-0.0.0.0}:53:53/udp
- ${APP_PORT}:80

View File

@ -2,10 +2,11 @@
"$schema": "../schema.json",
"name": "Jellyfin",
"available": true,
"exposable": true,
"port": 8091,
"id": "jellyfin",
"tipi_version": 1,
"version": "10.8.1",
"tipi_version": 2,
"version": "10.8.4",
"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",

View File

@ -1,8 +1,7 @@
version: "3.7"
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:10.8.1
image: lscr.io/linuxserver/jellyfin:10.8.4
container_name: jellyfin
volumes:
- ${APP_DATA_DIR}/data/config:/config
@ -11,8 +10,32 @@ services:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- JELLYFIN_PublishedServerUrl=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
restart: "unless-stopped"
ports:
- ${APP_PORT}:8096
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.middlewares.jellyfin-mw.headers.SSLForceHost: true
traefik.http.middlewares.jellyfin-mw.headers.SSLHost: ${APP_DOMAIN}
traefik.http.middlewares.jellyfin-mw.headers.SSLRedirect: true
traefik.http.middlewares.jellyfin-mw.headers.STSIncludeSubdomains: true
traefik.http.middlewares.jellyfin-mw.headers.STSPreload: true
traefik.http.middlewares.jellyfin-mw.headers.STSSeconds: 315360000
traefik.http.middlewares.jellyfin-mw.headers.browserXSSFilter: true
traefik.http.middlewares.jellyfin-mw.headers.contentTypeNosniff: true
traefik.http.middlewares.jellyfin-mw.headers.customFrameOptionsValue: 'allow-from https://${DOMAIN}'
traefik.http.middlewares.jellyfin-mw.headers.customResponseHeaders.X-Robots-Tag: noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex
traefik.http.middlewares.jellyfin-mw.headers.forceSTSHeader: true
traefik.http.middlewares.jellyfin-mw.headers.frameDeny: true
traefik.http.routers.jellyfin.entryPoints: websecure
traefik.http.routers.jellyfin.middlewares: jellyfin-mw
traefik.http.routers.jellyfin.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.jellyfin.service: jellyfin-svc
traefik.http.routers.jellyfin.tls: true
traefik.http.routers.jellyfin.tls.certresolver: myresolver
traefik.http.routers.jellyfin.tls.domains: ${APP_DOMAIN}
traefik.http.services.jellyfin-svc.loadBalancer.passHostHeader: true
traefik.http.services.jellyfin-svc.loadBalancer.server.port: 8096

View File

@ -2,9 +2,10 @@
"$schema": "../schema.json",
"name": "Joplin Server",
"available": true,
"exposable": true,
"port": 8099,
"id": "joplin",
"tipi_version": 1,
"tipi_version": 2,
"version": "2.7.4",
"categories": ["utilities"],
"description": "Default credentials: admin@localhost / admin",
@ -12,5 +13,13 @@
"author": "https://github.com/laurent22",
"source": "https://github.com/laurent22/joplin",
"website": "https://joplinapp.org",
"form_fields": []
"form_fields": [
{
"type": "random",
"label": "Joplin DB password",
"max": 50,
"min": 8,
"env_variable": "JOPLIN_DB_PASSWORD"
}
]
}

View File

@ -8,7 +8,7 @@ services:
- ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=tipi
- POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD}
- POSTGRES_USER=tipi
- POSTGRES_DB=joplin
networks:
@ -26,9 +26,9 @@ services:
- ${DNS_IP}
environment:
- APP_PORT=22300
- APP_BASE_URL=http://${INTERNAL_IP}:${APP_PORT}
- APP_BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
- DB_CLIENT=pg
- POSTGRES_PASSWORD=tipi
- POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD}
- POSTGRES_USER=tipi
- POSTGRES_DATABASE=joplin
- POSTGRES_PORT=5432
@ -36,3 +36,13 @@ services:
- MAX_TIME_DRIFT=0
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.joplin.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.joplin.entrypoints: websecure
traefik.http.routers.joplin.service: joplin
traefik.http.routers.joplin.tls.certresolver: myresolver
traefik.http.services.joplin.loadbalancer.server.port: 22300
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

View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "LibreTranslate",
"available": true,
"exposable": true,
"port": 8121,
"id": "libretranslate",
"tipi_version": 1,
"version": "v1.2.9",
"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.",
"author": "LibreTranslate",
"source": "https://github.com/LibreTranslate/LibreTranslate",
"form_fields": []
}

View File

@ -0,0 +1,20 @@
version: "3.7"
services:
libretranslate:
container_name: libretranslate
image: libretranslate/libretranslate:v1.2.9
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:5000
restart: unless-stopped
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.libretranslate.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.libretranslate.entrypoints: websecure
traefik.http.routers.libretranslate.service: libretranslate
traefik.http.routers.libretranslate.tls.certresolver: myresolver
traefik.http.services.libretranslate.loadbalancer.server.port: 5000

View File

@ -0,0 +1,7 @@
# LibreTranslate
[Try it online!](https://libretranslate.com) | [API Docs](https://libretranslate.com/docs) | [Community Forum](https://community.libretranslate.com/)
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](https://github.com/argosopentech/argos-translate) library.
![image](https://user-images.githubusercontent.com/64697405/139015751-279f31ac-36f1-4950-9ea7-87e76bf65f51.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,25 @@
{
"$schema": "../schema.json",
"name": "Moneroblock",
"available": true,
"exposable": true,
"port": 31312,
"id": "moneroblock",
"tipi_version": 1,
"version": "v0.1.1",
"categories": ["utilities"],
"description": "MoneroBlock is a trustless block explorer for the Monero payment network.",
"short_desc": "Decentralized and trustless Monero block explorer",
"author": "duggavo",
"source": "https://github.com/duggavo/MoneroBlock",
"form_fields": [
{
"type": "text",
"label": "Monero Daemon Address in format node.host.name:port, i.e. node.sethforprivacy.com:18089",
"max": 100,
"min": 10,
"required": false,
"env_variable": "DAEMON_ADDRESS"
}
]
}

View File

@ -0,0 +1,20 @@
version: "3.7"
services:
moneroblock:
image: sethsimmons/moneroblock:v0.1.1
restart: unless-stopped
container_name: moneroblock
ports:
- ${APP_PORT}:31312
command:
- "--daemon"
- "${DAEMON_ADDRESS:-node.sethforprivacy.com:18089}"
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.moneroblock.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.moneroblock.entrypoints: websecure
traefik.http.routers.moneroblock.service: moneroblock
traefik.http.routers.moneroblock.tls.certresolver: myresolver
traefik.http.services.moneroblock.loadbalancer.server.port: 31312

View File

@ -0,0 +1,24 @@
# MoneroBlock
MoneroBlock is a trustless block explorer for the Monero payment network.
## Running MoneroBlock
Once MoneroBlock is started open [127.0.0.1:31312](http://127.0.0.1:31312/) with your browser.
### Running with a remote daemon
Specify your own node when installing MoneroBlock using the format `node.host.name:port`, i.e. `node.sethforprivacy.com:18089`.
## Troubleshooting
If you have issues running this, please open an issue against the following repository:
https://github.com/sethforprivacy/moneroblock-docker/issues
## Donate
If you wish to support the MoneroBlock development please donate any amount:
Monero: `892HHTyDg5mJm5eWJWZ8L1ZMYnnWExciQFFkpsgLh1DfVUXfUFj6z1X2jDD2ZRQLiwWYskeyNkrtpAHse4M3G29uBfiYgVL`
Wownero: `WW439rW1B6p4pA9oca1Aip6h2dneUCHTL9qdn5fstfkB1DzokvrU2hYGASDUcyfaa9gv5kXS82TUhRALMGJGFmBA26jAz3qM5ss`

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

16
apps/monerod/config.json Normal file
View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "Monero Daemon",
"available": true,
"exposable": true,
"port": 18080,
"id": "monerod",
"tipi_version": 1,
"version": "latest",
"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": []
}

View File

@ -0,0 +1,29 @@
version: "3.7"
services:
monerod:
image: sethsimmons/simple-monerod:latest
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:18080
restart: unless-stopped
networks:
- tipi_main_network
container_name: monerod
volumes:
- ${APP_DATA_DIR}/data:/home/monero/.bitmonero
command: >-
--rpc-restricted-bind-ip=0.0.0.0
--rpc-restricted-bind-port=18089
--public-node
--no-igd
--enable-dns-blocklist
--prune-blockchain
--zmq-pub=tcp://0.0.0.0:18083
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.monerod.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.monerod.entrypoints: websecure
traefik.http.routers.monerod.service: monerod
traefik.http.routers.monerod.tls.certresolver: myresolver
traefik.http.services.monerod.loadbalancer.server.port: 18089

View File

@ -0,0 +1,20 @@
# The Monero network daemon
Monero is a private, decentralized cryptocurrency that keeps your finances confidential and secure.
## Required hardware
- 2+ vCPUs/cores
- 4GB+ RAM
- 75GB+ SSD
## Why run your own Monero node?
The Monero network relies on a distributed web of Monero nodes, each of which validate transactions, propagate transactions to the rest of the network, and helps new nodes easily and quickly synchronize to the current state of the network.
Running a Monero node for yourself not only helps to give you the stronger network-level privacy guarantees, but also helps to increase the decentralization, stability, and speed of the Monero network.
Each node can expose two different services, each of which has a positive impact on the network in a unique way:
- Peer-to-Peer (p2p) port (default 18080): this port allows other nodes on the network to connect to your node to download the blockchain and to send you any transactions they validate that you do not yet have. It also increases overall network privacy, as your node participates in the [Dandelion++](https://www.monerooutreach.org/stories/dandelion.html) propagation of transactions.
- Remote Procedure Call (RPC) port (default 18089 for restricted): Exposing this port (especially with the `public-node` arg) allows other users on the network, especially those using mobile wallets or the GUI wallet in "Simple" mode, to connect to your node to sync their wallets, without needing to run their own full node locally.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -4,13 +4,21 @@
"available": true,
"port": 8094,
"id": "n8n",
"tipi_version": 1,
"version": "0.186.1",
"tipi_version": 2,
"version": "0.195.5",
"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",
"source": "https://github.com/n8n-io/n8n",
"website": "https://n8n.io/",
"form_fields": []
"form_fields": [
{
"type": "random",
"label": "Database password",
"min": 30,
"max": 30,
"env_variable": "DB_PASSWORD"
}
]
}

View File

@ -8,7 +8,7 @@ services:
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=tipi
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_USER=tipi
- POSTGRES_DB=n8n
networks:
@ -16,7 +16,7 @@ services:
n8n:
container_name: n8n
image: n8nio/n8n:0.186.1
image: n8nio/n8n:0.195.5
restart: unless-stopped
ports:
- ${APP_PORT}:5678

View File

@ -0,0 +1,15 @@
{
"name": "Navidrome",
"available": true,
"port": 4533,
"exposable": true,
"id": "navidrome",
"description": "Modern Music Server and Streamer compatible with Subsonic/Airsonic",
"tipi_version": 1,
"version": "0.47.5",
"categories": ["media", "music"],
"short_desc": "A selfhosted music server",
"author": "https://github.com/Bvoxl",
"source": "https://github.com/navidrome/navidrome/",
"form_fields": []
}

View File

@ -0,0 +1,25 @@
version: "3"
services:
navidrome:
container_name: navidrome
image: deluan/navidrome:latest
ports:
- ${APP_PORT}:4533
restart: unless-stopped
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
volumes:
- ${APP_DATA_DIR}/navidrome/data:/data
- ${ROOT_FOLDER_HOST}/media/data/music:/music:ro
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.navidrome.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.navidrome.entrypoints: websecure
traefik.http.routers.navidrome.service: navidrome
traefik.http.routers.navidrome.tls.certresolver: myresolver
traefik.http.services.navidrome.loadbalancer.server.port: 4533

View File

@ -0,0 +1 @@
Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. It's like your personal Spotify!

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -5,7 +5,7 @@
"exposable": true,
"port": 8083,
"id": "nextcloud",
"tipi_version": 2,
"tipi_version": 4,
"version": "24.0.4",
"categories": ["data"],
"description": "Nextcloud is a self-hosted, open source, and fully-featured cloud storage solution for your personal files, office documents, and photos.",
@ -25,7 +25,7 @@
"type": "password",
"label": "Password",
"max": 50,
"min": 3,
"min": 10,
"required": true,
"env_variable": "NEXTCLOUD_ADMIN_PASSWORD"
}

View File

@ -52,7 +52,10 @@ services:
- POSTGRES_DB=nextcloud
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
- NEXTCLOUD_TRUSTED_DOMAINS=${INTERNAL_IP}:${APP_PORT} ${APP_DOMAIN}
- NEXTCLOUD_TRUSTED_DOMAINS=${APP_DOMAIN}
- TRUSTED_PROXIES=172.16.0.0/12
- OVERWRITEHOST=${APP_DOMAIN}
- OVERWRITEPROTOCOL=${APP_PROTOCOL:-http}
depends_on:
- db-nextcloud
- redis-nextcloud
@ -65,4 +68,15 @@ services:
traefik.http.routers.nextcloud.service: nextcloud
traefik.http.routers.nextcloud.tls.certresolver: myresolver
traefik.http.services.nextcloud.loadbalancer.server.port: 80
traefik.http.middlewares.nextcloud.headers.browserXSSFilter: true
traefik.http.middlewares.nextcloud.headers.contentTypeNosniff: true
traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains: true
traefik.http.middlewares.nextcloud.headers.stsPreload: true
traefik.http.middlewares.nextcloud.headers.stsSeconds: 155520011
traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent: true
traefik.http.middlewares.nextcloud_redirect.redirectregex.regex: https://(.*)/.well-known/(card|cal)dav
traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement: https://$${1}/remote.php/dav/
traefik.http.routers.nextcloud.middlewares: nextcloud,nextcloud_redirect,nextcloud-https
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

View File

@ -26,4 +26,12 @@ Enterprise? Public Sector or Education user? You may want to have a look into [*
You can also [get support for Nextcloud](https://nextcloud.com/support)!
## Reset password
Nextcloud does not support password resets from environment variables. If you want to change your password run the following commands in your terminal:
```bash
sudo docker exec -u www-data -it nextcloud /bin/bash
php occ user:resetpassword username
```
![](https://raw.githubusercontent.com/nextcloud/screenshots/master/files/Files%20Sharing.png)

View File

@ -2,9 +2,10 @@
"$schema": "../schema.json",
"name": "Nitter",
"available": true,
"exposable": true,
"port": 8106,
"id": "nitter",
"tipi_version": 1,
"tipi_version": 2,
"version": "latest",
"categories": ["social"],
"description": "A free and open source alternative Twitter front-end focused on privacy and performance.",

View File

@ -13,8 +13,20 @@ services:
depends_on:
- nitter-redis
restart: unless-stopped
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost:8080"]
interval: 1m
timeout: 3s
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.nitter.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.nitter.entrypoints: websecure
traefik.http.routers.nitter.service: nitter
traefik.http.routers.nitter.tls.certresolver: myresolver
traefik.http.services.nitter.loadbalancer.server.port: 8080
nitter-redis:
image: redis:6-alpine
image: redis:alpine
container_name: nitter-redis
networks:
- tipi_main_network

View File

@ -3,8 +3,9 @@
"name": "PhotoPrism",
"port": 8110,
"available": true,
"exposable": true,
"id": "photoprism",
"tipi_version": 1,
"tipi_version": 2,
"version": "latest",
"categories": ["photography"],
"description": "PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way. You can run it at home, on a private server, or in the cloud. Default username: admin",
@ -19,6 +20,16 @@
"min": 8,
"required": true,
"env_variable": "PHOTOPRISM_ADMIN_PASSWORD"
},
{
"type": "random",
"label": "Photoprism DB password",
"env_variable": "DB_PASSWORD"
},
{
"type": "random",
"label": "Photoprism root DB password",
"env_variable": "DB_ROOT_PASSWORD"
}
]
}

View File

@ -1,5 +1,4 @@
version: "3.7"
services:
photoprism:
# TODO: Special image for arm/v7 is available
@ -12,7 +11,7 @@ services:
- "${APP_PORT}:2342"
environment:
PHOTOPRISM_ADMIN_PASSWORD: ${PHOTOPRISM_ADMIN_PASSWORD}
PHOTOPRISM_SITE_URL: "http://localhost:2342/"
PHOTOPRISM_SITE_URL: "${APP_PROTOCOL:-http}://${APP_DOMAIN}/"
PHOTOPRISM_ORIGINALS_LIMIT: 5000
PHOTOPRISM_HTTP_COMPRESSION: "gzip"
PHOTOPRISM_LOG_LEVEL: "info"
@ -34,7 +33,7 @@ services:
PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306"
PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "photoprism"
PHOTOPRISM_DATABASE_PASSWORD: "photoprism"
PHOTOPRISM_DATABASE_PASSWORD: "${DB_PASSWORD}"
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
working_dir: "/photoprism"
volumes:
@ -42,10 +41,17 @@ services:
- "${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.3
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:
@ -53,7 +59,7 @@ services:
environment:
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "photoprism"
MARIADB_ROOT_PASSWORD: "photoprism"
MARIADB_PASSWORD: "${DB_PASSWORD}"
MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
networks:
- tipi_main_network

View File

@ -7,8 +7,8 @@
"ports": [53]
},
"id": "pihole",
"tipi_version": 1,
"version": "2022.07.1",
"tipi_version": 2,
"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.",
"short_desc": "A black hole for Internet advertisements",
@ -22,6 +22,12 @@
"min": 3,
"required": true,
"env_variable": "APP_PASSWORD"
},
{
"type": "ip",
"label": "Network Interface (default: 0.0.0.0)",
"required": false,
"env_variable": "NETWORK_INTERFACE"
}
]
}

View File

@ -14,15 +14,15 @@ services:
pihole:
# depends_on: [unbound]
container_name: pihole
image: pihole/pihole:2022.07.1
image: pihole/pihole:2022.09.4
restart: unless-stopped
hostname: pihole
dns:
- 127.0.0.1
# - 10.21.21.200 # Points to unbound
ports:
- 53:53/tcp
- 53:53/udp
- ${NETWORK_INTERFACE:-0.0.0.0}:53:53/tcp
- ${NETWORK_INTERFACE:-0.0.0.0}:53:53/udp
- ${APP_PORT}:80
volumes:
- ${APP_DATA_DIR}/data/pihole:/etc/pihole

View File

@ -5,8 +5,8 @@
"exposable": true,
"port": 32400,
"id": "plex",
"tipi_version": 4,
"version": "1.28.1",
"tipi_version": 5,
"version": "1.28.2",
"url_suffix": "/web",
"categories": ["media"],
"description": "",

View File

@ -2,15 +2,17 @@ version: "3.7"
services:
plex:
image: lscr.io/linuxserver/plex:1.28.1
image: lscr.io/linuxserver/plex:1.28.2
container_name: plex
network_mode: host
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
- ADVERTISE_IP=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
volumes:
- ${APP_DATA_DIR}/data/config:/config
- ${APP_DATA_DIR}/data/transcode:/transcode
- ${ROOT_FOLDER_HOST}/media/data:/media
restart: unless-stopped
labels:

View File

@ -5,8 +5,8 @@
"available": true,
"https": true,
"id": "portainer",
"tipi_version": 3,
"version": "2.14.2",
"tipi_version": 4,
"version": "2.15.1",
"categories": ["utilities"],
"description": "",
"short_desc": "Making Docker and Kubernetes management easy.",

View File

@ -2,7 +2,7 @@ version: "3.7"
services:
portainer:
image: portainer/portainer-ce:2.14.2-alpine
image: portainer/portainer-ce:2.15.1-alpine
container_name: portainer
restart: unless-stopped
ports:

View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "PrivateBin",
"available": true,
"exposable": true,
"port": 8122,
"id": "privatebin",
"tipi_version": 1,
"version": "1.4.0",
"categories": ["utilities"],
"description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted and decrypted in the browser using 256bit AES in Galois Counter mode.",
"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": []
}

View File

@ -0,0 +1,21 @@
version: "3.7"
services:
privatebin:
image: privatebin/nginx-fpm-alpine:1.4.0
container_name: privatebin
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:8080
restart: unless-stopped
networks:
- tipi_main_network
volumes:
- ${APP_DATA_DIR}/data:/srv/data
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.privatebin.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.privatebin.entrypoints: websecure
traefik.http.routers.privatebin.service: privatebin
traefik.http.routers.privatebin.tls.certresolver: myresolver
traefik.http.services.privatebin.loadbalancer.server.port: 8080

View File

@ -0,0 +1,61 @@
# [![PrivateBin](https://cdn.rawgit.com/PrivateBin/assets/master/images/preview/logoSmall.png)](https://privatebin.info/)
**PrivateBin** is a minimalist, open source online
[pastebin](https://en.wikipedia.org/wiki/Pastebin)
where the server has zero knowledge of pasted data.
Data is encrypted and decrypted in the browser using 256bit AES in
[Galois Counter mode](https://en.wikipedia.org/wiki/Galois/Counter_Mode).
This is a fork of ZeroBin, originally developed by
[Sébastien Sauvage](https://github.com/sebsauvage/ZeroBin). PrivateBin was
refactored to allow easier and cleaner extensions and has many additional
features. It is, however, still fully compatible to the original ZeroBin 0.19
data storage scheme. Therefore, such installations can be upgraded to PrivateBin
without losing any data.
## What PrivateBin provides
+ As a server administrator you don't have to worry if your users post content
that is considered illegal in your country. You have plausible deniability of
any of the pastes content. If requested or enforced, you can delete any paste
from your system.
+ Pastebin-like system to store text documents, code samples, etc.
+ Encryption of data sent to server.
+ Possibility to set a password which is required to read the paste. It further
protects a paste and prevents people stumbling upon your paste's link
from being able to read it without the password.
## What it doesn't provide
- As a user you have to trust the server administrator not to inject any
malicious code. For security, a PrivateBin installation *has to be used over*
*HTTPS*! Otherwise you would also have to trust your internet provider, and
any jurisdiction the traffic passes through. Additionally the instance should
be secured by
[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security). It can
use traditional certificate authorities and/or use a
[DNSSEC](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions)
protected
[DANE](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities)
record.
- The "key" used to encrypt the paste is part of the URL. If you publicly post
the URL of a paste that is not password-protected, anyone can read it.
Use a password if you want your paste to remain private. In that case, make
sure to use a strong password and share it privately and end-to-end-encrypted.
- A server admin can be forced to hand over access logs to the authorities.
PrivateBin encrypts your text and the discussion contents, but who accessed a
paste (first) might still be disclosed via access logs.
- In case of a server breach your data is secure as it is only stored encrypted
on the server. However, the server could be absused or the server admin could
be legally forced into sending malicious code to their users, which logs
the decryption key and sends it to a server when a user accesses a paste.
Therefore, do not access any PrivateBin instance if you think it has been
compromised. As long as no user accesses this instance with a previously
generated URL, the content can't be decrypted.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

23
apps/searxng/config.json Normal file
View File

@ -0,0 +1,23 @@
{
"$schema": "../schema.json",
"name": "SearXNG",
"available": true,
"exposable": true,
"port": 8127,
"id": "searxng",
"tipi_version": 1,
"version": "latest",
"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",
"author": "searxng",
"source": "https://github.com/searxng/searxng",
"form_fields": [
{
"type": "random",
"label": "SearXNG Secret Key",
"min": 32,
"env_variable": "SEARXNG_SECRET_KEY"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
version: "3.7"
services:
searxng:
container_name: searxng
image: searxng/searxng:latest
restart: unless-stopped
networks:
- tipi_main_network
volumes:
- "${APP_DATA_DIR}/data:/etc/searxng"
ports:
- ${APP_PORT}:8080
environment:
- BIND_ADDRESS=0.0.0.0:8080
- BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
- SECRET_KEY=${SEARXNG_SECRET_KEY}
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.searxng.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.searxng.entrypoints: websecure
traefik.http.routers.searxng.service: searxng
traefik.http.routers.searxng.tls.certresolver: myresolver
traefik.http.services.searxng.loadbalancer.server.port: 8080

View File

@ -0,0 +1,21 @@
## Privacy-respecting, hackable metasearch engine
SearXNG is a free internet metasearch engine which aggregates results from more than 70 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor for online anonymity.
### Differences to searx
SearXNG is a fork of searx. Here are some of the changes:
- User experience
- Huge update of the simple theme:
- usable on desktop, tablet and mobile
- light and dark versions (you can choose in the preferences)
- support right-to-left languages
- the translations are up to date, you can contribute on Weblate
- the preferences page has been updated:
- you can see which engines are reliable or not
- engines are grouped inside each tab
- each engine has a description
- thanks to the anonymous metrics, it is easier to report a bug of an engine and thus engines get fixed more quickly
- if you don't want any metrics to be recorded, you can disable them on the server
- administrator can block and/or replace the URLs in the search results

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

16
apps/send/config.json Normal file
View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "Send",
"available": true,
"exposable": true,
"port": 8126,
"id": "send",
"tipi_version": 1,
"version": "latest",
"categories": ["utilities"],
"description": "A file sharing experiment which allows you to send encrypted files to other users.",
"short_desc": "Simple, private file sharing. https://send.vis.ee/",
"author": "timvisee",
"source": "https://gitlab.com/timvisee/send",
"form_fields": []
}

View File

@ -0,0 +1,46 @@
version: "3.7"
services:
send:
image: registry.gitlab.com/timvisee/send:latest
container_name: send
restart: unless-stopped
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:1443
networks:
- tipi_main_network
volumes:
- ${APP_DATA_DIR}/data/uploads:/uploads
environment:
- NODE_ENV=production
# Networking
- BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}
# Redis
- REDIS_HOST=send-redis
# Storage Limit
- MAX_FILE_SIZE=2147483648
- DETECT_BASE_URL=true
depends_on:
- send-redis
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.send.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.send.entrypoints: websecure
traefik.http.routers.send.service: send
traefik.http.routers.send.tls.certresolver: myresolver
traefik.http.services.send.loadbalancer.server.port: 1443
send-redis:
image: redis:alpine
container_name: send-redis
restart: unless-stopped
volumes:
- ${APP_DATA_DIR}/data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 1s
timeout: 3s
retries: 30
networks:
- tipi_main_network

View File

@ -0,0 +1,29 @@
A fork of Mozilla's [Firefox Send][mozilla-send].
Mozilla discontinued Send, this fork is a community effort to keep the project
up-to-date and alive.
- Forked [at][fork-commit] Mozilla's last publicly hosted version
- _Mozilla_ & _Firefox_ branding [is][remove-branding-pr] removed so you can legally self-host
- Kept compatible with [`ffsend`][ffsend] (CLI for Send)
- Dependencies have been updated
- Mozilla's [changes][mozilla-patches] since the fork have been selectively [merged][mozilla-patches-pr]
- Mozilla's experimental report feature, download tokens, trust warnings and FxA changes are not included
Find an up-to-date Docker image here: [docs/docker.md](docs/docker.md)
The original project by Mozilla can be found [here][mozilla-send].
Please consider to [donate][donate] to allow me to keep working on this.
Thanks [Mozilla][mozilla] for building this amazing tool!
[branch-mozilla-master]: https://gitlab.com/timvisee/send/-/tree/mozilla-master
[branch-send-v3]: https://gitlab.com/timvisee/send/-/tree/send-v3
[branch-send-v4]: https://gitlab.com/timvisee/send/-/tree/send-v4
[donate]: https://timvisee.com/donate
[ffsend]: https://github.com/timvisee/ffsend
[fork-commit]: https://gitlab.com/timvisee/send/-/commit/3e9be676413a6e1baaf6a354c180e91899d10bec
[mozilla-patches-pr]: https://gitlab.com/timvisee/send/-/merge_requests/3
[mozilla-patches]: https://gitlab.com/timvisee/send/-/compare/3e9be676413a6e1baaf6a354c180e91899d10bec...mozilla-master
[mozilla-send]: https://github.com/mozilla/send
[mozilla]: https://mozilla.org/
[remove-branding-pr]: https://gitlab.com/timvisee/send/-/merge_requests/2

BIN
apps/send/metadata/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -7,7 +7,7 @@
"tipi_version": 1,
"version": "1.20",
"categories": ["data", "utilities"],
"description": "Syncthing is a peer-to-peer continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.\n\nInstall the Syncthing app on your Umbrel and pair it with the Syncthing app on your phone or computer for a self hosted peer-to-peer backup solution.",
"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",
"author": "The Syncthing Foundation",
"source": "https://github.com/syncthing",

16
apps/teddit/config.json Normal file
View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "teddit",
"available": true,
"exposable": true,
"port": 8124,
"id": "teddit",
"tipi_version": 1,
"version": "latest",
"categories": ["social"],
"description": "A free and open source alternative Reddit front-end focused on privacy. Inspired by the Nitter project.",
"short_desc": "Alternative Reddit front-end focused on privacy https://teddit.net",
"author": "teddit",
"source": "https://codeberg.org/teddit/teddit",
"form_fields": []
}

View File

@ -0,0 +1,45 @@
version: "3.7"
services:
teddit:
image: teddit/teddit:latest
container_name: teddit
networks:
- tipi_main_network
ports:
- ${APP_PORT}:8080
depends_on:
- teddit-redis
restart: unless-stopped
environment:
- REDIS_HOST=teddit-redis
- DOMAIN=${APP_DOMAIN}
- THEME=dark
- HTTPS_ENABLED=false
- REDIRECT_HTTP_TO_HTTPS=false
- REDIRECT_WWW=false
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost:8080/about"]
interval: 1m
timeout: 3s
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.teddit.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.teddit.entrypoints: websecure
traefik.http.routers.teddit.service: teddit
traefik.http.routers.teddit.tls.certresolver: myresolver
traefik.http.services.teddit.loadbalancer.server.port: 8080
teddit-redis:
image: redis:alpine
container_name: teddit-redis
restart: unless-stopped
volumes:
- ${APP_DATA_DIR}/data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 1s
timeout: 3s
retries: 30
networks:
- tipi_main_network

View File

@ -0,0 +1,17 @@
# teddit
[teddit.net](https://teddit.net)
A free and open source alternative Reddit front-end focused on privacy.
Inspired by the [Nitter](https://github.com/zedeus/nitter) project.
* No JavaScript or ads
* All requests go through the backend, client never talks to Reddit
* Prevents Reddit from tracking your IP or JavaScript fingerprint
* [Unofficial API](https://codeberg.org/teddit/teddit/wiki#teddit-api) (RSS & JSON support, no rate limits or Reddit account required)
* Lightweight (teddit frontpage: ~30 HTTP requests with ~270 KB of data downloaded vs. Reddit frontpage: ~190 requests with ~24 MB)
* Self-hostable. Anyone can setup an instance. An instance can either use Reddit's API with or without OAuth (so Reddit API key is not necessarily needed).
Join the teddit discussion room on Matrix: [#teddit:matrix.org](https://matrix.to/#/#teddit:matrix.org)
XMR: 832ogRwuoSs2JGYg7wJTqshidK7dErgNdfpenQ9dzMghNXQTJRby1xGbqC3gW3GAifRM9E84J91VdMZRjoSJ32nkAZnaCEj

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,41 @@
{
"$schema": "../schema.json",
"name": "Tube Archivist",
"available": true,
"exposable": true,
"port": 8120,
"id": "tubearchivist",
"tipi_version": 1,
"version": "latest",
"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",
"author": "bbilly1",
"source": "https://github.com/tubearchivist/tubearchivist",
"form_fields": [
{
"type": "text",
"label": "Tube Archivist Username",
"max": 50,
"min": 3,
"required": true,
"env_variable": "TA_USER"
},
{
"type": "password",
"label": "Tube Archivist Password",
"max": 50,
"min": 3,
"required": true,
"env_variable": "TA_PASSWORD"
},
{
"type": "random",
"label": "Elasticsearch Password",
"max": 50,
"min": 3,
"required": true,
"env_variable": "ELASTIC_PASSWORD"
}
]
}

View File

@ -0,0 +1,66 @@
version: "3.7"
services:
tubearchivist:
container_name: tubearchivist
restart: unless-stopped
image: bbilly1/tubearchivist:latest
volumes:
- ${APP_DATA_DIR}/data/media:/youtube
- ${APP_DATA_DIR}/data/cache:/cache
environment:
- ES_URL=http://tubearchivist-es:9200
- REDIS_HOST=tubearchivist-redis
- HOST_UID=${UID}
- HOST_GID=${GID}
- TA_USERNAME=${TA_USER}
- TA_PASSWORD=${TA_PASSWORD}
- TA_HOST=${APP_DOMAIN}
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
depends_on:
- tubearchivist-es
- tubearchivist-redis
networks:
- tipi_main_network
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:8000
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.tubearchivist.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.tubearchivist.entrypoints: websecure
traefik.http.routers.tubearchivist.service: tubearchivist
traefik.http.routers.tubearchivist.tls.certresolver: myresolver
traefik.http.services.tubearchivist.loadbalancer.server.port: 8000
tubearchivist-redis:
image: redislabs/rejson:latest
container_name: tubearchivist-redis
restart: always
networks:
- tipi_main_network
volumes:
- ${APP_DATA_DIR}/data/redis-data:/data
depends_on:
- tubearchivist-es
tubearchivist-es:
image: bbilly1/tubearchivist-es:latest
container_name: tubearchivist-es
restart: always
environment:
- "xpack.security.enabled=true"
- "ELASTIC_PASSWORD=${ELASTIC_PASSWORD}"
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- tipi_main_network
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ${APP_DATA_DIR}/data/es:/usr/share/elasticsearch/data
expose:
- "9200"

View File

@ -0,0 +1,21 @@
# Your self-hosted YouTube media server
![Tube Archivist](https://github.com/tubearchivist/tubearchivist/blob/master/assets/tube-archivist-banner.jpg?raw=true "Tube Archivist Banner")
## Core functionality
* Subscribe to your favorite YouTube channels
* Download Videos using **yt-dlp**
* Index and make videos searchable
* Play videos
* Keep track of viewed and unviewed videos
## If you have issues running Tube Archivist
Please visit the following URL and ensure neither of the tips resolve the issue:
https://github.com/tubearchivist/tubearchivist#potential-pitfalls
If they do not, please open an app here and tag @sethforprivacy:
https://github.com/meienberger/runtipi-appstore/issues

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -0,0 +1,16 @@
{
"$schema": "../schema.json",
"name": "Uptime Kuma",
"available": true,
"exposable": true,
"port": 8125,
"id": "uptime-kuma",
"tipi_version": 1,
"version": "1",
"categories": ["utilities"],
"description": "It is a self-hosted monitoring tool like Uptime Robot.",
"short_desc": "A fancy self-hosted monitoring tool.",
"author": "louislam",
"source": "https://github.com/louislam/uptime-kuma",
"form_fields": []
}

View File

@ -0,0 +1,21 @@
version: "3.7"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ${APP_DATA_DIR}/data:/app/data
dns:
- ${DNS_IP}
ports:
- ${APP_PORT}:3001
restart: unless-stopped
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.uptime-kuma.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.uptime-kuma.entrypoints: websecure
traefik.http.routers.uptime-kuma.service: uptime-kuma
traefik.http.routers.uptime-kuma.tls.certresolver: myresolver
traefik.http.services.uptime-kuma.loadbalancer.server.port: 3001

View File

@ -0,0 +1,33 @@
# Uptime Kuma
<div align="center" width="100%">
<img src="https://github.com/louislam/uptime-kuma/raw/master/public/icon.svg" width="128" alt="" />
</div>
It is a self-hosted monitoring tool like "Uptime Robot".
<img src="https://uptime.kuma.pet/img/dark.jpg" width="700" alt="" />
## 🥔 Live Demo
Try it!
https://demo.uptime.kuma.pet
It is a temporary live demo, all data will be deleted after 10 minutes. The server is located in Tokyo, so if you live far from there, it may affect your experience. I suggest that you should install and try it out for the best demo experience.
VPS is sponsored by Uptime Kuma sponsors on [Open Collective](https://opencollective.com/uptime-kuma)! Thank you so much!
## ⭐ Features
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers.
* Fancy, Reactive, Fast UI/UX.
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
* 20 second intervals.
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/languages)
* Multiple Status Pages
* Map Status Page to Domain
* Ping Chart
* Certificate Info
* Proxy Support
* 2FA available

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -2,7 +2,7 @@ version: '3.7'
services:
vaultwarden:
image: vaultwarden/server:1.25.1
image: vaultwarden/server:1.25.2
container_name: vaultwarden
restart: unless-stopped
ports:

26
apps/zerotier/config.json Normal file
View File

@ -0,0 +1,26 @@
{
"$schema": "../schema.json",
"name": "Zerotier",
"available": true,
"port": 9993,
"id": "zerotier",
"tipi_version": 1,
"version": "v1.10.1",
"categories": ["network", "security"],
"description": "ZeroTier combines the capabilities of VPN and SD-WAN, simplifying network management.",
"short_desc": "Easy to use zero configuration VPN.",
"author": "© ZeroTier Inc.",
"source": "https://github.com/zerotier/ZeroTierOne",
"website": "hhttps://www.zerotier.com",
"form_fields": [
{
"type": "text",
"label": "Network ID",
"hint": "Create one at https://my.zerotier.com/",
"max": 16,
"min": 16,
"required": true,
"env_variable": "NETWORK_ID"
}
]
}

View File

@ -0,0 +1,19 @@
version: "3.7"
services:
zerotier:
container_name: zerotier
image: zerotier/zerotier:1.10.1
restart: on-failure
command: "${NETWORK_ID}"
cap_add:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun
healthcheck:
test: ['CMD','true']
network_mode: host
# TO DO: Pass host data to retain zerotier id, or setup a volume. Prefer ~stateless.
# networks:
# - tipi_main_network
# mac_address: ${MAC_ADDRESS}

View File

@ -0,0 +1,10 @@
## Securely Connect Any Device, Anywhere.
ZeroTier combines the capabilities of VPN and SD-WAN, simplifying network management.
Connect team members from anywhere in the world on any device. ZeroTier creates secure networks between on-premise, cloud, desktop, and mobile devices.
Emulates Layer 2 Ethernet with multipath, multicast, and bridging capabilities.
ZeroTiers zero-trust networking solution provides scalable security with 256-bit end-to-end encryption.
Create a ZeroTier network at [https://my.zerotier.com/](https://my.zerotier.com/) and invite your team members to join. Once they accept the invitation, they will be able to access the network from any device, anywhere in the world.
![zt](https://www.zerotier.com/wp-content/uploads/2020/08/ZT_NetworkGraphic_Homepage.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB