Merge branch 'master' into update-readme

This commit is contained in:
Nicolas Meienberger 2022-09-19 08:30:54 +00:00 committed by GitHub
commit 3798be9deb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
50 changed files with 2814 additions and 28 deletions

1
.gitignore vendored
View File

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

View File

@ -48,7 +48,7 @@ This is the official repository for the Tipi App Store. It contains all the apps
- [Syncthing](https://github.com/syncthing/syncthing) - Continuous File Synchronization - [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 - [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 - [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 - [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 - [Transmission](https://github.com/transmission/transmission) - Fast, easy, and free BitTorrent client
- [Tube Archivist](https://github.com/tubearchivist/tubearchivist) - Your self-hosted YouTube media server - [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 - [Uptime Kuma](https://github.com/louislam/uptime-kuma) - A fancy self-hosted monitoring tool

View File

@ -2,10 +2,11 @@
"$schema": "../schema.json", "$schema": "../schema.json",
"name": "Jellyfin", "name": "Jellyfin",
"available": true, "available": true,
"exposable": true,
"port": 8091, "port": 8091,
"id": "jellyfin", "id": "jellyfin",
"tipi_version": 1, "tipi_version": 2,
"version": "10.8.1", "version": "10.8.4",
"categories": ["media"], "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!", "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", "short_desc": "A media server for your home collection",

View File

@ -1,8 +1,7 @@
version: "3.7" version: "3.7"
services: services:
jellyfin: jellyfin:
image: lscr.io/linuxserver/jellyfin:10.8.1 image: lscr.io/linuxserver/jellyfin:10.8.4
container_name: jellyfin container_name: jellyfin
volumes: volumes:
- ${APP_DATA_DIR}/data/config:/config - ${APP_DATA_DIR}/data/config:/config
@ -11,8 +10,32 @@ services:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=${TZ} - TZ=${TZ}
- JELLYFIN_PublishedServerUrl=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
restart: "unless-stopped" restart: "unless-stopped"
ports: ports:
- ${APP_PORT}:8096 - ${APP_PORT}:8096
networks: networks:
- tipi_main_network - 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", "$schema": "../schema.json",
"name": "Joplin Server", "name": "Joplin Server",
"available": true, "available": true,
"exposable": true,
"port": 8099, "port": 8099,
"id": "joplin", "id": "joplin",
"tipi_version": 1, "tipi_version": 2,
"version": "2.7.4", "version": "2.7.4",
"categories": ["utilities"], "categories": ["utilities"],
"description": "Default credentials: admin@localhost / admin", "description": "Default credentials: admin@localhost / admin",
@ -12,5 +13,14 @@
"author": "https://github.com/laurent22", "author": "https://github.com/laurent22",
"source": "https://github.com/laurent22/joplin", "source": "https://github.com/laurent22/joplin",
"website": "https://joplinapp.org", "website": "https://joplinapp.org",
"form_fields": [] "form_fields": [
{
"type": "random",
"label": "Joplin DB password",
"max": 50,
"min": 8,
"required": true,
"env_variable": "JOPLIN_DB_PASSWORD"
}
]
} }

View File

@ -8,7 +8,7 @@ services:
- ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data
restart: unless-stopped restart: unless-stopped
environment: environment:
- POSTGRES_PASSWORD=tipi - POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD}
- POSTGRES_USER=tipi - POSTGRES_USER=tipi
- POSTGRES_DB=joplin - POSTGRES_DB=joplin
networks: networks:
@ -26,9 +26,9 @@ services:
- ${DNS_IP} - ${DNS_IP}
environment: environment:
- APP_PORT=22300 - APP_PORT=22300
- APP_BASE_URL=http://${INTERNAL_IP}:${APP_PORT} - APP_BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}/
- DB_CLIENT=pg - DB_CLIENT=pg
- POSTGRES_PASSWORD=tipi - POSTGRES_PASSWORD=${JOPLIN_DB_PASSWORD}
- POSTGRES_USER=tipi - POSTGRES_USER=tipi
- POSTGRES_DATABASE=joplin - POSTGRES_DATABASE=joplin
- POSTGRES_PORT=5432 - POSTGRES_PORT=5432
@ -36,3 +36,13 @@ services:
- MAX_TIME_DRIFT=0 - MAX_TIME_DRIFT=0
networks: networks:
- tipi_main_network - 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

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

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

