mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-05 04:43:26 +01:00
Compare commits
47 Commits
2026-01-16
...
2026-01-18
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afe9d08233 | ||
|
|
9e1354a87b | ||
|
|
f2aca758ea | ||
|
|
3f4e291203 | ||
|
|
ab86f00c68 | ||
|
|
9d6c2ba2ae | ||
|
|
ac68ce48de | ||
|
|
4aa6eb7fb5 | ||
|
|
dbf551d162 | ||
|
|
7a52b83eb8 | ||
|
|
ca97009d1e | ||
|
|
2c1756cad9 | ||
|
|
6e66359d8f | ||
|
|
e21ab1500b | ||
|
|
fe5108f7ca | ||
|
|
502c357895 | ||
|
|
0e59533bcc | ||
|
|
e05742b96a | ||
|
|
9dc1e606ec | ||
|
|
c03e532dde | ||
|
|
54ba53dd3e | ||
|
|
83b5d90c04 | ||
|
|
bcd143e91a | ||
|
|
c5031e6462 | ||
|
|
297b4c30df | ||
|
|
5abfac97f7 | ||
|
|
f6b3515c9e | ||
|
|
67685e62d1 | ||
|
|
25a6a7ecc7 | ||
|
|
6ccc0aaaf6 | ||
|
|
97ce511090 | ||
|
|
7d702353f7 | ||
|
|
b8f9ec2a34 | ||
|
|
b8d0079a87 | ||
|
|
e9f8479313 | ||
|
|
b575bdb3fb | ||
|
|
c3a5ff260a | ||
|
|
83f4085885 | ||
|
|
b606fae7a5 | ||
|
|
af335c8e51 | ||
|
|
a51a3929e6 | ||
|
|
ff5858ac11 | ||
|
|
bba878adb9 | ||
|
|
aee02ba783 | ||
|
|
2d6a54c6a4 | ||
|
|
a3f0573ada | ||
|
|
6a02fcaecd |
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
@@ -30,7 +30,7 @@ body:
|
||||
required: true
|
||||
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
||||
required: true
|
||||
- label: "The application requested has 200+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
- label: "The application requested has 600+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
69
CHANGELOG.md
69
CHANGELOG.md
@@ -10,8 +10,77 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-19
|
||||
|
||||
## 2026-01-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
|
||||
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix Patchmon install script (escaping) [@christiaangoossens](https://github.com/christiaangoossens) ([#10920](https://github.com/community-scripts/ProxmoxVE/pull/10920))
|
||||
- refactor: peanut entrypoint [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10902](https://github.com/community-scripts/ProxmoxVE/pull/10902))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Update Patchmon default Nginx config (IPv6 and correct scheme) [@christiaangoossens](https://github.com/christiaangoossens) ([#10917](https://github.com/community-scripts/ProxmoxVE/pull/10917))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: FluidCalendar [@tremor021](https://github.com/tremor021) ([#10928](https://github.com/community-scripts/ProxmoxVE/pull/10928))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove iVentoy script [@tremor021](https://github.com/tremor021) ([#10924](https://github.com/community-scripts/ProxmoxVE/pull/10924))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: improve password handling and validation logic [@MickLesk](https://github.com/MickLesk) ([#10925](https://github.com/community-scripts/ProxmoxVE/pull/10925))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- hwaccel: improve NVIDIA version matching and GPU selection UI [@MickLesk](https://github.com/MickLesk) ([#10901](https://github.com/community-scripts/ProxmoxVE/pull/10901))
|
||||
|
||||
### 📂 Github
|
||||
|
||||
- Fix typo in the New Script request template [@tremor021](https://github.com/tremor021) ([#10891](https://github.com/community-scripts/ProxmoxVE/pull/10891))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: preserve newest scripts pagination [@jgrubiox](https://github.com/jgrubiox) ([#10882](https://github.com/community-scripts/ProxmoxVE/pull/10882))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update qui.json [@GalaxyCatD3v](https://github.com/GalaxyCatD3v) ([#10896](https://github.com/community-scripts/ProxmoxVE/pull/10896))
|
||||
|
||||
## 2026-01-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- TRIP ([#10864](https://github.com/community-scripts/ProxmoxVE/pull/10864))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix sonarqube update version info (#10870) [@Karlito83](https://github.com/Karlito83) ([#10871](https://github.com/community-scripts/ProxmoxVE/pull/10871))
|
||||
- WGDashboard: Update repo URL [@tremor021](https://github.com/tremor021) ([#10872](https://github.com/community-scripts/ProxmoxVE/pull/10872))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Disable Palmer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#10889](https://github.com/community-scripts/ProxmoxVE/pull/10889))
|
||||
|
||||
## 2026-01-16
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -34,11 +34,10 @@ function update_script() {
|
||||
msg_info "Stopped Service"
|
||||
|
||||
cp /opt/fluid-calendar/.env /opt/fluid.env
|
||||
rm -rf /opt/fluid-calendar
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
|
||||
msg_info "Updating Fluid Calendar"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
cd /opt/fluid-calendar
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
_ _ __ __
|
||||
(_) | / /__ ____ / /_____ __ __
|
||||
/ /| | / / _ \/ __ \/ __/ __ \/ / / /
|
||||
/ / | |/ / __/ / / / /_/ /_/ / /_/ /
|
||||
/_/ |___/\___/_/ /_/\__/\____/\__, /
|
||||
/____/
|
||||
6
ct/headers/termix
Normal file
6
ct/headers/termix
Normal file
@@ -0,0 +1,6 @@
|
||||
______ _
|
||||
/_ __/__ _________ ___ (_) __
|
||||
/ / / _ \/ ___/ __ `__ \/ / |/_/
|
||||
/ / / __/ / / / / / / / /> <
|
||||
/_/ \___/_/ /_/ /_/ /_/_/_/|_|
|
||||
|
||||
6
ct/headers/thingsboard
Normal file
6
ct/headers/thingsboard
Normal file
@@ -0,0 +1,6 @@
|
||||
________ _ ____ __
|
||||
/_ __/ /_ (_)___ ____ ______/ __ )____ ____ __________/ /
|
||||
/ / / __ \/ / __ \/ __ `/ ___/ __ / __ \/ __ `/ ___/ __ /
|
||||
/ / / / / / / / / / /_/ (__ ) /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ /_/ /_/_/_/ /_/\__, /____/_____/\____/\__,_/_/ \__,_/
|
||||
/____/
|
||||
6
ct/headers/trip
Normal file
6
ct/headers/trip
Normal file
@@ -0,0 +1,6 @@
|
||||
__________ ________
|
||||
/_ __/ __ \/ _/ __ \
|
||||
/ / / /_/ // // /_/ /
|
||||
/ / / _, _// // ____/
|
||||
/_/ /_/ |_/___/_/
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
|
||||
APP="iVentoy"
|
||||
var_tags="${var_tags:-pxe-tool}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/iventoy ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
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}:26000${CL}"
|
||||
11
ct/peanut.sh
11
ct/peanut.sh
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
|
||||
if check_for_gh_release "peanut" "Brandawg93/PeaNUT"; then
|
||||
msg_info "Stopping Service"
|
||||
@@ -37,6 +37,15 @@ function update_script() {
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
if ! grep -q '/opt/peanut/entrypoint.mjs' /etc/systemd/system/peanut.service; then
|
||||
msg_info "Fixing entrypoint"
|
||||
cd /opt/peanut
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
sed -i 's|/opt/peanut/.next/standalone/server.js|/opt/peanut/entrypoint.mjs|' /etc/systemd/system/peanut.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Fixed entrypoint"
|
||||
fi
|
||||
|
||||
msg_info "Updating Peanut"
|
||||
cd /opt/peanut
|
||||
$STD pnpm i
|
||||
|
||||
@@ -44,6 +44,7 @@ function update_script() {
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
||||
echo "${RELEASE}" > ~/.sonarqube
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
msg_info "Restoring Backup"
|
||||
|
||||
90
ct/termix.sh
Normal file
90
ct/termix.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Termix-SSH/Termix
|
||||
|
||||
APP="Termix"
|
||||
var_tags="${var_tags:-ssh;terminal;management}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
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/termix ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "termix" "Termix-SSH/Termix"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop termix
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/termix/data /opt/termix_data_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
|
||||
$STD npm install --ignore-scripts --force
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
$STD npm rebuild better-sqlite3 --force
|
||||
$STD npm run build:backend
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Setting up Production Dependencies"
|
||||
$STD npm ci --only=production --ignore-scripts --force
|
||||
$STD npm rebuild better-sqlite3 bcryptjs --force
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Set up Production Dependencies"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/termix/data
|
||||
cp -r /opt/termix_data_backup/. /opt/termix/data
|
||||
rm -rf /opt/termix_data_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Updating Frontend Files"
|
||||
rm -rf /opt/termix/html/*
|
||||
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
|
||||
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
|
||||
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
|
||||
msg_ok "Updated Frontend Files"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start termix
|
||||
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}"
|
||||
57
ct/thingsboard.sh
Normal file
57
ct/thingsboard.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thingsboard/thingsboard
|
||||
|
||||
APP="ThingsBoard"
|
||||
var_tags="${var_tags:-iot;platform}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
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 /usr/share/thingsboard ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "thingsboard" "thingsboard/thingsboard"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop thingsboard
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Running Database Upgrade"
|
||||
$STD /usr/share/thingsboard/bin/install/upgrade.sh
|
||||
msg_ok "Ran Database Upgrade"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start thingsboard
|
||||
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}:8080${CL}"
|
||||
66
ct/trip.sh
Normal file
66
ct/trip.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/itskovacs/TRIP
|
||||
|
||||
APP="TRIP"
|
||||
var_tags="${var_tags:-maps;travel}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
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/trip ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "trip" "itskovacs/TRIP"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop trip
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/trip/src
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
mkdir -p /opt/trip/frontend
|
||||
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
msg_info "Updating Backend"
|
||||
cd /opt/trip/backend
|
||||
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
||||
msg_ok "Updated Backend"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start trip
|
||||
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}:8000${CL}"
|
||||
@@ -28,20 +28,19 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! dpkg -s git >/dev/null 2>&1; then
|
||||
msg_info "Installing git"
|
||||
$STD apt update
|
||||
$STD apt install -y git
|
||||
msg_ok "Installed git"
|
||||
fi
|
||||
apt update
|
||||
apt -y upgrade
|
||||
|
||||
ensure_dependencies git
|
||||
|
||||
msg_info "Updating LXC"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
if [[ -d /etc/wgdashboard ]]; then
|
||||
sleep 2
|
||||
cd /etc/wgdashboard/src
|
||||
./wgd.sh update
|
||||
./wgd.sh start
|
||||
$STD ./wgd.sh update
|
||||
$STD ./wgd.sh start
|
||||
fi
|
||||
msg_ok "Updated LXC"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "iVentoy",
|
||||
"slug": "iventoy",
|
||||
"categories": [
|
||||
2
|
||||
],
|
||||
"date_created": "2024-05-16",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 26000,
|
||||
"documentation": "https://www.iventoy.com/en/doc_news.html",
|
||||
"website": "https://www.iventoy.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/iventoy.webp",
|
||||
"config_path": "",
|
||||
"description": "iVentoy is an upgraded PXE server that allows simultaneous OS booting and installation on multiple machines via network. It is user-friendly, requiring only the placement of ISO files in a designated folder and selecting PXE boot on the client machine. iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, and ARM64 UEFI modes. It is compatible with over 110 OS types, including Windows, WinPE, Linux, and VMware.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/iventoy.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Container must be privileged.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"disable": false,
|
||||
"disable": true,
|
||||
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
|
||||
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
|
||||
"website": "https://palmr.kyantech.com.br/",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"privileged": false,
|
||||
"interface_port": 7476,
|
||||
"documentation": "https://github.com/autobrr/qui",
|
||||
"website": "https://github.com/autobrr/qui",
|
||||
"website": "https://getqui.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qui.webp",
|
||||
"config_path": "/root/.config/qui/config.toml",
|
||||
"description": "Qui is a modern, self-hosted web interface for managing multiple qBittorrent instances with support for 10k+ torrents. It provides a clean and responsive interface for monitoring and controlling your qBittorrent downloads across multiple servers.",
|
||||
|
||||
35
frontend/public/json/termix.json
Normal file
35
frontend/public/json/termix.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Termix",
|
||||
"slug": "termix",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.termix.site/",
|
||||
"website": "https://termix.site/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/termix.webp",
|
||||
"config_path": "",
|
||||
"description": "Termix is an open-source, self-hosted server management platform with SSH terminal access, SSH tunneling, remote file management, Docker management, and multi-platform support.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/termix.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
48
frontend/public/json/thingsboard.json
Normal file
48
frontend/public/json/thingsboard.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "ThingsBoard",
|
||||
"slug": "thingsboard",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://thingsboard.io/docs/",
|
||||
"website": "https://thingsboard.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/thingsboard.webp",
|
||||
"config_path": "/etc/thingsboard/conf/thingsboard.conf",
|
||||
"description": "ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management. It enables device connectivity via industry standard IoT protocols - MQTT, CoAP and HTTP and supports both cloud and on-premises deployments.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/thingsboard.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "sysadmin@thingsboard.org",
|
||||
"password": "sysadmin"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Please allow up to 90 seconds for the Web UI to start",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Additional demo accounts: tenant@thingsboard.org / tenant and customer@thingsboard.org / customer",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Change passwords for all accounts in the account profile page after first login",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
35
frontend/public/json/trip.json
Normal file
35
frontend/public/json/trip.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "TRIP",
|
||||
"slug": "trip",
|
||||
"categories": [
|
||||
21
|
||||
],
|
||||
"date_created": "2026-01-17",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://itskovacs.github.io/trip/docs/intro",
|
||||
"website": "https://github.com/itskovacs/TRIP",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/trip.webp",
|
||||
"config_path": "/opt/trip.env",
|
||||
"description": "Minimalist POI Map Tracker and Trip Planner. Self-hosted.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/trip.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -1,4 +1,164 @@
|
||||
[
|
||||
{
|
||||
"name": "Kareadita/Kavita",
|
||||
"version": "v0.8.9.1",
|
||||
"date": "2026-01-18T23:04:08Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta31",
|
||||
"date": "2026-01-18T22:43:24Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta22",
|
||||
"date": "2026-01-18T22:38:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.5.0",
|
||||
"date": "2026-01-18T22:16:38Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-remonitor-sonarr-episodes",
|
||||
"date": "2026-01-18T20:33:38Z"
|
||||
},
|
||||
{
|
||||
"name": "laurent22/joplin",
|
||||
"version": "server-v3.5.2",
|
||||
"date": "2025-12-19T21:28:55Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.18.0",
|
||||
"date": "2026-01-18T19:00:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
"version": "v5.21.2",
|
||||
"date": "2026-01-18T17:32:08Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.36.1",
|
||||
"date": "2026-01-18T17:09:58Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.63.5",
|
||||
"date": "2026-01-18T13:34:16Z"
|
||||
},
|
||||
{
|
||||
"name": "wger-project/wger",
|
||||
"version": "2.4",
|
||||
"date": "2026-01-18T12:12:02Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.16",
|
||||
"date": "2026-01-17T07:54:15Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.4",
|
||||
"date": "2026-01-04T22:41:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.879",
|
||||
"date": "2026-01-18T05:55:29Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.81.0-nightly",
|
||||
"date": "2026-01-18T04:06:15Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
"date": "2025-06-14T17:45:06Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-18T00:27:03Z"
|
||||
},
|
||||
{
|
||||
"name": "oauth2-proxy/oauth2-proxy",
|
||||
"version": "v7.14.2",
|
||||
"date": "2026-01-18T00:26:09Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.1.1",
|
||||
"date": "2026-01-17T22:35:09Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2026-01-17-r3",
|
||||
"date": "2026-01-17T21:45:17Z"
|
||||
},
|
||||
{
|
||||
"name": "outline/outline",
|
||||
"version": "v1.3.0",
|
||||
"date": "2026-01-17T16:28:04Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.4",
|
||||
"date": "2026-01-17T14:11:01Z"
|
||||
},
|
||||
{
|
||||
"name": "LogicLabs-OU/OpenArchiver",
|
||||
"version": "v0.4.1",
|
||||
"date": "2026-01-17T12:24:31Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.1.8",
|
||||
"date": "2026-01-17T11:21:36Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.22",
|
||||
"date": "2026-01-17T11:09:45Z"
|
||||
},
|
||||
{
|
||||
"name": "ghostfolio/ghostfolio",
|
||||
"version": "2.231.0",
|
||||
"date": "2026-01-17T11:01:23Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v14.0.1",
|
||||
"date": "2026-01-17T07:14:19Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.13.6",
|
||||
"date": "2025-11-04T13:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.12.7",
|
||||
"date": "2026-01-17T03:49:29Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.108.1",
|
||||
"date": "2026-01-17T04:09:09Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.14.2",
|
||||
"date": "2026-01-16T00:50:51Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.58.2",
|
||||
@@ -9,20 +169,15 @@
|
||||
"version": "2026.1.2",
|
||||
"date": "2026-01-16T21:40:31Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2026-01-16-r2",
|
||||
"date": "2026-01-16T20:29:48Z"
|
||||
},
|
||||
{
|
||||
"name": "wanetty/upgopher",
|
||||
"version": "v1.13.0",
|
||||
"date": "2026-01-16T20:26:34Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.14.2",
|
||||
"date": "2026-01-16T00:50:51Z"
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.8",
|
||||
"date": "2026-01-15T13:52:29Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
@@ -30,9 +185,9 @@
|
||||
"date": "2026-01-16T19:27:38Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.1.0",
|
||||
"date": "2026-01-16T18:50:05Z"
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-16T19:17:16Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
@@ -44,16 +199,6 @@
|
||||
"version": "v1.6.7",
|
||||
"date": "2026-01-12T09:54:36Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.16.dev6",
|
||||
"date": "2026-01-16T16:38:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
"version": "v5.21.1",
|
||||
"date": "2026-01-16T16:20:21Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.2.10",
|
||||
@@ -79,46 +224,16 @@
|
||||
"version": "v4.14.2",
|
||||
"date": "2026-01-15T11:19:35Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.21",
|
||||
"date": "2026-01-16T09:05:45Z"
|
||||
},
|
||||
{
|
||||
"name": "garethgeorge/backrest",
|
||||
"version": "v1.11.1",
|
||||
"date": "2026-01-16T08:27:09Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.863",
|
||||
"date": "2026-01-16T06:17:33Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.4",
|
||||
"date": "2026-01-04T22:41:00Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.36.0",
|
||||
"date": "2026-01-16T04:51:49Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.12.1",
|
||||
"date": "2026-01-16T01:04:03Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-16T00:27:06Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "scanopy/scanopy",
|
||||
"version": "v0.13.6",
|
||||
@@ -134,21 +249,6 @@
|
||||
"version": "0.52.6",
|
||||
"date": "2026-01-15T21:29:48Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.12.6",
|
||||
"date": "2026-01-13T16:55:47Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.8",
|
||||
"date": "2026-01-15T13:52:29Z"
|
||||
},
|
||||
{
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-15T21:03:16Z"
|
||||
},
|
||||
{
|
||||
"name": "azukaar/Cosmos-Server",
|
||||
"version": "v0.20.0",
|
||||
@@ -156,8 +256,8 @@
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-15T20:03:50Z"
|
||||
"version": "v4.7.0-beta.1",
|
||||
"date": "2026-01-15T20:00:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
@@ -189,11 +289,6 @@
|
||||
"version": "v0.50.0-rc3",
|
||||
"date": "2026-01-15T13:57:37Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v14.0.0",
|
||||
"date": "2026-01-15T13:55:02Z"
|
||||
},
|
||||
{
|
||||
"name": "readeck/readeck",
|
||||
"version": "0.21.6",
|
||||
@@ -239,21 +334,6 @@
|
||||
"version": "v0.24.0",
|
||||
"date": "2026-01-14T21:28:09Z"
|
||||
},
|
||||
{
|
||||
"name": "Kareadita/Kavita",
|
||||
"version": "v0.8.9",
|
||||
"date": "2026-01-14T21:26:43Z"
|
||||
},
|
||||
{
|
||||
"name": "ghostfolio/ghostfolio",
|
||||
"version": "2.230.0",
|
||||
"date": "2026-01-14T19:28:53Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.17.2",
|
||||
"date": "2026-01-14T19:06:52Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
"version": "v4.8.0",
|
||||
@@ -299,11 +379,6 @@
|
||||
"version": "v3.1.0.2116",
|
||||
"date": "2026-01-14T05:56:17Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.15",
|
||||
"date": "2026-01-06T20:05:54Z"
|
||||
},
|
||||
{
|
||||
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||
"version": "v2.13.6",
|
||||
@@ -319,11 +394,6 @@
|
||||
"version": "v0.17.0",
|
||||
"date": "2026-01-13T22:51:49Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-plex-4k-debug-logs",
|
||||
"date": "2026-01-13T22:38:07Z"
|
||||
},
|
||||
{
|
||||
"name": "C4illin/ConvertX",
|
||||
"version": "v0.17.0",
|
||||
@@ -414,11 +484,6 @@
|
||||
"version": "v5.0.16",
|
||||
"date": "2026-01-12T20:18:34Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.108.0",
|
||||
"date": "2026-01-12T19:24:55Z"
|
||||
},
|
||||
{
|
||||
"name": "release-argus/Argus",
|
||||
"version": "0.29.2",
|
||||
@@ -429,11 +494,6 @@
|
||||
"version": "@jupyter-notebook/ui-components@7.6.0-alpha.1",
|
||||
"date": "2026-01-12T17:53:14Z"
|
||||
},
|
||||
{
|
||||
"name": "laurent22/joplin",
|
||||
"version": "server-v3.5.2",
|
||||
"date": "2025-12-19T21:28:55Z"
|
||||
},
|
||||
{
|
||||
"name": "TryGhost/Ghost-CLI",
|
||||
"version": "v1.28.4",
|
||||
@@ -549,21 +609,11 @@
|
||||
"version": "@fumadocs/base-ui@16.4.6",
|
||||
"date": "2026-01-09T10:54:11Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.3",
|
||||
"date": "2026-01-09T10:40:48Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.20.1",
|
||||
"date": "2026-01-09T01:30:37Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
"date": "2025-06-14T17:45:06Z"
|
||||
},
|
||||
{
|
||||
"name": "webmin/webmin",
|
||||
"version": "2.620",
|
||||
@@ -664,11 +714,6 @@
|
||||
"version": "2.46.0",
|
||||
"date": "2026-01-07T00:19:31Z"
|
||||
},
|
||||
{
|
||||
"name": "outline/outline",
|
||||
"version": "v1.2.0",
|
||||
"date": "2026-01-06T23:02:46Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.5.0",
|
||||
@@ -719,11 +764,6 @@
|
||||
"version": "v5.2.0",
|
||||
"date": "2026-01-05T05:56:57Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.4.0",
|
||||
"date": "2026-01-04T21:10:51Z"
|
||||
},
|
||||
{
|
||||
"name": "actualbudget/actual",
|
||||
"version": "v26.1.0",
|
||||
@@ -742,7 +782,7 @@
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.9.2",
|
||||
"date": "2026-01-02T19:40:19Z"
|
||||
"date": "2026-01-02T19:40:09Z"
|
||||
},
|
||||
{
|
||||
"name": "gotify/server",
|
||||
@@ -764,11 +804,6 @@
|
||||
"version": "2.2.2",
|
||||
"date": "2025-12-31T16:53:34Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.63.4",
|
||||
"date": "2025-12-31T12:40:07Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.12.1",
|
||||
@@ -909,16 +944,6 @@
|
||||
"version": "v14.3.0",
|
||||
"date": "2025-12-20T13:16:37Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta30",
|
||||
"date": "2025-12-19T23:37:07Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta21",
|
||||
"date": "2025-12-19T23:04:27Z"
|
||||
},
|
||||
{
|
||||
"name": "qdrant/qdrant",
|
||||
"version": "v1.16.3",
|
||||
@@ -964,11 +989,6 @@
|
||||
"version": "v12.3.1",
|
||||
"date": "2025-12-16T21:58:21Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.1.7",
|
||||
"date": "2025-12-16T21:44:58Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.1.0",
|
||||
@@ -1304,11 +1324,6 @@
|
||||
"version": "2.11.1",
|
||||
"date": "2025-11-08T14:27:27Z"
|
||||
},
|
||||
{
|
||||
"name": "oauth2-proxy/oauth2-proxy",
|
||||
"version": "v7.13.0",
|
||||
"date": "2025-11-08T13:36:25Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.11.1",
|
||||
@@ -1334,11 +1349,6 @@
|
||||
"version": "v4.4.1",
|
||||
"date": "2025-11-05T09:08:23Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.13.6",
|
||||
"date": "2025-11-04T13:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "clusterzx/paperless-ai",
|
||||
"version": "v3.0.9",
|
||||
@@ -1354,11 +1364,6 @@
|
||||
"version": "1.0.2",
|
||||
"date": "2025-10-30T18:23:23Z"
|
||||
},
|
||||
{
|
||||
"name": "LogicLabs-OU/OpenArchiver",
|
||||
"version": "v0.4.0",
|
||||
"date": "2025-10-30T16:35:23Z"
|
||||
},
|
||||
{
|
||||
"name": "homebridge/homebridge",
|
||||
"version": "v1.11.1",
|
||||
@@ -1629,11 +1634,6 @@
|
||||
"version": "v0.2.11",
|
||||
"date": "2025-04-12T21:13:08Z"
|
||||
},
|
||||
{
|
||||
"name": "wger-project/wger",
|
||||
"version": "2.3",
|
||||
"date": "2025-04-05T18:05:36Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/dockge",
|
||||
"version": "1.5.0",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { CalendarPlus } from "lucide-react";
|
||||
import { useMemo, useState } from "react";
|
||||
import { useEffect, useMemo } from "react";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
@@ -26,9 +26,15 @@ export function getDisplayValueFromType(type: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export function LatestScripts({ items }: { items: Category[] }) {
|
||||
const [page, setPage] = useState(1);
|
||||
|
||||
export function LatestScripts({
|
||||
items,
|
||||
page,
|
||||
onPageChange,
|
||||
}: {
|
||||
items: Category[];
|
||||
page: number;
|
||||
onPageChange: (page: number) => void;
|
||||
}) {
|
||||
const latestScripts = useMemo(() => {
|
||||
if (!items)
|
||||
return [];
|
||||
@@ -48,12 +54,20 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
||||
);
|
||||
}, [items]);
|
||||
|
||||
const totalPages = Math.max(1, Math.ceil(latestScripts.length / ITEMS_PER_PAGE));
|
||||
|
||||
useEffect(() => {
|
||||
if (page > totalPages) {
|
||||
onPageChange(totalPages);
|
||||
}
|
||||
}, [page, totalPages, onPageChange]);
|
||||
|
||||
const goToNextPage = () => {
|
||||
setPage(prevPage => prevPage + 1);
|
||||
onPageChange(Math.min(totalPages, page + 1));
|
||||
};
|
||||
|
||||
const goToPreviousPage = () => {
|
||||
setPage(prevPage => prevPage - 1);
|
||||
onPageChange(Math.max(1, page - 1));
|
||||
};
|
||||
|
||||
const startIndex = (page - 1) * ITEMS_PER_PAGE;
|
||||
|
||||
@@ -18,6 +18,7 @@ function ScriptContent() {
|
||||
const [selectedCategory, setSelectedCategory] = useQueryState("category");
|
||||
const [links, setLinks] = useState<Category[]>([]);
|
||||
const [item, setItem] = useState<Script>();
|
||||
const [latestPage, setLatestPage] = useState(1);
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedScript && links.length > 0) {
|
||||
@@ -50,14 +51,16 @@ function ScriptContent() {
|
||||
/>
|
||||
</div>
|
||||
<div className="px-4 w-full sm:max-w-[calc(100%-350px-16px)]">
|
||||
{selectedScript && item ? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
) : (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
{selectedScript && item
|
||||
? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
)
|
||||
: (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} page={latestPage} onPageChange={setLatestPage} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -54,7 +54,7 @@ if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
|
||||
python3-dev
|
||||
msg_ok "Installed additional dependencies for WGDashboard"
|
||||
msg_info "Installing WGDashboard"
|
||||
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
|
||||
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
||||
cd /etc/wgdashboard/src
|
||||
chmod u+x wgd.sh
|
||||
$STD ./wgd.sh install
|
||||
|
||||
@@ -18,31 +18,15 @@ $STD apt-get install -y zip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
|
||||
msg_info "Setting up Postgresql Database"
|
||||
DB_NAME="fluiddb"
|
||||
DB_USER="fluiduser"
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED 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 "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||
{
|
||||
echo "${APPLICATION} Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET"
|
||||
} >>~/$APPLICATION.creds
|
||||
msg_ok "Set up Postgresql Database"
|
||||
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
msg_info "Configuring fluid-calendar"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET" >>~/$APPLICATION.creds
|
||||
cat <<EOF >/opt/fluid-calendar/.env
|
||||
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
|
||||
|
||||
# Change the URL below to your external URL
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
@@ -61,7 +45,7 @@ $STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Configuring ${APPLICATION}"
|
||||
msg_ok "Configured fluid-calendar"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/fluid-calendar.service
|
||||
@@ -72,6 +56,7 @@ After=network.target postgresql.service
|
||||
[Service]
|
||||
Restart=always
|
||||
WorkingDirectory=/opt/fluid-calendar
|
||||
EnvironmentFile=/opt/fluid-calendar/.env
|
||||
ExecStart=/usr/bin/npm run start
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Installing iVentoy v${RELEASE}"
|
||||
mkdir -p /opt/iventoy/{data,iso}
|
||||
curl -fsSL "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz" -o "iventoy-${RELEASE}-linux-free.tar.gz"
|
||||
tar -C /tmp -xzf iventoy*.tar.gz
|
||||
mv /tmp/iventoy*/* /opt/iventoy/
|
||||
rm -rf iventoy*.tar.gz
|
||||
msg_ok "Installed iVentoy"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/iventoy.service
|
||||
[Unit]
|
||||
Description=iVentoy PXE Booter
|
||||
Documentation=https://www.iventoy.com
|
||||
Wants=network-online.target
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment=IVENTOY_API_ALL=1
|
||||
Environment=IVENTOY_AUTO_RUN=1
|
||||
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
ExecStart=sh ./iventoy.sh -R start
|
||||
WorkingDirectory=/opt/iventoy
|
||||
Restart=on-failure
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now iventoy
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -98,9 +98,16 @@ msg_ok "Configured PatchMon"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
|
||||
map \$http_x_forwarded_proto \$proxy_corrected_scheme {
|
||||
default \$scheme; # Fallback to Nginx's actual connection scheme if no X-Forwarded-Proto header was set
|
||||
https https; # If X-Forwarded-Proto is 'https', use 'https'
|
||||
http http; # If X-Forwarded-Proto is 'http', use 'http'
|
||||
}
|
||||
|
||||
server {
|
||||
# Listen on both IPv4 and IPv6 (with all hostnames)
|
||||
listen 80;
|
||||
server_name $LOCAL_IP;
|
||||
listen [::]:80;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options DENY always;
|
||||
@@ -123,7 +130,7 @@ server {
|
||||
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-Proto \$proxy_corrected_scheme;
|
||||
proxy_set_header X-Forwarded-Host \$host;
|
||||
proxy_set_header Cookie \$http_cookie;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
@@ -150,7 +157,7 @@ server {
|
||||
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-Proto \$proxy_corrected_scheme;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
|
||||
@@ -18,7 +18,7 @@ msg_info "Installing NUT"
|
||||
$STD apt install -y nut-client
|
||||
msg_ok "Installed NUT"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
msg_info "Setup Peanut"
|
||||
@@ -28,6 +28,7 @@ $STD pnpm run build:local
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
mkdir -p /opt/peanut/.next/standalone/config
|
||||
mkdir -p /etc/peanut/
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
cat <<EOF >/etc/peanut/settings.yml
|
||||
WEB_HOST: 0.0.0.0
|
||||
WEB_PORT: 3000
|
||||
@@ -53,7 +54,7 @@ Environment="NODE_ENV=production"
|
||||
#Environment="WEB_HOST=0.0.0.0"
|
||||
#Environment="WEB_PORT=3000"
|
||||
WorkingDirectory=/opt/peanut
|
||||
ExecStart=node /opt/peanut/.next/standalone/server.js
|
||||
ExecStart=node /opt/peanut/entrypoint.mjs
|
||||
TimeoutStopSec=30
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
258
install/termix-install.sh
Normal file
258
install/termix-install.sh
Normal file
@@ -0,0 +1,258 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Termix-SSH/Termix
|
||||
|
||||
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 \
|
||||
nginx \
|
||||
openssl \
|
||||
gettext-base
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
|
||||
$STD npm install --ignore-scripts --force
|
||||
$STD npm cache clean --force
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
$STD npm rebuild better-sqlite3 --force
|
||||
$STD npm run build:backend
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Setting up Node Dependencies"
|
||||
cd /opt/termix
|
||||
$STD npm ci --only=production --ignore-scripts --force
|
||||
$STD npm rebuild better-sqlite3 bcryptjs --force
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Set up Node Dependencies"
|
||||
|
||||
msg_info "Setting up Directories"
|
||||
mkdir -p /opt/termix/data \
|
||||
/opt/termix/uploads \
|
||||
/opt/termix/html \
|
||||
/opt/termix/nginx \
|
||||
/opt/termix/nginx/logs \
|
||||
/opt/termix/nginx/cache \
|
||||
/opt/termix/nginx/client_body
|
||||
|
||||
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
|
||||
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
|
||||
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
|
||||
msg_ok "Set up Directories"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<'EOF' >/etc/nginx/sites-available/termix.conf
|
||||
error_log /opt/termix/nginx/logs/error.log warn;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
access_log /opt/termix/nginx/logs/access.log;
|
||||
|
||||
client_body_temp_path /opt/termix/nginx/client_body;
|
||||
proxy_temp_path /opt/termix/nginx/proxy_temp;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
client_header_timeout 300s;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
add_header X-Content-Type-Options nosniff always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
root /opt/termix/html;
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
root /opt/termix/html;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~ ^/users(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/(database|db)(/.*)?$ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location /ssh/ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /ssh/websocket/ {
|
||||
proxy_pass http://127.0.0.1:30002/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
}
|
||||
|
||||
location /ssh/tunnel/ {
|
||||
proxy_pass http://127.0.0.1:30003;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/ssh/ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
proxy_pass http://127.0.0.1:30004;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location /health {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location ~ ^/(status|metrics)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30005;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location ~ ^/(uptime|activity)(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30006;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
location ^~ /docker/console/ {
|
||||
proxy_pass http://127.0.0.1:30008/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/docker(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30007;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
rm -f /etc/nginx/nginx.conf
|
||||
ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/nginx.conf
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/termix.service
|
||||
[Unit]
|
||||
Description=Termix Backend
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/termix
|
||||
Environment=NODE_ENV=production
|
||||
Environment=DATA_DIR=/opt/termix/data
|
||||
ExecStart=/usr/bin/node /opt/termix/dist/backend/backend/starter.js
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now termix
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
51
install/thingsboard-install.sh
Normal file
51
install/thingsboard-install.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thingsboard/thingsboard
|
||||
|
||||
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 \
|
||||
libharfbuzz0b \
|
||||
fontconfig \
|
||||
fonts-dejavu-core
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
JAVA_VERSION="17" setup_java
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="thingsboard_db" PG_DB_USER="thingsboard" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Configuring ThingsBoard"
|
||||
cat <<EOF >/etc/thingsboard/conf/thingsboard.conf
|
||||
# DB Configuration
|
||||
export DATABASE_TS_TYPE=sql
|
||||
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/${PG_DB_NAME}
|
||||
export SPRING_DATASOURCE_USERNAME=${PG_DB_USER}
|
||||
export SPRING_DATASOURCE_PASSWORD=${PG_DB_PASS}
|
||||
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
|
||||
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Configured ThingsBoard"
|
||||
|
||||
msg_info "Running ThingsBoard Installation Script"
|
||||
$STD /usr/share/thingsboard/bin/install/install.sh --loadDemo
|
||||
msg_ok "Ran Installation Script"
|
||||
|
||||
msg_info "Starting ThingsBoard Service"
|
||||
systemctl enable -q --now thingsboard
|
||||
msg_ok "Started ThingsBoard Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
75
install/trip-install.sh
Normal file
75
install/trip-install.sh
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/itskovacs/TRIP
|
||||
|
||||
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
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/trip/src
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Setting up Backend"
|
||||
cd /opt/trip/backend
|
||||
$STD uv venv /opt/trip/.venv
|
||||
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
||||
msg_ok "Set up Backend"
|
||||
|
||||
msg_info "Configuring Application"
|
||||
mkdir -p /opt/trip/frontend
|
||||
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
|
||||
mkdir -p /opt/trip_storage/{attachments,backups,assets}
|
||||
|
||||
cat <<EOF >/opt/trip.env
|
||||
# TRIP Configuration
|
||||
# https://itskovacs.github.io/trip/docs/getting-started/configuration/
|
||||
ATTACHMENTS_FOLDER=/opt/trip_storage/attachments
|
||||
BACKUPS_FOLDER=/opt/trip_storage/backups
|
||||
ASSETS_FOLDER=/opt/trip_storage/assets
|
||||
FRONTEND_FOLDER=/opt/trip/frontend
|
||||
SQLITE_FILE=/opt/trip_storage/trip.sqlite
|
||||
EOF
|
||||
msg_ok "Configured Application"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/trip.service
|
||||
[Unit]
|
||||
Description=TRIP - Minimalist POI Map Tracker and Trip Planner
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/trip/backend
|
||||
EnvironmentFile=/opt/trip.env
|
||||
ExecStart=/opt/trip/.venv/bin/fastapi run /opt/trip/backend/trip/main.py --host 0.0.0.0 --port 8000
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now trip
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -25,7 +25,7 @@ msg_ok "Installed WireGuard"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add WGDashboard? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
|
||||
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
||||
|
||||
msg_info "Installing WGDashboard"
|
||||
cd /etc/wgdashboard/src
|
||||
|
||||
@@ -582,7 +582,22 @@ base_settings() {
|
||||
CORE_COUNT="${final_cpu}"
|
||||
RAM_SIZE="${final_ram}"
|
||||
VERBOSE=${var_verbose:-"${1:-no}"}
|
||||
PW=${var_pw:-""}
|
||||
PW=""
|
||||
if [[ -n "${var_pw:-}" ]]; then
|
||||
local _pw_raw="${var_pw}"
|
||||
case "$_pw_raw" in
|
||||
--password\ *) _pw_raw="${_pw_raw#--password }" ;;
|
||||
-password\ *) _pw_raw="${_pw_raw#-password }" ;;
|
||||
esac
|
||||
while [[ "$_pw_raw" == -* ]]; do
|
||||
_pw_raw="${_pw_raw#-}"
|
||||
done
|
||||
if [[ -z "$_pw_raw" ]]; then
|
||||
msg_warn "Password was only dashes after cleanup; leaving empty."
|
||||
else
|
||||
PW="--password $_pw_raw"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Validate and set Container ID
|
||||
local requested_id="${var_ctid:-$NEXTID}"
|
||||
@@ -1392,17 +1407,30 @@ advanced_settings() {
|
||||
((STEP++))
|
||||
elif [[ "$PW1" == *" "* ]]; then
|
||||
whiptail --msgbox "Password cannot contain spaces." 8 58
|
||||
elif ((${#PW1} < 5)); then
|
||||
whiptail --msgbox "Password must be at least 5 characters." 8 58
|
||||
else
|
||||
local _pw1_clean="$PW1"
|
||||
while [[ "$_pw1_clean" == -* ]]; do
|
||||
_pw1_clean="${_pw1_clean#-}"
|
||||
done
|
||||
if [[ -z "$_pw1_clean" ]]; then
|
||||
whiptail --msgbox "Password cannot be only '-' characters." 8 58
|
||||
continue
|
||||
elif ((${#_pw1_clean} < 5)); then
|
||||
whiptail --msgbox "Password must be at least 5 characters (after removing leading '-')." 8 70
|
||||
continue
|
||||
fi
|
||||
# Verify password
|
||||
if PW2=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
|
||||
--title "PASSWORD VERIFICATION" \
|
||||
--ok-button "Confirm" --cancel-button "Back" \
|
||||
--passwordbox "\nVerify Root Password" 10 58 \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [[ "$PW1" == "$PW2" ]]; then
|
||||
_pw="-password $PW1"
|
||||
local _pw2_clean="$PW2"
|
||||
while [[ "$_pw2_clean" == -* ]]; do
|
||||
_pw2_clean="${_pw2_clean#-}"
|
||||
done
|
||||
if [[ "$_pw1_clean" == "$_pw2_clean" ]]; then
|
||||
_pw="--password $_pw1_clean"
|
||||
_pw_display="********"
|
||||
((STEP++))
|
||||
else
|
||||
|
||||
102
misc/tools.func
102
misc/tools.func
@@ -2683,7 +2683,7 @@ function setup_hwaccel() {
|
||||
else
|
||||
# Multiple GPUs - show selection menu
|
||||
echo ""
|
||||
msg_info "Multiple GPUs detected:"
|
||||
msg_custom "⚠" "${YW}" "Multiple GPUs detected:"
|
||||
echo ""
|
||||
for i in "${!GPU_LIST[@]}"; do
|
||||
local type_display="${GPU_TYPES[$i]}"
|
||||
@@ -3039,16 +3039,36 @@ _setup_nvidia_gpu() {
|
||||
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
|
||||
msg_info "Debian ${os_codename}: Using Debian's NVIDIA packages"
|
||||
|
||||
# Try version-matched from Debian repos first
|
||||
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries from Debian"
|
||||
else
|
||||
# Fallback to unversioned (whatever Debian provides)
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries from Debian (version may differ from host)"
|
||||
# Extract major version for flexible matching (580.126.09 -> 580)
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
# Check what versions are actually available
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Found available NVIDIA version: ${available_version}"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries (${available_version})"
|
||||
else
|
||||
msg_warn "NVIDIA library installation failed - GPU compute may not work"
|
||||
msg_warn "Failed to install NVIDIA ${available_version} - trying unversioned"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null || true
|
||||
fi
|
||||
else
|
||||
# No matching major version - try latest available or unversioned
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x found in repos"
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Trying latest available: ${available_version} (may cause version mismatch)"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
|
||||
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null ||
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed - GPU compute may not work"
|
||||
else
|
||||
msg_warn "No NVIDIA packages available in Debian repos - GPU support disabled"
|
||||
fi
|
||||
fi
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
|
||||
@@ -3083,18 +3103,39 @@ NVIDIA_PIN
|
||||
|
||||
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
|
||||
|
||||
# Install version-matched NVIDIA libraries
|
||||
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
|
||||
# Extract major version for flexible matching (580.126.09 -> 580)
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
msg_info "Installing NVIDIA libraries (version ${nvidia_host_version})"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
msg_warn "Version-pinned install failed - trying unpinned"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries (unpinned) - version mismatch may occur"
|
||||
# Check what versions are actually available in CUDA repo
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Installing NVIDIA libraries (version ${available_version})"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
msg_warn "Version-pinned install failed - trying unpinned"
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo (host: ${nvidia_host_version})"
|
||||
# Try latest available version
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Trying latest available: ${available_version} (version mismatch warning)"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
|
||||
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null; then
|
||||
msg_ok "Installed NVIDIA libraries (${available_version}) - version differs from host"
|
||||
else
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
|
||||
msg_warn "NVIDIA library installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages available in CUDA repo - GPU support disabled"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -3125,11 +3166,24 @@ NVIDIA_PIN
|
||||
|
||||
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
|
||||
|
||||
# Try version-matched install
|
||||
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
# Extract major version for flexible matching
|
||||
local nvidia_major_version="${nvidia_host_version%%.*}"
|
||||
|
||||
# Check what versions are available
|
||||
local available_version=""
|
||||
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
|
||||
|
||||
if [[ -n "$available_version" ]]; then
|
||||
msg_info "Installing NVIDIA libraries (version ${available_version})"
|
||||
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo"
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user