mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
146 Commits
2025-10-18
...
tremor021-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
319a975fed | ||
|
|
6f52a6cff9 | ||
|
|
be539981f8 | ||
|
|
2009da9a79 | ||
|
|
a5fb2c0fb6 | ||
|
|
ac32d7a304 | ||
|
|
3fe234b021 | ||
|
|
b9404efc57 | ||
|
|
304de66ec1 | ||
|
|
9f565d3914 | ||
|
|
e702c552c5 | ||
|
|
b853739fdc | ||
|
|
c84c44804f | ||
|
|
f77c2594c3 | ||
|
|
b3849dbf2b | ||
|
|
2cd02870c5 | ||
|
|
f6da623676 | ||
|
|
a4e1d261af | ||
|
|
909dbc20ce | ||
|
|
3a1f1bf813 | ||
|
|
0adc827c69 | ||
|
|
279d3d391a | ||
|
|
15047893bc | ||
|
|
8b54f615a8 | ||
|
|
57d435647b | ||
|
|
fe2734f96a | ||
|
|
01f1985d2d | ||
|
|
92f9033981 | ||
|
|
e1603bebec | ||
|
|
abdbca59ff | ||
|
|
6c662ae6ea | ||
|
|
5c04c89f3f | ||
|
|
fba1d16626 | ||
|
|
3666f4981f | ||
|
|
db9809a817 | ||
|
|
e69da3846a | ||
|
|
cfb76fd0ab | ||
|
|
fb11b1a0e2 | ||
|
|
66b8d6cb90 | ||
|
|
1723775c55 | ||
|
|
8852def9a6 | ||
|
|
249a02754a | ||
|
|
65c79447ea | ||
|
|
a6607734b7 | ||
|
|
a8d5fc9bc8 | ||
|
|
0e7a089949 | ||
|
|
e208b571b9 | ||
|
|
327544c737 | ||
|
|
1c8b7b4e7e | ||
|
|
6e5140314f | ||
|
|
622f85db23 | ||
|
|
55be335b66 | ||
|
|
5db685f235 | ||
|
|
14027a605a | ||
|
|
5f0dba82ad | ||
|
|
c0087bf8aa | ||
|
|
691fc48915 | ||
|
|
fe9e894e79 | ||
|
|
43356df77f | ||
|
|
e4b96ec200 | ||
|
|
01a63d0a9d | ||
|
|
0a4a64ca0c | ||
|
|
4cdb43065d | ||
|
|
add12ef634 | ||
|
|
3ab5167d8a | ||
|
|
b16a7f4562 | ||
|
|
fa3f993256 | ||
|
|
c0894cb612 | ||
|
|
3b96230327 | ||
|
|
99617f265a | ||
|
|
1fe00c2493 | ||
|
|
05fd03d160 | ||
|
|
e837ebb0e5 | ||
|
|
8e1a9ffb07 | ||
|
|
af991286dc | ||
|
|
c1205691e7 | ||
|
|
394787e10e | ||
|
|
e37ef10283 | ||
|
|
130e3c7efe | ||
|
|
634a847c06 | ||
|
|
c92f9d5518 | ||
|
|
c7fffd85d3 | ||
|
|
2ae62055a6 | ||
|
|
e6bd1b5759 | ||
|
|
55120ae165 | ||
|
|
4672934701 | ||
|
|
560e1fdad3 | ||
|
|
e60020a998 | ||
|
|
dfda118e65 | ||
|
|
6d7c318dec | ||
|
|
9c39c9cd67 | ||
|
|
0ed95ea9cb | ||
|
|
433119e830 | ||
|
|
a794358c14 | ||
|
|
0f69e8cc69 | ||
|
|
2e34f534eb | ||
|
|
1c9d325ae8 | ||
|
|
a117cb7a34 | ||
|
|
33d61e45c4 | ||
|
|
69a6590ab0 | ||
|
|
0f2117ceba | ||
|
|
87ae749eba | ||
|
|
cc4b944b3b | ||
|
|
1c14b31a05 | ||
|
|
395e522430 | ||
|
|
5277be0bc3 | ||
|
|
bd8d91057e | ||
|
|
de35c2a1f9 | ||
|
|
f151c80b8b | ||
|
|
5f607a3132 | ||
|
|
14bcaa054f | ||
|
|
3d01a3bc03 | ||
|
|
389e40e6f0 | ||
|
|
e94666c4d5 | ||
|
|
f81cac1f70 | ||
|
|
b8b5e92fd2 | ||
|
|
c160079447 | ||
|
|
9dc31f48ef | ||
|
|
49c8e29a56 | ||
|
|
0f1abd953f | ||
|
|
56c5067853 | ||
|
|
ee8e7f5bf0 | ||
|
|
b2b892c430 | ||
|
|
ef4fab1a2c | ||
|
|
dc358da26f | ||
|
|
345708aae6 | ||
|
|
bcdbbc4678 | ||
|
|
af0bd86db4 | ||
|
|
c188984601 | ||
|
|
489339ce4e | ||
|
|
523d2b66bd | ||
|
|
9a40d53d06 | ||
|
|
a257a77f63 | ||
|
|
25251add27 | ||
|
|
ea1021095d | ||
|
|
932de62b38 | ||
|
|
8fd8bb407e | ||
|
|
8ece0e3676 | ||
|
|
b34a449d9f | ||
|
|
60be24660d | ||
|
|
a2be293397 | ||
|
|
e44e8a30d1 | ||
|
|
3cd8d0d08b | ||
|
|
2d95a73923 | ||
|
|
3743af8c78 | ||
|
|
f91daa6b72 |
161
CHANGELOG.md
161
CHANGELOG.md
@@ -10,8 +10,169 @@
|
|||||||
> [!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-10-29
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Dispatcharr: add folders in installer / add more build ressources [@MickLesk](https://github.com/MickLesk) ([#8708](https://github.com/community-scripts/ProxmoxVE/pull/8708))
|
||||||
|
- LibreTranslate: bump torch version [@MickLesk](https://github.com/MickLesk) ([#8710](https://github.com/community-scripts/ProxmoxVE/pull/8710))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Kimai / Ghost / ManageMyDamnLife: Switch to MariaDB [@MickLesk](https://github.com/MickLesk) ([#8712](https://github.com/community-scripts/ProxmoxVE/pull/8712))
|
||||||
|
|
||||||
|
## 2025-10-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Update alpine-komodo.sh fixing missing pull images command [@glopes](https://github.com/glopes) ([#8689](https://github.com/community-scripts/ProxmoxVE/pull/8689))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Update SABnzbd. Include par2cmdline-turbo [@burgerga](https://github.com/burgerga) ([#8648](https://github.com/community-scripts/ProxmoxVE/pull/8648))
|
||||||
|
- jotty: Add more ENV VARS (disabled) [@vhsdream](https://github.com/vhsdream) ([#8688](https://github.com/community-scripts/ProxmoxVE/pull/8688))
|
||||||
|
- Bump bazarr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8677](https://github.com/community-scripts/ProxmoxVE/pull/8677))
|
||||||
|
- Update flaresolverr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8672](https://github.com/community-scripts/ProxmoxVE/pull/8672))
|
||||||
|
|
||||||
|
## 2025-10-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
|
||||||
|
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
|
||||||
|
- jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
|
||||||
|
|
||||||
|
## 2025-10-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
|
||||||
|
|
||||||
|
## 2025-10-25
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
|
||||||
|
|
||||||
|
## 2025-10-24
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
|
||||||
|
- Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
|
||||||
|
|
||||||
|
## 2025-10-23
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
|
||||||
|
- Various Downgrades to Debian 12 (MySQL / OMW / Technitium) [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
|
||||||
|
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Kavita + Updated tools.func (no-same-owner) [@MickLesk](https://github.com/MickLesk) ([#8594](https://github.com/community-scripts/ProxmoxVE/pull/8594))
|
||||||
|
- tools.func: update update_check messages for clarity [@MickLesk](https://github.com/MickLesk) ([#8588](https://github.com/community-scripts/ProxmoxVE/pull/8588))
|
||||||
|
|
||||||
|
## 2025-10-22
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Refactor: Full Change & Feature-Bump of tools.func [@MickLesk](https://github.com/MickLesk) ([#8409](https://github.com/community-scripts/ProxmoxVE/pull/8409))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- part-db: use helper-script php function [@MickLesk](https://github.com/MickLesk) ([#8575](https://github.com/community-scripts/ProxmoxVE/pull/8575))
|
||||||
|
- omada: remove static mongodb install [@MickLesk](https://github.com/MickLesk) ([#8577](https://github.com/community-scripts/ProxmoxVE/pull/8577))
|
||||||
|
|
||||||
|
## 2025-10-21
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- rwMarkable: migrate from rwMarkable => jotty [@vhsdream](https://github.com/vhsdream) ([#8554](https://github.com/community-scripts/ProxmoxVE/pull/8554))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Guardian: Added validation before copying file and fix build command error [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8553](https://github.com/community-scripts/ProxmoxVE/pull/8553))
|
||||||
|
- Unifi: Bump libssl debian version to new update [@fastiuk](https://github.com/fastiuk) ([#8547](https://github.com/community-scripts/ProxmoxVE/pull/8547))
|
||||||
|
- Alpine-TeamSpeak-Server: Fix release version fetching [@tremor021](https://github.com/tremor021) ([#8537](https://github.com/community-scripts/ProxmoxVE/pull/8537))
|
||||||
|
- jellyfin: fix opencl dep for ubuntu [@MickLesk](https://github.com/MickLesk) ([#8535](https://github.com/community-scripts/ProxmoxVE/pull/8535))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#8552](https://github.com/community-scripts/ProxmoxVE/pull/8552))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Open Archiver: Fix application icon [@tremor021](https://github.com/tremor021) ([#8542](https://github.com/community-scripts/ProxmoxVE/pull/8542))
|
||||||
|
|
||||||
|
## 2025-10-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- jellyfin: fix: version conflict [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8520](https://github.com/community-scripts/ProxmoxVE/pull/8520))
|
||||||
|
- Paperless-AI: Increase CPU and RAM [@MickLesk](https://github.com/MickLesk) ([#8507](https://github.com/community-scripts/ProxmoxVE/pull/8507))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Enhance error message for container creation failure [@MickLesk](https://github.com/MickLesk) ([#8511](https://github.com/community-scripts/ProxmoxVE/pull/8511))
|
||||||
|
- Filebrowser-Quantum: change initial config to newer default [@MickLesk](https://github.com/MickLesk) ([#8497](https://github.com/community-scripts/ProxmoxVE/pull/8497))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Remove: GoMFT [@MickLesk](https://github.com/MickLesk) ([#8499](https://github.com/community-scripts/ProxmoxVE/pull/8499))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- palmr: update node to v24 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8521](https://github.com/community-scripts/ProxmoxVE/pull/8521))
|
||||||
|
- jellyfin: add: intel dependencies [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8508](https://github.com/community-scripts/ProxmoxVE/pull/8508))
|
||||||
|
- Jellyfin: ensure libjemalloc is used / increase hdd space [@MickLesk](https://github.com/MickLesk) ([#8494](https://github.com/community-scripts/ProxmoxVE/pull/8494))
|
||||||
|
|
||||||
## 2025-10-19
|
## 2025-10-19
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- rwMarkable: Increase RAM [@vhsdream](https://github.com/vhsdream) ([#8482](https://github.com/community-scripts/ProxmoxVE/pull/8482))
|
||||||
|
- changedetection: fix: update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8480](https://github.com/community-scripts/ProxmoxVE/pull/8480))
|
||||||
|
|
||||||
## 2025-10-18
|
## 2025-10-18
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
63
ct/alpine-garage.sh
Normal file
63
ct/alpine-garage.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/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://garagehq.deuxfleurs.fr/
|
||||||
|
|
||||||
|
APP="Alpine-Garage"
|
||||||
|
var_tags="${var_tags:-alpine;object-storage}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
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 [[ ! -f /usr/local/bin/garage ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
||||||
|
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
rc-service garage stop || true
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing Up Data"
|
||||||
|
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
|
||||||
|
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
|
||||||
|
msg_ok "Backed Up Data"
|
||||||
|
|
||||||
|
msg_info "Updating Garage"
|
||||||
|
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
||||||
|
chmod +x /usr/local/bin/garage
|
||||||
|
echo "${GITEA_RELEASE}" >~/.garage
|
||||||
|
msg_ok "Updated Garage"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
rc-service garage start || rc-service garage restart
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Garage is already at ${GITEA_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}http://${IP}${CL}"
|
||||||
@@ -52,6 +52,7 @@ function update_script() {
|
|||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
||||||
$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
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ function update_script() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.teamspeak3-server_linux_amd64-([0-9]+.[0-9]+.[0-9]+)./\1/p' | head -1) && set -o pipefail
|
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1) && set -o pipefail
|
||||||
|
|
||||||
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
|
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
|
|||||||
19
ct/bazarr.sh
19
ct/bazarr.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,15 +28,28 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop bazarr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
||||||
|
|
||||||
msg_info "Setup Bazarr"
|
msg_info "Setup Bazarr"
|
||||||
mkdir -p /var/lib/bazarr/
|
mkdir -p /var/lib/bazarr/
|
||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
|
if [[ ! -d /opt/bazarr/venv/ ]]; then
|
||||||
|
$STD uv venv /opt/bazarr/venv --python 3.12
|
||||||
|
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --system
|
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
||||||
msg_ok "Setup Bazarr"
|
msg_ok "Setup Bazarr"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start bazarr
|
||||||
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ function update_script() {
|
|||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
|
||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
|
||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
|
||||||
$STD npm install --prefix /opt/browserless esbuild typescript ts-node @types/node
|
$STD npm install --prefix /opt/browserless esbuild typescript ts-node @types/node --save-dev
|
||||||
$STD npm run build --prefix /opt/browserless
|
$STD npm run build --prefix /opt/browserless
|
||||||
$STD npm run build:function --prefix /opt/browserless
|
$STD npm run build:function --prefix /opt/browserless
|
||||||
$STD npm prune production --prefix /opt/browserless
|
$STD npm prune production --prefix /opt/browserless
|
||||||
|
|||||||
42
ct/comfyui.sh
Normal file
42
ct/comfyui.sh
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/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: jdacode
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/comfyanonymous/ComfyUI
|
||||||
|
|
||||||
|
APP="ComfyUI"
|
||||||
|
var_tags="${var_tags:-ai}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-8192}"
|
||||||
|
var_disk="${var_disk:-25}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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 /opt/${APP} ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_error "To update use the ${APP} Manager."
|
||||||
|
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}:8188${CL}"
|
||||||
136
ct/dispatcharr.sh
Normal file
136
ct/dispatcharr.sh
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
#!/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: ekke85 | MickLesk
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Dispatcharr/Dispatcharr
|
||||||
|
|
||||||
|
APP="Dispatcharr"
|
||||||
|
var_tags="${var_tags:-media;arr}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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/dispatcharr" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop dispatcharr-celery
|
||||||
|
systemctl stop dispatcharr-celerybeat
|
||||||
|
systemctl stop dispatcharr-daphne
|
||||||
|
systemctl stop dispatcharr
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
|
||||||
|
if [[ -f /opt/dispatcharr/.env ]]; then
|
||||||
|
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
|
||||||
|
cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
|
||||||
|
cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
|
||||||
|
cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
|
||||||
|
cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/dispatcharr/.env ]]; then
|
||||||
|
set -o allexport
|
||||||
|
source /opt/dispatcharr/.env
|
||||||
|
set +o allexport
|
||||||
|
if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
|
||||||
|
PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
|
||||||
|
msg_info "Database backup created"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
$STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
|
||||||
|
msg_ok "Backup created: $BACKUP_FILE"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
|
||||||
|
|
||||||
|
msg_info "Updating Dispatcharr Backend"
|
||||||
|
if [[ -f /tmp/dispatcharr.env.backup ]]; then
|
||||||
|
mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
|
||||||
|
fi
|
||||||
|
if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
|
||||||
|
mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
|
||||||
|
fi
|
||||||
|
if [[ -f /tmp/start-celery.sh.backup ]]; then
|
||||||
|
mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
|
||||||
|
fi
|
||||||
|
if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
|
||||||
|
mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
|
||||||
|
fi
|
||||||
|
if [[ -f /tmp/start-daphne.sh.backup ]]; then
|
||||||
|
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
rm -rf .venv
|
||||||
|
$STD uv venv
|
||||||
|
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
||||||
|
$STD uv pip install gunicorn gevent celery redis daphne
|
||||||
|
msg_ok "Updated Dispatcharr Backend"
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
cd /opt/dispatcharr/frontend
|
||||||
|
$STD npm install --legacy-peer-deps
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
msg_info "Running Django Migrations"
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
if [[ -f .env ]]; then
|
||||||
|
set -o allexport
|
||||||
|
source .env
|
||||||
|
set +o allexport
|
||||||
|
fi
|
||||||
|
$STD uv run python manage.py migrate --noinput
|
||||||
|
$STD uv run python manage.py collectstatic --noinput
|
||||||
|
msg_ok "Migrations Complete"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start dispatcharr
|
||||||
|
systemctl start dispatcharr-celery
|
||||||
|
systemctl start dispatcharr-celerybeat
|
||||||
|
systemctl start dispatcharr-daphne
|
||||||
|
msg_ok "Started Services"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f /tmp/dispatcharr_db_*.sql
|
||||||
|
msg_ok "Cleanup completed"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
|
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}${CL}"
|
||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -28,13 +28,18 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.3.25"; then
|
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||||
|
msg_error "Wrong Debian version detected!"
|
||||||
|
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop flaresolverr
|
systemctl stop flaresolverr
|
||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
rm -rf /opt/flaresolverr
|
rm -rf /opt/flaresolverr
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start flaresolverr
|
systemctl start flaresolverr
|
||||||
|
|||||||
64
ct/garage.sh
Normal file
64
ct/garage.sh
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/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://garagehq.deuxfleurs.fr/
|
||||||
|
|
||||||
|
APP="Garage"
|
||||||
|
var_tags="${var_tags:-object-storage}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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 /usr/local/bin/garage ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
||||||
|
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop garage
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing Up Data"
|
||||||
|
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
|
||||||
|
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
|
||||||
|
msg_ok "Backed Up Data"
|
||||||
|
|
||||||
|
msg_info "Updating Garage"
|
||||||
|
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
||||||
|
chmod +x /usr/local/bin/garage
|
||||||
|
echo "${GITEA_RELEASE}" >~/.garage
|
||||||
|
msg_ok "Updated Garage"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start garage
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Garage is already at ${GITEA_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}http://${IP}${CL}"
|
||||||
@@ -24,12 +24,9 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if ! dpkg-query -W -f='${Status}' mariadb-server 2>/dev/null | grep -q "install ok installed"; then
|
|
||||||
setup_mysql
|
|
||||||
fi
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating Ghost"
|
||||||
if command -v ghost &>/dev/null; then
|
if command -v ghost &>/dev/null; then
|
||||||
current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}')
|
current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}')
|
||||||
latest_version=$(npm show ghost-cli version)
|
latest_version=$(npm show ghost-cli version)
|
||||||
|
|||||||
53
ct/gomft.sh
53
ct/gomft.sh
@@ -1,53 +0,0 @@
|
|||||||
#!/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/StarFleetCPTN/GoMFT
|
|
||||||
|
|
||||||
APP="GoMFT"
|
|
||||||
var_tags="${var_tags:-backup}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-512}"
|
|
||||||
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 [[ ! -d "/opt/gomft" ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "gomft" "StarFleetCPTN/GoMFT"; then
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop gomft
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "gomft" "StarFleetCPTN/GoMFT" "singlefile" "latest" "/opt/gomft" "gomft*linux-amd64"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start gomft
|
|
||||||
msg_ok "Started $APP"
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
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}:8080${CL}"
|
|
||||||
@@ -40,9 +40,9 @@ if check_for_gh_release "guardian" "HydroshieldMKII/Guardian" ; then
|
|||||||
msg_ok "Backed up Database"
|
msg_ok "Backed up Database"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp /opt/guardian/.env /opt
|
[[ -f "/opt/guardian/.env" ]] && cp "/opt/guardian/.env" "/opt"
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "guardian" "HydroshieldMKII/Guardian" "tarball" "latest" "/opt/guardian"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "guardian" "HydroshieldMKII/Guardian" "tarball" "latest" "/opt/guardian"
|
||||||
mv /opt/.env /opt/guardian
|
[[ -f "/opt/.env" ]] && mv "/opt/.env" "/opt/guardian"
|
||||||
|
|
||||||
if [[ -f "/tmp/plex-guard.db.backup" ]] ; then
|
if [[ -f "/tmp/plex-guard.db.backup" ]] ; then
|
||||||
msg_info "Restoring Database"
|
msg_info "Restoring Database"
|
||||||
@@ -58,7 +58,8 @@ if check_for_gh_release "guardian" "HydroshieldMKII/Guardian" ; then
|
|||||||
|
|
||||||
cd /opt/guardian/frontend
|
cd /opt/guardian/frontend
|
||||||
$STD npm ci
|
$STD npm ci
|
||||||
$STD DEPLOYMENT_MODE=standalone npm run build
|
export DEPLOYMENT_MODE=standalone
|
||||||
|
$STD npm run build
|
||||||
msg_ok "Updated Guardian"
|
msg_ok "Updated Guardian"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
|||||||
6
ct/headers/alpine-garage
Normal file
6
ct/headers/alpine-garage
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ______
|
||||||
|
/ | / /___ (_)___ ___ / ____/___ __________ _____ ____
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / / / /_/ / /_/ / __/
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/_/ \__,_/\__, /\___/
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/comfyui
Normal file
6
ct/headers/comfyui
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ ____ __ ______
|
||||||
|
/ ____/___ ____ ___ / __/_ __/ / / / _/
|
||||||
|
/ / / __ \/ __ `__ \/ /_/ / / / / / // /
|
||||||
|
/ /___/ /_/ / / / / / / __/ /_/ / /_/ // /
|
||||||
|
\____/\____/_/ /_/ /_/_/ \__, /\____/___/
|
||||||
|
/____/
|
||||||
6
ct/headers/dispatcharr
Normal file
6
ct/headers/dispatcharr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _ __ __
|
||||||
|
/ __ \(_)________ ____ _/ /______/ /_ ____ ___________
|
||||||
|
/ / / / / ___/ __ \/ __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
|
||||||
|
/ /_/ / (__ ) /_/ / /_/ / /_/ /__/ / / / /_/ / / / /
|
||||||
|
/_____/_/____/ .___/\__,_/\__/\___/_/ /_/\__,_/_/ /_/
|
||||||
|
/_/
|
||||||
6
ct/headers/garage
Normal file
6
ct/headers/garage
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______
|
||||||
|
/ ____/___ __________ _____ ____
|
||||||
|
/ / __/ __ `/ ___/ __ `/ __ `/ _ \
|
||||||
|
/ /_/ / /_/ / / / /_/ / /_/ / __/
|
||||||
|
\____/\__,_/_/ \__,_/\__, /\___/
|
||||||
|
/____/
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
______ __ _______________
|
|
||||||
/ ____/___ / |/ / ____/_ __/
|
|
||||||
/ / __/ __ \/ /|_/ / /_ / /
|
|
||||||
/ /_/ / /_/ / / / / __/ / /
|
|
||||||
\____/\____/_/ /_/_/ /_/
|
|
||||||
|
|
||||||
6
ct/headers/jotty
Normal file
6
ct/headers/jotty
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ __
|
||||||
|
(_)___ / /_/ /___ __
|
||||||
|
/ / __ \/ __/ __/ / / /
|
||||||
|
/ / /_/ / /_/ /_/ /_/ /
|
||||||
|
__/ /\____/\__/\__/\__, /
|
||||||
|
/___/ /____/
|
||||||
6
ct/headers/patchmon
Normal file
6
ct/headers/patchmon
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ __ __ ___
|
||||||
|
/ __ \____ _/ /______/ /_ / |/ /___ ____
|
||||||
|
/ /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
|
||||||
|
/ ____/ /_/ / /_/ /__/ / / / / / / /_/ / / / /
|
||||||
|
/_/ \__,_/\__/\___/_/ /_/_/ /_/\____/_/ /_/
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ APP="Jellyfin"
|
|||||||
var_tags="${var_tags:-media}"
|
var_tags="${var_tags:-media}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-16}"
|
||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -27,11 +27,29 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt-get update
|
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||||
$STD apt-get -y upgrade
|
msg_info "Updating Intel Dependencies"
|
||||||
$STD apt-get -y --with-new-pkgs upgrade jellyfin jellyfin-server
|
rm .intel-*
|
||||||
msg_ok "Updated ${APP} LXC"
|
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
||||||
|
msg_ok "Updated Intel Dependencies"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Jellyfin"
|
||||||
|
if ! dpkg -s libjemalloc2 >/dev/null 2>&1; then
|
||||||
|
$STD apt install -y libjemalloc2
|
||||||
|
fi
|
||||||
|
if [[ ! -f /usr/lib/libjemalloc.so ]]; then
|
||||||
|
ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so
|
||||||
|
fi
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
$STD apt -y --with-new-pkgs upgrade jellyfin jellyfin-server
|
||||||
|
msg_ok "Updated Jellyfin"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
74
ct/jotty.sh
Normal file
74
ct/jotty.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/fccview/jotty
|
||||||
|
|
||||||
|
APP="jotty"
|
||||||
|
var_tags="${var_tags:-tasks;notes}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-3072}"
|
||||||
|
var_disk="${var_disk:-6}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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/jotty ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "jotty" "fccview/jotty"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop jotty
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up configuration & data"
|
||||||
|
cd /opt/jotty
|
||||||
|
cp ./.env /opt/app.env
|
||||||
|
$STD tar -cf /opt/data_config.tar ./data ./config
|
||||||
|
msg_ok "Backed up configuration & data"
|
||||||
|
|
||||||
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
|
||||||
|
|
||||||
|
msg_info "Updating app"
|
||||||
|
cd /opt/jotty
|
||||||
|
$STD yarn --frozen-lockfile
|
||||||
|
$STD yarn next telemetry disable
|
||||||
|
$STD yarn build
|
||||||
|
msg_ok "Updated app"
|
||||||
|
|
||||||
|
msg_info "Restoring configuration & data"
|
||||||
|
mv /opt/app.env /opt/jotty/.env
|
||||||
|
$STD tar -xf /opt/data_config.tar
|
||||||
|
msg_ok "Restored configuration & data"
|
||||||
|
|
||||||
|
msg_info "Restarting ${APP} service"
|
||||||
|
systemctl start jotty
|
||||||
|
msg_ok "Restarted ${APP} service"
|
||||||
|
rm /opt/data_config.tar
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
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}"
|
||||||
39
ct/kavita.sh
39
ct/kavita.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -20,23 +20,28 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /opt/Kavita ]]; then
|
if [[ ! -d /opt/Kavita ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating $APP LXC"
|
|
||||||
systemctl stop kavita
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
$STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner
|
|
||||||
rm -rf Kavita/config
|
|
||||||
cp -r Kavita/* /opt/Kavita
|
|
||||||
rm -rf Kavita
|
|
||||||
systemctl start kavita
|
|
||||||
msg_ok "Updated $APP LXC"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "kavita" "Kareadita/Kavita"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop kavita
|
||||||
|
msg_ok "Service Stopped"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz"
|
||||||
|
chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start kavita
|
||||||
|
msg_ok "Service Started"
|
||||||
|
msg_ok "Update Successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
43
ct/kimai.sh
43
ct/kimai.sh
@@ -23,32 +23,21 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if ! command -v lsb_release; then
|
|
||||||
apt install -y lsb-release
|
|
||||||
fi
|
|
||||||
if [[ ! -d /opt/kimai ]]; then
|
if [[ ! -d /opt/kimai ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
PHP_VERSION="8.4" PHP_MODULE="gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm" PHP_APACHE="YES" setup_php
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
|
|
||||||
$STD apt-get install -y \
|
|
||||||
php8.4 composer \
|
|
||||||
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
|
|
||||||
libapache2-mod-php8.4
|
|
||||||
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if check_for_gh_release "Kimai" "kimai/kimai"; then
|
||||||
BACKUP_DIR="/opt/kimai_backup"
|
BACKUP_DIR="/opt/kimai_backup"
|
||||||
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping Apache2"
|
msg_info "Stopping Apache2"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Apache2"
|
msg_ok "Stopped Apache2"
|
||||||
@@ -60,15 +49,9 @@ function update_script() {
|
|||||||
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
|
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
|
||||||
msg_ok "Backup completed"
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
fetch_and_deploy_gh_release "Kimai" "kimai/kimai" "prebuild" "latest" "/opt/kimai" "kimai-release-*.zip"
|
||||||
trap "echo Unable to download release file for version ${RELEASE}; try again later" ERR
|
|
||||||
set -e
|
msg_info "Updating Kimai"
|
||||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
|
|
||||||
$STD unzip "${RELEASE}".zip
|
|
||||||
set +e
|
|
||||||
trap - ERR
|
|
||||||
rm -rf /opt/kimai
|
|
||||||
mv kimai-"${RELEASE}" /opt/kimai
|
|
||||||
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
|
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
|
||||||
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
|
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
|
||||||
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
|
||||||
@@ -76,8 +59,7 @@ function update_script() {
|
|||||||
cd /opt/kimai
|
cd /opt/kimai
|
||||||
$STD composer install --no-dev --optimize-autoloader
|
$STD composer install --no-dev --optimize-autoloader
|
||||||
$STD bin/console kimai:update
|
$STD bin/console kimai:update
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
msg_ok "Updated Kimai"
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Apache2"
|
msg_info "Starting Apache2"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
@@ -90,14 +72,7 @@ function update_script() {
|
|||||||
chown -R www-data:www-data /opt/*
|
chown -R www-data:www-data /opt/*
|
||||||
chmod -R 777 /opt/*
|
chmod -R 777 /opt/*
|
||||||
msg_ok "Setup Permissions"
|
msg_ok "Setup Permissions"
|
||||||
|
msg_ok "Updated Successfully!"
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf "${RELEASE}".zip
|
|
||||||
rm -rf "$BACKUP_DIR"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,21 +28,24 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "libretranslate" "LibreTranslate/LibreTranslate"; then
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop libretranslate
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
msg_info "Updating $APP"
|
setup_uv
|
||||||
|
|
||||||
|
if check_for_gh_release "libretranslate" "LibreTranslate/LibreTranslate"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop libretranslate
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating LibreTranslate"
|
||||||
cd /opt/libretranslate
|
cd /opt/libretranslate
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
$STD pip install -U libretranslate
|
$STD pip install -U libretranslate
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated LibreTranslate"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting Service"
|
||||||
systemctl start libretranslate
|
systemctl start libretranslate
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started Service"
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
|
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
|
||||||
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc
|
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
if ! command -v deno &>/dev/null; then
|
if ! command -v deno &>/dev/null; then
|
||||||
export DENO_INSTALL="/usr/local"
|
export DENO_INSTALL="/usr/local"
|
||||||
@@ -110,6 +110,7 @@ EOF
|
|||||||
|
|
||||||
msg_ok "Updated Successfully!"
|
msg_ok "Updated Successfully!"
|
||||||
fi
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
14
ct/mylar3.sh
14
ct/mylar3.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: davalanche
|
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/mylar3/mylar3
|
# Source: https://github.com/mylar3/mylar3
|
||||||
|
|
||||||
@@ -25,16 +25,10 @@ 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/mylar3/mylar3/releases/latest | jq -r '.tag_name')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if check_for_gh_release "mylar3" "mylar3/mylar3"; then
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
|
||||||
rm -rf /opt/mylar3/* /opt/mylar3/.*
|
|
||||||
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
|
|
||||||
systemctl restart mylar3
|
systemctl restart mylar3
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
24
ct/mysql.sh
24
ct/mysql.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -20,18 +20,18 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
|
if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y upgrade
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -28,12 +28,20 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v yarn &>/dev/null; then
|
if command -v node &> /dev/null; then
|
||||||
msg_info "Installing Yarn"
|
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
|
||||||
$STD npm install -g yarn
|
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then
|
||||||
msg_ok "Installed Yarn"
|
systemctl stop openresty
|
||||||
|
apt-get purge -y nodejs npm
|
||||||
|
apt-get autoremove -y
|
||||||
|
rm -rf /usr/local/bin/node /usr/local/bin/npm
|
||||||
|
rm -rf /usr/local/lib/node_modules
|
||||||
|
rm -rf ~/.npm
|
||||||
|
rm -rf /root/.npm
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||||
|
|||||||
24
ct/omv.sh
24
ct/omv.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -20,18 +20,18 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
|
if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y upgrade
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
||||||
|
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
||||||
NODE_VERSION="20" NODE_MODULE="$PNPM" setup_nodejs
|
NODE_VERSION="24" NODE_MODULE="$PNPM" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cd /opt/palmr/apps/server
|
cd /opt/palmr/apps/server
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
|
|
||||||
APP="Paperless-AI"
|
APP="Paperless-AI"
|
||||||
var_tags="${var_tags:-ai;document}"
|
var_tags="${var_tags:-ai;document}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-4}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-20}"
|
var_disk="${var_disk:-20}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
|
|||||||
76
ct/patchmon.sh
Normal file
76
ct/patchmon.sh
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#!/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: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/PatchMon/PatchMon
|
||||||
|
|
||||||
|
APP="PatchMon"
|
||||||
|
var_tags="${var_tags:-monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
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/patchmon" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
if check_for_gh_release "PatchMon" "PatchMon/PatchMon"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop patchmon-server
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp /opt/patchmon/backend/.env /opt/backend.env
|
||||||
|
cp /opt/patchmon/frontend/.env /opt/frontend.env
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
|
||||||
|
|
||||||
|
msg_info "Updating PatchMon"
|
||||||
|
cd /opt/patchmon
|
||||||
|
export NODE_ENV=production
|
||||||
|
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
cd /opt/patchmon/backend
|
||||||
|
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
cd /opt/patchmon/frontend
|
||||||
|
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
$STD npm run build
|
||||||
|
cd /opt/patchmon/backend
|
||||||
|
mv /opt/backend.env /opt/patchmon/backend/.env
|
||||||
|
mv /opt/frontend.env /opt/patchmon/frontend/.env
|
||||||
|
$STD npx prisma migrate deploy
|
||||||
|
$STD npx prisma generate
|
||||||
|
msg_ok "Updated PatchMon"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start patchmon-server
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated Successfully!"
|
||||||
|
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}${CL}"
|
||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -27,12 +27,13 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating PiHole"
|
||||||
set +e
|
set +e
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
/usr/local/bin/pihole -up
|
/usr/local/bin/pihole -up
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated PiHole"
|
||||||
|
msg_ok "Updated Successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,31 +27,28 @@ 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/projectsend/projectsend/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 check_for_gh_release "projectsend" "projectsend/projectsend"; 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}"
|
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
||||||
cd /opt
|
if [[ ! $php_ver == "8.4"* ]]; then
|
||||||
curl -fsSL "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" -o $(basename "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip")
|
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="pdo,mysql,gettext,fileinfo" setup_php
|
||||||
$STD unzip -o "projectsend-r${RELEASE}.zip" -d projectsend
|
fi
|
||||||
|
|
||||||
|
mv /opt/projectsend/includes/sys.config.php /opt/sys.config.php
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
|
||||||
|
mv /opt/sys.config.php /opt/projectsend/includes/sys.config.php
|
||||||
chown -R www-data:www-data /opt/projectsend
|
chown -R www-data:www-data /opt/projectsend
|
||||||
chmod -R 775 /opt/projectsend
|
chmod -R 775 /opt/projectsend
|
||||||
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"
|
|
||||||
rm -rf "/opt/projectsend-r${RELEASE}.zip"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ function update_script() {
|
|||||||
$STD unzip "$brwsr_tmp"
|
$STD unzip "$brwsr_tmp"
|
||||||
mv browserless-"$TAG"/ /opt/browserless
|
mv browserless-"$TAG"/ /opt/browserless
|
||||||
cd /opt/browserless
|
cd /opt/browserless
|
||||||
|
$STD npm install typescript
|
||||||
|
$STD npm install esbuild
|
||||||
$STD npm install
|
$STD npm install
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
APP="rwMarkable"
|
APP="rwMarkable"
|
||||||
var_tags="${var_tags:-tasks;notes}"
|
var_tags="${var_tags:-tasks;notes}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-3072}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-6}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
@@ -29,38 +29,41 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "rwMarkable" "fccview/rwMarkable"; then
|
msg_info "Stopping service"
|
||||||
msg_info "Stopping Service"
|
systemctl -q disable --now rwmarkable
|
||||||
systemctl stop rwmarkable
|
msg_ok "Stopped Service"
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up configuration & data"
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
cd /opt/rwmarkable
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
|
||||||
cp ./.env /opt/app.env
|
|
||||||
$STD tar -cf /opt/data_config.tar ./data ./config
|
|
||||||
msg_ok "Backed up configuration & data"
|
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
msg_info "Updating app"
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rwMarkable" "fccview/rwMarkable" "tarball" "latest" "/opt/rwmarkable"
|
cd /opt/jotty
|
||||||
|
$STD yarn --frozen-lockfile
|
||||||
|
$STD yarn next telemetry disable
|
||||||
|
$STD yarn build
|
||||||
|
msg_ok "Updated app"
|
||||||
|
|
||||||
msg_info "Updating app"
|
msg_info "Migrating configuration & data"
|
||||||
cd /opt/rwmarkable
|
cp /opt/rwmarkable/.env /opt/jotty/.env
|
||||||
$STD yarn --frozen-lockfile
|
mkdir -p /opt/jotty/data
|
||||||
$STD yarn next telemetry disable
|
cp -r /opt/rwmarkable/data/* /opt/jotty/data
|
||||||
$STD yarn build
|
cp -r /opt/rwmarkable/config/* /opt/jotty/config
|
||||||
msg_ok "Updated app"
|
msg_ok "Migrated configuration & data"
|
||||||
|
|
||||||
msg_info "Restoring configuration & data"
|
msg_info "Patching systemd service file"
|
||||||
mv /opt/app.env /opt/rwmarkable/.env
|
sed -i 's/rw[M|m]arkable/jotty/g' /etc/systemd/system/rwmarkable.service
|
||||||
$STD tar -xf /opt/data_config.tar
|
mv /etc/systemd/system/rwmarkable.service /etc/systemd/system/jotty.service
|
||||||
msg_ok "Restored configuration & data"
|
systemctl daemon-reload
|
||||||
|
msg_ok "Patched systemd service file"
|
||||||
|
|
||||||
msg_info "Restarting ${APP} service"
|
msg_info "Patching update script"
|
||||||
systemctl start rwmarkable
|
sed -i 's/rwmarkable/jotty/g' /usr/bin/update
|
||||||
msg_ok "Restarted ${APP} service"
|
msg_ok "Patched update script"
|
||||||
rm /opt/data_config.tar
|
|
||||||
msg_ok "Updated Successfully"
|
msg_info "Starting jotty service"
|
||||||
fi
|
systemctl -q enable --now jotty
|
||||||
|
msg_ok "Started jotty service"
|
||||||
|
msg_ok "Migrated Successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,40 +24,38 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
|
if par2 --version | grep -q "par2cmdline-turbo"; then
|
||||||
|
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ! -d /opt/sabnzbd ]]; then
|
if [[ ! -d /opt/sabnzbd ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
setup_uv
|
if check_for_gh_release "sabnzbd-org" "sabnzbd/sabnzbd"; then
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
if [[ -f /opt/${APP}_version.txt ]] && [[ "${RELEASE}" == "$(cat /opt/${APP}_version.txt)" ]]; then
|
systemctl stop sabnzbd
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
||||||
exit
|
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
||||||
fi
|
|
||||||
setup_uv
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
|
||||||
systemctl stop sabnzbd
|
|
||||||
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
|
|
||||||
tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
|
|
||||||
rm -f "$temp_file"
|
|
||||||
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
|
||||||
msg_info "Migrating SABnzbd to uv virtual environment"
|
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
|
||||||
msg_ok "Created uv venv at /opt/sabnzbd/venv"
|
|
||||||
|
|
||||||
if grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
|
|
||||||
sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
|
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
||||||
systemctl daemon-reload
|
msg_info "Migrating SABnzbd to uv virtual environment"
|
||||||
msg_ok "Updated SABnzbd service to use uv venv"
|
$STD uv venv /opt/sabnzbd/venv
|
||||||
|
msg_ok "Created uv venv at /opt/sabnzbd/venv"
|
||||||
|
|
||||||
|
if grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
|
||||||
|
sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
msg_ok "Updated SABnzbd service to use uv venv"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
$STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
|
||||||
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
|
|
||||||
|
systemctl start sabnzbd
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
$STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
|
|
||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
systemctl start sabnzbd
|
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://docs.bunkerweb.io/latest/",
|
"documentation": "https://docs.bunkerweb.io/latest/",
|
||||||
"website": "https://www.bunkerweb.io/",
|
"website": "https://www.bunkerweb.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
|
||||||
"config_path": "/opt/bunkerweb/variables.env",
|
"config_path": "/etc/bunkerweb/variables.env",
|
||||||
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
|
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
44
frontend/public/json/comfyui.json
Normal file
44
frontend/public/json/comfyui.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "ComfyUI",
|
||||||
|
"slug": "comfyui",
|
||||||
|
"categories": [
|
||||||
|
20
|
||||||
|
],
|
||||||
|
"date_created": "2025-10-26",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt",
|
||||||
|
"interface_port": 8188,
|
||||||
|
"documentation": "https://github.com/comfyanonymous/ComfyUI",
|
||||||
|
"website": "https://www.comfy.org/",
|
||||||
|
"logo": "https://framerusercontent.com/images/3cNQMWKzIhIrQ5KErBm7dSmbd2w.png",
|
||||||
|
"description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/comfyui.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 4,
|
||||||
|
"ram": 8192,
|
||||||
|
"hdd": 25,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Application takes long time to install. Please be patient!",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please check that you have installed the drivers for your GPU.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "admin",
|
||||||
"password": null
|
"password": "admin"
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
|
|||||||
35
frontend/public/json/dispatcharr.json
Normal file
35
frontend/public/json/dispatcharr.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Dispatcharr",
|
||||||
|
"slug": "dispatcharr",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2025-10-27",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9191,
|
||||||
|
"documentation": "https://dispatcharr.github.io/Dispatcharr-Docs/",
|
||||||
|
"website": "https://github.com/Dispatcharr/Dispatcharr",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dispatcharr.webp",
|
||||||
|
"config_path": "/opt/dispatcharr/.env",
|
||||||
|
"description": "Dispatcharr is an open-source powerhouse for managing IPTV streams and EPG data with elegance and control. Born from necessity and built with passion, it started as a personal project by OkinawaBoss and evolved with contributions from legends like dekzter, SergeantPanda and Bucatini.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/dispatcharr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -31,10 +31,5 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": []
|
||||||
{
|
|
||||||
"text": "Flaresolverr is pinned to Version 3.3.25 because they add an breaking python package which doesn't work with debian 12.`",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
59
frontend/public/json/garage.json
Normal file
59
frontend/public/json/garage.json
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"name": "Garage",
|
||||||
|
"slug": "garage",
|
||||||
|
"categories": [
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"date_created": "2025-10-27",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3900,
|
||||||
|
"documentation": "https://garagehq.deuxfleurs.fr/documentation/quick-start/",
|
||||||
|
"website": "https://garagehq.deuxfleurs.fr/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garage.webp",
|
||||||
|
"config_path": "/etc/garage.toml",
|
||||||
|
"description": "Garage is a lightweight, self-hosted, S3-compatible object storage service built for distributed environments. It is designed to be simple, efficient, and easy to deploy across multiple nodes.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/garage.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-garage.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "The Garage configuration file is located at `/etc/garage.toml`. You can edit RPC and API bindings, tokens, and data directories there.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Admin API runs by default on port `3903`, S3 API on port `3900`, Web UI on `3902`. Adjust firewall rules accordingly.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "To view your generated tokens and RPC secret, check `~/garage.creds` after installation.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "GoMFT",
|
|
||||||
"slug": "gomft",
|
|
||||||
"categories": [
|
|
||||||
7
|
|
||||||
],
|
|
||||||
"date_created": "2025-03-18",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 8080,
|
|
||||||
"documentation": "https://github.com/StarFleetCPTN/GoMFT#configuration",
|
|
||||||
"website": "https://github.com/StarFleetCPTN/GoMFT",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gomft.webp",
|
|
||||||
"config_path": "/opt/gomft/.env",
|
|
||||||
"description": "GoMFT is a web-based managed file transfer application built with Go, leveraging rclone for robust file transfer capabilities. It provides a user-friendly interface for configuring, scheduling, and monitoring file transfers across various storage providers.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/gomft.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 512,
|
|
||||||
"hdd": 4,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": "admin@example.com",
|
|
||||||
"password": "admin"
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "For additional configuration options check the documentation.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
|
"documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
|
||||||
"config_path": "/opt/guardian/.env",
|
"config_path": "/opt/guardian/.env",
|
||||||
"website": "https://github.com/HydroshieldMKII/Guardian",
|
"website": "https://github.com/HydroshieldMKII/Guardian",
|
||||||
"logo": null,
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp",
|
||||||
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
|
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 8,
|
"hdd": 16,
|
||||||
"os": "ubuntu",
|
"os": "ubuntu",
|
||||||
"version": "24.04"
|
"version": "24.04"
|
||||||
}
|
}
|
||||||
|
|||||||
40
frontend/public/json/jotty.json
Normal file
40
frontend/public/json/jotty.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "jotty",
|
||||||
|
"slug": "jotty",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-10-21",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://github.com/fccview/jotty/blob/main/README.md",
|
||||||
|
"website": "https://github.com/fccview/jotty",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jotty.webp",
|
||||||
|
"config_path": "/opt/jotty/.env",
|
||||||
|
"description": "A simple, self-hosted app for your checklists and notes. Tired of bloated, cloud-based to-do apps? jotty is a lightweight alternative for managing your personal checklists and notes. It's built with Next.js 14, is easy to deploy, and keeps all your data on your own server.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/jotty.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 3072,
|
||||||
|
"hdd": 6,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "jotty was previously named rwMarkable",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "MySQL",
|
|
||||||
"slug": "mysql",
|
|
||||||
"categories": [
|
|
||||||
8
|
|
||||||
],
|
|
||||||
"date_created": "2024-10-10",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": null,
|
|
||||||
"documentation": "https://dev.mysql.com/doc/",
|
|
||||||
"website": "https://www.mysql.com/",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
|
|
||||||
"config_path": "",
|
|
||||||
"description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/mysql.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 1024,
|
|
||||||
"hdd": 4,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Database credentials: `cat mysql.creds`",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
48
frontend/public/json/mysql.json.bak
Normal file
48
frontend/public/json/mysql.json.bak
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "MySQL",
|
||||||
|
"slug": "mysql",
|
||||||
|
"categories": [
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"date_created": "2024-10-10",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://dev.mysql.com/doc/",
|
||||||
|
"website": "https://www.mysql.com/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/mysql.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Database credentials: `cat mysql.creds`",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://docs.openarchiver.com/",
|
"documentation": "https://docs.openarchiver.com/",
|
||||||
"config_path": "/opt/openarchiver/.env",
|
"config_path": "/opt/openarchiver/.env",
|
||||||
"website": "https://openarchiver.com/",
|
"website": "https://openarchiver.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/OpenArchiver.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/open-archiver.webp",
|
||||||
"description": "Open Archiver is a secure, self-hosted email archiving solution, and it's completely open source. Get an email archiver that enables full-text search across email and attachments. Create a permanent, searchable, and compliant mail archive from Google Workspace, Microsoft 35, and any IMAP server.",
|
"description": "Open Archiver is a secure, self-hosted email archiving solution, and it's completely open source. Get an email archiver that enables full-text search across email and attachments. Create a permanent, searchable, and compliant mail archive from Google Workspace, Microsoft 35, and any IMAP server.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/paperless-ai.sh",
|
"script": "ct/paperless-ai.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 4,
|
||||||
"ram": 2048,
|
"ram": 4096,
|
||||||
"hdd": 20,
|
"hdd": 20,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "13"
|
||||||
|
|||||||
35
frontend/public/json/patchmon.json
Normal file
35
frontend/public/json/patchmon.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "PatchMon",
|
||||||
|
"slug": "patchmon",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-10-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3399,
|
||||||
|
"documentation": "https://docs.patchmon.net",
|
||||||
|
"website": "https://patchmon.net",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/patchmon.webp",
|
||||||
|
"config_path": "/opt/patchmon/backend/.env, /opt/patchmon/frontend/.env",
|
||||||
|
"description": "Monitor Linux patches across all your hosts with real-time visibility, security update tracking, and comprehensive package management.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/patchmon.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "rwMarkable",
|
|
||||||
"slug": "rwmarkable",
|
|
||||||
"categories": [
|
|
||||||
12
|
|
||||||
],
|
|
||||||
"date_created": "2025-10-09",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3000,
|
|
||||||
"documentation": "https://github.com/fccview/rwMarkable/blob/main/README.md",
|
|
||||||
"website": "https://github.com/fccview/rwMarkable",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/rwmarkable.webp",
|
|
||||||
"config_path": "/opt/rwmarkable/.env",
|
|
||||||
"description": "A simple, self-hosted app for your checklists and notes. Tired of bloated, cloud-based to-do apps? rwMarkable is a lightweight alternative for managing your personal checklists and notes. It's built with Next.js 14, is easy to deploy, and keeps all your data on your own server.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/rwmarkable.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 6,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -35,6 +35,10 @@
|
|||||||
{
|
{
|
||||||
"text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
|
"text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Directory `/opt/urbackup/backups` is set as initial backup path. Change it to your liking",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
84
install/alpine-garage-install.sh
Normal file
84
install/alpine-garage-install.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://garagehq.deuxfleurs.fr/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apk add --no-cache openssl
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
||||||
|
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
||||||
|
chmod +x /usr/local/bin/garage
|
||||||
|
mkdir -p /var/lib/garage/{data,meta,snapshots}
|
||||||
|
mkdir -p /etc/garage
|
||||||
|
RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64)
|
||||||
|
ADMIN_TOKEN=$(openssl rand -base64 32)
|
||||||
|
METRICS_TOKEN=$(openssl rand -base64 32)
|
||||||
|
{
|
||||||
|
echo "Garage Tokens and Secrets"
|
||||||
|
echo "RPC Secret: $RPC_SECRET"
|
||||||
|
echo "Admin Token: $ADMIN_TOKEN"
|
||||||
|
echo "Metrics Token: $METRICS_TOKEN"
|
||||||
|
} >~/garage.creds
|
||||||
|
echo $GITEA_RELEASE >>~/.garage
|
||||||
|
cat <<EOF >/etc/garage.toml
|
||||||
|
metadata_dir = "/var/lib/garage/meta"
|
||||||
|
data_dir = "/var/lib/garage/data"
|
||||||
|
db_engine = "sqlite"
|
||||||
|
replication_factor = 1
|
||||||
|
|
||||||
|
rpc_bind_addr = "0.0.0.0:3901"
|
||||||
|
rpc_public_addr = "127.0.0.1:3901"
|
||||||
|
rpc_secret = "${RPC_SECRET}"
|
||||||
|
|
||||||
|
[s3_api]
|
||||||
|
s3_region = "garage"
|
||||||
|
api_bind_addr = "0.0.0.0:3900"
|
||||||
|
root_domain = ".s3.garage"
|
||||||
|
|
||||||
|
[s3_web]
|
||||||
|
bind_addr = "0.0.0.0:3902"
|
||||||
|
root_domain = ".web.garage"
|
||||||
|
index = "index.html"
|
||||||
|
|
||||||
|
[k2v_api]
|
||||||
|
api_bind_addr = "0.0.0.0:3904"
|
||||||
|
|
||||||
|
[admin]
|
||||||
|
api_bind_addr = "0.0.0.0:3903"
|
||||||
|
admin_token = "${ADMIN_TOKEN}"
|
||||||
|
metrics_token = "${METRICS_TOKEN}"
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Garage"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<'EOF' >/etc/init.d/garage
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
name="Garage Object Storage"
|
||||||
|
command="/usr/local/bin/garage"
|
||||||
|
command_args="server"
|
||||||
|
command_background="yes"
|
||||||
|
pidfile="/run/garage.pid"
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x /etc/init.d/garage
|
||||||
|
$STD rc-update add garage default
|
||||||
|
$STD rc-service garage restart || rc-service garage start
|
||||||
|
msg_ok "Service active"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -20,7 +20,7 @@ $STD apk add --no-cache \
|
|||||||
libc6-compat
|
libc6-compat
|
||||||
msg_ok "Installed dependencies"
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]\+\).*/\1/p' | head -1)
|
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1)
|
||||||
msg_info "Installing Teamspeak Server v${RELEASE}"
|
msg_info "Installing Teamspeak Server v${RELEASE}"
|
||||||
mkdir -p /opt/teamspeak-server
|
mkdir -p /opt/teamspeak-server
|
||||||
cd /opt/teamspeak-server
|
cd /opt/teamspeak-server
|
||||||
|
|||||||
@@ -13,20 +13,15 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setup Python3"
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
$STD apt-get install -y \
|
|
||||||
python3 \
|
|
||||||
python3-dev
|
|
||||||
msg_ok "Setup Python3"
|
|
||||||
|
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
|
||||||
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
|
||||||
|
|
||||||
msg_info "Installing Bazarr"
|
msg_info "Installing Bazarr"
|
||||||
mkdir -p /var/lib/bazarr/
|
mkdir -p /var/lib/bazarr/
|
||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --system
|
$STD uv venv /opt/bazarr/venv --python 3.12
|
||||||
|
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
||||||
msg_ok "Installed Bazarr"
|
msg_ok "Installed Bazarr"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -41,7 +36,7 @@ UMask=0002
|
|||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py
|
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py
|
||||||
KillSignal=SIGINT
|
KillSignal=SIGINT
|
||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
SyslogIdentifier=bazarr
|
SyslogIdentifier=bazarr
|
||||||
|
|||||||
87
install/comfyui-install.sh
Normal file
87
install/comfyui-install.sh
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: jdacode
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/comfyanonymous/ComfyUI
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "${TAB3}Choose the GPU type for ComfyUI:"
|
||||||
|
echo "${TAB3}[1]-None [2]-NVIDIA [3]-AMD [4]-Intel"
|
||||||
|
read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice
|
||||||
|
gpu_choice=${gpu_choice:-1}
|
||||||
|
case "$gpu_choice" in
|
||||||
|
1) comfyui_gpu_type="none";;
|
||||||
|
2) comfyui_gpu_type="nvidia";;
|
||||||
|
3) comfyui_gpu_type="amd";;
|
||||||
|
4) comfyui_gpu_type="intel";;
|
||||||
|
*) comfyui_gpu_type="none"; echo "${TAB3}Invalid choice. Defaulting to ${comfyui_gpu_type}." ;;
|
||||||
|
esac
|
||||||
|
echo
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
|
||||||
|
|
||||||
|
msg_info "Python dependencies"
|
||||||
|
$STD uv venv "/opt/ComfyUI/venv"
|
||||||
|
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
|
||||||
|
$STD uv pip install \
|
||||||
|
torch \
|
||||||
|
torchvision \
|
||||||
|
torchaudio \
|
||||||
|
--extra-index-url "https://download.pytorch.org/whl/cu128" \
|
||||||
|
--python="/opt/ComfyUI/venv/bin/python"
|
||||||
|
elif [[ "${comfyui_gpu_type,,}" == "amd" ]]; then
|
||||||
|
$STD uv pip install \
|
||||||
|
torch \
|
||||||
|
torchvision \
|
||||||
|
torchaudio \
|
||||||
|
--index-url "https://download.pytorch.org/whl/rocm6.3" \
|
||||||
|
--python="/opt/ComfyUI/venv/bin/python"
|
||||||
|
elif [[ "${comfyui_gpu_type,,}" == "intel" ]]; then
|
||||||
|
$STD uv pip install \
|
||||||
|
torch \
|
||||||
|
torchvision \
|
||||||
|
torchaudio \
|
||||||
|
--index-url "https://download.pytorch.org/whl/xpu" \
|
||||||
|
--python="/opt/ComfyUI/venv/bin/python"
|
||||||
|
fi
|
||||||
|
$STD uv pip install -r "/opt/ComfyUI/requirements.txt" --python="/opt/ComfyUI/venv/bin/python"
|
||||||
|
msg_ok "Python dependencies"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/comfyui.service
|
||||||
|
[Unit]
|
||||||
|
Description=ComfyUI Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/ComfyUI
|
||||||
|
ExecStart=/opt/ComfyUI/venv/bin/python /opt/ComfyUI/main.py --listen --port 8188 --cpu
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now comfyui
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt -y autoremove
|
||||||
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
268
install/dispatcharr-install.sh
Normal file
268
install/dispatcharr-install.sh
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: ekke85
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Dispatcharr/Dispatcharr
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
build-essential \
|
||||||
|
python3-dev \
|
||||||
|
libpq-dev \
|
||||||
|
nginx \
|
||||||
|
redis-server \
|
||||||
|
ffmpeg \
|
||||||
|
procps \
|
||||||
|
streamlink
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
|
msg_info "Creating PostgreSQL Database"
|
||||||
|
DB_NAME=dispatcharr_db
|
||||||
|
DB_USER=dispatcharr_usr
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||||
|
{
|
||||||
|
echo "Dispatcharr Credentials"
|
||||||
|
echo "Database Name: $DB_NAME"
|
||||||
|
echo "Database User: $DB_USER"
|
||||||
|
echo "Database Password: $DB_PASS"
|
||||||
|
echo ""
|
||||||
|
} >>~/dispatcharr.creds
|
||||||
|
msg_ok "Created PostgreSQL Database"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
|
||||||
|
|
||||||
|
msg_info "Installing Python Dependencies with uv"
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
$STD uv venv
|
||||||
|
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
||||||
|
$STD uv pip install gunicorn gevent celery redis daphne
|
||||||
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
|
msg_info "Configuring Dispatcharr"
|
||||||
|
install -d -m 755 \
|
||||||
|
/data/{logos,recordings,plugins,db} \
|
||||||
|
/data/uploads/{m3us,epgs} \
|
||||||
|
/data/{m3us,epgs}
|
||||||
|
chown -R root:root /data
|
||||||
|
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||||
|
export POSTGRES_DB=$DB_NAME
|
||||||
|
export POSTGRES_USER=$DB_USER
|
||||||
|
export POSTGRES_PASSWORD=$DB_PASS
|
||||||
|
export POSTGRES_HOST=localhost
|
||||||
|
$STD uv run python manage.py migrate --noinput
|
||||||
|
$STD uv run python manage.py collectstatic --noinput
|
||||||
|
cat <<EOF >/opt/dispatcharr/.env
|
||||||
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
|
||||||
|
POSTGRES_DB=$DB_NAME
|
||||||
|
POSTGRES_USER=$DB_USER
|
||||||
|
POSTGRES_PASSWORD=$DB_PASS
|
||||||
|
POSTGRES_HOST=localhost
|
||||||
|
CELERY_BROKER_URL=redis://localhost:6379/0
|
||||||
|
EOF
|
||||||
|
cd /opt/dispatcharr/frontend
|
||||||
|
$STD npm install --legacy-peer-deps
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Configured Dispatcharr"
|
||||||
|
|
||||||
|
msg_info "Configuring Nginx"
|
||||||
|
cat <<EOF >/etc/nginx/sites-available/dispatcharr.conf
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
# Serve static assets with correct MIME types
|
||||||
|
location /assets/ {
|
||||||
|
alias /opt/dispatcharr/frontend/dist/assets/;
|
||||||
|
expires 30d;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
|
||||||
|
# Explicitly set MIME types for webpack-built assets
|
||||||
|
types {
|
||||||
|
text/javascript js;
|
||||||
|
text/css css;
|
||||||
|
image/png png;
|
||||||
|
image/svg+xml svg svgz;
|
||||||
|
font/woff2 woff2;
|
||||||
|
font/woff woff;
|
||||||
|
font/ttf ttf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
location /static/ {
|
||||||
|
alias /opt/dispatcharr/static/;
|
||||||
|
expires 30d;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
|
||||||
|
location /media/ {
|
||||||
|
alias /opt/dispatcharr/media/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ws/ {
|
||||||
|
proxy_pass http://127.0.0.1:8001;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# All other requests proxy to Gunicorn
|
||||||
|
location / {
|
||||||
|
include proxy_params;
|
||||||
|
proxy_pass http://127.0.0.1:5656;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
systemctl restart nginx
|
||||||
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
set -a
|
||||||
|
source .env
|
||||||
|
set +a
|
||||||
|
exec uv run gunicorn \\
|
||||||
|
--workers=4 \\
|
||||||
|
--worker-class=gevent \\
|
||||||
|
--timeout=300 \\
|
||||||
|
--bind 0.0.0.0:5656 \\
|
||||||
|
dispatcharr.wsgi:application
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/dispatcharr/start-gunicorn.sh
|
||||||
|
|
||||||
|
cat <<EOF >/opt/dispatcharr/start-celery.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
set -a
|
||||||
|
source .env
|
||||||
|
set +a
|
||||||
|
exec uv run celery -A dispatcharr worker -l info -c 4
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/dispatcharr/start-celery.sh
|
||||||
|
|
||||||
|
cat <<EOF >/opt/dispatcharr/start-celerybeat.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
set -a
|
||||||
|
source .env
|
||||||
|
set +a
|
||||||
|
exec uv run celery -A dispatcharr beat -l info
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/dispatcharr/start-celerybeat.sh
|
||||||
|
|
||||||
|
cat <<EOF >/opt/dispatcharr/start-daphne.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd /opt/dispatcharr
|
||||||
|
set -a
|
||||||
|
source .env
|
||||||
|
set +a
|
||||||
|
exec uv run daphne -b 0.0.0.0 -p 8001 dispatcharr.asgi:application
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/dispatcharr/start-daphne.sh
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/dispatcharr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Dispatcharr Web Server
|
||||||
|
After=network.target postgresql.service redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/dispatcharr
|
||||||
|
ExecStart=/opt/dispatcharr/start-gunicorn.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/dispatcharr-celery.service
|
||||||
|
[Unit]
|
||||||
|
Description=Dispatcharr Celery Worker
|
||||||
|
After=network.target redis-server.service
|
||||||
|
Requires=dispatcharr.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/dispatcharr
|
||||||
|
ExecStart=/opt/dispatcharr/start-celery.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/dispatcharr-celerybeat.service
|
||||||
|
[Unit]
|
||||||
|
Description=Dispatcharr Celery Beat Scheduler
|
||||||
|
After=network.target redis-server.service
|
||||||
|
Requires=dispatcharr.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/dispatcharr
|
||||||
|
ExecStart=/opt/dispatcharr/start-celerybeat.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/dispatcharr-daphne.service
|
||||||
|
[Unit]
|
||||||
|
Description=Dispatcharr WebSocket Server (Daphne)
|
||||||
|
After=network.target
|
||||||
|
Requires=dispatcharr.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/dispatcharr
|
||||||
|
ExecStart=/opt/dispatcharr/start-daphne.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now dispatcharr dispatcharr-celery dispatcharr-celerybeat dispatcharr-daphne
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt -y autoremove
|
||||||
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -21,13 +21,18 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Chrome"
|
msg_info "Installing Chrome"
|
||||||
curl -fsSL "https://dl.google.com/linux/linux_signing_key.pub" | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg
|
setup_deb822_repo \
|
||||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >/etc/apt/sources.list.d/google-chrome.list
|
"google-chrome" \
|
||||||
|
"https://dl.google.com/linux/linux_signing_key.pub" \
|
||||||
|
"https://dl.google.com/linux/chrome/deb/" \
|
||||||
|
"stable"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y google-chrome-stable
|
$STD apt install -y google-chrome-stable
|
||||||
|
# remove google-chrome.list added by google-chrome-stable
|
||||||
|
rm /etc/apt/sources.list.d/google-chrome.list
|
||||||
msg_ok "Installed Chrome"
|
msg_ok "Installed Chrome"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
||||||
|
|||||||
95
install/garage-install.sh
Normal file
95
install/garage-install.sh
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://garagehq.deuxfleurs.fr/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Setup Garage"
|
||||||
|
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
|
||||||
|
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
|
||||||
|
chmod +x /usr/local/bin/garage
|
||||||
|
mkdir -p /var/lib/garage/{data,meta,snapshots}
|
||||||
|
mkdir -p /etc/garage
|
||||||
|
RPC_SECRET=$(openssl rand -hex 32)
|
||||||
|
ADMIN_TOKEN=$(openssl rand -base64 32)
|
||||||
|
METRICS_TOKEN=$(openssl rand -base64 32)
|
||||||
|
{
|
||||||
|
echo "Garage Tokens and Secrets"
|
||||||
|
echo "RPC Secret: $RPC_SECRET"
|
||||||
|
echo "Admin Token: $ADMIN_TOKEN"
|
||||||
|
echo "Metrics Token: $METRICS_TOKEN"
|
||||||
|
} >>~/garage.creds
|
||||||
|
echo $GITEA_RELEASE >>~/.garage
|
||||||
|
cat <<EOF >/etc/garage.toml
|
||||||
|
metadata_dir = "/var/lib/garage/meta"
|
||||||
|
data_dir = "/var/lib/garage/data"
|
||||||
|
db_engine = "sqlite"
|
||||||
|
replication_factor = 1
|
||||||
|
|
||||||
|
rpc_bind_addr = "[::]:3901"
|
||||||
|
rpc_public_addr = "127.0.0.1:3901"
|
||||||
|
rpc_secret = "${RPC_SECRET}"
|
||||||
|
|
||||||
|
[s3_api]
|
||||||
|
s3_region = "garage"
|
||||||
|
api_bind_addr = "[::]:3900"
|
||||||
|
root_domain = ".s3.garage.localhost"
|
||||||
|
|
||||||
|
[s3_web]
|
||||||
|
bind_addr = "[::]:3902"
|
||||||
|
root_domain = ".web.garage.localhost"
|
||||||
|
index = "index.html"
|
||||||
|
|
||||||
|
[k2v_api]
|
||||||
|
api_bind_addr = "[::]:3904"
|
||||||
|
|
||||||
|
[admin]
|
||||||
|
api_bind_addr = "[::]:3903"
|
||||||
|
admin_token = "${ADMIN_TOKEN}"
|
||||||
|
metrics_token = "${METRICS_TOKEN}"
|
||||||
|
EOF
|
||||||
|
msg_ok "Set up Garage"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Creating service"
|
||||||
|
cat <<'EOF' >/etc/systemd/system/garage.service
|
||||||
|
[Unit]
|
||||||
|
Description=Garage Object Storage (Deuxfleurs)
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/garage -c /etc/garage.toml server
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/var/lib/garage
|
||||||
|
Environment=RUST_LOG=info
|
||||||
|
StandardOutput=append:/var/log/garage.log
|
||||||
|
StandardError=append:/var/log/garage.log
|
||||||
|
LimitNOFILE=65536
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
$STD systemctl enable -q --now garage
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt -y autoremove
|
||||||
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -20,22 +20,22 @@ $STD apt-get install -y \
|
|||||||
libjemalloc2
|
libjemalloc2
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mysql
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Configuring Database"
|
msg_info "Configuring Database"
|
||||||
DB_NAME=ghost
|
DB_NAME=ghost
|
||||||
DB_USER=ghostuser
|
DB_USER=ghostuser
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
{
|
{
|
||||||
echo "Ghost-Credentials"
|
echo "Ghost-Credentials"
|
||||||
echo "Ghost Database User: $DB_USER"
|
echo "Ghost Database User: $DB_USER"
|
||||||
echo "Ghost Database Password: $DB_PASS"
|
echo "Ghost Database Password: $DB_PASS"
|
||||||
echo "Ghost Database Name: $DB_NAME"
|
echo "Ghost Database Name: $DB_NAME"
|
||||||
} >>~/ghost.creds
|
} >>~/ghost.creds
|
||||||
msg_ok "Configured MySQL"
|
msg_ok "Configured MariaDB"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
@@ -60,4 +60,5 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
|
$STD apt-get -y clean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# 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/StarFleetCPTN/GoMFT
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
sqlite3 \
|
|
||||||
rclone \
|
|
||||||
tzdata \
|
|
||||||
ca-certificates
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "gomft" "StarFleetCPTN/GoMFT" "singlefile" "latest" "/opt/gomft" "gomft*linux-amd64"
|
|
||||||
|
|
||||||
msg_info "Configuring ${APPLICATION}"
|
|
||||||
JWT_SECRET_KEY=$(openssl rand -base64 24 | tr -d '/+=')
|
|
||||||
cat <<EOF >/opt/gomft/.env
|
|
||||||
SERVER_ADDRESS=:8080
|
|
||||||
DATA_DIR=/opt/gomft/data/gomft
|
|
||||||
BACKUP_DIR=/opt/gomft/data/gomft/backups
|
|
||||||
JWT_SECRET=$JWT_SECRET_KEY
|
|
||||||
BASE_URL=http://localhost:8080
|
|
||||||
|
|
||||||
# Email configuration
|
|
||||||
EMAIL_ENABLED=false
|
|
||||||
EMAIL_HOST=smtp.example.com
|
|
||||||
EMAIL_PORT=587
|
|
||||||
EMAIL_FROM_EMAIL=gomft@example.com
|
|
||||||
EMAIL_FROM_NAME=GoMFT
|
|
||||||
EMAIL_REPLY_TO=
|
|
||||||
EMAIL_ENABLE_TLS=true
|
|
||||||
EMAIL_REQUIRE_AUTH=true
|
|
||||||
EMAIL_USERNAME=smtp_username
|
|
||||||
EMAIL_PASSWORD=smtp_password
|
|
||||||
EOF
|
|
||||||
msg_ok "Configured ${APPLICATION}"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/gomft.service
|
|
||||||
[Unit]
|
|
||||||
Description=GoMFT Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
EnvironmentFile=/opt/gomft/.env
|
|
||||||
WorkingDirectory=/opt/gomft
|
|
||||||
ExecStart=/opt/gomft/gomft
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now gomft
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
@@ -14,7 +14,16 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
msg_info "Setting Up Hardware Acceleration"
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||||
|
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
||||||
|
else
|
||||||
|
$STD apt -y install intel-opencl-icd
|
||||||
|
fi
|
||||||
|
|
||||||
|
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
if [[ "$CTTYPE" == "0" ]]; then
|
||||||
chgrp video /dev/dri
|
chgrp video /dev/dri
|
||||||
chmod 755 /dev/dri
|
chmod 755 /dev/dri
|
||||||
@@ -26,13 +35,16 @@ msg_ok "Set Up Hardware Acceleration"
|
|||||||
|
|
||||||
msg_info "Installing Jellyfin"
|
msg_info "Installing Jellyfin"
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||||
# If the keyring directory is absent, create it
|
if ! dpkg -s libjemalloc2 >/dev/null 2>&1; then
|
||||||
|
$STD apt install -y libjemalloc2
|
||||||
|
fi
|
||||||
|
if [[ ! -f /usr/lib/libjemalloc.so ]]; then
|
||||||
|
ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so
|
||||||
|
fi
|
||||||
if [[ ! -d /etc/apt/keyrings ]]; then
|
if [[ ! -d /etc/apt/keyrings ]]; then
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
fi
|
fi
|
||||||
# Download the repository signing key and install it to the keyring directory
|
|
||||||
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor --yes --output /etc/apt/keyrings/jellyfin.gpg
|
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor --yes --output /etc/apt/keyrings/jellyfin.gpg
|
||||||
# Install the Deb822 format jellyfin.sources entry
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/jellyfin.sources
|
cat <<EOF >/etc/apt/sources.list.d/jellyfin.sources
|
||||||
Types: deb
|
Types: deb
|
||||||
URIs: https://repo.jellyfin.org/${PCT_OSTYPE}
|
URIs: https://repo.jellyfin.org/${PCT_OSTYPE}
|
||||||
@@ -41,10 +53,11 @@ Components: main
|
|||||||
Architectures: amd64
|
Architectures: amd64
|
||||||
Signed-By: /etc/apt/keyrings/jellyfin.gpg
|
Signed-By: /etc/apt/keyrings/jellyfin.gpg
|
||||||
EOF
|
EOF
|
||||||
# Install Jellyfin using the metapackage (which will fetch jellyfin-server, jellyfin-web, and jellyfin-ffmpeg5)
|
|
||||||
$STD apt-get update
|
$STD apt update
|
||||||
$STD apt-get install -y jellyfin
|
$STD apt install -y jellyfin
|
||||||
sed -i 's/"MinimumLevel": "Information"/"MinimumLevel": "Error"/g' /etc/jellyfin/logging.json
|
sed -i 's/"MinimumLevel": "Information"/"MinimumLevel": "Error"/g' /etc/jellyfin/logging.json
|
||||||
|
|
||||||
chown -R jellyfin:adm /etc/jellyfin
|
chown -R jellyfin:adm /etc/jellyfin
|
||||||
sleep 10
|
sleep 10
|
||||||
systemctl restart jellyfin
|
systemctl restart jellyfin
|
||||||
@@ -59,6 +72,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/fccview/rwMarkable
|
# Source: https://github.com/fccview/jotty
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -14,18 +14,26 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "rwMarkable" "fccview/rwMarkable" "tarball" "latest" "/opt/rwmarkable"
|
fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION}"
|
msg_info "Installing ${APPLICATION}"
|
||||||
cd /opt/rwmarkable
|
cd /opt/jotty
|
||||||
$STD yarn --frozen-lockfile
|
$STD yarn --frozen-lockfile
|
||||||
$STD yarn next telemetry disable
|
$STD yarn next telemetry disable
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
mkdir -p data/{users,checklists,notes}
|
mkdir -p data/{users,checklists,notes}
|
||||||
|
|
||||||
cat <<EOF >/opt/rwmarkable/.env
|
cat <<EOF >/opt/jotty/.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
|
||||||
|
# --- Uncomment to enable
|
||||||
# HTTPS=true
|
# HTTPS=true
|
||||||
|
# SERVE_PUBLIC_IMAGES=yes
|
||||||
|
# SERVE_PUBLIC_FILES=yes
|
||||||
|
# SERVE_PUBLIC_VIDEOS=yes
|
||||||
|
# STOP_CHECK_UPDATES=yes
|
||||||
|
# --- For troubleshooting
|
||||||
|
# DEBUGGER=true
|
||||||
|
|
||||||
# --- SSO with OIDC (optional)
|
# --- SSO with OIDC (optional)
|
||||||
# SSO_MODE=oidc
|
# SSO_MODE=oidc
|
||||||
@@ -39,21 +47,21 @@ EOF
|
|||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/rwmarkable.service
|
cat <<EOF >/etc/systemd/system/jotty.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=rwMarkable server
|
Description=jotty server
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/rwmarkable
|
WorkingDirectory=/opt/jotty
|
||||||
EnvironmentFile=/opt/rwmarkable/.env
|
EnvironmentFile=/opt/jotty/.env
|
||||||
ExecStart=yarn start
|
ExecStart=yarn start
|
||||||
Restart=on-abnormal
|
Restart=on-abnormal
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now rwmarkable
|
systemctl enable -q --now jotty
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
@@ -13,15 +13,11 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Kavita"
|
fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz"
|
||||||
cd /opt
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
$STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner
|
|
||||||
msg_ok "Installed Kavita"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
service_path="/etc/systemd/system/kavita.service"
|
cat <<EOF >/etc/systemd/system/kavita.service
|
||||||
echo "[Unit]
|
[Unit]
|
||||||
Description=Kavita Server
|
Description=Kavita Server
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
@@ -34,15 +30,17 @@ KillMode=process
|
|||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target" >$service_path
|
WantedBy=multi-user.target
|
||||||
chmod +x /opt/Kavita/* && chown root /opt/Kavita/*
|
EOF
|
||||||
systemctl enable --now -q kavita.service
|
chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita
|
||||||
|
systemctl enable -q --now kavita
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -18,36 +18,21 @@ $STD apt-get install -y \
|
|||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
apache2 \
|
apache2 \
|
||||||
git \
|
git \
|
||||||
expect \
|
expect
|
||||||
composer \
|
|
||||||
lsb-release
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mysql
|
setup_mariadb
|
||||||
|
PHP_VERSION="8.4" PHP_MODULE="gd,mysql,mbstring,bcmath,xml,curl,zip,intl" PHP_APACHE="YES" setup_php
|
||||||
msg_info "Adding PHP8.4 Repository"
|
setup_composer
|
||||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
|
||||||
$STD apt-get update
|
|
||||||
msg_ok "Added PHP8.4 Repository"
|
|
||||||
|
|
||||||
msg_info "Installing PHP"
|
|
||||||
$STD apt-get remove -y php8.2*
|
|
||||||
$STD apt-get install -y \
|
|
||||||
php8.4 \
|
|
||||||
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
|
|
||||||
libapache2-mod-php8.4
|
|
||||||
msg_ok "Installed PHP"
|
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
DB_NAME=kimai_db
|
DB_NAME=kimai_db
|
||||||
DB_USER=kimai
|
DB_USER=kimai
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
MYSQL_VERSION=$(mysql --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
|
MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
{
|
{
|
||||||
echo "Kimai-Credentials"
|
echo "Kimai-Credentials"
|
||||||
echo "Kimai Database User: $DB_USER"
|
echo "Kimai Database User: $DB_USER"
|
||||||
@@ -56,11 +41,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
|
|||||||
} >>~/kimai.creds
|
} >>~/kimai.creds
|
||||||
msg_ok "Set up database"
|
msg_ok "Set up database"
|
||||||
|
|
||||||
msg_info "Installing Kimai (Patience)"
|
fetch_and_deploy_gh_release "Kimai" "kimai/kimai" "prebuild" "latest" "/opt/kimai" "kimai-release-*.zip"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}".zip
|
msg_info "Installing Kimai"
|
||||||
$STD unzip "${RELEASE}".zip
|
|
||||||
mv kimai-"${RELEASE}" /opt/kimai
|
|
||||||
cd /opt/kimai
|
cd /opt/kimai
|
||||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
@@ -92,8 +75,6 @@ admin_lte:
|
|||||||
options:
|
options:
|
||||||
default_avatar: build/apple-touch-icon.png
|
default_avatar: build/apple-touch-icon.png
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Installed Kimai"
|
msg_ok "Installed Kimai"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -130,7 +111,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "${RELEASE}".zip
|
$STD apt -y autoremove
|
||||||
$STD apt-get -y autoremove
|
$STD apt -y autoclean
|
||||||
$STD apt-get -y autoclean
|
$STD apt -y clean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing dependencies"
|
msg_info "Installing dependencies"
|
||||||
$STD apt install -y --no-install-recommends \
|
$STD apt install -y \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
gcc \
|
build-essentials \
|
||||||
g++ \
|
g++ \
|
||||||
libicu-dev
|
libicu-dev
|
||||||
msg_ok "Installed dependencies"
|
msg_ok "Installed dependencies"
|
||||||
@@ -32,13 +32,18 @@ setup_uv
|
|||||||
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate"
|
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate"
|
||||||
|
|
||||||
msg_info "Setup LibreTranslate (Patience)"
|
msg_info "Setup LibreTranslate (Patience)"
|
||||||
|
TORCH_VERSION=$(grep -Eo '"torch ==[0-9]+\.[0-9]+\.[0-9]+' /opt/libretranslate/pyproject.toml | \
|
||||||
|
tail -n1 | sed 's/.*==//')
|
||||||
|
if [[ -z "$TORCH_VERSION" ]]; then
|
||||||
|
TORCH_VERSION="2.5.0"
|
||||||
|
fi
|
||||||
cd /opt/libretranslate
|
cd /opt/libretranslate
|
||||||
$STD uv venv .venv
|
$STD uv venv .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install --upgrade pip setuptools
|
$STD uv pip install --upgrade pip setuptools
|
||||||
$STD uv pip install Babel==2.12.1
|
$STD uv pip install Babel==2.12.1
|
||||||
$STD .venv/bin/python scripts/compile_locales.py
|
$STD .venv/bin/python scripts/compile_locales.py
|
||||||
$STD uv pip install torch==2.2.0 --extra-index-url https://download.pytorch.org/whl/cpu
|
$STD uv pip install "torch==${TORCH_VERSION}" --extra-index-url https://download.pytorch.org/whl/cpu
|
||||||
$STD uv pip install "numpy<2"
|
$STD uv pip install "numpy<2"
|
||||||
$STD uv pip install .
|
$STD uv pip install .
|
||||||
$STD uv pip install libretranslate
|
$STD uv pip install libretranslate
|
||||||
|
|||||||
@@ -14,19 +14,19 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing dependencies"
|
msg_info "Installing dependencies"
|
||||||
$STD apt install --no-install-recommends -y build-essential
|
$STD apt install -y build-essential
|
||||||
msg_ok "Installed dependencies"
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
MYSQL_VERSION="8.0" setup_mysql
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
msg_info "Setting up Database"
|
||||||
DB_NAME="mmdl"
|
DB_NAME="mmdl"
|
||||||
DB_USER="mmdl"
|
DB_USER="mmdl"
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED by '$DB_PASS';"
|
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED by '$DB_PASS';"
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
{
|
{
|
||||||
echo "Manage My Damn Life Credentials"
|
echo "Manage My Damn Life Credentials"
|
||||||
echo "Database User: $DB_USER"
|
echo "Database User: $DB_USER"
|
||||||
@@ -59,7 +59,7 @@ msg_info "Creating Service"
|
|||||||
cat <<EOF >/etc/systemd/system/mmdl.service
|
cat <<EOF >/etc/systemd/system/mmdl.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=${APPLICATION} Service
|
||||||
After=network.target mysql.service
|
After=network.target mariadb.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/mmdl
|
WorkingDirectory=/opt/mmdl
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ msg_info "Installing Deno"
|
|||||||
export DENO_INSTALL="/usr/local"
|
export DENO_INSTALL="/usr/local"
|
||||||
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
||||||
[[ ":$PATH:" != *":/usr/local/bin:"* ]] &&
|
[[ ":$PATH:" != *":/usr/local/bin:"* ]] &&
|
||||||
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc &&
|
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc &&
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
msg_ok "Installed Deno"
|
msg_ok "Installed Deno"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: davalanche
|
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/mylar3/mylar3
|
# Source: https://github.com/mylar3/mylar3
|
||||||
|
|
||||||
@@ -14,7 +14,6 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y jq
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
||||||
Types: deb
|
Types: deb
|
||||||
URIs: http://deb.debian.org/debian
|
URIs: http://deb.debian.org/debian
|
||||||
@@ -23,22 +22,17 @@ Components: non-free non-free-firmware
|
|||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y unrar
|
$STD apt install -y unrar
|
||||||
rm /etc/apt/sources.list.d/non-free.sources
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup Python3"
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
$STD apt install -y python3-pip
|
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
|
||||||
$STD pip install -U --no-cache-dir pip
|
|
||||||
msg_ok "Setup Python3"
|
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION}"
|
msg_info "Installing ${APPLICATION}"
|
||||||
mkdir -p /opt/mylar3
|
|
||||||
mkdir -p /opt/mylar3-data
|
mkdir -p /opt/mylar3-data
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
|
$STD uv venv /opt/mylar3/.venv
|
||||||
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
|
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -48,7 +42,7 @@ Description=Mylar3 Service
|
|||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/usr/bin/python3 /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
|
ExecStart=/opt/mylar3/.venv/bin/python /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
|
||||||
GuessMainPID=no
|
GuessMainPID=no
|
||||||
Type=forking
|
Type=forking
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|||||||
@@ -63,27 +63,7 @@ msg_ok "MySQL Server configured"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing phpMyAdmin"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)"
|
||||||
$STD apt install -y \
|
|
||||||
apache2 \
|
|
||||||
php \
|
|
||||||
php-mysqli \
|
|
||||||
php-mbstring \
|
|
||||||
php-zip \
|
|
||||||
php-gd \
|
|
||||||
php-json \
|
|
||||||
php-curl
|
|
||||||
|
|
||||||
curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
|
|
||||||
mkdir -p /var/www/html/phpMyAdmin
|
|
||||||
tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
|
|
||||||
cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
|
|
||||||
SECRET=$(openssl rand -base64 24)
|
|
||||||
sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
|
|
||||||
chmod 660 /var/www/html/phpMyAdmin/config.inc.php
|
|
||||||
chown -R www-data:www-data /var/www/html/phpMyAdmin
|
|
||||||
systemctl restart apache2
|
|
||||||
msg_ok "Installed phpMyAdmin"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Start Service"
|
msg_info "Start Service"
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
msg_info "Checking CPU Features"
|
msg_info "Checking CPU Features"
|
||||||
if lscpu | grep -q 'avx'; then
|
if lscpu | grep -q 'avx'; then
|
||||||
MONGODB_VERSION="7.0"
|
MONGODB_VERSION="8.0"
|
||||||
msg_ok "AVX detected: Using MongoDB 7.0"
|
msg_ok "AVX detected: Using MongoDB 8.0"
|
||||||
|
MONGO_VERSION="8.0" setup_mongodb
|
||||||
else
|
else
|
||||||
msg_error "No AVX detected: TP-Link Canceled Support for Old MongoDB for Debian 12\n https://www.tp-link.com/baltic/support/faq/4160/"
|
MONGO_VERSION="4.4" setup_mongodb
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Installing Azul Zulu Java"
|
msg_info "Installing Azul Zulu Java"
|
||||||
@@ -34,27 +34,15 @@ $STD apt update
|
|||||||
$STD apt -y install zulu21-jre-headless
|
$STD apt -y install zulu21-jre-headless
|
||||||
msg_ok "Installed Azul Zulu Java"
|
msg_ok "Installed Azul Zulu Java"
|
||||||
|
|
||||||
msg_info "Installing libssl (if needed)"
|
|
||||||
if ! dpkg -l | grep -q 'libssl1.1'; then
|
if ! dpkg -l | grep -q 'libssl1.1'; then
|
||||||
|
msg_info "Installing libssl (if needed)"
|
||||||
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "/tmp/libssl.deb"
|
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "/tmp/libssl.deb"
|
||||||
$STD dpkg -i /tmp/libssl.deb
|
$STD dpkg -i /tmp/libssl.deb
|
||||||
rm -f /tmp/libssl.deb
|
rm -f /tmp/libssl.deb
|
||||||
msg_ok "Installed libssl1.1"
|
msg_ok "Installed libssl1.1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Installing MongoDB $MONGODB_VERSION"
|
|
||||||
curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.sources
|
|
||||||
Types: deb
|
|
||||||
URIs: http://repo.mongodb.org/apt/debian
|
|
||||||
Suites: $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION}
|
|
||||||
Components: main
|
|
||||||
Signed-By: /usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
$STD apt install -y mongodb-org
|
|
||||||
msg_ok "Installed MongoDB $MONGODB_VERSION"
|
|
||||||
|
|
||||||
msg_info "Installing Omada Controller"
|
msg_info "Installing Omada Controller"
|
||||||
OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" |
|
OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" |
|
||||||
grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' |
|
grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' |
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ update_os
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
||||||
NODE_VERSION="20" NODE_MODULE="$PNPM" setup_nodejs
|
NODE_VERSION="24" NODE_MODULE="$PNPM" setup_nodejs
|
||||||
|
|
||||||
msg_info "Configuring palmr backend"
|
msg_info "Configuring palmr backend"
|
||||||
PALMR_DIR="/opt/palmr_data"
|
PALMR_DIR="/opt/palmr_data"
|
||||||
|
|||||||
@@ -13,19 +13,10 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt install -y \
|
|
||||||
ca-certificates \
|
|
||||||
software-properties-common \
|
|
||||||
apt-transport-https \
|
|
||||||
lsb-release \
|
|
||||||
php-{opcache,curl,gd,mbstring,xml,bcmath,intl,zip,xsl,pgsql} \
|
|
||||||
libapache2-mod-php \
|
|
||||||
composer
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="xsl,pgsql" setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Setting up PHP"
|
msg_info "Setting up PHP"
|
||||||
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
|
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
|
||||||
|
|||||||
287
install/patchmon-install.sh
Normal file
287
install/patchmon-install.sh
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/PatcMmon/PatchMon
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
build-essential \
|
||||||
|
nginx \
|
||||||
|
redis-server
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
|
||||||
|
msg_info "Setup PostgreSQL Database"
|
||||||
|
DB_NAME=patchmon_db
|
||||||
|
DB_USER=patchmon_usr
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
|
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
||||||
|
{
|
||||||
|
echo "PatchMon Credentials"
|
||||||
|
echo "PatchMon Database Name: $DB_NAME"
|
||||||
|
echo "PatchMon Database User: $DB_USER"
|
||||||
|
echo "PatchMon Database Password: $DB_PASS"
|
||||||
|
} >>~/patchmon.creds
|
||||||
|
msg_ok "Setup PostgreSQL Database"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
|
||||||
|
|
||||||
|
msg_info "Configuring PatchMon"
|
||||||
|
cd /opt/patchmon
|
||||||
|
export NODE_ENV=production
|
||||||
|
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
cd /opt/patchmon/backend
|
||||||
|
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
cd /opt/patchmon/frontend
|
||||||
|
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
|
||||||
|
$STD npm run build
|
||||||
|
|
||||||
|
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
|
||||||
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
|
cat <<EOF >/opt/patchmon/backend/.env
|
||||||
|
# Database Configuration
|
||||||
|
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
|
||||||
|
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
|
||||||
|
PM_DB_CONN_WAIT_INTERVAL=2
|
||||||
|
|
||||||
|
# JWT Configuration
|
||||||
|
JWT_SECRET="$JWT_SECRET"
|
||||||
|
JWT_EXPIRES_IN=1h
|
||||||
|
JWT_REFRESH_EXPIRES_IN=7d
|
||||||
|
|
||||||
|
# Server Configuration
|
||||||
|
PORT=3399
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
# API Configuration
|
||||||
|
API_VERSION=v1
|
||||||
|
|
||||||
|
# CORS Configuration
|
||||||
|
CORS_ORIGIN="http://$LOCAL_IP"
|
||||||
|
|
||||||
|
# Session Configuration
|
||||||
|
SESSION_INACTIVITY_TIMEOUT_MINUTES=30
|
||||||
|
|
||||||
|
# User Configuration
|
||||||
|
DEFAULT_USER_ROLE=user
|
||||||
|
|
||||||
|
# Rate Limiting (times in milliseconds)
|
||||||
|
RATE_LIMIT_WINDOW_MS=900000
|
||||||
|
RATE_LIMIT_MAX=5000
|
||||||
|
AUTH_RATE_LIMIT_WINDOW_MS=600000
|
||||||
|
AUTH_RATE_LIMIT_MAX=500
|
||||||
|
AGENT_RATE_LIMIT_WINDOW_MS=60000
|
||||||
|
AGENT_RATE_LIMIT_MAX=1000
|
||||||
|
|
||||||
|
# Redis Configuration
|
||||||
|
REDIS_HOST=localhost
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
LOG_LEVEL=info
|
||||||
|
ENABLE_LOGGING=true
|
||||||
|
|
||||||
|
# TFA Configuration
|
||||||
|
TFA_REMEMBER_ME_EXPIRES_IN=30d
|
||||||
|
TFA_MAX_REMEMBER_SESSIONS=5
|
||||||
|
TFA_SUSPICIOUS_ACTIVITY_THRESHOLD=3
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/opt/patchmon/frontend/.env
|
||||||
|
VITE_API_URL=http://$LOCAL_IP/api/v1
|
||||||
|
VITE_APP_NAME=PatchMon
|
||||||
|
VITE_APP_VERSION=1.3.0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cd /opt/patchmon/backend
|
||||||
|
$STD npx prisma migrate deploy
|
||||||
|
$STD npx prisma generate
|
||||||
|
msg_ok "Configured PatchMon"
|
||||||
|
|
||||||
|
msg_info "Configuring Nginx"
|
||||||
|
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $LOCAL_IP;
|
||||||
|
|
||||||
|
# Security headers
|
||||||
|
add_header X-Frame-Options DENY always;
|
||||||
|
add_header X-Content-Type-Options nosniff always;
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||||
|
|
||||||
|
# Frontend
|
||||||
|
location / {
|
||||||
|
root /opt/patchmon/frontend/dist;
|
||||||
|
try_files \$uri \$uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bull Board proxy
|
||||||
|
location /bullboard {
|
||||||
|
proxy_pass http://127.0.0.1:3399;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_set_header X-Forwarded-Host \$host;
|
||||||
|
proxy_set_header Cookie \$http_cookie;
|
||||||
|
proxy_cache_bypass \$http_upgrade;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_connect_timeout 75s;
|
||||||
|
|
||||||
|
# Enable cookie passthrough
|
||||||
|
proxy_pass_header Set-Cookie;
|
||||||
|
proxy_cookie_path / /;
|
||||||
|
|
||||||
|
# Preserve original client IP
|
||||||
|
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
|
||||||
|
if (\$request_method = 'OPTIONS') {
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# API proxy
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://127.0.0.1:3399;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_cache_bypass \$http_upgrade;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_connect_timeout 75s;
|
||||||
|
|
||||||
|
# Preserve original client IP
|
||||||
|
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
|
||||||
|
if (\$request_method = 'OPTIONS') {
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Static assets caching (exclude Bull Board assets)
|
||||||
|
location ~* ^/(?!bullboard).*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||||
|
root /opt/patchmon/frontend/dist;
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Health check endpoint
|
||||||
|
location /health {
|
||||||
|
proxy_pass http://127.0.0.1:3399/health;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
$STD nginx -t
|
||||||
|
systemctl restart nginx
|
||||||
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
msg_info "Creating service"
|
||||||
|
cat <<EOF >/etc/systemd/system/patchmon-server.service
|
||||||
|
[Unit]
|
||||||
|
Description=PatchMon Service
|
||||||
|
After=network.target postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/patchmon/backend
|
||||||
|
ExecStart=/usr/bin/node src/server.js
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
Environment=NODE_ENV=production
|
||||||
|
Environment=PATH=/usr/bin:/usr/local/bin
|
||||||
|
NoNewPrivileges=true
|
||||||
|
PrivateTmp=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=true
|
||||||
|
ReadWritePaths=/opt/patchmon
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now patchmon-server
|
||||||
|
msg_ok "Created and started service"
|
||||||
|
|
||||||
|
msg_info "Updating settings"
|
||||||
|
cat <<EOF >/opt/patchmon/backend/update-settings.js
|
||||||
|
const { PrismaClient } = require('@prisma/client');
|
||||||
|
const { v4: uuidv4 } = require('uuid');
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
async function updateSettings() {
|
||||||
|
try {
|
||||||
|
const existingSettings = await prisma.settings.findFirst();
|
||||||
|
|
||||||
|
const settingsData = {
|
||||||
|
id: uuidv4(),
|
||||||
|
server_url: 'http://$LOCAL_IP',
|
||||||
|
server_protocol: 'http',
|
||||||
|
server_host: '$LOCAL_IP',
|
||||||
|
server_port: 3399,
|
||||||
|
update_interval: 60,
|
||||||
|
auto_update: true,
|
||||||
|
signup_enabled: false,
|
||||||
|
ignore_ssl_self_signed: false,
|
||||||
|
updated_at: new Date()
|
||||||
|
};
|
||||||
|
|
||||||
|
if (existingSettings) {
|
||||||
|
// Update existing settings
|
||||||
|
await prisma.settings.update({
|
||||||
|
where: { id: existingSettings.id },
|
||||||
|
data: settingsData
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Create new settings record
|
||||||
|
await prisma.settings.create({
|
||||||
|
data: settingsData
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('✅ Database settings updated successfully');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Error updating settings:', error.message);
|
||||||
|
process.exit(1);
|
||||||
|
} finally {
|
||||||
|
await prisma.\$disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateSettings();
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cd /opt/patchmon/backend
|
||||||
|
$STD node update-settings.js
|
||||||
|
msg_ok "Settings updated successfully"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt -y autoremove
|
||||||
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -13,14 +13,9 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="pdo,mysql,gettext,fileinfo" setup_php
|
||||||
$STD apt install -y \
|
|
||||||
apache2 \
|
|
||||||
libapache2-mod-php \
|
|
||||||
php8.2-{pdo,mysql,mbstring,gettext,fileinfo,gd,xml,zip}
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
DB_NAME=projectsend
|
DB_NAME=projectsend
|
||||||
@@ -37,12 +32,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
} >>~/projectsend.creds
|
} >>~/projectsend.creds
|
||||||
msg_ok "Set up MariaDB"
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
msg_info "Installing projectsend"
|
msg_info "Installing ProjectSend"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip" -o "projectsend-r${RELEASE}.zip"
|
|
||||||
mkdir projectsend
|
|
||||||
$STD unzip "projectsend-r${RELEASE}.zip" -d projectsend
|
|
||||||
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
|
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
|
||||||
chown -R www-data:www-data /opt/projectsend
|
chown -R www-data:www-data /opt/projectsend
|
||||||
chmod -R 775 /opt/projectsend
|
chmod -R 775 /opt/projectsend
|
||||||
@@ -55,8 +45,7 @@ sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
|
|||||||
-e "s/^\(post_max_size = \).*/\1 256M/" \
|
-e "s/^\(post_max_size = \).*/\1 256M/" \
|
||||||
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \
|
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \
|
||||||
-e "s/^\(max_execution_time = \).*/\1 300/" \
|
-e "s/^\(max_execution_time = \).*/\1 300/" \
|
||||||
/etc/php/8.2/apache2/php.ini
|
/etc/php/8.4/apache2/php.ini
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed projectsend"
|
msg_ok "Installed projectsend"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -84,7 +73,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "/opt/projectsend-r${RELEASE}.zip"
|
|
||||||
$STD apt -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt -y autoclean
|
$STD apt -y autoclean
|
||||||
$STD apt -y clean
|
$STD apt -y clean
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
apache2-utils \
|
apache2-utils \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3.11-venv
|
python3-venv
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Radicale"
|
msg_info "Setting up Radicale"
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ cd /opt/browserless
|
|||||||
$STD npm install
|
$STD npm install
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
||||||
|
$STD npm install typescript --save-dev
|
||||||
|
$STD npm install esbuild --save-dev
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
$STD npm run build:function
|
$STD npm run build:function
|
||||||
$STD npm prune production
|
$STD npm prune production
|
||||||
|
|||||||
@@ -19,30 +19,33 @@ $STD apt install -y \
|
|||||||
p7zip-full
|
p7zip-full
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup uv"
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
setup_uv
|
|
||||||
msg_ok "Setup uv"
|
|
||||||
|
|
||||||
msg_info "Setup Unrar"
|
msg_info "Setup Unrar"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
|
||||||
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
|
Types: deb
|
||||||
|
URIs: http://deb.debian.org/debian/
|
||||||
|
Suites: trixie
|
||||||
|
Components: non-free
|
||||||
|
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
|
||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y unrar
|
$STD apt install -y unrar
|
||||||
rm /etc/apt/sources.list.d/non-free.list
|
|
||||||
msg_ok "Setup Unrar"
|
msg_ok "Setup Unrar"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
||||||
|
|
||||||
msg_info "Installing SABnzbd"
|
msg_info "Installing SABnzbd"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
mkdir -p /opt/sabnzbd
|
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
$STD uv venv /opt/sabnzbd/venv
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
|
|
||||||
tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
|
|
||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed SABnzbd"
|
msg_ok "Installed SABnzbd"
|
||||||
|
|
||||||
|
read -r -p "Would you like to install par2cmdline-turbo? <y/N> " prompt
|
||||||
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
mv /usr/bin/par2 /usr/bin/par2.old
|
||||||
|
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/sabnzbd.service
|
cat <<EOF >/etc/systemd/system/sabnzbd.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -65,7 +68,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt -y autoremove
|
$STD apt -y autoremove
|
||||||
$STD apt -y autoclean
|
$STD apt -y autoclean
|
||||||
$STD apt -y clean
|
$STD apt -y clean
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ $STD apt install -y \
|
|||||||
libreoffice-base-core \
|
libreoffice-base-core \
|
||||||
libreoffice-script-provider-python \
|
libreoffice-script-provider-python \
|
||||||
libreoffice-java-common \
|
libreoffice-java-common \
|
||||||
unoconv \
|
|
||||||
pngquant \
|
pngquant \
|
||||||
weasyprint
|
weasyprint
|
||||||
msg_ok "Installed LibreOffice Components"
|
msg_ok "Installed LibreOffice Components"
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then
|
|||||||
msg_ok "No AVX Support Detected"
|
msg_ok "No AVX Support Detected"
|
||||||
msg_info "Installing MongoDB 4.4"
|
msg_info "Installing MongoDB 4.4"
|
||||||
if ! dpkg -l | grep -q "libssl1.1"; then
|
if ! dpkg -l | grep -q "libssl1.1"; then
|
||||||
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u3_amd64.deb" -o "libssl1.1_1.1.1w-0+deb11u3_amd64.deb"
|
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "libssl1.1_1.1.1w-0+deb11u4_amd64.deb"
|
||||||
$STD dpkg -i libssl1.1_1.1.1w-0+deb11u3_amd64.deb
|
$STD dpkg -i libssl1.1_1.1.1w-0+deb11u4_amd64.deb
|
||||||
fi
|
fi
|
||||||
curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor -o /usr/share/keyrings/mongodb-server-4.4.gpg
|
curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor -o /usr/share/keyrings/mongodb-server-4.4.gpg
|
||||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.sources >/dev/null
|
cat <<EOF | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.sources >/dev/null
|
||||||
|
|||||||
@@ -14,9 +14,12 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y coreutils
|
$STD apt install -y \
|
||||||
|
coreutils \
|
||||||
|
debconf-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
|
||||||
msg_info "Installing UrBackup Server"
|
msg_info "Installing UrBackup Server"
|
||||||
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
|
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
|
||||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
|
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
|
||||||
@@ -27,6 +30,8 @@ Components:
|
|||||||
Signed-By: /usr/share/keyrings/home-uroni.gpg
|
Signed-By: /usr/share/keyrings/home-uroni.gpg
|
||||||
EOF
|
EOF
|
||||||
$STD apt update
|
$STD apt update
|
||||||
|
mkdir -p /opt/urbackup/backups
|
||||||
|
echo "urbackup-server urbackup/backuppath string /opt/urbackup/backups" | debconf-set-selections
|
||||||
$STD apt install -y urbackup-server
|
$STD apt install -y urbackup-server
|
||||||
msg_ok "Installed UrBackup Server"
|
msg_ok "Installed UrBackup Server"
|
||||||
|
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[
|
|||||||
msg_error "Template appears to be corrupted – re-downloading."
|
msg_error "Template appears to be corrupted – re-downloading."
|
||||||
rm -f "$TEMPLATE_PATH"
|
rm -f "$TEMPLATE_PATH"
|
||||||
else
|
else
|
||||||
msg_error "Template is valid, but container creation still failed."
|
msg_error "Template is valid, but container creation failed. Update your whole Proxmox System (pve-container) first or check https://github.com/community-scripts/ProxmoxVE/discussions/8126"
|
||||||
exit 209
|
exit 209
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
2325
misc/tools.func
2325
misc/tools.func
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: Author: MickLesk
|
# Author: MickLesk
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
function header_info() {
|
function header_info() {
|
||||||
@@ -53,20 +53,9 @@ fi
|
|||||||
|
|
||||||
header_info
|
header_info
|
||||||
|
|
||||||
function msg_info() {
|
function msg_info() { echo -e "${INFO} ${YW}$1...${CL}"; }
|
||||||
local msg="$1"
|
function msg_ok() { echo -e "${CM} ${GN}$1${CL}"; }
|
||||||
echo -e "${INFO} ${YW}${msg}...${CL}"
|
function msg_error() { echo -e "${CROSS} ${RD}$1${CL}"; }
|
||||||
}
|
|
||||||
|
|
||||||
function msg_ok() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${CM} ${GN}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function msg_error() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${CROSS} ${RD}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Detect legacy FileBrowser installation
|
# Detect legacy FileBrowser installation
|
||||||
LEGACY_DB="/usr/local/community-scripts/filebrowser.db"
|
LEGACY_DB="/usr/local/community-scripts/filebrowser.db"
|
||||||
@@ -96,42 +85,32 @@ if [[ -f "$LEGACY_DB" || -f "$LEGACY_BIN" && ! -f "$CONFIG_PATH" ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check existing installation
|
# Existing installation
|
||||||
if [[ -f "$INSTALL_PATH" ]]; then
|
if [[ -f "$INSTALL_PATH" ]]; then
|
||||||
echo -e "${YW}⚠️ ${APP} is already installed.${CL}"
|
echo -e "${YW}⚠️ ${APP} is already installed.${CL}"
|
||||||
echo -n "Uninstall ${APP}? (y/N): "
|
echo -n "Uninstall ${APP}? (y/N): "
|
||||||
read -r uninstall_prompt
|
read -r uninstall_prompt
|
||||||
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Uninstalling ${APP}"
|
msg_info "Uninstalling ${APP}"
|
||||||
if [[ "$OS" == "Debian" ]]; then
|
if [[ "$OS" == "Debian" ]]; then
|
||||||
systemctl disable --now filebrowser.service &>/dev/null
|
systemctl disable --now filebrowser.service &>/dev/null
|
||||||
rm -f "$SERVICE_PATH"
|
rm -f "$SERVICE_PATH"
|
||||||
else
|
else
|
||||||
rc-service filebrowser stop &>/dev/null
|
rc-service filebrowser stop &>/dev/null
|
||||||
rc-update del filebrowser &>/dev/null
|
rc-update del filebrowser &>/dev/null
|
||||||
rm -f "$SERVICE_PATH"
|
rm -f "$SERVICE_PATH"
|
||||||
fi
|
|
||||||
rm -f "$INSTALL_PATH" "$CONFIG_PATH"
|
|
||||||
msg_ok "${APP} has been uninstalled."
|
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
rm -f "$INSTALL_PATH" "$CONFIG_PATH"
|
||||||
|
msg_ok "${APP} has been uninstalled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
echo -n "Update ${APP}? (y/N): "
|
echo -n "Update ${APP}? (y/N): "
|
||||||
read -r update_prompt
|
read -r update_prompt
|
||||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
tmp="${INSTALL_PATH}.tmp.$$"
|
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH"
|
||||||
if ! curl -fSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$tmp"; then
|
chmod +x "$INSTALL_PATH"
|
||||||
msg_error "Download failed"
|
|
||||||
rm -f "$tmp"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
chmod 0755 "$tmp"
|
|
||||||
if ! mv -f "$tmp" "$INSTALL_PATH"; then
|
|
||||||
msg_error "Install failed (cannot move into $INSTALL_PATH)"
|
|
||||||
rm -f "$tmp"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
@@ -147,72 +126,80 @@ PORT=${PORT:-$DEFAULT_PORT}
|
|||||||
|
|
||||||
echo -n "Install ${APP}? (y/n): "
|
echo -n "Install ${APP}? (y/n): "
|
||||||
read -r install_prompt
|
read -r install_prompt
|
||||||
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if ! [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing ${APP} on ${OS}"
|
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
|
||||||
$PKG_MANAGER curl ffmpeg &>/dev/null
|
exit 0
|
||||||
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH"
|
fi
|
||||||
chmod +x "$INSTALL_PATH"
|
|
||||||
msg_ok "Installed ${APP}"
|
|
||||||
|
|
||||||
msg_info "Preparing configuration directory"
|
msg_info "Installing ${APP} on ${OS}"
|
||||||
mkdir -p /usr/local/community-scripts
|
$PKG_MANAGER curl ffmpeg &>/dev/null
|
||||||
chown root:root /usr/local/community-scripts
|
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH"
|
||||||
chmod 755 /usr/local/community-scripts
|
chmod +x "$INSTALL_PATH"
|
||||||
msg_ok "Directory prepared"
|
msg_ok "Installed ${APP}"
|
||||||
|
|
||||||
echo -n "Use No Authentication? (y/N): "
|
msg_info "Preparing configuration directory"
|
||||||
read -r noauth_prompt
|
mkdir -p /usr/local/community-scripts
|
||||||
|
chown root:root /usr/local/community-scripts
|
||||||
|
chmod 755 /usr/local/community-scripts
|
||||||
|
msg_ok "Directory prepared"
|
||||||
|
|
||||||
if [[ "${noauth_prompt,,}" =~ ^(y|yes)$ ]]; then
|
echo -n "Use No Authentication? (y/N): "
|
||||||
cat <<EOF >"$CONFIG_PATH"
|
read -r noauth_prompt
|
||||||
|
|
||||||
|
# === YAML CONFIG GENERATION ===
|
||||||
|
if [[ "${noauth_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
cat <<EOF >"$CONFIG_PATH"
|
||||||
server:
|
server:
|
||||||
port: $PORT
|
port: $PORT
|
||||||
sources:
|
sources:
|
||||||
- path: "$SRC_DIR"
|
- path: "$SRC_DIR"
|
||||||
|
name: "RootFS"
|
||||||
config:
|
config:
|
||||||
|
denyByDefault: false
|
||||||
disableIndexing: false
|
disableIndexing: false
|
||||||
indexingIntervalMinutes: 240
|
indexingIntervalMinutes: 240
|
||||||
exclude:
|
conditionals:
|
||||||
folderPaths:
|
rules:
|
||||||
- "/proc"
|
- neverWatchPath: "/proc"
|
||||||
- "/sys"
|
- neverWatchPath: "/sys"
|
||||||
- "/dev"
|
- neverWatchPath: "/dev"
|
||||||
- "/run"
|
- neverWatchPath: "/run"
|
||||||
- "/tmp"
|
- neverWatchPath: "/tmp"
|
||||||
- "/lost+found"
|
- neverWatchPath: "/lost+found"
|
||||||
auth:
|
auth:
|
||||||
methods:
|
methods:
|
||||||
noauth: true
|
noauth: true
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Configured with no authentication"
|
msg_ok "Configured with no authentication"
|
||||||
else
|
else
|
||||||
cat <<EOF >"$CONFIG_PATH"
|
cat <<EOF >"$CONFIG_PATH"
|
||||||
server:
|
server:
|
||||||
port: $PORT
|
port: $PORT
|
||||||
sources:
|
sources:
|
||||||
- path: "$SRC_DIR"
|
- path: "$SRC_DIR"
|
||||||
|
name: "RootFS"
|
||||||
config:
|
config:
|
||||||
|
denyByDefault: false
|
||||||
disableIndexing: false
|
disableIndexing: false
|
||||||
indexingIntervalMinutes: 240
|
indexingIntervalMinutes: 240
|
||||||
exclude:
|
conditionals:
|
||||||
folderPaths:
|
rules:
|
||||||
- "/proc"
|
- neverWatchPath: "/proc"
|
||||||
- "/sys"
|
- neverWatchPath: "/sys"
|
||||||
- "/dev"
|
- neverWatchPath: "/dev"
|
||||||
- "/run"
|
- neverWatchPath: "/run"
|
||||||
- "/tmp"
|
- neverWatchPath: "/tmp"
|
||||||
- "/lost+found"
|
- neverWatchPath: "/lost+found"
|
||||||
auth:
|
auth:
|
||||||
adminUsername: admin
|
adminUsername: admin
|
||||||
adminPassword: helper-scripts.com
|
adminPassword: helper-scripts.com
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Configured with default admin (admin / helper-scripts.com)"
|
msg_ok "Configured with default admin (admin / helper-scripts.com)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Creating service"
|
msg_info "Creating service"
|
||||||
|
if [[ "$OS" == "Debian" ]]; then
|
||||||
if [[ "$OS" == "Debian" ]]; then
|
cat <<EOF >"$SERVICE_PATH"
|
||||||
cat <<EOF >"$SERVICE_PATH"
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=FileBrowser Quantum
|
Description=FileBrowser Quantum
|
||||||
After=network.target
|
After=network.target
|
||||||
@@ -226,9 +213,9 @@ Restart=always
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable --now filebrowser &>/dev/null
|
systemctl enable --now filebrowser &>/dev/null
|
||||||
else
|
else
|
||||||
cat <<EOF >"$SERVICE_PATH"
|
cat <<EOF >"$SERVICE_PATH"
|
||||||
#!/sbin/openrc-run
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
command="/usr/local/bin/filebrowser"
|
command="/usr/local/bin/filebrowser"
|
||||||
@@ -241,14 +228,10 @@ depend() {
|
|||||||
need net
|
need net
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$SERVICE_PATH"
|
chmod +x "$SERVICE_PATH"
|
||||||
rc-update add filebrowser default &>/dev/null
|
rc-update add filebrowser default &>/dev/null
|
||||||
rc-service filebrowser start &>/dev/null
|
rc-service filebrowser start &>/dev/null
|
||||||
fi
|
|
||||||
|
|
||||||
msg_ok "Service created successfully"
|
|
||||||
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:$PORT${CL}"
|
|
||||||
else
|
|
||||||
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
|
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
msg_ok "Service created successfully"
|
||||||
|
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:$PORT${CL}"
|
||||||
|
|||||||
Reference in New Issue
Block a user