View File

@ -52,7 +52,10 @@ services:
- POSTGRES_DB=nextcloud - POSTGRES_DB=nextcloud
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD} - 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: depends_on:
- db-nextcloud - db-nextcloud
- redis-nextcloud - redis-nextcloud
@ -65,4 +68,15 @@ services:
traefik.http.routers.nextcloud.service: nextcloud traefik.http.routers.nextcloud.service: nextcloud
traefik.http.routers.nextcloud.tls.certresolver: myresolver traefik.http.routers.nextcloud.tls.certresolver: myresolver
traefik.http.services.nextcloud.loadbalancer.server.port: 80 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)! 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) ![](https://raw.githubusercontent.com/nextcloud/screenshots/master/files/Files%20Sharing.png)

View File

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

View File

@ -13,8 +13,20 @@ services:
depends_on: depends_on:
- nitter-redis - nitter-redis
restart: unless-stopped 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: nitter-redis:
image: redis:6-alpine image: redis:alpine
container_name: nitter-redis container_name: nitter-redis
networks: networks:
- tipi_main_network - tipi_main_network

View File

@ -3,8 +3,9 @@
"name": "PhotoPrism", "name": "PhotoPrism",
"port": 8110, "port": 8110,
"available": true, "available": true,
"exposable": true,
"id": "photoprism", "id": "photoprism",
"tipi_version": 1, "tipi_version": 2,
"version": "latest", "version": "latest",
"categories": ["photography"], "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", "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, "min": 8,
"required": true, "required": true,
"env_variable": "PHOTOPRISM_ADMIN_PASSWORD" "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" version: "3.7"
services: services:
photoprism: photoprism:
# TODO: Special image for arm/v7 is available # TODO: Special image for arm/v7 is available
@ -12,7 +11,7 @@ services:
- "${APP_PORT}:2342" - "${APP_PORT}:2342"
environment: environment:
PHOTOPRISM_ADMIN_PASSWORD: ${PHOTOPRISM_ADMIN_PASSWORD} 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_ORIGINALS_LIMIT: 5000
PHOTOPRISM_HTTP_COMPRESSION: "gzip" PHOTOPRISM_HTTP_COMPRESSION: "gzip"
PHOTOPRISM_LOG_LEVEL: "info" PHOTOPRISM_LOG_LEVEL: "info"
@ -34,7 +33,7 @@ services:
PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306" PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306"
PHOTOPRISM_DATABASE_NAME: "photoprism" PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "photoprism" PHOTOPRISM_DATABASE_USER: "photoprism"
PHOTOPRISM_DATABASE_PASSWORD: "photoprism" PHOTOPRISM_DATABASE_PASSWORD: "${DB_PASSWORD}"
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
working_dir: "/photoprism" working_dir: "/photoprism"
volumes: volumes:
@ -42,10 +41,17 @@ services:
- "${APP_DATA_DIR}/data/photoprism/storage:/photoprism/storage" - "${APP_DATA_DIR}/data/photoprism/storage:/photoprism/storage"
networks: networks:
- tipi_main_network - 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: photoprism-db:
restart: unless-stopped restart: unless-stopped
image: mariadb:10.8.3 image: mariadb:10.8
container_name: photoprism-db 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 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: volumes:
@ -53,7 +59,7 @@ services:
environment: environment:
MARIADB_DATABASE: "photoprism" MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism" MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "photoprism" MARIADB_PASSWORD: "${DB_PASSWORD}"
MARIADB_ROOT_PASSWORD: "photoprism" MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
networks: networks:
- tipi_main_network - tipi_main_network

View File

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

View File

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

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, "tipi_version": 1,
"version": "1.20", "version": "1.20",
"categories": ["data", "utilities"], "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", "short_desc": "Peer-to-peer file synchronization between your devices",
"author": "The Syncthing Foundation", "author": "The Syncthing Foundation",
"source": "https://github.com/syncthing", "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: services:
vaultwarden: vaultwarden:
image: vaultwarden/server:1.25.1 image: vaultwarden/server:1.25.2
container_name: vaultwarden container_name: vaultwarden
restart: unless-stopped restart: unless-stopped
ports: ports: