From 8377c72d60161fd81670ff5ee9b7b8b37c7968f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9A=D0=BE=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Mon, 8 May 2023 16:17:31 +0300 Subject: [PATCH 01/24] app: Conduit --- README.md | 1 + apps/matrix-conduit/config.json | 54 ++++++++++++ apps/matrix-conduit/docker-compose.yml | 50 +++++++++++ apps/matrix-conduit/metadata/description.md | 82 ++++++++++++++++++ apps/matrix-conduit/metadata/logo.jpg | Bin 0 -> 16476 bytes apps/matrix-conduit/nginx/Dockerfile | 4 + .../matrix-conduit/nginx/matrix.conf.template | 19 ++++ 7 files changed, 210 insertions(+) create mode 100644 apps/matrix-conduit/config.json create mode 100644 apps/matrix-conduit/docker-compose.yml create mode 100644 apps/matrix-conduit/metadata/description.md create mode 100644 apps/matrix-conduit/metadata/logo.jpg create mode 100644 apps/matrix-conduit/nginx/Dockerfile create mode 100644 apps/matrix-conduit/nginx/matrix.conf.template diff --git a/README.md b/README.md index 0cb292d1..f0947919 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Chatpad AI](https://github.com/deiucanta/chatpad) - Not just another ChatGPT user-interface! - [Code-Server](https://github.com/coder/code-server) - Web VS Code - [Codex.Docs](https://github.com/codex-team/codex.docst) - Free Docs app powered by Editor.js ecosystem. +- [Conduit](https://gitlab.com/famedly/conduit) - Conduit is a simple, fast and reliable chat server written in Rust - [DailyTXT](https://github.com/PhiTux/DailyTxT) - Encrypted Diary Web-App - [Dash.](https://github.com/MauriceNino/dashdot) - A simple, modern server dashboard, primarily used by smaller private server - [Deluge](https://github.com/linuxserver/docker-deluge) - Deluge is a lightweight, Free Software, cross-platform BitTorrent client diff --git a/apps/matrix-conduit/config.json b/apps/matrix-conduit/config.json new file mode 100644 index 00000000..4ce82bb4 --- /dev/null +++ b/apps/matrix-conduit/config.json @@ -0,0 +1,54 @@ +{ + "$schema": "../schema.json", + "name": "Conduit", + "port": 6167, + "available": true, + "exposable": true, + "no_gui": true, + "id": "matrix-conduit", + "tipi_version": 1, + "version": "0.5.0", + "categories": ["social"], + "description": "Conduit is a fast Matrix homeserver that’s easy to set up and just works. You can install it on a mini-computer like the Raspberry Pi to host Matrix for your family, friends or company.", + "short_desc": "Conduit is a simple, fast and reliable chat server written in Rust", + "author": "Timo Kösters", + "source": "https://gitlab.com/famedly/conduit", + "website": "https://matrix.org/docs/projects/server/conduit", + "form_fields": [ + { + "type": "boolean", + "label": "Allow Registration", + "hint": "WARNING! First user will be admin", + "required": false, + "env_variable": "ALLOW_REGISTRATION" + }, + { + "type": "boolean", + "label": "Allow Federation", + "required": false, + "env_variable": "ALLOW_FEDERATION" + }, + { + "type": "array", + "label": "Trusted Servers", + "hint": "[\"matrix.org\"]", + "required": false, + "env_variable": "TRUSTED_SERVERS" + }, + { + "type": "number", + "label": "Max request size", + "hint": "In bytes, for example 20000000", + "required": false, + "env_variable": "MAX_REQUEST_SIZE" + }, + { + "type": "text", + "label": "Loggin Level", + "hint": "Available levels: error, warn, info, debug, trace", + "placeholder": "-warn,rocket=off,_=off,sled=off", + "required": false, + "env_variable": "LOG" + } + ] +} diff --git a/apps/matrix-conduit/docker-compose.yml b/apps/matrix-conduit/docker-compose.yml new file mode 100644 index 00000000..51a1cb01 --- /dev/null +++ b/apps/matrix-conduit/docker-compose.yml @@ -0,0 +1,50 @@ +version: "3.7" + +services: + homeserver: + container_name: matrix + image: matrixconduit/matrix-conduit:v0.5.0 + ports: + - ${APP_PORT}:6167 + environment: + CONDUIT_SERVER_NAME: ${APP_DOMAIN} + CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/ + CONDUIT_DATABASE_BACKEND: rocksdb + CONDUIT_PORT: 6167 + CONDUIT_MAX_REQUEST_SIZE: ${MAX_REQUEST_SIZE:-20000000} + CONDUIT_ALLOW_REGISTRATION: ${ALLOW_REGISTRATION:-false} + CONDUIT_ALLOW_FEDERATION: ${ALLOW_FEDERATION:-false} + CONDUIT_TRUSTED_SERVERS: ${TRUSTED_SERVERS:-[]} + CONDUIT_LOG: ${LOG:-warn,rocket=off,_=off,sled=off} + CONDUIT_ADDRESS: 0.0.0.0 + CONDUIT_CONFIG: '' # Ignore this + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data:/var/lib/matrix-conduit/ + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.matrix.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.matrix.entrypoints: websecure + traefik.http.routers.matrix.service: matrix + traefik.http.routers.matrix.tls.certresolver: myresolver + traefik.http.services.matrix.loadbalancer.server.port: 6167 + + well-known: + container_name: matrix-well-known + build: + context: nginx + dockerfile: Dockerfile + environment: + APP_DOMAIN: ${APP_DOMAIN} + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.matrix-well-knows.rule: Host(`${APP_DOMAIN}`) && PathPrefix(`/.well-known/matrix`) + traefik.http.routers.matrix-well-knows.entrypoints: websecure + traefik.http.routers.matrix-well-knows.service: matrix-well-knows + traefik.http.routers.matrix-well-knows.tls.certresolver: myresolver + traefik.http.services.matrix-well-knows.loadbalancer.server.port: 80 diff --git a/apps/matrix-conduit/metadata/description.md b/apps/matrix-conduit/metadata/description.md new file mode 100644 index 00000000..edc1d57d --- /dev/null +++ b/apps/matrix-conduit/metadata/description.md @@ -0,0 +1,82 @@ +# Conduit +### A Matrix homeserver written in Rust + +#### What is Matrix? +[Matrix](https://matrix.org) is an open network for secure and decentralized +communication. Users from every Matrix homeserver can chat with users from all +other Matrix servers. You can even use bridges (also called Matrix appservices) +to communicate with users outside of Matrix, like a community on Discord. + +#### What is the goal? + +An efficient Matrix homeserver that's easy to set up and just works. You can install +it on a mini-computer like the Raspberry Pi to host Matrix for your family, +friends or company. + +#### Can I try it out? + +Yes! You can test our Conduit instance by opening a Matrix client ( or Element Android for +example) and registering on the `conduit.rs` homeserver. + +*Registration is currently disabled because of scammers. For an account please + message us (see contact section below).* + +Server hosting for conduit.rs is donated by the Matrix.org Foundation. + +#### What is the current status? + +Conduit is Beta, meaning you can join and participate in most +Matrix rooms, but not all features are supported and you might run into bugs +from time to time. + +There are still a few important features missing: + +- E2EE emoji comparison over federation (E2EE chat works) +- Outgoing read receipts, typing, presence over federation (incoming works) + +Check out the [Conduit 1.0 Release Milestone](https://gitlab.com/famedly/conduit/-/milestones/3). + +#### How can I deploy my own? + +- Simple install (this was tested the most): [DEPLOY.md](DEPLOY.md) +- Debian package: [debian/README.Debian](debian/README.Debian) +- Nix/NixOS: [nix/README.md](nix/README.md) +- Docker: [docker/README.md](docker/README.md) + +If you want to connect an Appservice to Conduit, take a look at [APPSERVICES.md](APPSERVICES.md). + +#### How can I contribute? + +1. Look for an issue you would like to work on and make sure it's not assigned + to other users +2. Ask someone to assign the issue to you (comment on the issue or chat in + [#conduit:fachschaften.org](https://matrix.to/#/#conduit:fachschaften.org)) +3. Fork the repo and work on the issue.[#conduit:fachschaften.org](https://matrix.to/#/#conduit:fachschaften.org) is happy to help :) +4. Submit a MR + +#### Thanks to + +Thanks to FUTO, Famedly, Prototype Fund (DLR and German BMBF) and all individuals for financially supporting this project. + +Thanks to the contributors to Conduit and all libraries we use, for example: + +- Ruma: A clean library for the Matrix Spec in Rust +- axum: A modular web framework + +#### Contact + +If you run into any question, feel free to +- Ask us in `#conduit:fachschaften.org` on Matrix +- Write an E-Mail to `conduit@koesters.xyz` +- Send an direct message to `timo@fachschaften.org` on Matrix +- [Open an issue on GitLab](https://gitlab.com/famedly/conduit/-/issues/new) + +#### Donate + +Liberapay: \ +Bitcoin: `bc1qnnykf986tw49ur7wx9rpw2tevpsztvar5x8w4n` + +#### Logo + +Lightning Bolt Logo: https://github.com/mozilla/fxemoji/blob/gh-pages/svgs/nature/u26A1-bolt.svg \ +Logo License: https://github.com/mozilla/fxemoji/blob/gh-pages/LICENSE.md \ No newline at end of file diff --git a/apps/matrix-conduit/metadata/logo.jpg b/apps/matrix-conduit/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad3f78a2ba7049c8b8168721485f1e37614bb76f GIT binary patch literal 16476 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 Date: Tue, 9 May 2023 10:19:37 +0300 Subject: [PATCH 02/24] rename services and containers --- apps/matrix-conduit/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/matrix-conduit/docker-compose.yml b/apps/matrix-conduit/docker-compose.yml index 51a1cb01..3fbdda3e 100644 --- a/apps/matrix-conduit/docker-compose.yml +++ b/apps/matrix-conduit/docker-compose.yml @@ -1,8 +1,8 @@ version: "3.7" services: - homeserver: - container_name: matrix + matrix-conduit: + container_name: matrix-conduit image: matrixconduit/matrix-conduit:v0.5.0 ports: - ${APP_PORT}:6167 @@ -31,8 +31,8 @@ services: traefik.http.routers.matrix.tls.certresolver: myresolver traefik.http.services.matrix.loadbalancer.server.port: 6167 - well-known: - container_name: matrix-well-known + matrix-conduit-well-known: + container_name: matrix-conduit-well-known build: context: nginx dockerfile: Dockerfile From 9af0ee646b290a54988b78dd1d219ebab2448980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9A=D0=BE=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Tue, 9 May 2023 10:20:17 +0300 Subject: [PATCH 03/24] add trusted_servers regex --- apps/matrix-conduit/config.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/matrix-conduit/config.json b/apps/matrix-conduit/config.json index 4ce82bb4..e5ab89eb 100644 --- a/apps/matrix-conduit/config.json +++ b/apps/matrix-conduit/config.json @@ -32,6 +32,8 @@ "type": "array", "label": "Trusted Servers", "hint": "[\"matrix.org\"]", + "regex": "^\\[((\"[^\"]*\")(, ?(\"[^\"]*\"))*)?\\]$", + "pattern_error": "Must be in list of domain names format", "required": false, "env_variable": "TRUSTED_SERVERS" }, From 6d4b204e92a40cf16b089d26fb933f3b7517e651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9A=D0=BE=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Wed, 10 May 2023 12:16:45 +0300 Subject: [PATCH 04/24] Conduit: add force_expose --- apps/matrix-conduit/config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/matrix-conduit/config.json b/apps/matrix-conduit/config.json index e5ab89eb..df2872ea 100644 --- a/apps/matrix-conduit/config.json +++ b/apps/matrix-conduit/config.json @@ -4,6 +4,7 @@ "port": 6167, "available": true, "exposable": true, + "force_expose": true, "no_gui": true, "id": "matrix-conduit", "tipi_version": 1, From 91144e8758733655fb1e60aba3445cb92bd33ab7 Mon Sep 17 00:00:00 2001 From: Sascha Claren Date: Tue, 9 May 2023 11:18:27 +0000 Subject: [PATCH 05/24] Added Doozle Docker Log monitoring --- apps/dozzle/config.json | 18 ++++++++++++++++++ apps/dozzle/docker-compose.yml | 19 +++++++++++++++++++ apps/dozzle/metadata/description.md | 16 ++++++++++++++++ apps/dozzle/metadata/logo.jpg | Bin 0 -> 46164 bytes 4 files changed, 53 insertions(+) create mode 100644 apps/dozzle/config.json create mode 100644 apps/dozzle/docker-compose.yml create mode 100644 apps/dozzle/metadata/description.md create mode 100644 apps/dozzle/metadata/logo.jpg diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json new file mode 100644 index 00000000..835de63a --- /dev/null +++ b/apps/dozzle/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Dozzle", + "available": true, + "exposable": true, + "port": 8013, + "id": "dozzle", + "tipi_version": 1, + "version": "latest", + "categories": [ + "development" + ], + "description": "Dozzle is a small web based app to monior Docker logs.", + "short_desc": "Dozzle is a small web based app to monior Docker logs", + "author": "Amir Raminfar", + "source": "https://github.com/amir20/dozzle", + "form_fields": [] +} diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml new file mode 100644 index 00000000..d5f956c8 --- /dev/null +++ b/apps/dozzle/docker-compose.yml @@ -0,0 +1,19 @@ +version: "3" +services: + dozzle: + container_name: dozzle + image: amir20/dozzle:latest + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ports: + - ${APP_PORT}:8080 + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.hdozzle.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.dozzle.entrypoints: websecure + traefik.http.routers.dozzle.service: dozzle + traefik.http.routers.dozzle.tls.certresolver: myresolver + traefik.http.services.dozzle.loadbalancer.server.port: 8080 diff --git a/apps/dozzle/metadata/description.md b/apps/dozzle/metadata/description.md new file mode 100644 index 00000000..4d8abf45 --- /dev/null +++ b/apps/dozzle/metadata/description.md @@ -0,0 +1,16 @@ +# Doozle + +Dozzle is a small lightweight application with a web based interface to monitor Docker logs. It doesn’t store any log files. It is for live monitoring of your container logs only. + + +## Features + +- Intelligent fuzzy search for container names 🤖 +- Search logs using regex 🔦 +- Small memory footprint 🏎 +- Split screen for viewing multiple logs +- Download logs easy +- Live stats with memory and CPU usage +- Authentication with username and password 🚨 + +https://github.com/amir20/dozzle \ No newline at end of file diff --git a/apps/dozzle/metadata/logo.jpg b/apps/dozzle/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81dea48e25dfa6c05dc313abfe64c2ce4f461a40 GIT binary patch literal 46164 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 SQJMJO_5tryc>ZMke-i*&$kUqu literal 0 HcmV?d00001 From dceb5ffdcab6af1feedf2215a75979c77c292ff8 Mon Sep 17 00:00:00 2001 From: Sascha Claren Date: Tue, 9 May 2023 11:25:40 +0000 Subject: [PATCH 06/24] Fixed issue in traefik router --- apps/dozzle/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index d5f956c8..b60d35a1 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -12,7 +12,7 @@ services: - tipi_main_network labels: traefik.enable: ${APP_EXPOSED} - traefik.http.routers.hdozzle.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.dozzle.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.dozzle.entrypoints: websecure traefik.http.routers.dozzle.service: dozzle traefik.http.routers.dozzle.tls.certresolver: myresolver From 8b8eab92f703d65a968253d98908566298c146a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 May 2023 10:19:21 -0400 Subject: [PATCH 07/24] chore(deps): update lscr.io/linuxserver/jackett docker tag to v0.20.4119 (#486) * chore(deps): update lscr.io/linuxserver/jackett docker tag to v0.20.4119 * Update app version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-action update-app-version --- apps/jackett/config.json | 4 ++-- apps/jackett/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/jackett/config.json b/apps/jackett/config.json index 7cfa970a..943d73f7 100644 --- a/apps/jackett/config.json +++ b/apps/jackett/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8097, "id": "jackett", - "tipi_version": 20, - "version": "0.20.4105", + "tipi_version": 21, + "version": "0.20.4119", "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr, SickRage, CouchPotato, Mylar3, Lidarr, DuckieTV, qBittorrent, Nefarious etc.) into tracker-site-specific http queries, parses the html or json response, and then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches.", "short_desc": "API Support for your favorite torrent trackers ", "categories": [ diff --git a/apps/jackett/docker-compose.yml b/apps/jackett/docker-compose.yml index e763f4bc..e93a3937 100644 --- a/apps/jackett/docker-compose.yml +++ b/apps/jackett/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jackett: - image: lscr.io/linuxserver/jackett:0.20.4105 + image: lscr.io/linuxserver/jackett:0.20.4119 container_name: jackett environment: - PUID=1000 From 32dee49cfa1bf08b001c1ecb40fc0e3ae8fbdace Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com> Date: Mon, 8 May 2023 16:19:38 +0200 Subject: [PATCH 08/24] chore: small updates to categories and fields (#485) * chore(chatpad, chatgpt): change category to ai * chore(dailytxt): use boolean value for env variable * chore(deluge): change download folder following trash's guide * chore(deluge): change download folder following trash's guide --------- Co-authored-by: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> --- apps/chatgpt-ui/config.json | 4 ++-- apps/chatpad/config.json | 6 ++++-- apps/dailytxt/config.json | 11 +++++++---- apps/deluge/docker-compose.yml | 2 +- apps/deluge/metadata/description.md | 2 +- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/chatgpt-ui/config.json b/apps/chatgpt-ui/config.json index 0351b13e..1bf67c23 100644 --- a/apps/chatgpt-ui/config.json +++ b/apps/chatgpt-ui/config.json @@ -5,10 +5,10 @@ "available": true, "exposable": true, "id": "chatgpt-ui", - "tipi_version": 6, + "tipi_version": 7, "version": "2.5.4", "categories": [ - "utilities" + "ai" ], "description": "A ChatGPT web client that supports multiple users, multiple languages, and multiple database connections for persistent data storage", "short_desc": "A ChatGPT web client that supports multiple users, multiple languages, and multiple database connections for persistent data storage", diff --git a/apps/chatpad/config.json b/apps/chatpad/config.json index 21416e21..1f46fbdb 100644 --- a/apps/chatpad/config.json +++ b/apps/chatpad/config.json @@ -5,9 +5,11 @@ "exposable": true, "port": 8179, "id": "chatpad", - "tipi_version": 1, + "tipi_version": 2, "version": "latest", - "categories": ["utilities"], + "categories": [ + "ai" + ], "description": "Not just another ChatGPT user-interface!", "short_desc": "Not just another ChatGPT user-interface!", "author": "Andrei Canta", diff --git a/apps/dailytxt/config.json b/apps/dailytxt/config.json index e43ecb4c..2c04ade1 100644 --- a/apps/dailytxt/config.json +++ b/apps/dailytxt/config.json @@ -5,9 +5,11 @@ "available": true, "exposable": true, "id": "dailytxt", - "tipi_version": 1, + "tipi_version": 2, "version": "1.0.12", - "categories": ["utilities"], + "categories": [ + "utilities" + ], "description": "DailyTxT is an encrypted Diary Web-App to write down your stories of the day and to find them again easily.", "short_desc": "Encrypted Diary Web-App", "author": "PhiTux", @@ -20,11 +22,12 @@ "env_variable": "DAILYTXT_SECRET_KEY" }, { - "type": "text", + "type": "boolean", "label": "Allow User Registrastion", - "hint": "Set it to false to disallow registration of new users.", + "hint": "Set it to true intially to create the first user.", "placeholder": "true", "required": true, + "default": true, "env_variable": "DAILYTXT_ALLOW_REGISTRATION" } ] diff --git a/apps/deluge/docker-compose.yml b/apps/deluge/docker-compose.yml index ff89e62f..0c9bef55 100644 --- a/apps/deluge/docker-compose.yml +++ b/apps/deluge/docker-compose.yml @@ -10,7 +10,7 @@ services: - DELUGE_LOGLEVEL=error #optional volumes: - ${APP_DATA_DIR}/data/deluge/config:/config - - ${ROOT_FOLDER_HOST}/media/torrents:/downloads + - ${ROOT_FOLDER_HOST}/media/torrents:/media/torrents ports: - ${APP_PORT}:8112 - 6881:6881 diff --git a/apps/deluge/metadata/description.md b/apps/deluge/metadata/description.md index c5f2e442..1c7236a5 100644 --- a/apps/deluge/metadata/description.md +++ b/apps/deluge/metadata/description.md @@ -10,7 +10,7 @@ Password: deluge | Root Folder | Container Folder | |----------------------------------------------|------------------| | /runtipi/app-data/deluge/data/deluge/config | /config | -| /runtipi/media/torrents | /downloads | +| /runtipi/media/torrents | /media/torrents | --- From 74b88ea3e129d95ca65bee9e4880f3fe83eeeb57 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Mon, 8 May 2023 14:38:05 -0400 Subject: [PATCH 09/24] Add Filestash (#474) * Add Filestash * Update config.json --- README.md | 1 + apps/filestash/config.json | 35 ++++++++++++ apps/filestash/docker-compose.yml | 35 ++++++++++++ apps/filestash/metadata/description.md | 76 +++++++++++++++++++++++++ apps/filestash/metadata/logo.jpg | Bin 0 -> 47492 bytes 5 files changed, 147 insertions(+) create mode 100644 apps/filestash/config.json create mode 100644 apps/filestash/docker-compose.yml create mode 100644 apps/filestash/metadata/description.md create mode 100644 apps/filestash/metadata/logo.jpg diff --git a/README.md b/README.md index f0947919..f6e836d3 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Emulatorjs](https://github.com/EmulatorJS/EmulatorJS) - Self-hosted Javascript emulation for various system. - [Excalidraw](https://github.com/excalidraw/excalidraw) - Online whiteboard collaboration made easy - [Filebrowser](https://github.com/filebrowser/filebrowser) - Web File Browser +- [Filestash](https://github.com/mickael-kerjean/filestash) - A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze - [Firefly III](https://github.com/firefly-iii/firefly-iii) - A personal finances manager - [Fireshare](https://github.com/ShaneIsrael/fireshare) - Self host your media and share with unique links - [Flatnotes](https://github.com/Dullage/flatnotes) - A self-hosted, database-less note taking web app diff --git a/apps/filestash/config.json b/apps/filestash/config.json new file mode 100644 index 00000000..4a77cc34 --- /dev/null +++ b/apps/filestash/config.json @@ -0,0 +1,35 @@ +{ + "$schema": "../schema.json", + "name": "Filestash", + "port": 8189, + "available": true, + "exposable": true, + "id": "filestash", + "tipi_version": 1, + "version": "397fd8b", + "categories": ["utilities"], + "description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze", + "short_desc": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze", + "author": "mickael-kerjean", + "source": "https://github.com/mickael-kerjean/filestash", + "form_fields": [ + { + "type": "text", + "label": "(Optional) Google Drive Client ID", + "required": false, + "env_variable": "FILESTASH_GDRIVE_CLIENT_ID" + }, + { + "type": "text", + "label": "(Optional) Google Drive Client Secret", + "required": false, + "env_variable": "FILESTASH_GDRIVE_CLIENT_SECRET" + }, + { + "type": "text", + "label": "(Optional) Dropbox Client ID", + "required": false, + "env_variable": "FILESTASH_DROPBOX_CLIENT_ID" + } + ] +} diff --git a/apps/filestash/docker-compose.yml b/apps/filestash/docker-compose.yml new file mode 100644 index 00000000..250bbdff --- /dev/null +++ b/apps/filestash/docker-compose.yml @@ -0,0 +1,35 @@ +version: '2' +services: + filestash: + container_name: filestash + image: machines/filestash:397fd8b + restart: unless-stopped + environment: + - APPLICATION_URL=${APP_DOMAIN} + - GDRIVE_CLIENT_ID=${FILESTASH_GDRIVE_CLIENT_ID} + - GDRIVE_CLIENT_SECRET=${FILESTASH_GDRIVE_CLIENT_SECRET} + - DROPBOX_CLIENT_ID=${FILESTASH_DROPBOX_CLIENT_ID} + - ONLYOFFICE_URL=http://filestash-onlyoffice + ports: + - ${APP_PORT}:8334 + depends_on: + - filestash-onlyoffice + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.filestash.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.filestash.entrypoints: websecure + traefik.http.routers.filestash.service: filestash + traefik.http.routers.filestash.tls.certresolver: myresolver + traefik.http.services.filestash.loadbalancer.server.port: 8334 + + filestash-onlyoffice: + container_name: filestash_oods + image: onlyoffice/documentserver:7.3.3.50 + restart: unless-stopped + security_opt: + - seccomp:unconfined + networks: + - tipi_main_network + diff --git a/apps/filestash/metadata/description.md b/apps/filestash/metadata/description.md new file mode 100644 index 00000000..36f516b4 --- /dev/null +++ b/apps/filestash/metadata/description.md @@ -0,0 +1,76 @@ +## Configure the Dropbox connector + +Configuring Dropbox must be done by: + +1. requesting access to the Dropbox API. Without this, Filestash can’t access anything stored on the Dropbox servers. To do that, go [there](https://www.dropbox.com/developers/apps/), then: + - click: “Create App” + - select: “dropbox api” + - select: “Full Dropbox” or “App folder” + - type: “whatever name you want” + - in the ‘redirect URI’ field, insert https://example.com/login +2. store the `client_id` configuration given by Dropbox (also known as the `App key`) in the admin console or by setting the `DROPBOX_CLIENT_ID` environment variable + +## Configure the Google Drive connector + +Configuring Google drive can be done by: + +1. Requesting access to the Google Drive API. Without this, Filestash cannot store anything on Google’s servers. To do that, you need to [go there](https://console.developers.google.com/apis/api/drive.googleapis.com/overview) and enable the Drive API. Then, go [there](https://console.developers.google.com/apis/credentials/oauthclient) and create credentials that Filestash will be using to communicate with Google +2. Publish the configuration provided by Google (`client_id` and `client_secret`) in your Filestash admin console or by setting the `GDRIVE_CLIENT_ID` and `GDRIVE_CLIENT_SECRET` environment variables + +--- + +[![screenshot](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/photo.jpg)](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/photo.jpg) + + [![](https://camo.githubusercontent.com/189498ada91da90bbdb4744c08cc65e8967890ff749389ddec490402333890e8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6d69636b61656c2d6b65726a65616e2f66696c657374617368)](https://github.com/mickael-kerjean/contributors)[![](https://camo.githubusercontent.com/437c9de456499e8dda9d0ec3a4477b6b75655dc94d19986e17810fe0098781bc/68747470733a2f2f696d672e736869656c64732e696f2f6f70656e636f6c6c6563746976652f6261636b6572732f66696c657374617368) ](https://opencollective.com/filestash)[![](https://camo.githubusercontent.com/e8018d8ef35a1fd24b3740ca55507ac58f58b20be2a676f59f44ac08cb7ed780/68747470733a2f2f696d672e736869656c64732e696f2f6f70656e636f6c6c6563746976652f73706f6e736f72732f66696c657374617368) ](https://opencollective.com/filestash)[![](https://camo.githubusercontent.com/53f6b0e53320b9f7669819bc0bb281ea1a3d4a648c3611a7a669dbd1b58da7aa/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6d616368696e65732f66696c657374617368)](https://hub.docker.com/r/machines/filestash) + [![](https://github.com/mickael-kerjean/filestash/actions/workflows/ci.yml/badge.svg)](https://github.com/mickael-kerjean/filestash#)[![](https://camo.githubusercontent.com/bc51a239b32cd20f21e82567ceb3d68a589ba2a61c38d1138ee9ad3eb160950a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4952432d25323366696c6573746173682d627269676874677265656e2e737667)](https://kiwiirc.com/nextclient/#irc://irc.libera.chat/#filestash?nick=guest??) + +A Dropbox-like file manager that let you manage your data anywhere it is located: +[FTP](https://www.filestash.app/ftp-client.html) • FTPS • [SFTP](https://www.filestash.app/ssh-file-transfer.html) • [WebDAV](https://www.filestash.app/webdav-client.html) • Git • [S3](https://www.filestash.app/s3-browser.html) • NFS • Samba • Artifactory • [LDAP](https://www.filestash.app/ldap-browser.html) • Mysql +Storj • CardDAV • CalDAV • Backblaze B2 • [Minio](https://www.filestash.app/s3-browser.html) +Dropbox • Google Drive + +# [](https://github.com/mickael-kerjean/filestash#features)Features + +- Manage your files from a browser +- Authentication middleware to connect to various source of user +- Flexible Share mechanism +- Chromecast support for images, music, and videos +- Video player +- Video transcoding (mov, mkv, avi, mpeg, and more) +- Image viewer +- Image transcoding (raw images from Nikon, Canon, and more) +- Photo management +- Audio player +- Shared links are full fledge network drive +- Office documents (docx, xlsx and more) +- Full org mode client ([documentation](https://www.filestash.app/2018/05/31/release-note-v0.1/)) +- User friendly +- Mobile friendly +- Customisable +- Plugins +- Super fast +- Upload files and folders +- Download as zip +- Multiple cloud providers and protocols, easily extensible +- Nyan cat loader +- Quick access: frequently access folders are pin to the homepage +- Emacs, VIM or Sublime keybindings `;)` +- Search +- .. and many more + +# Documentation + +- [Getting started](https://www.filestash.app/docs/) +- [Installation](https://www.filestash.app/docs/install-and-upgrade/) +- [FAQ](https://www.filestash.app/docs/faq/) + +# Screenshots + + [![user experience on navigation](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/navigation.gif)](https://demo.filestash.app)[![user experience on navigation](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/navigation.gif) + +](https://demo.filestash.app/)[](https://demo.filestash.app/) + + [![user experience on medias](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/photo_management.gif)](http://demo.filestash.app)[![user experience on medias](https://raw.githubusercontent.com/mickael-kerjean/filestash_images/master/.assets/photo_management.gif) + +](http://demo.filestash.app/)[](http://demo.filestash.app/) +\ \ No newline at end of file diff --git a/apps/filestash/metadata/logo.jpg b/apps/filestash/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30248e2e3e80cb844ae30b3c66129a48f5b6282e GIT binary patch literal 47492 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 Date: Mon, 8 May 2023 14:38:43 -0400 Subject: [PATCH 10/24] Add Plausible (#475) * Add Plausible Analytics * Update config.json * Update docker-compose.yml * Update docker-compose.yml * Update docker-compose.yml * Update docker-compose.yml * Update Secret Key * Remove User Registration, Done Via UI * Update docker-compose.yml * Update docker-compose.yml * Update config.json --- README.md | 1 + apps/plausible/config.json | 37 ++++++++++++ .../data/clickhouse/clickhouse-config.xml | 16 +++++ .../clickhouse/clickhouse-user-config.xml | 8 +++ apps/plausible/docker-compose.yml | 56 ++++++++++++++++++ apps/plausible/metadata/description.md | 25 ++++++++ apps/plausible/metadata/logo.jpg | Bin 0 -> 6502 bytes 7 files changed, 143 insertions(+) create mode 100644 apps/plausible/config.json create mode 100644 apps/plausible/data/clickhouse/clickhouse-config.xml create mode 100644 apps/plausible/data/clickhouse/clickhouse-user-config.xml create mode 100644 apps/plausible/docker-compose.yml create mode 100644 apps/plausible/metadata/description.md create mode 100644 apps/plausible/metadata/logo.jpg diff --git a/README.md b/README.md index f6e836d3..416903f8 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Peppermint](https://github.com/Peppermint-Lab/peppermint) - An open source ticket management & help desk solution. - [Photoprism](https://github.com/photoprism/photoprism) - AI-Powered Photos App for the Decentralized Web. We are on a mission to protect your freedom and privacy. - [Pihole](https://github.com/pi-hole/pi-hole) - A black hole for Internet advertisements +- [Plausible](https://github.com/plausible/analytics) - Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics. - [Plex](https://github.com/plexinc/pms-docker) - Stream Movies & TV Shows - [PodFetch](https://github.com/SamTV12345/PodFetch) - A sleek and efficient podcast downloader. - [Portainer](https://github.com/portainer/portainer) - Making Docker and Kubernetes management easy. diff --git a/apps/plausible/config.json b/apps/plausible/config.json new file mode 100644 index 00000000..afbc7968 --- /dev/null +++ b/apps/plausible/config.json @@ -0,0 +1,37 @@ +{ + "$schema": "../schema.json", + "name": "Plausible", + "port": 8190, + "available": true, + "exposable": true, + "id": "plausible", + "tipi_version": 1, + "version": "v1.5.1", + "categories": ["utilities"], + "description": "Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.", + "short_desc": "Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.", + "author": "Plausible", + "source": "https://github.com/plausible/analytics", + "form_fields": [ + { + "type": "random", + "label": "Plausible Secret Key", + "min": 64, + "env_variable": "PLAUSIBLE_SECRET_KEY_BASE" + }, + { + "type": "random", + "label": "Plausible DB Key", + "min": 32, + "env_variable": "PLAUSIBLE_DB_PASSWORD" + }, + { + "type": "boolean", + "label": "Disable User Registration", + "hint": "Check to enable Registration", + "default": "true", + "required": true, + "env_variable": "PLAUSIBLE_DISABLE_REGISTRATION" + } + ] +} diff --git a/apps/plausible/data/clickhouse/clickhouse-config.xml b/apps/plausible/data/clickhouse/clickhouse-config.xml new file mode 100644 index 00000000..dc1e36b7 --- /dev/null +++ b/apps/plausible/data/clickhouse/clickhouse-config.xml @@ -0,0 +1,16 @@ + + + warning + true + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/plausible/data/clickhouse/clickhouse-user-config.xml b/apps/plausible/data/clickhouse/clickhouse-user-config.xml new file mode 100644 index 00000000..ae6a6b94 --- /dev/null +++ b/apps/plausible/data/clickhouse/clickhouse-user-config.xml @@ -0,0 +1,8 @@ + + + + 0 + 0 + + + \ No newline at end of file diff --git a/apps/plausible/docker-compose.yml b/apps/plausible/docker-compose.yml new file mode 100644 index 00000000..b566b5ba --- /dev/null +++ b/apps/plausible/docker-compose.yml @@ -0,0 +1,56 @@ +version: "3.7" +services: + plausible-db: + # supported versions are 12, 13, and 14 + image: postgres:14-alpine + container_name: plausible-db + restart: always + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/database/:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${PLAUSIBLE_DB_PASSWORD} + - POSTGRES_USER=tipi + - POSTGRES_DB=plausible-db + + plausible-events-db: + container_name: plausible-events-db + image: clickhouse/clickhouse-server:22.6-alpine + restart: always + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/plausible-event-data:/var/lib/clickhouse + - ${APP_DATA_DIR}/data/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro + - ${APP_DATA_DIR}/data/clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro + ulimits: + nofile: + soft: 262144 + hard: 262144 + + plausible: + container_name: plausible + image: plausible/analytics:v1.5.1 + restart: always + command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /entrypoint.sh run" + depends_on: + - plausible-db + - plausible-events-db + ports: + - ${APP_PORT}:8000 + environment: + - BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - SECRET_KEY_BASE=${PLAUSIBLE_SECRET_KEY_BASE} + - DATABASE_URL=postgres://tipi:${PLAUSIBLE_DB_PASSWORD}@plausible-db:5432/plausible-db + - CLICKHOUSE_DATABASE_URL=http://plausible-events-db:8123/plausible_events_db + - DISABLE_REGISTRATION=${PLAUSIBLE_DISABLE_REGISTRATION} + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.plausible.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.plausible.entrypoints: websecure + traefik.http.routers.plausible.service: plausible + traefik.http.routers.plausible.tls.certresolver: myresolver + traefik.http.services.plausible.loadbalancer.server.port: 8000 diff --git a/apps/plausible/metadata/description.md b/apps/plausible/metadata/description.md new file mode 100644 index 00000000..3e243be7 --- /dev/null +++ b/apps/plausible/metadata/description.md @@ -0,0 +1,25 @@ +[![Plausible Analytics](https://raw.githubusercontent.com/plausible/docs/master/static/img/plausible-analytics-icon-top.png)](https://plausible.io/) + +[Simple Metrics](https://plausible.io/simple-web-analytics) | [Lightweight Script](https://plausible.io/lightweight-web-analytics) | [Privacy Focused](https://plausible.io/privacy-focused-web-analytics) | [Open Source](https://plausible.io/open-source-website-analytics) | [Docs](https://plausible.io/docs) | [Contributing](https://github.com/plausible/analytics/blob/master/CONTRIBUTING.md) + + +[Plausible Analytics](https://plausible.io/) is a simple, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host or have us run Plausible for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺 + +We are dedicated to making web analytics more privacy-friendly. Our mission is to reduce corporate surveillance by providing an alternative web analytics tool which doesn’t come from the AdTech world. We are completely independent and solely funded by our subscribers. + +[![Plausible Analytics](https://camo.githubusercontent.com/74a68bf1e55052517b1eab2e7ec8fb12a2f065e5cd6f12dd2a5002f6dcdc0d82/68747470733a2f2f706c61757369626c652e696f2f646f63732f696d672f706c61757369626c652d616e616c79746963732e706e67)](https://camo.githubusercontent.com/74a68bf1e55052517b1eab2e7ec8fb12a2f065e5cd6f12dd2a5002f6dcdc0d82/68747470733a2f2f706c61757369626c652e696f2f646f63732f696d672f706c61757369626c652d616e616c79746963732e706e67) + +## Why Plausible? + +Here's what makes Plausible a great Google Analytics alternative and why we're trusted by thousands of paying subscribers to deliver their website and business insights: + +- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary. +- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy) +- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. +- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications. +- **Open website stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. +- **Define key goals and track conversions**: Set custom events or page URLs as your goals and see how they convert over time to understand and identify the trends that matter. Includes easy ways to track outbound link clicks and 404 error pages. +- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords. +- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing). + +Interested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs). \ No newline at end of file diff --git a/apps/plausible/metadata/logo.jpg b/apps/plausible/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27bf655b92736e26ef1841742a1ea7061b0c21f8 GIT binary patch literal 6502 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 literal 0 HcmV?d00001 From ccc26f331deb39fa8e9952dbd2b03d5b2779cd4d Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Tue, 9 May 2023 02:28:34 -0400 Subject: [PATCH 11/24] Add Clickhouse to Ignore Deps (#493) --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index d2aba4b5..c753344e 100644 --- a/renovate.json +++ b/renovate.json @@ -23,7 +23,7 @@ ], "packageRules": [{ "managers": ["docker-compose", "dockerfile"], - "packagePatterns": ["^([^\\/]+\\/)?(mysql|mariadb|mongodb|mongo|postgres|redis)(:|$)"], + "packagePatterns": ["^([^\\/]+\\/)?(mysql|mariadb|mongodb|mongo|postgres|redis|clickhouse-server|clickhouse)(:|$)"], "enabled": false }] } From fc300ae30a760ce5b823a93391f9334ded06ba1a Mon Sep 17 00:00:00 2001 From: Sascha Claren Date: Tue, 9 May 2023 11:30:22 +0000 Subject: [PATCH 12/24] updated version --- apps/dozzle/docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index b60d35a1..488518e3 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3" +version: "3.9" services: dozzle: container_name: dozzle @@ -17,3 +17,4 @@ services: traefik.http.routers.dozzle.service: dozzle traefik.http.routers.dozzle.tls.certresolver: myresolver traefik.http.services.dozzle.loadbalancer.server.port: 8080 + From 46cfc9059dfc8722a6e3082531a7fbed65a07f4e Mon Sep 17 00:00:00 2001 From: Sascha Claren Date: Tue, 9 May 2023 11:32:24 +0000 Subject: [PATCH 13/24] Updated description --- apps/dozzle/metadata/description.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/dozzle/metadata/description.md b/apps/dozzle/metadata/description.md index 4d8abf45..744fb7ae 100644 --- a/apps/dozzle/metadata/description.md +++ b/apps/dozzle/metadata/description.md @@ -2,6 +2,7 @@ Dozzle is a small lightweight application with a web based interface to monitor Docker logs. It doesn’t store any log files. It is for live monitoring of your container logs only. +![Screenshot](https://github.com/amir20/dozzle/blob/master/docs/.vitepress/theme/media/poster.jpg?raw=true) ## Features From 121fbf78ee2fdd4c639afea2d3abfaba85ee3543 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Tue, 9 May 2023 08:33:59 -0400 Subject: [PATCH 14/24] Update Immich to v1.55.0 (#498) --- apps/immich/config.json | 4 ++-- apps/immich/docker-compose.yml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/immich/config.json b/apps/immich/config.json index b5e459f0..3e43f02c 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 5, - "version": "v1.54.1", + "tipi_version": 6, + "version": "v1.55.0", "categories": ["data", "photography"], "description": "Photo and video backup solution directly from your mobile phone.", "short_desc": "Photo and video backup solution directly from your mobile phone.", diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index a78b6e20..4c23de82 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: immich: container_name: immich - image: altran1502/immich-proxy:v1.54.1 + image: altran1502/immich-proxy:v1.55.0 ports: - ${APP_PORT}:8080 depends_on: @@ -25,7 +25,7 @@ services: immich-server: container_name: immich-server - image: altran1502/immich-server:v1.54.1 + image: altran1502/immich-server:v1.55.0 entrypoint: ["/bin/sh", "./start-server.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -50,7 +50,7 @@ services: immich-microservices: container_name: immich-microservices - image: altran1502/immich-server:v1.54.1 + image: altran1502/immich-server:v1.55.0 entrypoint: ["/bin/sh", "./start-microservices.sh"] volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload @@ -75,7 +75,7 @@ services: immich-machine-learning: container_name: immich-machine-learning - image: altran1502/immich-machine-learning:v1.54.1 + image: altran1502/immich-machine-learning:v1.55.0 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache @@ -96,7 +96,7 @@ services: immich-web: container_name: immich-web - image: altran1502/immich-web:v1.54.1 + image: altran1502/immich-web:v1.55.0 entrypoint: ["/bin/sh", "./entrypoint.sh"] restart: unless-stopped networks: From 86c7fd7328aad51efa86f7dbbc6040122effbfe5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 08:37:59 -0400 Subject: [PATCH 15/24] chore(deps): update lscr.io/linuxserver/plex docker tag to v1.32.1 (#489) * chore(deps): update lscr.io/linuxserver/plex docker tag to v1.32.1 * Update app version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-action update-app-version --- apps/plex/config.json | 4 ++-- apps/plex/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/plex/config.json b/apps/plex/config.json index 05157469..44ec03fe 100644 --- a/apps/plex/config.json +++ b/apps/plex/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 32400, "id": "plex", - "tipi_version": 14, - "version": "1.32.0", + "tipi_version": 15, + "version": "1.32.1", "url_suffix": "/web", "categories": [ "media" diff --git a/apps/plex/docker-compose.yml b/apps/plex/docker-compose.yml index 2f245a75..98c8800b 100644 --- a/apps/plex/docker-compose.yml +++ b/apps/plex/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: plex: - image: lscr.io/linuxserver/plex:1.32.0 + image: lscr.io/linuxserver/plex:1.32.1 container_name: plex network_mode: host environment: From 8d8f113dad44b852e3450216f062ca3c736188e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 08:57:15 -0400 Subject: [PATCH 16/24] chore(deps): update lscr.io/linuxserver/jackett docker tag to v0.20.4125 (#499) * chore(deps): update lscr.io/linuxserver/jackett docker tag to v0.20.4125 * Update app version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-action update-app-version --- apps/jackett/config.json | 4 ++-- apps/jackett/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/jackett/config.json b/apps/jackett/config.json index 943d73f7..62d16f38 100644 --- a/apps/jackett/config.json +++ b/apps/jackett/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8097, "id": "jackett", - "tipi_version": 21, - "version": "0.20.4119", + "tipi_version": 22, + "version": "0.20.4125", "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr, SickRage, CouchPotato, Mylar3, Lidarr, DuckieTV, qBittorrent, Nefarious etc.) into tracker-site-specific http queries, parses the html or json response, and then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches.", "short_desc": "API Support for your favorite torrent trackers ", "categories": [ diff --git a/apps/jackett/docker-compose.yml b/apps/jackett/docker-compose.yml index e93a3937..2b88aef8 100644 --- a/apps/jackett/docker-compose.yml +++ b/apps/jackett/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jackett: - image: lscr.io/linuxserver/jackett:0.20.4119 + image: lscr.io/linuxserver/jackett:0.20.4125 container_name: jackett environment: - PUID=1000 From b017e18e6d79b3860284650c9a2f3f928668269f Mon Sep 17 00:00:00 2001 From: sclaren Date: Tue, 9 May 2023 17:00:34 +0200 Subject: [PATCH 17/24] Added options to disable analytics and to setup username and password --- apps/dozzle/config.json | 22 +++++++++++++++++++++- apps/dozzle/docker-compose.yml | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json index 835de63a..3bbbab58 100644 --- a/apps/dozzle/config.json +++ b/apps/dozzle/config.json @@ -14,5 +14,25 @@ "short_desc": "Dozzle is a small web based app to monior Docker logs", "author": "Amir Raminfar", "source": "https://github.com/amir20/dozzle", - "form_fields": [] + "form_fields": [ + { + "type": "text", + "label": "(Optional) Username", + "required": false, + "env_variable": "DOZZLE_USERNAME" + }, + { + "type": "password", + "label": "(Optional) Password", + "required": false, + "env_variable": "DOZZLE_PASSWORD" + }, + { + "type": "boolean", + "label": "Disable Google Analytics", + "required": false, + "env_variable": "DOZZLE_NO_ANALYTICS" + } + ] + } diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index 488518e3..55755bc7 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -10,6 +10,10 @@ services: - ${APP_PORT}:8080 networks: - tipi_main_network + environment: + - DOZZLE_NO_ANALYTICS=${DOZZLE_NO_ANALYTICS} + - DOZZLE_USERNAME={DOZZLE_USERNAME} + - DOZZLE_PASSWORD={DOZZLE_PASSWORD} labels: traefik.enable: ${APP_EXPOSED} traefik.http.routers.dozzle.rule: Host(`${APP_DOMAIN}`) From b4322b0fcb679d2d07638a8d24875ff32b1e003f Mon Sep 17 00:00:00 2001 From: sclaren Date: Tue, 9 May 2023 17:05:05 +0200 Subject: [PATCH 18/24] fixed format error --- apps/dozzle/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index 55755bc7..5f260c3b 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -10,10 +10,10 @@ services: - ${APP_PORT}:8080 networks: - tipi_main_network - environment: - - DOZZLE_NO_ANALYTICS=${DOZZLE_NO_ANALYTICS} - - DOZZLE_USERNAME={DOZZLE_USERNAME} - - DOZZLE_PASSWORD={DOZZLE_PASSWORD} + environment: + - DOZZLE_NO_ANALYTICS=${DOZZLE_NO_ANALYTICS} + - DOZZLE_USERNAME=${DOZZLE_USERNAME} + - DOZZLE_PASSWORD=${DOZZLE_PASSWORD} labels: traefik.enable: ${APP_EXPOSED} traefik.http.routers.dozzle.rule: Host(`${APP_DOMAIN}`) From e7f152c023d5060c7d416706f2923b340db2b09e Mon Sep 17 00:00:00 2001 From: sclaren Date: Tue, 9 May 2023 18:01:36 +0200 Subject: [PATCH 19/24] fixed typo --- apps/dozzle/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json index 3bbbab58..40d30e35 100644 --- a/apps/dozzle/config.json +++ b/apps/dozzle/config.json @@ -10,8 +10,8 @@ "categories": [ "development" ], - "description": "Dozzle is a small web based app to monior Docker logs.", - "short_desc": "Dozzle is a small web based app to monior Docker logs", + "description": "Dozzle is a small web based app to monitor Docker logs.", + "short_desc": "Dozzle is a small web based app to monitor Docker logs", "author": "Amir Raminfar", "source": "https://github.com/amir20/dozzle", "form_fields": [ From b3aceac67d1f2cb2c52e5cce9f8aedc6bf3eb92f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 09:09:47 -0400 Subject: [PATCH 20/24] chore(deps): update zurdi15/romm docker tag to v1.8.2 (#492) * chore(deps): update zurdi15/romm docker tag to v1.8.2 * Update app version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-action update-app-version --- apps/romm/config.json | 4 ++-- apps/romm/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/romm/config.json b/apps/romm/config.json index c7604ec9..b4e5fa8e 100644 --- a/apps/romm/config.json +++ b/apps/romm/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "romm", - "tipi_version": 4, - "version": "1.8.1", + "tipi_version": 5, + "version": "1.8.2", "categories": [ "gaming" ], diff --git a/apps/romm/docker-compose.yml b/apps/romm/docker-compose.yml index 486230f0..2b78a6c9 100644 --- a/apps/romm/docker-compose.yml +++ b/apps/romm/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: romm: - image: zurdi15/romm:1.8.1 + image: zurdi15/romm:1.8.2 container_name: romm environment: - ROMM_DB_DRIVER=mariadb From d2bdf3b8b86623d5aa1a50b1cd12da4184eb65f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 09:11:31 -0400 Subject: [PATCH 21/24] chore(deps): update baldissaramatheus/tasks.md docker tag to v1.9.0 (#500) * chore(deps): update baldissaramatheus/tasks.md docker tag to v1.9.0 * Update app version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-action update-app-version --- apps/tasks-md/config.json | 4 ++-- apps/tasks-md/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/tasks-md/config.json b/apps/tasks-md/config.json index 12d84d1c..5342577c 100644 --- a/apps/tasks-md/config.json +++ b/apps/tasks-md/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "tasks-md", - "tipi_version": 2, - "version": "1.8.0", + "tipi_version": 3, + "version": "1.9.0", "categories": [ "development" ], diff --git a/apps/tasks-md/docker-compose.yml b/apps/tasks-md/docker-compose.yml index f5f3029e..b5b251a2 100644 --- a/apps/tasks-md/docker-compose.yml +++ b/apps/tasks-md/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: tasks-md: container_name: tasks-md - image: baldissaramatheus/tasks.md:1.8.0 + image: baldissaramatheus/tasks.md:1.9.0 ports: - ${APP_PORT}:8080 volumes: From 5f73968559ac0e411652388ceba3c0427f18b9fe Mon Sep 17 00:00:00 2001 From: sclaren Date: Tue, 9 May 2023 18:05:52 +0200 Subject: [PATCH 22/24] updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 416903f8..2502d2a5 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Deluge](https://github.com/linuxserver/docker-deluge) - Deluge is a lightweight, Free Software, cross-platform BitTorrent client - [Deemix](https://gitlab.com/Bockiii/deemix-docker) - deemix is a barebone deezer downloader library built from the ashes of Deezloader Remix. - [DokuWiki](https://github.com/dokuwiki/dokuwiki) - DokuWiki is a simple to use and highly versatile Open Source wiki software +- [Dozzle](https://github.com/amir20/dozzle) - Dozzle is a small web based app to monitor Docker logs - [Duplicati](https://github.com/linuxserver/docker-duplicati) - Store securely encrypted backups in the cloud! - [Emulatorjs](https://github.com/EmulatorJS/EmulatorJS) - Self-hosted Javascript emulation for various system. - [Excalidraw](https://github.com/excalidraw/excalidraw) - Online whiteboard collaboration made easy From 401cf48dd68ce9e1af0b57a7aa92a9e27aac95d7 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Tue, 9 May 2023 20:20:12 +0200 Subject: [PATCH 23/24] chore: fix config formatting --- apps/dozzle/config.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json index 40d30e35..19a32c8c 100644 --- a/apps/dozzle/config.json +++ b/apps/dozzle/config.json @@ -7,32 +7,31 @@ "id": "dozzle", "tipi_version": 1, "version": "latest", - "categories": [ - "development" - ], + "categories": ["development"], "description": "Dozzle is a small web based app to monitor Docker logs.", "short_desc": "Dozzle is a small web based app to monitor Docker logs", "author": "Amir Raminfar", "source": "https://github.com/amir20/dozzle", - "form_fields": [ + "form_fields": [ { "type": "text", - "label": "(Optional) Username", + "label": "Username (optional)", "required": false, + "placeholder": "Username", "env_variable": "DOZZLE_USERNAME" - }, + }, { "type": "password", - "label": "(Optional) Password", + "label": "Password (optional)", + "placeholder": "Password", "required": false, "env_variable": "DOZZLE_PASSWORD" - }, - { + }, + { "type": "boolean", "label": "Disable Google Analytics", "required": false, "env_variable": "DOZZLE_NO_ANALYTICS" - } + } ] - } From 15d2ea0f8d8285f59aafb0463cc00b709e0824d5 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Wed, 10 May 2023 13:25:25 +0200 Subject: [PATCH 24/24] chore(conduit): remove extra exposed port --- apps/matrix-conduit/docker-compose.yml | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/apps/matrix-conduit/docker-compose.yml b/apps/matrix-conduit/docker-compose.yml index 3fbdda3e..0c09f805 100644 --- a/apps/matrix-conduit/docker-compose.yml +++ b/apps/matrix-conduit/docker-compose.yml @@ -4,8 +4,6 @@ services: matrix-conduit: container_name: matrix-conduit image: matrixconduit/matrix-conduit:v0.5.0 - ports: - - ${APP_PORT}:6167 environment: CONDUIT_SERVER_NAME: ${APP_DOMAIN} CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/ @@ -17,7 +15,7 @@ services: CONDUIT_TRUSTED_SERVERS: ${TRUSTED_SERVERS:-[]} CONDUIT_LOG: ${LOG:-warn,rocket=off,_=off,sled=off} CONDUIT_ADDRESS: 0.0.0.0 - CONDUIT_CONFIG: '' # Ignore this + CONDUIT_CONFIG: "" # Ignore this restart: unless-stopped volumes: - ${APP_DATA_DIR}/data:/var/lib/matrix-conduit/ @@ -32,16 +30,16 @@ services: traefik.http.services.matrix.loadbalancer.server.port: 6167 matrix-conduit-well-known: - container_name: matrix-conduit-well-known - build: - context: nginx - dockerfile: Dockerfile - environment: - APP_DOMAIN: ${APP_DOMAIN} - restart: unless-stopped - networks: - - tipi_main_network - labels: + container_name: matrix-conduit-well-known + build: + context: nginx + dockerfile: Dockerfile + environment: + APP_DOMAIN: ${APP_DOMAIN} + restart: unless-stopped + networks: + - tipi_main_network + labels: traefik.enable: ${APP_EXPOSED} traefik.http.routers.matrix-well-knows.rule: Host(`${APP_DOMAIN}`) && PathPrefix(`/.well-known/matrix`) traefik.http.routers.matrix-well-knows.entrypoints: websecure