mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-06 19:32:49 +00:00
Compare commits
176 Commits
2025-08-19
...
2025-08-27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f3f536ebe | ||
|
|
baa39d05a5 | ||
|
|
a85bca7326 | ||
|
|
6defba8ab3 | ||
|
|
59f6329e85 | ||
|
|
856c724b5d | ||
|
|
67a20a9b4a | ||
|
|
27cd66f48a | ||
|
|
d25a12c87e | ||
|
|
e24315c50b | ||
|
|
753ed67b50 | ||
|
|
d6e498050f | ||
|
|
4a69a7b39f | ||
|
|
1dcde93b4a | ||
|
|
663c6570f4 | ||
|
|
6a17e25871 | ||
|
|
e609552cec | ||
|
|
bd4b781c9e | ||
|
|
7eb6715a1f | ||
|
|
aa0190978f | ||
|
|
e0f5e588e0 | ||
|
|
3949e2e049 | ||
|
|
ab4560b879 | ||
|
|
b8f854e7ad | ||
|
|
ea1c5b4561 | ||
|
|
957eea7a0f | ||
|
|
476fcedfe0 | ||
|
|
d590e91597 | ||
|
|
8c796a0870 | ||
|
|
b57efdb78a | ||
|
|
2cc3ce1ea1 | ||
|
|
468defcd97 | ||
|
|
78398309c0 | ||
|
|
08d1d7be62 | ||
|
|
05a4fcd471 | ||
|
|
36acf4aaae | ||
|
|
4182815b4c | ||
|
|
73a0910239 | ||
|
|
bd6626e919 | ||
|
|
3ad6cdf85a | ||
|
|
732bb75e9b | ||
|
|
d372b45a95 | ||
|
|
df564ace13 | ||
|
|
d2b28413eb | ||
|
|
b93a30ffb0 | ||
|
|
a4044b1cfd | ||
|
|
83eb2da451 | ||
|
|
9fda9f34c5 | ||
|
|
3715ea5946 | ||
|
|
de2d8d0e75 | ||
|
|
9f6abbe572 | ||
|
|
d90a071d88 | ||
|
|
69dd06b107 | ||
|
|
2be054a004 | ||
|
|
a2fcd3992e | ||
|
|
9a92df420e | ||
|
|
c6864c74bc | ||
|
|
941457b392 | ||
|
|
e84ea56a8f | ||
|
|
0d36d64454 | ||
|
|
74b2407c53 | ||
|
|
b97331282f | ||
|
|
fed5ebd9c8 | ||
|
|
be4a6f1a4f | ||
|
|
b383d43d9c | ||
|
|
54b676b529 | ||
|
|
d465ca87f2 | ||
|
|
e32c2b7dea | ||
|
|
444cbc2aa1 | ||
|
|
497622832e | ||
|
|
f36ac8831e | ||
|
|
66049f400c | ||
|
|
8daa235a88 | ||
|
|
072595c8fb | ||
|
|
85f8e5cd73 | ||
|
|
07fbcf57d4 | ||
|
|
f09c5db961 | ||
|
|
c1e93d7d79 | ||
|
|
292e48f4b4 | ||
|
|
1d8b8c87bd | ||
|
|
acfcf98273 | ||
|
|
5bb15dedae | ||
|
|
07394b9a7d | ||
|
|
1fce2de5c1 | ||
|
|
88579d4be3 | ||
|
|
e7ccf9a512 | ||
|
|
52a9ad733d | ||
|
|
23f65d0eb7 | ||
|
|
aece852e10 | ||
|
|
d7dea7cc5d | ||
|
|
5cd24b503c | ||
|
|
2e5db6a283 | ||
|
|
32f6a76426 | ||
|
|
5d526717ef | ||
|
|
287265d554 | ||
|
|
e72f248918 | ||
|
|
c207d65b1b | ||
|
|
fb1d5d5a33 | ||
|
|
ed5dfa6eef | ||
|
|
8314e59973 | ||
|
|
b73c50399d | ||
|
|
50feb0d846 | ||
|
|
4773649706 | ||
|
|
ebb5d8f2c4 | ||
|
|
0555dbd93c | ||
|
|
e63bc92368 | ||
|
|
a74b7c4763 | ||
|
|
73178f5ff4 | ||
|
|
0358111f5f | ||
|
|
7346e7b1ab | ||
|
|
4add8e8273 | ||
|
|
49f1f7b1e2 | ||
|
|
e5a6a5f1c0 | ||
|
|
19365b5083 | ||
|
|
12d3457002 | ||
|
|
18abecbf9b | ||
|
|
2ead98c480 | ||
|
|
265321b0c0 | ||
|
|
bae22ebf82 | ||
|
|
c80f136871 | ||
|
|
faf4fbd0fd | ||
|
|
41e8958ab9 | ||
|
|
cdc546f879 | ||
|
|
4ded6585a2 | ||
|
|
2892b85a6f | ||
|
|
e28ab86797 | ||
|
|
2c3193ebb3 | ||
|
|
96959ffdb0 | ||
|
|
13fbf25ecd | ||
|
|
21d2159f22 | ||
|
|
a42ceeac98 | ||
|
|
6e7ad44d36 | ||
|
|
9ea852ffad | ||
|
|
d4bd7a6fda | ||
|
|
316f4043d4 | ||
|
|
f799c90712 | ||
|
|
7de8934105 | ||
|
|
15dedc1e16 | ||
|
|
13f46d2c58 | ||
|
|
ff7e7a6e10 | ||
|
|
c49519a7de | ||
|
|
8ce4776a87 | ||
|
|
9cda1a8680 | ||
|
|
c9b5e27d74 | ||
|
|
70ec048aa9 | ||
|
|
89af0c466b | ||
|
|
93a1710e20 | ||
|
|
91a5c9c48f | ||
|
|
e85353856b | ||
|
|
bf99523a94 | ||
|
|
c1b3321801 | ||
|
|
beb9189c72 | ||
|
|
186c82d156 | ||
|
|
9d431458ca | ||
|
|
9c86eea347 | ||
|
|
e20af295f0 | ||
|
|
68832d71fa | ||
|
|
2e13483f19 | ||
|
|
c7643ae88c | ||
|
|
f16f7a130a | ||
|
|
94a8fe7132 | ||
|
|
059d297305 | ||
|
|
2bd2a763a1 | ||
|
|
452ba92a6f | ||
|
|
d27a875987 | ||
|
|
14418411f6 | ||
|
|
f13c8ff3ce | ||
|
|
28dc145811 | ||
|
|
170543bb66 | ||
|
|
c783024ef0 | ||
|
|
19403a627b | ||
|
|
cc08395a1d | ||
|
|
d5093a3d9d | ||
|
|
52c4f3e0c2 | ||
|
|
76a4ec9e06 | ||
|
|
bebf6f65aa |
162
CHANGELOG.md
162
CHANGELOG.md
@@ -10,8 +10,170 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-08-28
|
||||||
|
|
||||||
|
## 2025-08-27
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- searxng: improve installation [@MickLesk](https://github.com/MickLesk) ([#7233](https://github.com/community-scripts/ProxmoxVE/pull/7233))
|
||||||
|
- Homebox: Fix Update Script [@MickLesk](https://github.com/MickLesk) ([#7232](https://github.com/community-scripts/ProxmoxVE/pull/7232))
|
||||||
|
|
||||||
|
## 2025-08-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- tracktor ([#7190](https://github.com/community-scripts/ProxmoxVE/pull/7190))
|
||||||
|
- PBS: Upgrade Script for v4 [@MickLesk](https://github.com/MickLesk) ([#7214](https://github.com/community-scripts/ProxmoxVE/pull/7214))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor: Post-PBS-Script [@MickLesk](https://github.com/MickLesk) ([#7213](https://github.com/community-scripts/ProxmoxVE/pull/7213))
|
||||||
|
- Refactor: Post-PMG-Script [@MickLesk](https://github.com/MickLesk) ([#7212](https://github.com/community-scripts/ProxmoxVE/pull/7212))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- [website] Update documentation URLs [@tremor021](https://github.com/tremor021) ([#7201](https://github.com/community-scripts/ProxmoxVE/pull/7201))
|
||||||
|
|
||||||
|
## 2025-08-25
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-RustDesk Server [@tremor021](https://github.com/tremor021) ([#7191](https://github.com/community-scripts/ProxmoxVE/pull/7191))
|
||||||
|
- Alpine-Redlib ([#7178](https://github.com/community-scripts/ProxmoxVE/pull/7178))
|
||||||
|
- healthchecks ([#7177](https://github.com/community-scripts/ProxmoxVE/pull/7177))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) [@CommanderPaladin](https://github.com/CommanderPaladin) ([#7174](https://github.com/community-scripts/ProxmoxVE/pull/7174))
|
||||||
|
- Immich: bump to v1.139.4 [@vhsdream](https://github.com/vhsdream) ([#7138](https://github.com/community-scripts/ProxmoxVE/pull/7138))
|
||||||
|
- Komodo: Fix compose.env path [@tremor021](https://github.com/tremor021) ([#7202](https://github.com/community-scripts/ProxmoxVE/pull/7202))
|
||||||
|
- Komodo: Fix update procedure and missing env var [@tremor021](https://github.com/tremor021) ([#7198](https://github.com/community-scripts/ProxmoxVE/pull/7198))
|
||||||
|
- SnipeIT: Update nginx config to v8.3 [@tremor021](https://github.com/tremor021) ([#7171](https://github.com/community-scripts/ProxmoxVE/pull/7171))
|
||||||
|
- Lidarr: Fix RELEASE variable fetching [@tremor021](https://github.com/tremor021) ([#7162](https://github.com/community-scripts/ProxmoxVE/pull/7162))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Komodo: Generate admin users password [@tremor021](https://github.com/tremor021) ([#7193](https://github.com/community-scripts/ProxmoxVE/pull/7193))
|
||||||
|
- [core]: uv uses now "update-shell" command [@MickLesk](https://github.com/MickLesk) ([#7172](https://github.com/community-scripts/ProxmoxVE/pull/7172))
|
||||||
|
- [core]: tools.func - better verbose for postgresql [@MickLesk](https://github.com/MickLesk) ([#7173](https://github.com/community-scripts/ProxmoxVE/pull/7173))
|
||||||
|
- n8n: Force update to NodeJS v22 [@tremor021](https://github.com/tremor021) ([#7176](https://github.com/community-scripts/ProxmoxVE/pull/7176))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- 2FAuth: Fix website and docs URLs [@tremor021](https://github.com/tremor021) ([#7199](https://github.com/community-scripts/ProxmoxVE/pull/7199))
|
||||||
|
|
||||||
|
## 2025-08-24
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Kasm: Fix install log parsing [@tremor021](https://github.com/tremor021) ([#7140](https://github.com/community-scripts/ProxmoxVE/pull/7140))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- BookLore: Fix Nginx config [@tremor021](https://github.com/tremor021) ([#7155](https://github.com/community-scripts/ProxmoxVE/pull/7155))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Syncthing: Switch to v2 stable repository [@tremor021](https://github.com/tremor021) ([#7150](https://github.com/community-scripts/ProxmoxVE/pull/7150))
|
||||||
|
|
||||||
|
## 2025-08-23
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- qBittorrent: Fix file names [@tremor021](https://github.com/tremor021) ([#7136](https://github.com/community-scripts/ProxmoxVE/pull/7136))
|
||||||
|
- Tandoor: Fix env path [@tremor021](https://github.com/tremor021) ([#7130](https://github.com/community-scripts/ProxmoxVE/pull/7130))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Immich: v1.139.2 [@vhsdream](https://github.com/vhsdream) ([#7116](https://github.com/community-scripts/ProxmoxVE/pull/7116))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Pf2eTools [@tremor021](https://github.com/tremor021) ([#7096](https://github.com/community-scripts/ProxmoxVE/pull/7096))
|
||||||
|
- Refactor: Prowlarr [@tremor021](https://github.com/tremor021) ([#7091](https://github.com/community-scripts/ProxmoxVE/pull/7091))
|
||||||
|
- Refactor: Radarr [@tremor021](https://github.com/tremor021) ([#7088](https://github.com/community-scripts/ProxmoxVE/pull/7088))
|
||||||
|
- Refactor: Snipe-IT [@tremor021](https://github.com/tremor021) ([#7081](https://github.com/community-scripts/ProxmoxVE/pull/7081))
|
||||||
|
|
||||||
|
## 2025-08-22
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Refactor: Prometheus [@tremor021](https://github.com/tremor021) ([#7093](https://github.com/community-scripts/ProxmoxVE/pull/7093))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- paperless: nltk fix [@MickLesk](https://github.com/MickLesk) ([#7098](https://github.com/community-scripts/ProxmoxVE/pull/7098))
|
||||||
|
- Tududi Fix: use correct tag parsing for release during update check [@vhsdream](https://github.com/vhsdream) ([#7072](https://github.com/community-scripts/ProxmoxVE/pull/7072))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: phpIPAM [@tremor021](https://github.com/tremor021) ([#7095](https://github.com/community-scripts/ProxmoxVE/pull/7095))
|
||||||
|
- Refactor: Prometheus Paperless NGX Exporter [@tremor021](https://github.com/tremor021) ([#7092](https://github.com/community-scripts/ProxmoxVE/pull/7092))
|
||||||
|
- Refactor: PS5-MQTT [@tremor021](https://github.com/tremor021) ([#7090](https://github.com/community-scripts/ProxmoxVE/pull/7090))
|
||||||
|
- Refactor: qBittorrent [@tremor021](https://github.com/tremor021) ([#7089](https://github.com/community-scripts/ProxmoxVE/pull/7089))
|
||||||
|
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#7086](https://github.com/community-scripts/ProxmoxVE/pull/7086))
|
||||||
|
- Refactor: Recyclarr [@tremor021](https://github.com/tremor021) ([#7085](https://github.com/community-scripts/ProxmoxVE/pull/7085))
|
||||||
|
- Refactor: RevealJS [@tremor021](https://github.com/tremor021) ([#7084](https://github.com/community-scripts/ProxmoxVE/pull/7084))
|
||||||
|
- Refactor: Rclone [@tremor021](https://github.com/tremor021) ([#7087](https://github.com/community-scripts/ProxmoxVE/pull/7087))
|
||||||
|
- Refactor: Semaphore [@tremor021](https://github.com/tremor021) ([#7083](https://github.com/community-scripts/ProxmoxVE/pull/7083))
|
||||||
|
- Refactor: Silverbullet [@tremor021](https://github.com/tremor021) ([#7082](https://github.com/community-scripts/ProxmoxVE/pull/7082))
|
||||||
|
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#7094](https://github.com/community-scripts/ProxmoxVE/pull/7094))
|
||||||
|
- Refactor: TasmoAdmin [@tremor021](https://github.com/tremor021) ([#7080](https://github.com/community-scripts/ProxmoxVE/pull/7080))
|
||||||
|
|
||||||
|
## 2025-08-21
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- LiteLLM ([#7052](https://github.com/community-scripts/ProxmoxVE/pull/7052))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tianji: add uv deps [@MickLesk](https://github.com/MickLesk) ([#7066](https://github.com/community-scripts/ProxmoxVE/pull/7066))
|
||||||
|
- Zitadel: installer for v4 [@MickLesk](https://github.com/MickLesk) ([#7058](https://github.com/community-scripts/ProxmoxVE/pull/7058))
|
||||||
|
- Paperless-NGX: create direction for nltk [@MickLesk](https://github.com/MickLesk) ([#7064](https://github.com/community-scripts/ProxmoxVE/pull/7064))
|
||||||
|
- Immich: hotfix - revert 7035 [@vhsdream](https://github.com/vhsdream) ([#7054](https://github.com/community-scripts/ProxmoxVE/pull/7054))
|
||||||
|
- duplicati: fix release pattern [@MickLesk](https://github.com/MickLesk) ([#7049](https://github.com/community-scripts/ProxmoxVE/pull/7049))
|
||||||
|
- technitiumdns: fix unbound variable [@MickLesk](https://github.com/MickLesk) ([#7047](https://github.com/community-scripts/ProxmoxVE/pull/7047))
|
||||||
|
- [core]: improve binary globbing for gh releases [@MickLesk](https://github.com/MickLesk) ([#7044](https://github.com/community-scripts/ProxmoxVE/pull/7044))
|
||||||
|
|
||||||
## 2025-08-20
|
## 2025-08-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Post-Install, change pve-test for trixie [@MickLesk](https://github.com/MickLesk) ([#7031](https://github.com/community-scripts/ProxmoxVE/pull/7031))
|
||||||
|
- Immich: fix small issue with immich-admin "start" script [@vhsdream](https://github.com/vhsdream) ([#7035](https://github.com/community-scripts/ProxmoxVE/pull/7035))
|
||||||
|
- WasteBin: Small fixes [@tremor021](https://github.com/tremor021) ([#7018](https://github.com/community-scripts/ProxmoxVE/pull/7018))
|
||||||
|
- Komga: Fix update [@tremor021](https://github.com/tremor021) ([#7027](https://github.com/community-scripts/ProxmoxVE/pull/7027))
|
||||||
|
- Barcode Buddy: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#7020](https://github.com/community-scripts/ProxmoxVE/pull/7020))
|
||||||
|
- PBS: ifupdown2 reload [@MickLesk](https://github.com/MickLesk) ([#7013](https://github.com/community-scripts/ProxmoxVE/pull/7013))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Feature: Netdata support PVE9 (Debian 13 Trixie) [@MickLesk](https://github.com/MickLesk) ([#7012](https://github.com/community-scripts/ProxmoxVE/pull/7012))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: RustDesk Server [@tremor021](https://github.com/tremor021) ([#7008](https://github.com/community-scripts/ProxmoxVE/pull/7008))
|
||||||
|
- ghost: fix: verbose [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7023](https://github.com/community-scripts/ProxmoxVE/pull/7023))
|
||||||
|
- Refactor: Paperless-ngx [@MickLesk](https://github.com/MickLesk) ([#6938](https://github.com/community-scripts/ProxmoxVE/pull/6938))
|
||||||
|
|
||||||
## 2025-08-19
|
## 2025-08-19
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
56
ct/alpine-redlib.sh
Normal file
56
ct/alpine-redlib.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: andrej-kocijan (Andrej Kocijan)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/redlib-org/redlib
|
||||||
|
|
||||||
|
APP="Alpine-Redlib"
|
||||||
|
var_tags="${var_tags:-alpine;frontend}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/redlib ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Alpine Packages"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
|
msg_info "Stopping ${APP} Service"
|
||||||
|
$STD rc-service redlib stop
|
||||||
|
msg_ok "Stopped ${APP} Service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP} Service"
|
||||||
|
$STD rc-service redlib start
|
||||||
|
msg_ok "Started ${APP} Service"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5252${CL}"
|
||||||
74
ct/alpine-rustdeskserver.sh
Normal file
74
ct/alpine-rustdeskserver.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/rustdesk/rustdesk-server
|
||||||
|
|
||||||
|
APP="Alpine-RustDeskServer"
|
||||||
|
var_tags="${var_tags:-alpine;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-3}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
if [[ ! -d /opt/rustdesk-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
|
||||||
|
msg_info "Updating RustDesk Server to v${RELEASE}"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
$STD service rustdesk-server-hbbs stop
|
||||||
|
$STD service rustdesk-server-hbbr stop
|
||||||
|
temp_file1=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
|
||||||
|
$STD unzip "$temp_file1"
|
||||||
|
cp -r amd64/* /opt/rustdesk-server/
|
||||||
|
echo "${RELEASE}" >~/.rustdesk-server
|
||||||
|
$STD service rustdesk-server-hbbs start
|
||||||
|
$STD service rustdesk-server-hbbr start
|
||||||
|
rm -rf amd64
|
||||||
|
rm -f $temp_file1
|
||||||
|
msg_ok "Updated RustDesk Server successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then
|
||||||
|
msg_info "Updating RustDesk API to v${APIRELEASE}"
|
||||||
|
$STD service rustdesk-api stop
|
||||||
|
temp_file2=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
|
||||||
|
$STD tar zxvf "$temp_file2"
|
||||||
|
cp -r release/* /opt/rustdesk-api
|
||||||
|
echo "${APIRELEASE}" >~/.rustdesk-api
|
||||||
|
$STD service rustdesk-api start
|
||||||
|
rm -rf release
|
||||||
|
rm -f $temp_file2
|
||||||
|
msg_ok "Updated RustDesk API"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:21114${CL}"
|
||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
systemctl stop duplicati
|
systemctl stop duplicati
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start duplicati
|
systemctl start duplicati
|
||||||
|
|||||||
6
ct/headers/alpine-redlib
Normal file
6
ct/headers/alpine-redlib
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ____ _____ __
|
||||||
|
/ | / /___ (_)___ ___ / __ \___ ____/ / (_) /_
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / / __ \
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / / / /_/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/_/_.___/
|
||||||
|
/_/
|
||||||
6
ct/headers/alpine-rustdeskserver
Normal file
6
ct/headers/alpine-rustdeskserver
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ____ __ ____ __ _____
|
||||||
|
/ | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/
|
||||||
|
/_/
|
||||||
6
ct/headers/healthchecks
Normal file
6
ct/headers/healthchecks
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ____ __ __ __
|
||||||
|
/ /_ ___ ____ _/ / /_/ /_ _____/ /_ ___ _____/ /_______
|
||||||
|
/ __ \/ _ \/ __ `/ / __/ __ \/ ___/ __ \/ _ \/ ___/ //_/ ___/
|
||||||
|
/ / / / __/ /_/ / / /_/ / / / /__/ / / / __/ /__/ ,< (__ )
|
||||||
|
/_/ /_/\___/\__,_/_/\__/_/ /_/\___/_/ /_/\___/\___/_/|_/____/
|
||||||
|
|
||||||
6
ct/headers/litellm
Normal file
6
ct/headers/litellm
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ _ __ __ __ __ ___
|
||||||
|
/ / (_) /____ / / / / / |/ /
|
||||||
|
/ / / / __/ _ \/ / / / / /|_/ /
|
||||||
|
/ /___/ / /_/ __/ /___/ /___/ / / /
|
||||||
|
/_____/_/\__/\___/_____/_____/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/tracktor
Normal file
6
ct/headers/tracktor
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ /__________ ______/ /__/ /_____ _____
|
||||||
|
/ __/ ___/ __ `/ ___/ //_/ __/ __ \/ ___/
|
||||||
|
/ /_/ / / /_/ / /__/ ,< / /_/ /_/ / /
|
||||||
|
\__/_/ \__,_/\___/_/|_|\__/\____/_/
|
||||||
|
|
||||||
70
ct/healthchecks.sh
Normal file
70
ct/healthchecks.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://healthchecks.io/
|
||||||
|
|
||||||
|
APP="healthchecks"
|
||||||
|
var_tags="${var_tags:-monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/healthchecks ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/healthchecks/healthchecks/releases/latest | jq '.tag_name' | sed 's/^"v//;s/"$//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.healthchecks 2>/dev/null)" ]] || [[ ! -f ~/.healthchecks ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop healthchecks
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt/healthchecks
|
||||||
|
mkdir -p /opt/healthchecks/static-collected/
|
||||||
|
$STD uv pip install wheel gunicorn -r requirements.txt --system
|
||||||
|
$STD uv run -- python manage.py makemigrations
|
||||||
|
$STD uv run -- python manage.py migrate --noinput
|
||||||
|
$STD uv run -- python manage.py collectstatic --noinput
|
||||||
|
$STD uv run -- python manage.py compress
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start healthchecks
|
||||||
|
systemctl restart caddy
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}"
|
||||||
@@ -27,8 +27,9 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ -x /opt/homebox ]]; then
|
if [[ -x /opt/homebox ]]; then
|
||||||
sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
|
sed -i 's|WorkingDirectory=/opt$|WorkingDirectory=/opt/homebox|' /etc/systemd/system/homebox.service
|
||||||
sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
|
sed -i 's|ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
|
||||||
|
sed -i 's|EnvironmentFile=/opt/.env$|EnvironmentFile=/opt/homebox/.env|' /etc/systemd/system/homebox.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -38,7 +39,9 @@ function update_script() {
|
|||||||
systemctl stop homebox
|
systemctl stop homebox
|
||||||
msg_ok "${APP} Stopped"
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
[ -x /opt/homebox ] && rm -f /opt/homebox
|
if [ -f /opt/homebox ] && [ -x /opt/homebox ]; then
|
||||||
|
rm -f /opt/homebox
|
||||||
|
fi
|
||||||
fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
|
fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
|
||||||
chmod +x /opt/homebox/homebox
|
chmod +x /opt/homebox/homebox
|
||||||
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
|
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
|
||||||
|
|||||||
56
ct/immich.sh
56
ct/immich.sh
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
|
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
|
||||||
STAGING_DIR=/opt/staging
|
STAGING_DIR=/opt/staging
|
||||||
BASE_DIR=${STAGING_DIR}/base-images
|
BASE_DIR=${STAGING_DIR}/base-images
|
||||||
@@ -59,7 +61,7 @@ function update_script() {
|
|||||||
done
|
done
|
||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
RELEASE="1.138.1"
|
RELEASE="1.139.4"
|
||||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
@@ -109,15 +111,19 @@ function update_script() {
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -a
|
set -a
|
||||||
. "$INSTALL_DIR"/.env
|
. ${INSTALL_DIR}/.env
|
||||||
set +a
|
set +a
|
||||||
|
|
||||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$INSTALL_DIR"/start.sh
|
chmod +x "$INSTALL_DIR"/start.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
shopt -s dotglob
|
||||||
rm -rf "${APP_DIR:?}"/*
|
rm -rf "${APP_DIR:?}"/*
|
||||||
mkdir -p "$ML_DIR"
|
)
|
||||||
|
|
||||||
rm -rf "$SRC_DIR"
|
rm -rf "$SRC_DIR"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
||||||
@@ -127,30 +133,36 @@ EOF
|
|||||||
if [[ "$RELEASE" == "1.135.1" ]]; then
|
if [[ "$RELEASE" == "1.135.1" ]]; then
|
||||||
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
||||||
fi
|
fi
|
||||||
$STD npm install -g node-gyp node-pre-gyp
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
$STD npm ci
|
export CI=1
|
||||||
$STD npm run build
|
corepack enable
|
||||||
$STD npm prune --omit=dev --omit=optional
|
|
||||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
|
# server build
|
||||||
cp package.json "$APP_DIR"/bin
|
export SHARP_IGNORE_GLOBAL_LIBVIPS=true
|
||||||
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
$STD pnpm --filter immich --frozen-lockfile build
|
||||||
|
unset SHARP_IGNORE_GLOBAL_LIBVIPS
|
||||||
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
|
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
|
||||||
|
cp "$APP_DIR"/package.json "$APP_DIR"/bin
|
||||||
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||||
cd "$SRC_DIR"/open-api/typescript-sdk
|
|
||||||
$STD npm ci
|
# openapi & web build
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"/web
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
|
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
||||||
|
$STD pnpm --filter @immich/sdk --filter immich-web build
|
||||||
cp -a web/build "$APP_DIR"/www
|
cp -a web/build "$APP_DIR"/www
|
||||||
cp LICENSE "$APP_DIR"
|
cp LICENSE "$APP_DIR"
|
||||||
|
|
||||||
|
# cli build
|
||||||
|
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
||||||
|
$STD pnpm --filter @immich/sdk --filter @immich/cli build
|
||||||
|
$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
||||||
cd "$APP_DIR"
|
cd "$APP_DIR"
|
||||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||||
$STD npm install sharp
|
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
|
||||||
msg_ok "Updated ${APP} web and microservices"
|
msg_ok "Updated ${APP} web and microservices"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
|
mkdir -p "$ML_DIR"
|
||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
@@ -178,10 +190,6 @@ EOF
|
|||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
|
|
||||||
msg_info "Updating Immich CLI"
|
|
||||||
$STD npm i -g @immich/cli
|
|
||||||
msg_ok "Updated Immich CLI"
|
|
||||||
|
|
||||||
chown -R immich:immich "$INSTALL_DIR"
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
if [[ ! -f ~/.debian_version.bak ]]; then
|
if [[ ! -f ~/.debian_version.bak ]]; then
|
||||||
cp /etc/debian_version ~/.debian_version.bak
|
cp /etc/debian_version ~/.debian_version.bak
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
|
if [[ ! -f ~/.komga-org ]] || [[ "${RELEASE}" != "$(cat ~/.komga-org)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop komga
|
systemctl stop komga
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ function update_script() {
|
|||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
||||||
|
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
||||||
|
fi
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
|
||||||
|
|||||||
60
ct/litellm.sh
Normal file
60
ct/litellm.sh
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: stout01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/BerriAI/litellm
|
||||||
|
|
||||||
|
APP="LiteLLM"
|
||||||
|
var_tags="${var_tags:-ai;interface}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/systemd/system/litellm.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop litellm
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
VENV_PATH="/opt/litellm/.venv"
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||||
|
|
||||||
|
msg_info "Updating DB Schema"
|
||||||
|
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||||
|
msg_ok "DB Schema Updated"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start litellm
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
|
||||||
@@ -27,13 +27,6 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
|
|
||||||
if ! command -v npm >/dev/null 2>&1; then
|
|
||||||
echo "Installing NPM..."
|
|
||||||
$STD apt-get install -y npm
|
|
||||||
echo "Installed NPM..."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ ! -f /opt/n8n.env ]; then
|
if [ ! -f /opt/n8n.env ]; then
|
||||||
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
||||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||||
@@ -45,6 +38,7 @@ N8N_PROTOCOL=http
|
|||||||
N8N_HOST=$HOST_IP
|
N8N_HOST=$HOST_IP
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD npm update -g n8n
|
$STD npm update -g n8n
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ APP="Paperless-ngx"
|
|||||||
var_tags="${var_tags:-document;management}"
|
var_tags="${var_tags:-document;management}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-12}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -20,70 +20,115 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
if [[ ! -d /opt/paperless ]]; then
|
if [[ ! -d /opt/paperless ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get install -y jq
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
|
||||||
"1" "Update Paperless-ngx to $RELEASE" ON \
|
|
||||||
"2" "Paperless-ngx Credentials" OFF \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [ "$UPD" == "1" ]; then
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
|
|
||||||
msg_info "Updating Ghostscript (Patience)"
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz")
|
|
||||||
tar -xzf ghostscript-10.04.0.tar.gz
|
|
||||||
cd ghostscript-10.04.0
|
|
||||||
$STD ./configure
|
|
||||||
$STD make
|
|
||||||
$STD sudo make install
|
|
||||||
rm -rf /tmp/ghostscript*
|
|
||||||
msg_ok "Ghostscript updated to 10.04.0"
|
|
||||||
fi
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then
|
||||||
msg_info "Stopping all Paperless-ngx Services"
|
msg_info "Stopping all Paperless-ngx Services"
|
||||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||||
msg_ok "Stopped all Paperless-ngx Services"
|
msg_ok "Stopped all Paperless-ngx Services"
|
||||||
|
|
||||||
msg_info "Updating to ${RELEASE}"
|
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
|
||||||
cd ~
|
|
||||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz")
|
|
||||||
tar -xf paperless-ngx-$RELEASE.tar.xz
|
|
||||||
cp -r /opt/paperless/paperless.conf paperless-ngx/
|
|
||||||
cp -r paperless-ngx/* /opt/paperless/
|
|
||||||
cd /opt/paperless
|
|
||||||
$STD pip install -r requirements.txt
|
|
||||||
cd /opt/paperless/src
|
|
||||||
$STD /usr/bin/python3 manage.py migrate
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Backing up data"
|
||||||
cd ~
|
mkdir -p /opt/paperless/backup
|
||||||
rm paperless-ngx-$RELEASE.tar.xz
|
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||||
rm -rf paperless-ngx
|
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||||
msg_ok "Cleaned"
|
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||||
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||||
|
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||||
|
setup_gs
|
||||||
|
|
||||||
|
msg_info "Updating to ${RELEASE}"
|
||||||
|
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||||
|
cd /opt/paperless
|
||||||
|
$STD uv sync --all-extras
|
||||||
|
cd /opt/paperless/src
|
||||||
|
$STD uv run -- python manage.py migrate
|
||||||
|
msg_ok "Updated to ${RELEASE}"
|
||||||
|
else
|
||||||
|
msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
|
||||||
|
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
|
||||||
|
echo -e " 1. Stop the container: pct stop <CTID>"
|
||||||
|
echo -e " 2. Create a snapshot: pct snapshot <CTID> pre-paperless-uv-migration"
|
||||||
|
echo -e " 3. Start the container again\n"
|
||||||
|
|
||||||
|
read -rp "Have you created a snapshot? [y/N]: " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
|
||||||
|
msg_error "Migration aborted. Please create a snapshot first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg_info "Migrating old Paperless-ngx installation to uv"
|
||||||
|
rm -rf /opt/paperless/venv
|
||||||
|
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
|
||||||
|
|
||||||
|
declare -A PATCHES=(
|
||||||
|
["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
|
||||||
|
["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
|
||||||
|
["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
|
||||||
|
["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
|
||||||
|
)
|
||||||
|
|
||||||
|
for svc in "${!PATCHES[@]}"; do
|
||||||
|
path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2)
|
||||||
|
if [[ -n "$path" && -f "$path" ]]; then
|
||||||
|
sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path"
|
||||||
|
if [[ "$svc" == "paperless-webserver.service" ]]; then
|
||||||
|
grep -q "^Environment=GRANIAN_HOST=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path"
|
||||||
|
grep -q "^Environment=GRANIAN_PORT=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path"
|
||||||
|
grep -q "^Environment=GRANIAN_WORKERS=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path"
|
||||||
|
fi
|
||||||
|
msg_ok "Patched $svc"
|
||||||
|
else
|
||||||
|
msg_error "Service file for $svc not found!"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
$STD systemctl daemon-reload
|
||||||
|
msg_info "Backing up data"
|
||||||
|
mkdir -p /opt/paperless/backup
|
||||||
|
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||||
|
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||||
|
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||||
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||||
|
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||||
|
setup_gs
|
||||||
|
|
||||||
|
msg_info "Updating Paperless-ngx"
|
||||||
|
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||||
|
cd /opt/paperless
|
||||||
|
$STD uv sync --all-extras
|
||||||
|
cd /opt/paperless/src
|
||||||
|
$STD uv run -- python manage.py migrate
|
||||||
|
msg_ok "Paperless-ngx migration and update to ${RELEASE} completed"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Starting all Paperless-ngx Services"
|
msg_info "Starting all Paperless-ngx Services"
|
||||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Started all Paperless-ngx Services"
|
msg_ok "Started all Paperless-ngx Services"
|
||||||
msg_ok "Updated Successfully!\n"
|
msg_ok "Updated Successfully!\n"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
fi
|
|
||||||
if [ "$UPD" == "2" ]; then
|
|
||||||
cat paperless.creds
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
@@ -94,3 +139,4 @@ msg_ok "Completed Successfully!\n"
|
|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||||
|
|
||||||
|
|||||||
@@ -29,30 +29,25 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.pf2etools 2>/dev/null)" ]] || [[ ! -f ~/.pf2etools ]]; then
|
||||||
msg_info "Updating System"
|
msg_info "Updating System"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
msg_ok "Updated System"
|
msg_ok "Updated System"
|
||||||
|
|
||||||
|
rm -rf /opt/Pf2eTools
|
||||||
|
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip")
|
|
||||||
$STD unzip ${RELEASE}.zip
|
|
||||||
rm -rf "/opt/${APP}"
|
|
||||||
mv ${APP}-${RELEASE:1} /opt/${APP}
|
|
||||||
cd /opt/Pf2eTools
|
cd /opt/Pf2eTools
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
chown -R www-data: "/opt/${APP}"
|
chown -R www-data: "/opt/${APP}"
|
||||||
chmod -R 755 "/opt/${APP}"
|
chmod -R 755 "/opt/${APP}"
|
||||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_ok "Updated successfully"
|
||||||
rm -rf /opt/${RELEASE}.zip
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,29 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.phpipam ]] || [[ "${RELEASE}" != "$(cat ~/.phpipam 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
cd /opt
|
|
||||||
mv /opt/phpipam/ /opt/phpipam-backup
|
mv /opt/phpipam/ /opt/phpipam-backup
|
||||||
curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o $(basename "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip")
|
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
|
||||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
cp /opt/phpipam-backup/config.php /opt/phpipam
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -r "/opt/phpipam-v${RELEASE}.zip"
|
|
||||||
rm -r /opt/phpipam-backup
|
rm -r /opt/phpipam-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -23,26 +23,19 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/plant-it ]]; then
|
if [[ ! -d /opt/plant-it ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.plant-it 2>/dev/null)" ]] || [[ ! -f ~/.plant-it ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop plant-it
|
systemctl stop plant-it
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "/opt/plant-it/server.jar"
|
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||||
cd /opt/plant-it/frontend
|
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz")
|
|
||||||
tar -xzf client.tar.gz
|
|
||||||
rm -f client.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start plant-it
|
systemctl start plant-it
|
||||||
|
|||||||
@@ -27,24 +27,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.prom-paperless-exp ]] || [[ "${RELEASE}" != "$(cat prom-paperless-exp 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus-paperless-ngx-exporter
|
systemctl stop prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz")
|
|
||||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
|
||||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus-paperless-ngx-exporter
|
systemctl start prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -28,23 +28,18 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.prometheus ]] || [[ "${RELEASE}" != "$(cat ~/.prometheus 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus
|
systemctl stop prometheus
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||||
cd /opt
|
rm -f /usr/local/bin/prometheus.yml
|
||||||
curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz")
|
|
||||||
tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
cp -rf prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/
|
|
||||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus
|
systemctl start prometheus
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -23,25 +23,21 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /var/lib/prowlarr/ ]]; then
|
if [[ ! -d /var/lib/prowlarr/ ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
|
||||||
temp_file="$(mktemp)"
|
|
||||||
rm -rf /opt/Prowlarr
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL "https://github.com/Prowlarr/Prowlarr/releases/download/v${RELEASE}/Prowlarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
if [[ "${RELEASE}" != "$(cat ~/.prowlarr 2>/dev/null)" ]] || [[ ! -f ~/.prowlarr ]]; then
|
||||||
$STD tar -xvzf "$temp_file"
|
rm -rf /opt/Prowlarr
|
||||||
mv Prowlarr /opt
|
fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz"
|
||||||
chmod 775 /opt/Prowlarr
|
chmod 775 /opt/Prowlarr
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Successfully updated"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "$temp_file"
|
|
||||||
msg_ok "Cleaned up"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,37 +23,30 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/ps5-mqtt ]]; then
|
if [[ ! -d /opt/ps5-mqtt ]]; then
|
||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.ps5-mqtt 2>/dev/null)" ]] || [[ ! -f ~/.ps5-mqtt ]]; then
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop ps5-mqtt
|
systemctl stop ps5-mqtt
|
||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
msg_info "Updating PS5-MQTT to ${RELEASE}"
|
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||||
curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz
|
|
||||||
rm -rf /opt/ps5-mqtt
|
|
||||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
|
||||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
|
||||||
rm /tmp/${RELEASE}.tar.gz
|
|
||||||
echo ${RELEASE} >/opt/ps5-mqtt_version.txt
|
|
||||||
msg_ok "Updated PS5-MQTT"
|
|
||||||
|
|
||||||
msg_info "Building new PS5-MQTT version"
|
msg_info "Configuring ${APP}"
|
||||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Built new PS5-MQTT version"
|
msg_ok "Configured ${APP}"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start ps5-mqtt
|
systemctl start ps5-mqtt
|
||||||
msg_ok "Started service"
|
msg_ok "Started service"
|
||||||
|
|
||||||
|
msg_ok "Updated successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,32 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ ! -f ~/.qbittorrent ]]; then
|
||||||
touch /opt/${APP}_version.txt
|
msg_error "Please create new qBittorrent LXC. Updating from v4.x to v5.x is not supported!"
|
||||||
mkdir -p $HOME/.config/qBittorrent/
|
exit
|
||||||
mkdir -p /opt/qbittorrent/
|
|
||||||
[ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/"
|
|
||||||
$STD apt-get remove --purge -y qbittorrent-nox
|
|
||||||
sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
fi
|
||||||
FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.qbittorrent ]] || [[ "${RELEASE}" != "$(cat ~/.qbittorrent 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop qbittorrent-nox
|
systemctl stop qbittorrent-nox
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
rm -f /opt/qbittorrent/qbittorrent-nox
|
rm -f /opt/qbittorrent/qbittorrent-nox
|
||||||
curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
|
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start qbittorrent-nox
|
systemctl start qbittorrent-nox
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
17
ct/radarr.sh
17
ct/radarr.sh
@@ -29,19 +29,16 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
temp_file="$(mktemp)"
|
if [[ ! -f ~/.radarr ]] || [[ "$RELEASE" != "$(cat ~/.radarr 2>/dev/null)" ]]; then
|
||||||
rm -rf /opt/Radarr
|
rm -rf /opt/Radarr
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz"
|
||||||
curl -fsSL "https://github.com/Radarr/Radarr/releases/download/v${RELEASE}/Radarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
|
||||||
$STD tar -xvzf "$temp_file"
|
|
||||||
mv Radarr /opt
|
|
||||||
chmod 775 /opt/Radarr
|
chmod 775 /opt/Radarr
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. $APP is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf "$temp_file"
|
|
||||||
msg_ok "Cleaned up"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
ct/rclone.sh
14
ct/rclone.sh
@@ -28,27 +28,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.rclone ]] || [[ "${RELEASE}" != "$(cat ~/.rclone 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop rclone-web
|
systemctl stop rclone-web
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||||
temp_file=$(mktemp)
|
|
||||||
rm -rf /opt/rclone/*
|
|
||||||
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
|
||||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start rclone-web
|
systemctl start rclone-web
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "$temp_file"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -27,30 +27,37 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/rogerfar/rdt-client/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f ~/.rdt-client ]] || [[ "${RELEASE}" != "$(cat ~/.rdt-client 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop rdtc
|
systemctl stop rdtc
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Creating backup"
|
||||||
|
mkdir -p /opt/rdtc-backup
|
||||||
|
cp -R /opt/rdtc/appsettings.json /opt/rdtc-backup/
|
||||||
|
msg_ok "Backup created"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||||
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
||||||
$STD apt-get install -y dotnet-sdk-9.0
|
$STD apt-get install -y dotnet-sdk-9.0
|
||||||
fi
|
fi
|
||||||
mkdir -p rdtc-backup
|
|
||||||
cp -R /opt/rdtc/appsettings.json rdtc-backup/
|
|
||||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o $(basename "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip")
|
|
||||||
$STD unzip -o RealDebridClient.zip -d /opt/rdtc
|
|
||||||
cp -R rdtc-backup/appsettings.json /opt/rdtc/
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start rdtc
|
systemctl start rdtc
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf rdtc-backup RealDebridClient.zip
|
rm -rf /opt/rdtc-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,13 +28,14 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)")
|
if [[ "${RELEASE}" != "$(cat ~/.recyclarr 2>/dev/null)" ]] || [[ ! -f ~/.recyclarr ]]; then
|
||||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||||
rm -rf recyclarr*.tar.xz
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,29 +23,25 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d "/opt/revealjs" ]]; then
|
if [[ ! -d "/opt/revealjs" ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.revealjs 2>/dev/null)" ]] || [[ ! -f ~/.revealjs ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop revealjs
|
systemctl stop revealjs
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf $temp_file
|
|
||||||
rm -rf /opt/revealjs/node_modules/*
|
|
||||||
cp /opt/revealjs/index.html /opt
|
cp /opt/revealjs/index.html /opt
|
||||||
cp -rf reveal.js-${RELEASE}/* /opt/revealjs
|
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /opt/revealjs
|
cd /opt/revealjs
|
||||||
$STD npm install
|
$STD npm install
|
||||||
cp -f /opt/index.html /opt/revealjs
|
cp -f /opt/index.html /opt/revealjs
|
||||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
@@ -53,8 +49,7 @@ curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.ta
|
|||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -f $temp_file
|
rm -f /opt/index.html
|
||||||
rm -rf ~/reveal.js-${RELEASE}
|
|
||||||
msg_ok "Cleanup Completed"
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
|
|||||||
@@ -28,13 +28,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
|
||||||
touch /opt/rustdeskapi_version.txt
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdeskapi_version.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop rustdesk-hbbr
|
systemctl stop rustdesk-hbbr
|
||||||
systemctl stop rustdesk-hbbs
|
systemctl stop rustdesk-hbbs
|
||||||
@@ -43,28 +40,15 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||||
TEMPDIR=$(mktemp -d)
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
|
||||||
$STD dpkg -i $TEMPDIR/*.deb
|
|
||||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
|
||||||
echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf $TEMPDIR
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start -q rustdesk-* --all
|
systemctl start -q rustdesk-* --all
|
||||||
msg_ok "Services started"
|
msg_ok "Services started"
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -29,25 +29,17 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.semaphore ]] || [[ "${RELEASE}" != "$(cat ~/.semaphore 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb")
|
|
||||||
$STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /opt/semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
|
|||||||
@@ -26,19 +26,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.silverbullet || "${RELEASE}" != "$(cat ~/.silverbullet 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop silverbullet
|
systemctl stop silverbullet
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||||
curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip" -o $(basename "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip")
|
|
||||||
$STD unzip silverbullet-server-linux-x86_64.zip
|
|
||||||
mv silverbullet /opt/silverbullet/bin/
|
|
||||||
chmod +x /opt/silverbullet/bin/silverbullet
|
|
||||||
echo "${RELEASE}" >/opt/silverbullet/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start silverbullet
|
systemctl start silverbullet
|
||||||
|
|||||||
@@ -27,20 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.snipe-it ]] || [[ "${RELEASE}" != "$(cat ~/.snipe-it 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
|
msg_info "Creating backup"
|
||||||
|
mv /opt/snipe-it /opt/snipe-it-backup
|
||||||
|
msg_ok "Backup created"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "snipe-it" "snipe/snipe-it" "tarball"
|
||||||
|
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||||
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
mv /opt/snipe-it /opt/snipe-it-backup
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf "$temp_file"
|
|
||||||
mv "snipe-it-${RELEASE}" /opt/snipe-it
|
|
||||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||||
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
||||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||||
@@ -55,7 +60,6 @@ function update_script() {
|
|||||||
$STD php artisan view:clear
|
$STD php artisan view:clear
|
||||||
chown -R www-data: /opt/snipe-it
|
chown -R www-data: /opt/snipe-it
|
||||||
chmod -R 755 /opt/snipe-it
|
chmod -R 755 /opt/snipe-it
|
||||||
rm -rf "$temp_file"
|
|
||||||
rm -rf /opt/snipe-it-backup
|
rm -rf /opt/snipe-it-backup
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
||||||
mv /opt/.env /opt/tandoor/.env
|
mv /opt/tandoor.bak/.env /opt/tandoor/.env
|
||||||
cd /opt/tandoor
|
cd /opt/tandoor
|
||||||
$STD uv venv .venv --python=python3
|
$STD uv venv .venv --python=python3
|
||||||
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
||||||
if [[ ! -f ~/.technitium || "${VERSION}" != "$(cat ~/.technitium)" ]]; then
|
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
|
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
|
||||||
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
|
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
|
||||||
|
|||||||
72
ct/tracktor.sh
Normal file
72
ct/tracktor.sh
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://tracktor.bytedge.in/
|
||||||
|
|
||||||
|
APP="tracktor"
|
||||||
|
var_tags="${var_tags:-car;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-6}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/tracktor ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/javedh-dev/tracktor/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.tracktor 2>/dev/null)" ]] || [[ ! -f ~/.tracktor ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop tracktor
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp /opt/tracktor/app/backend/.env /opt/tracktor.env
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
cd /opt/tracktor
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
|
msg_info "Restoring Backup"
|
||||||
|
cp /opt/tracktor.env /opt/tracktor/app/backend/.env
|
||||||
|
msg_ok "Restored Backup"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start tracktor
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "Already up to date"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^"v//;s/"$//')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop tududi
|
systemctl stop tududi
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y zstd
|
||||||
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
||||||
msg_info "Running Migration"
|
msg_info "Running Migration"
|
||||||
@@ -66,8 +70,9 @@ EOF
|
|||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||||
tar -xf $temp_file
|
tar -xf $temp_file
|
||||||
cp -f wastebin /opt/wastebin/
|
cp -f wastebin* /opt/wastebin/
|
||||||
chmod +x /opt/wastebin/wastebin
|
chmod +x /opt/wastebin/wastebin
|
||||||
|
chmod +x /opt/wastebin/wastebin-ctl
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated Wastebin"
|
msg_ok "Updated Wastebin"
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://docs.2fauth.app/",
|
||||||
"website": "https://docs.2fauth.app/",
|
"website": "https://2fauth.app/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
|
||||||
"config_path": "cat /opt/2fauth/.env",
|
"config_path": "cat /opt/2fauth/.env",
|
||||||
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
|
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": null,
|
"documentation": "https://guacamole.apache.org/doc/gug/",
|
||||||
"website": "https://guacamole.apache.org/",
|
"website": "https://guacamole.apache.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/apache-guacamole.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/apache-guacamole.webp",
|
||||||
"config_path": "/etc/guacamole/guacd.conf",
|
"config_path": "/etc/guacamole/guacd.conf",
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3142,
|
"interface_port": 3142,
|
||||||
"documentation": null,
|
"documentation": "https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html",
|
||||||
"website": "https://www.unix-ag.uni-kl.de/~bloch/acng/",
|
"website": "https://www.unix-ag.uni-kl.de/~bloch/acng/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linux.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linux.webp",
|
||||||
"config_path": "",
|
"config_path": "/etc/apt-cacher-ng/acng.conf",
|
||||||
"description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.",
|
"description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://wiki.archlinux.org/title/Main_page",
|
||||||
"website": null,
|
"website": "https://archlinux.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/arch-linux.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/arch-linux.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
"description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.",
|
"description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://sabre.io/dav/",
|
||||||
"website": "https://sabre.io/baikal/",
|
"website": "https://sabre.io/baikal/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baikal.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baikal.webp",
|
||||||
"config_path": "/opt/baikal/config/baikal.yaml",
|
"config_path": "/opt/baikal/config/baikal.yaml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 4000,
|
"interface_port": 4000,
|
||||||
"documentation": null,
|
"documentation": "https://0xerr0r.github.io/blocky/latest/configuration/",
|
||||||
"website": "https://0xerr0r.github.io/blocky/",
|
"website": "https://0xerr0r.github.io/blocky/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/blocky.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/blocky.webp",
|
||||||
"config_path": "/opt/blocky/config.yml",
|
"config_path": "/opt/blocky/config.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://www.bookstackapp.com/docs/",
|
||||||
"website": "https://www.bookstackapp.com/",
|
"website": "https://www.bookstackapp.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp",
|
||||||
"config_path": "/opt/bookstack/.env",
|
"config_path": "/opt/bookstack/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://wiki.casaos.io/en/home",
|
||||||
"website": "https://www.casaos.io/",
|
"website": "https://www.casaos.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/casaos.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/casaos.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8082,
|
"interface_port": 8082,
|
||||||
"documentation": null,
|
"documentation": "https://athou.github.io/commafeed/documentation/",
|
||||||
"website": "https://www.commafeed.com/",
|
"website": "https://www.commafeed.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/commafeed.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/commafeed.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://doc.crowdsec.net/",
|
||||||
"website": "https://crowdsec.net/",
|
"website": "https://crowdsec.net/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/crowdsec.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/crowdsec.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
|
|
||||||
"name": "Dashy",
|
"name": "Dashy",
|
||||||
"slug": "dashy",
|
"slug": "dashy",
|
||||||
"categories": [
|
"categories": [
|
||||||
@@ -10,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 4000,
|
"interface_port": 4000,
|
||||||
"documentation": null,
|
"documentation": "https://dashy.to/docs",
|
||||||
"website": "https://dashy.to/",
|
"website": "https://dashy.to/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
|
||||||
"config_path": "/opt/dashy/user-data/conf.yml",
|
"config_path": "/opt/dashy/user-data/conf.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://forgejo.org/docs/latest/",
|
||||||
"website": "https://forgejo.org/",
|
"website": "https://forgejo.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/forgejo.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/forgejo.webp",
|
||||||
"config_path": "/etc/forgejo/app.ini",
|
"config_path": "/etc/forgejo/app.ini",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": true,
|
"privileged": true,
|
||||||
"interface_port": 5000,
|
"interface_port": 5000,
|
||||||
"documentation": null,
|
"documentation": "https://docs.frigate.video/",
|
||||||
"website": "https://frigate.video/",
|
"website": "https://frigate.video/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://docs.gitea.com/",
|
||||||
"website": "https://gitea.com",
|
"website": "https://gitea.com",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea.webp",
|
||||||
"config_path": "/etc/gitea/app.ini",
|
"config_path": "/etc/gitea/app.ini",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8484,
|
"interface_port": 8484,
|
||||||
"documentation": null,
|
"documentation": "https://support.getgrist.com/self-managed/#the-essentials",
|
||||||
"website": "https://www.getgrist.com/",
|
"website": "https://www.getgrist.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
|
||||||
"config_path": "/opt/grist/.env",
|
"config_path": "/opt/grist/.env",
|
||||||
|
|||||||
44
frontend/public/json/healthchecks.json
Normal file
44
frontend/public/json/healthchecks.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "Healthchecks",
|
||||||
|
"slug": "healthchecks",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt/healthchecks/hc/local_settings.py",
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://healthchecks.io/docs/",
|
||||||
|
"website": "https://healthchecks.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/healthchecks.webp",
|
||||||
|
"description": "Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages (\"pings\") from your cron jobs and scheduled tasks (\"checks\"). When a ping does not arrive on time, Healthchecks sends out alerts. Healthchecks comes with a web dashboard, API, 25+ integrations for delivering notifications, monthly email reports, WebAuthn 2FA support, team management features: projects, team members, read-only access.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/healthchecks.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "if you change your LXC-IP, you need to update /etc/caddy/Caddyfile & /opt/healthchecks/hc/local_settings.py",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Show credentials: `cat ~/healthchecks.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 7990,
|
"interface_port": 7990,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/linuxserver/Heimdall/blob/2.x/readme.md",
|
||||||
"website": "https://heimdall.site/",
|
"website": "https://heimdall.site/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/heimdall.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/heimdall.webp",
|
||||||
"config_path": "/opt/Heimdall/.env",
|
"config_path": "/opt/Heimdall/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 1080,
|
"interface_port": 1080,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/heiher/hev-socks5-server/blob/main/README.md",
|
||||||
"website": "https://github.com/heiher/hev-socks5-server",
|
"website": "https://github.com/heiher/hev-socks5-server",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hev.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hev.webp",
|
||||||
"config_path": "/opt/hivemq/conf/config.xml",
|
"config_path": "/opt/hivemq/conf/config.xml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 7575,
|
"interface_port": 7575,
|
||||||
"documentation": null,
|
"documentation": "https://homarr.dev/docs/getting-started/",
|
||||||
"website": "https://homarr.dev/",
|
"website": "https://homarr.dev/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp",
|
||||||
"config_path": "/opt/homarr/.env",
|
"config_path": "/opt/homarr/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8010,
|
"interface_port": 8010,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/bastienwirtz/homer/blob/main/README.md#table-of-contents",
|
||||||
"website": "https://github.com/bastienwirtz/homer",
|
"website": "https://github.com/bastienwirtz/homer",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homer.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homer.webp",
|
||||||
"config_path": "/opt/homer/assets/config.yml",
|
"config_path": "/opt/homer/assets/config.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8086,
|
"interface_port": 8086,
|
||||||
"documentation": null,
|
"documentation": "https://docs.influxdata.com/",
|
||||||
"website": "https://www.influxdata.com/",
|
"website": "https://www.influxdata.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/influxdb.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/influxdb.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 26000,
|
"interface_port": 26000,
|
||||||
"documentation": null,
|
"documentation": "https://www.iventoy.com/en/doc_news.html",
|
||||||
"website": "https://www.iventoy.com/",
|
"website": "https://www.iventoy.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/iventoy.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/iventoy.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 5055,
|
"interface_port": 5055,
|
||||||
"documentation": null,
|
"documentation": "https://docs.jellyseerr.dev/",
|
||||||
"website": "https://github.com/Fallenbagel/jellyseerr",
|
"website": "https://github.com/Fallenbagel/jellyseerr",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jellyseerr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jellyseerr.webp",
|
||||||
"config_path": "/etc/jellyseerr/jellyseerr.conf",
|
"config_path": "/etc/jellyseerr/jellyseerr.conf",
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
"type": "warning"
|
"type": "warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "Show password: `cat ~/kasm.creds`",
|
"text": "Show credentials: `cat ~/kasm.creds`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "After the initial installation: Enter your desired admin user and password and then click on Sign Up",
|
"text": "For admin username and password type `cat ~/komodo.creds` inside LXC.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
40
frontend/public/json/litellm.json
Normal file
40
frontend/public/json/litellm.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "LiteLLM",
|
||||||
|
"slug": "litellm",
|
||||||
|
"categories": [
|
||||||
|
20
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-21",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 4000,
|
||||||
|
"documentation": "https://docs.litellm.ai/",
|
||||||
|
"config_path": "/opt/litellm/litellm.yaml",
|
||||||
|
"website": "https://www.litellm.ai/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/litellm-light.webp",
|
||||||
|
"description": "LLM proxy to call 100+ LLMs in a unified interface & track spend, set budgets per virtual key/user",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/litellm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "admin",
|
||||||
|
"password": "sk-1234"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Update master key in the config file",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://mafl.hywax.space/reference/configuration.html",
|
||||||
"website": "https://mafl.hywax.space/",
|
"website": "https://mafl.hywax.space/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mafl.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mafl.webp",
|
||||||
"config_path": "/opt/mafl/data/config.yml",
|
"config_path": "/opt/mafl/data/config.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8283,
|
"interface_port": 8283,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/Luligu/matterbridge/blob/main/README.md",
|
||||||
"website": "https://github.com/Luligu/matterbridge",
|
"website": "https://github.com/Luligu/matterbridge",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/matterbridge.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/matterbridge.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8065,
|
"interface_port": 8065,
|
||||||
"documentation": null,
|
"documentation": "https://docs.mattermost.com/",
|
||||||
"website": "https://mattermost.com/",
|
"website": "https://mattermost.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp",
|
||||||
"config_path": "/opt/mattermost/config/config.json",
|
"config_path": "/opt/mattermost/config/config.json",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8081,
|
"interface_port": 8081,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/pymedusa/Medusa/wiki",
|
||||||
"website": "https://pymedusa.com/",
|
"website": "https://pymedusa.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8081,
|
"interface_port": 8081,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/alexta69/metube/blob/master/README.md",
|
||||||
"website": "https://github.com/alexta69/metube",
|
"website": "https://github.com/alexta69/metube",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
|
||||||
"config_path": "/opt/metube/.env",
|
"config_path": "/opt/metube/.env",
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://help.mikrotik.com/docs/spaces/ROS/pages/18350234/Cloud+Hosted+Router+CHR",
|
||||||
"website": "https://help.mikrotik.com/docs/display/ROS/Cloud+Hosted+Router%2C+CHR",
|
"website": "https://mikrotik.com",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mikrotik.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mikrotik.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
"description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.",
|
"description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.",
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": 27017,
|
||||||
"documentation": null,
|
"documentation": "https://www.mongodb.com/docs/manual/",
|
||||||
"website": "https://www.mongodb.com/",
|
"website": "https://www.mongodb.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://docs.nextcloud.com/server/21/admin_manual/contents.html",
|
||||||
"website": "https://www.turnkeylinux.org/nextcloud",
|
"website": "https://www.turnkeylinux.org/nextcloud",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nextcloud.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nextcloud.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 81,
|
"interface_port": 81,
|
||||||
"documentation": null,
|
"documentation": "https://nginxproxymanager.com/guide/",
|
||||||
"website": "https://nginxproxymanager.com/",
|
"website": "https://nginxproxymanager.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nginx-proxy-manager.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nginx-proxy-manager.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 5454,
|
"interface_port": 5454,
|
||||||
"documentation": null,
|
"documentation": "https://notifiarr.wiki/",
|
||||||
"website": "https://notifiarr.com/",
|
"website": "https://notifiarr.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/notifiarr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/notifiarr.webp",
|
||||||
"config_path": "/etc/notifiarr/notifiarr.conf",
|
"config_path": "/etc/notifiarr/notifiarr.conf",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://docs.ntfy.sh/",
|
||||||
"website": "https://ntfy.sh/",
|
"website": "https://ntfy.sh/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp",
|
||||||
"config_path": "/etc/ntfy/server.yml",
|
"config_path": "/etc/ntfy/server.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 1337,
|
"interface_port": 1337,
|
||||||
"documentation": null,
|
"documentation": "https://docs.olivetin.app/",
|
||||||
"website": "https://www.olivetin.app/",
|
"website": "https://www.olivetin.app/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/olivetin.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/olivetin.webp",
|
||||||
"config_path": "/etc/OliveTin/config.yaml",
|
"config_path": "/etc/OliveTin/config.yaml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://docs.openmediavault.org/en/stable/",
|
||||||
"website": "https://www.openmediavault.org/",
|
"website": "https://www.openmediavault.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openmediavault.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openmediavault.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://openwrt.org/docs/start",
|
||||||
"website": "https://openwrt.org/",
|
"website": "https://openwrt.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://doc.owncloud.com/",
|
||||||
"website": "https://www.turnkeylinux.org/owncloud",
|
"website": "https://www.turnkeylinux.org/owncloud",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/owncloud.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/owncloud.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/clusterzx/paperless-ai/wiki/1.-Home",
|
||||||
"website": "https://github.com/clusterzx/paperless-ai",
|
"website": "https://github.com/clusterzx/paperless-ai",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ai.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ai.webp",
|
||||||
"config_path": "/opt/paperless-ai/data/.env",
|
"config_path": "/opt/paperless-ai/data/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/icereed/paperless-gpt/blob/main/README.md",
|
||||||
"website": "https://github.com/icereed/paperless-gpt",
|
"website": "https://github.com/icereed/paperless-gpt",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx-light.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx-light.webp",
|
||||||
"config_path": "/opt/paperless-gpt-data/.env",
|
"config_path": "/opt/paperless-gpt-data/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8000,
|
"interface_port": 8000,
|
||||||
"documentation": null,
|
"documentation": "https://docs.paperless-ngx.com/",
|
||||||
"website": "https://docs.paperless-ngx.com/",
|
"website": "https://docs.paperless-ngx.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
||||||
"config_path": "/opt/paperless/paperless.conf",
|
"config_path": "/opt/paperless/paperless.conf",
|
||||||
@@ -21,19 +21,19 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 10,
|
"hdd": 12,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "admin",
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Show Login Credentials, type `update` in the LXC console",
|
"text": "Show Login Credentials, type `cat ~/paperless-ngx.creds` in the LXC console",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
52
frontend/public/json/pbs4-upgrade.json
Normal file
52
frontend/public/json/pbs4-upgrade.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"name": "PBS 4 Upgrade",
|
||||||
|
"slug": "pbs4-upgrade",
|
||||||
|
"categories": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-26",
|
||||||
|
"type": "pve",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://pbs.proxmox.com/wiki/Upgrade_from_3_to_4",
|
||||||
|
"website": "https://www.proxmox.com/en/proxmox-backup-server",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "This script guides you through upgrading Proxmox Backup Server from version 3.x (Debian 12 Bookworm) to version 4.0 (Debian 13 Trixie). It adjusts the Debian base sources, configures PBS 4 repositories in deb822 format, updates enterprise/no-subscription/test repos, runs a full system upgrade, and finalizes with a reboot.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/pve/pbs4-upgrade.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Execute this script directly on the PBS 3.x host as root.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Ensure you have a verified backup of /etc/proxmox-backup before starting.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do not run this on an already upgraded PBS 4.x system.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "A reboot is strongly recommended after upgrade to activate the new kernel and services.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/Brandawg93/PeaNUT/blob/main/README.md",
|
||||||
"website": "https://github.com/Brandawg93/PeaNUT/",
|
"website": "https://github.com/Brandawg93/PeaNUT/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
|
||||||
"config_path": "/etc/peanut/settings.yml",
|
"config_path": "/etc/peanut/settings.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 2342,
|
"interface_port": 2342,
|
||||||
"documentation": null,
|
"documentation": "https://docs.photoprism.app/",
|
||||||
"website": "https://photoprism.app/",
|
"website": "https://photoprism.app/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp",
|
||||||
"config_path": "/opt/photoprism/config/.env",
|
"config_path": "/opt/photoprism/config/.env",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/leiweibau/Pi.Alert/blob/main/README.md",
|
||||||
"website": "https://github.com/leiweibau/Pi.Alert/",
|
"website": "https://github.com/leiweibau/Pi.Alert/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-alert.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-alert.webp",
|
||||||
"config_path": "/opt/pialert/config/pialert.conf",
|
"config_path": "/opt/pialert/config/pialert.conf",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://podman.io/docs",
|
||||||
"website": "https://podman.io/",
|
"website": "https://podman.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/podman.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/podman.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 5432,
|
"interface_port": 5432,
|
||||||
"documentation": null,
|
"documentation": "https://www.postgresql.org/docs/",
|
||||||
"website": "https://www.postgresql.org/",
|
"website": "https://www.postgresql.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/postgresql.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/postgresql.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 9090,
|
"interface_port": 9090,
|
||||||
"documentation": null,
|
"documentation": "https://prometheus.io/docs/introduction/overview/",
|
||||||
"website": "https://prometheus.io/",
|
"website": "https://prometheus.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
||||||
"config_path": "/etc/prometheus/prometheus.yml",
|
"config_path": "/etc/prometheus/prometheus.yml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 9696,
|
"interface_port": 9696,
|
||||||
"documentation": null,
|
"documentation": "https://wiki.servarr.com/prowlarr",
|
||||||
"website": "https://github.com/Prowlarr/Prowlarr",
|
"website": "https://github.com/Prowlarr/Prowlarr",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prowlarr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prowlarr.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 7878,
|
"interface_port": 7878,
|
||||||
"documentation": null,
|
"documentation": "https://wiki.servarr.com/radarr",
|
||||||
"website": "https://radarr.video/",
|
"website": "https://radarr.video/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/radarr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/radarr.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 6500,
|
"interface_port": 6500,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/rogerfar/rdt-client/blob/main/README.md",
|
||||||
"website": "https://github.com/rogerfar/rdt-client",
|
"website": "https://github.com/rogerfar/rdt-client",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/real-debrid.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/real-debrid.webp",
|
||||||
"config_path": "/opt/rdtc/appsettings.json",
|
"config_path": "/opt/rdtc/appsettings.json",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://recyclarr.dev/wiki/",
|
||||||
"website": "https://recyclarr.dev/",
|
"website": "https://recyclarr.dev/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": false,
|
"updateable": false,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": null,
|
"interface_port": null,
|
||||||
"documentation": null,
|
"documentation": "https://redis.io/docs/latest/",
|
||||||
"website": "https://redis.io/",
|
"website": "https://redis.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redis.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redis.webp",
|
||||||
"config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf",
|
"config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf",
|
||||||
|
|||||||
35
frontend/public/json/redlib.json
Normal file
35
frontend/public/json/redlib.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Redlib",
|
||||||
|
"slug": "redlib",
|
||||||
|
"categories": [
|
||||||
|
10
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5252,
|
||||||
|
"documentation": "https://github.com/redlib-org/redlib/blob/main/README.md",
|
||||||
|
"website": "https://github.com/redlib-org/redlib",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redlib.webp",
|
||||||
|
"config_path": "/opt/redlib/redlib.conf",
|
||||||
|
"description": "An alternative private front-end to Reddit. Redlib hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/alpine-redlib.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://runtipi.io/docs/introduction",
|
||||||
"website": "https://runtipi.io/",
|
"website": "https://runtipi.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/runtipi.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/runtipi.webp",
|
||||||
"config_path": "opt/runtipi/state/settings.json",
|
"config_path": "opt/runtipi/state/settings.json",
|
||||||
|
|||||||
@@ -25,6 +25,17 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-rustdeskserver.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
|||||||
35
frontend/public/json/searxng.json
Normal file
35
frontend/public/json/searxng.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "SearXNG",
|
||||||
|
"slug": "searxng",
|
||||||
|
"categories": [
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-26",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8888,
|
||||||
|
"documentation": "https://docs.searxng.org/",
|
||||||
|
"website": "https://github.com/searxng/searxng",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/searxng.webp",
|
||||||
|
"config_path": "/etc/searxng/settings.yml",
|
||||||
|
"description": "SearXNG is a free internet metasearch engine which aggregates results from up to 215 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor for online anonymity.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/searxng.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 7,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user