Compare commits

..

No commits in common. "main" and "2025-10-21" have entirely different histories.

28 changed files with 859 additions and 2816 deletions

View File

@ -10,53 +10,8 @@
> [!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-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 ## 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 ## 2025-10-21
### 🆕 New Scripts ### 🆕 New Scripts

View File

@ -1,6 +0,0 @@
____ __ __ __ ___
/ __ \____ _/ /______/ /_ / |/ /___ ____
/ /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
/ ____/ /_/ / /_/ /__/ / / / / / / /_/ / / / /
/_/ \__,_/\__/\___/_/ /_/_/ /_/\____/_/ /_/

View File

@ -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"
@ -27,20 +27,15 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC"
if check_for_gh_release "kavita" "Kareadita/Kavita"; then
msg_info "Stopping Service"
systemctl stop kavita systemctl stop kavita
msg_ok "Service Stopped" 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
fetch_and_deploy_gh_release "kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz" rm -rf Kavita/config
chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita cp -r Kavita/* /opt/Kavita
rm -rf Kavita
msg_info "Starting Service"
systemctl start kavita systemctl start kavita
msg_ok "Service Started" msg_ok "Updated $APP LXC"
msg_ok "Update Successfully!"
fi
exit exit
} }

View File

@ -30,7 +30,7 @@ function update_script() {
fi fi
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc echo 'export 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,7 +110,6 @@ EOF
msg_ok "Updated Successfully!" msg_ok "Updated Successfully!"
fi fi
exit
} }
start start

View File

@ -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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"

View File

@ -28,19 +28,6 @@ function update_script() {
exit exit
fi fi
if command -v node &> /dev/null; then
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then
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
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
export NODE_OPTIONS="--openssl-legacy-provider" export NODE_OPTIONS="--openssl-legacy-provider"

View File

@ -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"

View File

@ -1,76 +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: 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}"

View File

@ -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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"

View File

@ -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": "/etc/bunkerweb/variables.env", "config_path": "/opt/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": [
{ {

View File

@ -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": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp", "logo": null,
"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": [
{ {

View File

@ -23,7 +23,7 @@
"ram": 2048, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "13" "version": "12"
} }
} }
], ],

View File

@ -23,7 +23,7 @@
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@ -23,7 +23,7 @@
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@ -1,35 +0,0 @@
{
"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": []
}

View File

@ -23,7 +23,7 @@
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@ -35,10 +35,6 @@
{ {
"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"
} }
] ]
} }

View File

@ -1,314 +1,59 @@
[ [
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.31",
"date": "2025-10-25T11:14:22Z"
},
{
"name": "pi-hole/pi-hole",
"version": "v6.2.1",
"date": "2025-10-25T10:39:32Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.2",
"date": "2025-10-07T08:11:58Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.185",
"date": "2025-10-25T05:55:23Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.24.7",
"date": "2025-10-25T01:23:46Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.1.0",
"date": "2025-10-25T00:30:41Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-25T00:27:04Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "mongodb/mongo",
"version": "r7.0.26-rc0",
"date": "2025-10-24T22:33:52Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.5.2",
"date": "2025-10-24T21:42:54Z"
},
{ {
"name": "msgbyte/tianji", "name": "msgbyte/tianji",
"version": "v1.30.3", "version": "v1.30.0",
"date": "2025-10-24T21:21:10Z" "date": "2025-10-21T21:37:52Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.2",
"date": "2025-10-23T06:59:32Z"
},
{
"name": "home-assistant/core",
"version": "2025.10.4",
"date": "2025-10-24T20:03:03Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.43.0",
"date": "2025-10-24T19:16:05Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.90.2",
"date": "2025-10-24T18:02:03Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.9.0",
"date": "2025-10-24T17:44:24Z"
},
{
"name": "verdaccio/verdaccio",
"version": "v6.2.1",
"date": "2025-10-24T15:40:49Z"
},
{
"name": "usememos/memos",
"version": "v0.25.2",
"date": "2025-10-24T12:30:04Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.14.0",
"date": "2025-10-24T11:59:09Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.116.2",
"date": "2025-10-21T11:39:58Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.5",
"date": "2025-10-24T11:12:22Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.6.3",
"date": "2025-10-24T11:08:15Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.3",
"date": "2025-10-24T10:51:12Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.s3-snapshots-3",
"date": "2025-10-24T09:47:47Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.4",
"date": "2025-10-24T06:43:49Z"
},
{
"name": "inventree/InvenTree",
"version": "1.0.8",
"date": "2025-10-24T05:32:09Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.31.0",
"date": "2025-10-24T04:07:27Z"
},
{
"name": "esphome/esphome",
"version": "2025.10.3",
"date": "2025-10-24T01:08:22Z"
},
{
"name": "documenso/documenso",
"version": "v1.13.1",
"date": "2025-10-23T23:52:45Z"
},
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.4.0",
"date": "2025-10-23T21:12:48Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.10.6",
"date": "2025-10-23T20:20:21Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.14.0",
"date": "2025-10-23T17:45:30Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.2",
"date": "2025-10-23T17:23:27Z"
},
{
"name": "drakkan/sftpgo",
"version": "v2.7.0",
"date": "2025-10-23T17:15:07Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.4.0",
"date": "2025-10-16T07:20:34Z"
},
{
"name": "TwiN/gatus",
"version": "v5.28.0",
"date": "2025-10-23T16:16:04Z"
},
{
"name": "juanfont/headscale",
"version": "v0.26.1",
"date": "2025-06-06T11:22:02Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.41.5",
"date": "2025-10-23T15:12:42Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.68",
"date": "2025-10-23T14:26:29Z"
},
{
"name": "Kareadita/Kavita",
"version": "v0.8.8.3",
"date": "2025-10-23T12:31:49Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.32",
"date": "2025-10-23T12:30:33Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.2.0.0_stable_2025-10-23",
"date": "2025-10-23T11:48:25Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.78.7-nightly",
"date": "2025-10-22T22:33:31Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.99",
"date": "2025-10-22T22:20:33Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "rcourtman/Pulse",
"version": "issue-596",
"date": "2025-10-22T19:48:56Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.10-beta",
"date": "2025-10-22T18:41:54Z"
},
{
"name": "docker/compose",
"version": "v2.40.2",
"date": "2025-10-22T17:38:12Z"
},
{
"name": "louislam/uptime-kuma",
"version": "2.0.2",
"date": "2025-10-22T17:03:54Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.84.2",
"date": "2025-10-22T17:03:48Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.307.2",
"date": "2025-10-22T16:00:08Z"
},
{
"name": "thecfu/scraparr",
"version": "v3.0.0-beta",
"date": "2025-10-22T13:12:10Z"
},
{
"name": "NLnetLabs/unbound",
"version": "release-1.24.1",
"date": "2025-10-22T10:28:00Z"
},
{
"name": "mattermost/mattermost",
"version": "server/public/v0.1.21",
"date": "2025-10-16T09:46:16Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.4rc1",
"date": "2025-10-22T09:20:59Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.98.0",
"date": "2025-10-22T06:49:36Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.17",
"date": "2025-10-22T00:33:47Z"
}, },
{ {
"name": "bluenviron/mediamtx", "name": "bluenviron/mediamtx",
"version": "v1.15.3", "version": "v1.15.3",
"date": "2025-10-21T19:56:55Z" "date": "2025-10-21T19:56:55Z"
}, },
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.28",
"date": "2025-10-21T19:51:28Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.78.6-nightly",
"date": "2025-10-21T19:12:46Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.15",
"date": "2025-10-21T19:03:20Z"
},
{ {
"name": "jenkinsci/jenkins", "name": "jenkinsci/jenkins",
"version": "jenkins-2.533", "version": "jenkins-2.533",
"date": "2025-10-21T18:26:10Z" "date": "2025-10-21T18:26:10Z"
}, },
{
"name": "TwiN/gatus",
"version": "v5.27.2",
"date": "2025-10-21T18:03:22Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.0",
"date": "2025-10-21T17:41:30Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.98",
"date": "2025-10-21T17:21:13Z"
},
{ {
"name": "kyantech/Palmr", "name": "kyantech/Palmr",
"version": "v3.2.5-beta", "version": "v3.2.5-beta",
"date": "2025-10-21T16:49:14Z" "date": "2025-10-21T16:49:14Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.116.2",
"date": "2025-10-21T11:39:58Z"
},
{ {
"name": "element-hq/synapse", "name": "element-hq/synapse",
"version": "v1.140.0", "version": "v1.140.0",
@ -319,6 +64,11 @@
"version": "v12.2.1", "version": "v12.2.1",
"date": "2025-10-21T14:40:19Z" "date": "2025-10-21T14:40:19Z"
}, },
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.1",
"date": "2025-10-15T10:44:03Z"
},
{ {
"name": "laurent22/joplin", "name": "laurent22/joplin",
"version": "server-v3.4.4", "version": "server-v3.4.4",
@ -349,21 +99,61 @@
"version": "0.209.3", "version": "0.209.3",
"date": "2025-10-21T10:53:07Z" "date": "2025-10-21T10:53:07Z"
}, },
{
"name": "zabbix/zabbix",
"version": "7.0.20rc1",
"date": "2025-10-21T09:14:14Z"
},
{ {
"name": "VictoriaMetrics/VictoriaMetrics", "name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.128.0", "version": "pmm-6401-v1.128.0",
"date": "2025-10-21T08:30:52Z" "date": "2025-10-21T08:30:52Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.ignore-embedding-failures-2",
"date": "2025-10-21T07:36:22Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.166",
"date": "2025-10-21T05:54:33Z"
},
{ {
"name": "openobserve/openobserve", "name": "openobserve/openobserve",
"version": "v0.16.0-rc1", "version": "v0.16.0-rc1",
"date": "2025-10-21T00:37:47Z" "date": "2025-10-21T00:37:47Z"
}, },
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-21T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "documenso/documenso",
"version": "v1.13.0",
"date": "2025-10-21T00:21:04Z"
},
{ {
"name": "henrygd/beszel", "name": "henrygd/beszel",
"version": "v0.14.1", "version": "v0.14.1",
"date": "2025-10-20T22:10:56Z" "date": "2025-10-20T22:10:56Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.1",
"date": "2025-10-16T07:21:53Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.8.1",
"date": "2025-10-20T20:53:56Z"
},
{ {
"name": "coder/code-server", "name": "coder/code-server",
"version": "v4.105.1", "version": "v4.105.1",
@ -374,11 +164,31 @@
"version": "v1.0.23", "version": "v1.0.23",
"date": "2025-10-20T19:51:33Z" "date": "2025-10-20T19:51:33Z"
}, },
{
"name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.16",
"date": "2025-10-20T19:29:20Z"
},
{ {
"name": "MediaBrowser/Emby.Releases", "name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.80", "version": "4.9.1.80",
"date": "2025-09-30T20:25:16Z" "date": "2025-09-30T20:25:16Z"
}, },
{
"name": "tailscale/tailscale",
"version": "v1.91.0-pre",
"date": "2025-10-20T16:18:51Z"
},
{
"name": "louislam/uptime-kuma",
"version": "2.0.1",
"date": "2025-10-20T16:11:12Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.84.1",
"date": "2025-10-20T15:32:24Z"
},
{ {
"name": "rclone/rclone", "name": "rclone/rclone",
"version": "v1.71.2", "version": "v1.71.2",
@ -389,16 +199,41 @@
"version": "7.0.0-rc.1", "version": "7.0.0-rc.1",
"date": "2025-10-20T11:53:31Z" "date": "2025-10-20T11:53:31Z"
}, },
{
"name": "Kareadita/Kavita",
"version": "v0.8.8",
"date": "2025-10-20T11:26:24Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.10.4",
"date": "2025-10-20T10:45:54Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-beta.1", "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
"date": "2025-10-20T07:01:38Z" "date": "2025-10-20T07:01:38Z"
}, },
{
"name": "inventree/InvenTree",
"version": "1.0.7",
"date": "2025-10-20T05:23:10Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.2",
"date": "2025-10-07T08:11:58Z"
},
{ {
"name": "jellyfin/jellyfin", "name": "jellyfin/jellyfin",
"version": "v10.11.0", "version": "v10.11.0",
"date": "2025-10-20T00:45:19Z" "date": "2025-10-20T00:45:19Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.10.2",
"date": "2025-10-20T00:42:57Z"
},
{ {
"name": "pelican-dev/panel", "name": "pelican-dev/panel",
"version": "v1.0.0-beta27", "version": "v1.0.0-beta27",
@ -409,6 +244,11 @@
"version": "5.2.3", "version": "5.2.3",
"date": "2025-10-19T20:50:15Z" "date": "2025-10-19T20:50:15Z"
}, },
{
"name": "verdaccio/verdaccio",
"version": "generator-verdaccio-plugin@6.0.0-next-8.24",
"date": "2025-10-19T19:43:46Z"
},
{ {
"name": "Part-DB/Part-DB-server", "name": "Part-DB/Part-DB-server",
"version": "v2.2.1", "version": "v2.2.1",
@ -419,6 +259,11 @@
"version": "v13.0.0", "version": "v13.0.0",
"date": "2025-10-19T10:03:18Z" "date": "2025-10-19T10:03:18Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{ {
"name": "Prowlarr/Prowlarr", "name": "Prowlarr/Prowlarr",
"version": "v2.0.5.5160", "version": "v2.0.5.5160",
@ -429,6 +274,11 @@
"version": "v2.14.5.4836", "version": "v2.14.5.4836",
"date": "2025-10-08T15:30:50Z" "date": "2025-10-08T15:30:50Z"
}, },
{
"name": "Luligu/matterbridge",
"version": "3.3.3",
"date": "2025-10-18T22:27:42Z"
},
{ {
"name": "ellite/Wallos", "name": "ellite/Wallos",
"version": "v4.5.0", "version": "v4.5.0",
@ -439,11 +289,26 @@
"version": "v2025-10-18", "version": "v2025-10-18",
"date": "2025-10-18T20:35:54Z" "date": "2025-10-18T20:35:54Z"
}, },
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{ {
"name": "project-zot/zot", "name": "project-zot/zot",
"version": "v2.1.10", "version": "v2.1.10",
"date": "2025-10-18T18:46:36Z" "date": "2025-10-18T18:46:36Z"
}, },
{
"name": "homarr-labs/homarr",
"version": "v1.42.1",
"date": "2025-10-18T18:31:38Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.29",
"date": "2025-10-18T17:35:19Z"
},
{ {
"name": "Notifiarr/notifiarr", "name": "Notifiarr/notifiarr",
"version": "v0.9.0", "version": "v0.9.0",
@ -464,6 +329,11 @@
"version": "v13.0.9", "version": "v13.0.9",
"date": "2025-10-18T09:59:25Z" "date": "2025-10-18T09:59:25Z"
}, },
{
"name": "runtipi/runtipi",
"version": "v4.5.1",
"date": "2025-10-18T08:12:19Z"
},
{ {
"name": "nzbgetcom/nzbget", "name": "nzbgetcom/nzbget",
"version": "v25.4", "version": "v25.4",
@ -474,6 +344,16 @@
"version": "v1.19.17", "version": "v1.19.17",
"date": "2025-10-17T23:40:02Z" "date": "2025-10-17T23:40:02Z"
}, },
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.9-beta",
"date": "2025-10-17T21:51:21Z"
},
{
"name": "home-assistant/core",
"version": "2025.10.3",
"date": "2025-10-17T21:15:07Z"
},
{ {
"name": "forgejo/forgejo", "name": "forgejo/forgejo",
"version": "v13.0.1", "version": "v13.0.1",
@ -489,16 +369,46 @@
"version": "v4.6.1", "version": "v4.6.1",
"date": "2025-10-17T15:21:59Z" "date": "2025-10-17T15:21:59Z"
}, },
{
"name": "docker/compose",
"version": "v2.40.1",
"date": "2025-10-17T13:42:04Z"
},
{ {
"name": "neo4j/neo4j", "name": "neo4j/neo4j",
"version": "5.26.14", "version": "5.26.14",
"date": "2025-10-17T12:38:22Z" "date": "2025-10-17T12:38:22Z"
}, },
{
"name": "mattermost/mattermost",
"version": "server/public/v0.1.21",
"date": "2025-10-16T09:46:16Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w43-4.14.0",
"date": "2025-10-17T09:07:27Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.307.1",
"date": "2025-10-17T08:41:04Z"
},
{ {
"name": "zwave-js/zwave-js-ui", "name": "zwave-js/zwave-js-ui",
"version": "v11.5.2", "version": "v11.5.2",
"date": "2025-10-17T08:20:13Z" "date": "2025-10-17T08:20:13Z"
}, },
{
"name": "pocketbase/pocketbase",
"version": "v0.30.4",
"date": "2025-10-17T08:03:10Z"
},
{
"name": "juanfont/headscale",
"version": "v0.26.1",
"date": "2025-06-06T11:22:02Z"
},
{ {
"name": "diced/zipline", "name": "diced/zipline",
"version": "v4.3.2", "version": "v4.3.2",
@ -524,6 +434,11 @@
"version": "RELEASE.2025-10-15T17-29-55Z", "version": "RELEASE.2025-10-15T17-29-55Z",
"date": "2025-10-16T19:33:51Z" "date": "2025-10-16T19:33:51Z"
}, },
{
"name": "SigNoz/signoz",
"version": "v0.98.0-rc.1",
"date": "2025-10-16T17:49:50Z"
},
{ {
"name": "open-webui/open-webui", "name": "open-webui/open-webui",
"version": "v0.6.34", "version": "v0.6.34",
@ -534,6 +449,16 @@
"version": "v3.2.8", "version": "v3.2.8",
"date": "2025-10-16T14:21:48Z" "date": "2025-10-16T14:21:48Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v4.24.0",
"date": "2025-10-16T09:08:47Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.4.0",
"date": "2025-10-16T07:20:34Z"
},
{ {
"name": "cloudreve/cloudreve", "name": "cloudreve/cloudreve",
"version": "4.9.2", "version": "4.9.2",
@ -624,6 +549,11 @@
"version": "v1.5.3", "version": "v1.5.3",
"date": "2025-10-13T19:59:30Z" "date": "2025-10-13T19:59:30Z"
}, },
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.3",
"date": "2025-08-25T13:59:56Z"
},
{ {
"name": "node-red/node-red", "name": "node-red/node-red",
"version": "4.1.1", "version": "4.1.1",
@ -654,6 +584,11 @@
"version": "v0.10.4", "version": "v0.10.4",
"date": "2025-10-11T19:53:39Z" "date": "2025-10-11T19:53:39Z"
}, },
{
"name": "duplicati/duplicati",
"version": "v2.1.2.3-2.1.2.3_beta_2025-10-11",
"date": "2025-10-11T06:49:43Z"
},
{ {
"name": "0xERR0R/blocky", "name": "0xERR0R/blocky",
"version": "v0.27.0", "version": "v0.27.0",
@ -739,6 +674,11 @@
"version": "v1.68.0", "version": "v1.68.0",
"date": "2025-10-08T18:33:12Z" "date": "2025-10-08T18:33:12Z"
}, },
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.67",
"date": "2025-09-29T14:45:57Z"
},
{ {
"name": "advplyr/audiobookshelf", "name": "advplyr/audiobookshelf",
"version": "v2.30.0", "version": "v2.30.0",
@ -769,6 +709,16 @@
"version": "v0.15.1", "version": "v0.15.1",
"date": "2025-10-07T20:30:56Z" "date": "2025-10-07T20:30:56Z"
}, },
{
"name": "thecfu/scraparr",
"version": "v2.2.5",
"date": "2025-10-07T12:34:31Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.13.1",
"date": "2025-10-07T06:32:50Z"
},
{ {
"name": "sassanix/Warracker", "name": "sassanix/Warracker",
"version": "0.10.1.14", "version": "0.10.1.14",
@ -784,16 +734,16 @@
"version": "v2.2.2", "version": "v2.2.2",
"date": "2025-10-06T21:31:07Z" "date": "2025-10-06T21:31:07Z"
}, },
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.8.4",
"date": "2025-10-06T15:41:49Z"
},
{ {
"name": "bunkerity/bunkerweb", "name": "bunkerity/bunkerweb",
"version": "v1.6.5", "version": "v1.6.5",
"date": "2025-10-06T15:25:17Z" "date": "2025-10-06T15:25:17Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-7.6.36",
"date": "2025-10-06T15:19:49Z"
},
{ {
"name": "bastienwirtz/homer", "name": "bastienwirtz/homer",
"version": "v25.10.1", "version": "v25.10.1",
@ -844,6 +794,11 @@
"version": "v3.5.7.pypi", "version": "v3.5.7.pypi",
"date": "2025-10-01T05:32:27Z" "date": "2025-10-01T05:32:27Z"
}, },
{
"name": "HabitRPG/habitica",
"version": "v5.41.4",
"date": "2025-09-30T22:26:11Z"
},
{ {
"name": "WordPress/WordPress", "name": "WordPress/WordPress",
"version": "4.7.31", "version": "4.7.31",
@ -864,6 +819,16 @@
"version": "v1.11.1", "version": "v1.11.1",
"date": "2025-09-30T00:24:16Z" "date": "2025-09-30T00:24:16Z"
}, },
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.3.3",
"date": "2025-09-29T18:53:35Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{ {
"name": "MDeLuise/plant-it", "name": "MDeLuise/plant-it",
"version": "1.0.0", "version": "1.0.0",
@ -909,6 +874,11 @@
"version": "v3.5.3", "version": "v3.5.3",
"date": "2025-09-26T09:31:01Z" "date": "2025-09-26T09:31:01Z"
}, },
{
"name": "go-gitea/gitea",
"version": "v1.26.0-dev",
"date": "2025-09-24T16:45:38Z"
},
{ {
"name": "Threadfin/Threadfin", "name": "Threadfin/Threadfin",
"version": "1.2.39", "version": "1.2.39",
@ -919,6 +889,11 @@
"version": "2025.09.24", "version": "2025.09.24",
"date": "2025-09-24T13:51:23Z" "date": "2025-09-24T13:51:23Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-8.4.7",
"date": "2025-09-24T12:23:38Z"
},
{ {
"name": "syncthing/syncthing", "name": "syncthing/syncthing",
"version": "v2.0.10", "version": "v2.0.10",
@ -969,6 +944,11 @@
"version": "v0.23.2", "version": "v0.23.2",
"date": "2025-09-18T17:18:59Z" "date": "2025-09-18T17:18:59Z"
}, },
{
"name": "NLnetLabs/unbound",
"version": "release-1.24.0",
"date": "2025-09-18T08:36:55Z"
},
{ {
"name": "eclipse-mosquitto/mosquitto", "name": "eclipse-mosquitto/mosquitto",
"version": "2.1.0-test1", "version": "2.1.0-test1",
@ -1009,6 +989,11 @@
"version": "v2.7.6", "version": "v2.7.6",
"date": "2025-09-15T15:50:44Z" "date": "2025-09-15T15:50:44Z"
}, },
{
"name": "usememos/memos",
"version": "v0.25.1",
"date": "2025-09-15T14:57:30Z"
},
{ {
"name": "karakeep-app/karakeep", "name": "karakeep-app/karakeep",
"version": "cli/v0.27.1", "version": "cli/v0.27.1",
@ -1194,6 +1179,11 @@
"version": "1.34.3", "version": "1.34.3",
"date": "2025-07-30T09:10:59Z" "date": "2025-07-30T09:10:59Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.7.29",
"date": "2025-07-29T22:20:13Z"
},
{ {
"name": "caddyserver/xcaddy", "name": "caddyserver/xcaddy",
"version": "v0.4.5", "version": "v0.4.5",
@ -1219,6 +1209,11 @@
"version": "v2.1.1", "version": "v2.1.1",
"date": "2025-07-15T22:38:01Z" "date": "2025-07-15T22:38:01Z"
}, },
{
"name": "pi-hole/pi-hole",
"version": "v6.1.4",
"date": "2025-07-14T21:22:17Z"
},
{ {
"name": "homebridge/homebridge", "name": "homebridge/homebridge",
"version": "v1.11.0", "version": "v1.11.0",
@ -1449,6 +1444,11 @@
"version": "v1.11.2", "version": "v1.11.2",
"date": "2025-02-24T19:47:06Z" "date": "2025-02-24T19:47:06Z"
}, },
{
"name": "drakkan/sftpgo",
"version": "v2.6.6",
"date": "2025-02-24T19:14:46Z"
},
{ {
"name": "babybuddy/babybuddy", "name": "babybuddy/babybuddy",
"version": "v2.7.1", "version": "v2.7.1",

View File

@ -13,11 +13,15 @@ setting_up_container
network_check network_check
update_os update_os
fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz" msg_info "Installing Kavita"
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"
cat <<EOF >/etc/systemd/system/kavita.service service_path="/etc/systemd/system/kavita.service"
[Unit] echo "[Unit]
Description=Kavita Server Description=Kavita Server
After=network.target After=network.target
@ -30,17 +34,15 @@ KillMode=process
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target" >$service_path
EOF chmod +x /opt/Kavita/* && chown root /opt/Kavita/*
chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita systemctl enable --now -q kavita.service
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 -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"

View File

@ -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 -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc && echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc &&
source ~/.bashrc source ~/.bashrc
msg_ok "Installed Deno" msg_ok "Installed Deno"

View File

@ -63,7 +63,27 @@ 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
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)" msg_info "Installing phpMyAdmin"
$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"

View File

@ -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="8.0" MONGODB_VERSION="7.0"
msg_ok "AVX detected: Using MongoDB 8.0" msg_ok "AVX detected: Using MongoDB 7.0"
MONGO_VERSION="8.0" setup_mongodb
else else
MONGO_VERSION="4.4" setup_mongodb 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/"
exit 0
fi fi
msg_info "Installing Azul Zulu Java" msg_info "Installing Azul Zulu Java"
@ -34,15 +34,27 @@ $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"
if ! dpkg -l | grep -q 'libssl1.1'; then
msg_info "Installing libssl (if needed)" msg_info "Installing libssl (if needed)"
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+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' |

View File

@ -13,10 +13,19 @@ 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";')

View File

@ -1,287 +0,0 @@
#!/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"

View File

@ -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-venv python3.11-venv
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Radicale" msg_info "Setting up Radicale"

View File

@ -14,12 +14,9 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y coreutils
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
@ -30,8 +27,6 @@ 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"

File diff suppressed because it is too large Load Diff