Compare commits

...

22 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
327544c737 Update CHANGELOG.md (#8641)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 00:13:57 +00:00
community-scripts-pr-app[bot]
1c8b7b4e7e Update versions.json (#8640)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 02:13:28 +02:00
community-scripts-pr-app[bot]
6e5140314f Update CHANGELOG.md (#8636)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:35:00 +00:00
community-scripts-pr-app[bot]
622f85db23 Update CHANGELOG.md (#8635)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:34:39 +00:00
community-scripts-pr-app[bot]
55be335b66 Update date in json (#8634)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:34:35 +00:00
push-app-to-main[bot]
5db685f235 PatchMon (#8632)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-10-25 20:34:09 +02:00
community-scripts-pr-app[bot]
14027a605a Update versions.json (#8629)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 14:04:37 +02:00
community-scripts-pr-app[bot]
5f0dba82ad Update CHANGELOG.md (#8626)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 06:37:11 +00:00
Slaviša Arežina
c0087bf8aa Fix interactive (#8622) 2025-10-25 08:36:39 +02:00
community-scripts-pr-app[bot]
691fc48915 Update CHANGELOG.md (#8624)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 00:12:19 +00:00
community-scripts-pr-app[bot]
fe9e894e79 Update versions.json (#8623)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 02:11:52 +02:00
community-scripts-pr-app[bot]
43356df77f Update CHANGELOG.md (#8619)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 16:38:08 +00:00
Nolhan
e4b96ec200 Change config_path to /etc/bunkerweb/variables.env (#8618) 2025-10-24 18:37:41 +02:00
community-scripts-pr-app[bot]
01a63d0a9d Update CHANGELOG.md (#8617)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 15:01:15 +00:00
Vincent
0a4a64ca0c Update logo URL in guardian.json (#8615) 2025-10-24 17:00:46 +02:00
community-scripts-pr-app[bot]
4cdb43065d Update versions.json (#8613)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 14:07:26 +02:00
community-scripts-pr-app[bot]
add12ef634 Update CHANGELOG.md (#8608)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 00:11:03 +00:00
community-scripts-pr-app[bot]
3ab5167d8a Update versions.json (#8607)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 02:10:34 +02:00
community-scripts-pr-app[bot]
b16a7f4562 Update CHANGELOG.md (#8604)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 16:46:45 +00:00
Filippo Stella
fa3f993256 Update dependency installation for Radicale (#8603) 2025-10-23 18:46:17 +02:00
community-scripts-pr-app[bot]
c0894cb612 Update CHANGELOG.md (#8601)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 15:29:08 +00:00
CanbiZ
3b96230327 Various Downgrades to Debian 12 (MySQL / OMW / Technitium) (#8595)
* downgrades deb12

* fixes

* Update inventree.sh

* fix format

* Update Debian version to 12 in omv and technitiumdns configs

Changed the Debian version from 13 to 12 in both omv.json and technitiumdns.json to reflect the correct OS version for these configurations.
2025-10-23 17:28:38 +02:00
19 changed files with 748 additions and 330 deletions

View File

@@ -10,12 +10,37 @@
> [!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-26
## 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 ## 2025-10-23
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 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)) - MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
- #### 🔧 Refactor - #### 🔧 Refactor

6
ct/headers/patchmon Normal file
View File

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

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:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +20,18 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit
} }
start start

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:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +20,18 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit
} }
start start

76
ct/patchmon.sh Normal file
View File

@@ -0,0 +1,76 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/PatchMon/PatchMon
APP="PatchMon"
var_tags="${var_tags:-monitoring}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/patchmon" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "PatchMon" "PatchMon/PatchMon"; then
msg_info "Stopping Service"
systemctl stop patchmon-server
msg_ok "Stopped Service"
msg_info "Creating Backup"
cp /opt/patchmon/backend/.env /opt/backend.env
cp /opt/patchmon/frontend/.env /opt/frontend.env
msg_ok "Backup Created"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
msg_info "Updating PatchMon"
cd /opt/patchmon
export NODE_ENV=production
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/backend
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/frontend
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
$STD npm run build
cd /opt/patchmon/backend
mv /opt/backend.env /opt/patchmon/backend/.env
mv /opt/frontend.env /opt/patchmon/frontend/.env
$STD npx prisma migrate deploy
$STD npx prisma generate
msg_ok "Updated PatchMon"
msg_info "Starting Service"
systemctl start patchmon-server
msg_ok "Started Service"
msg_ok "Updated Successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

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:-13}" var_version="${var_version:-12}"
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": "/opt/bunkerweb/variables.env", "config_path": "/etc/bunkerweb/variables.env",
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.", "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
"install_methods": [ "install_methods": [
{ {

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": null, "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp",
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.", "description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -1,48 +1,48 @@
{ {
"name": "MySQL", "name": "MySQL",
"slug": "mysql", "slug": "mysql",
"categories": [ "categories": [
8 8
], ],
"date_created": "2024-10-10", "date_created": "2024-10-10",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": "https://dev.mysql.com/doc/", "documentation": "https://dev.mysql.com/doc/",
"website": "https://www.mysql.com/", "website": "https://www.mysql.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
"config_path": "", "config_path": "",
"description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.", "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/mysql.sh", "script": "ct/mysql.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "13" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
},
"notes": [
{
"text": "Database credentials: `cat mysql.creds`",
"type": "info"
}, },
"notes": [ {
{ "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
"text": "Database credentials: `cat mysql.creds`", "type": "info"
"type": "info" },
}, {
{ "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
"text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0", "type": "info"
"type": "info" }
}, ]
{
"text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
"type": "info"
}
]
} }

View File

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

View File

@@ -0,0 +1,35 @@
{
"name": "PatchMon",
"slug": "patchmon",
"categories": [
9
],
"date_created": "2025-10-25",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3399,
"documentation": "https://docs.patchmon.net",
"website": "https://patchmon.net",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/patchmon.webp",
"config_path": "/opt/patchmon/backend/.env, /opt/patchmon/frontend/.env",
"description": "Monitor Linux patches across all your hosts with real-time visibility, security update tracking, and comprehensive package management.",
"install_methods": [
{
"type": "default",
"script": "ct/patchmon.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

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

View File

@@ -35,6 +35,10 @@
{ {
"text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up", "text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
"type": "info" "type": "info"
},
{
"text": "Directory `/opt/urbackup/backups` is set as initial backup path. Change it to your liking",
"type": "info"
} }
] ]
} }

View File

@@ -1,28 +1,83 @@
[ [
{ {
"name": "duplicati/duplicati", "name": "TwiN/gatus",
"version": "v2.2.0.0-2.2.0.0_stable_2025-10-23", "version": "v5.29.0",
"date": "2025-10-23T11:25:25Z" "date": "2025-10-25T19:49:18Z"
}, },
{ {
"name": "keycloak/keycloak", "name": "Prowlarr/Prowlarr",
"version": "26.4.2", "version": "v2.1.5.5216",
"date": "2025-10-23T06:59:32Z" "date": "2025-10-25T19:41:59Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.19",
"date": "2025-10-25T19:39:58Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.78.0-stable",
"date": "2025-10-25T18:30:23Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.32",
"date": "2025-10-25T17:29:19Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.5",
"date": "2025-09-27T01:10:59Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-core@16.0.3",
"date": "2025-10-25T16:44:33Z"
},
{
"name": "sassanix/Warracker",
"version": "1.0.0",
"date": "2025-10-25T14:25:06Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.3",
"date": "2025-10-25T13:50:31Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.5.3",
"date": "2025-10-25T13:27:34Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.2",
"date": "2025-10-07T08:11:58Z"
},
{
"name": "pi-hole/pi-hole",
"version": "v6.2.1",
"date": "2025-10-25T10:39:32Z"
}, },
{ {
"name": "Jackett/Jackett", "name": "Jackett/Jackett",
"version": "v0.24.175", "version": "v0.24.185",
"date": "2025-10-23T05:50:23Z" "date": "2025-10-25T05:55:23Z"
}, },
{ {
"name": "YunoHost/yunohost", "name": "go-gitea/gitea",
"version": "debian/12.1.31", "version": "v1.24.7",
"date": "2025-10-23T00:45:04Z" "date": "2025-10-25T01:23:46Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.1.0",
"date": "2025-10-25T00:30:41Z"
}, },
{ {
"name": "jeedom/core", "name": "jeedom/core",
"version": "4.4.20", "version": "4.4.20",
"date": "2025-10-23T00:27:05Z" "date": "2025-10-25T00:27:04Z"
}, },
{ {
"name": "steveiliop56/tinyauth", "name": "steveiliop56/tinyauth",
@@ -30,30 +85,175 @@
"date": "2025-10-15T16:53:55Z" "date": "2025-10-15T16:53:55Z"
}, },
{ {
"name": "BerriAI/litellm", "name": "mongodb/mongo",
"version": "v1.78.7-nightly", "version": "r7.0.26-rc0",
"date": "2025-10-22T22:33:31Z" "date": "2025-10-24T22:33:52Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.3",
"date": "2025-10-24T21:21:10Z"
},
{
"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": "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": "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": "jhuckaby/Cronicle", "name": "jhuckaby/Cronicle",
"version": "v0.9.99", "version": "v0.9.99",
"date": "2025-10-22T22:20:33Z" "date": "2025-10-22T22:20:33Z"
}, },
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.4",
"date": "2025-10-22T21:23:17Z"
},
{ {
"name": "moghtech/komodo", "name": "moghtech/komodo",
"version": "v1.19.5", "version": "v1.19.5",
"date": "2025-09-27T20:59:46Z" "date": "2025-09-27T20:59:46Z"
}, },
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.1",
"date": "2025-10-22T20:40:07Z"
},
{ {
"name": "rcourtman/Pulse", "name": "rcourtman/Pulse",
"version": "issue-596", "version": "issue-596",
@@ -114,56 +314,26 @@
"version": "v1.5.3", "version": "v1.5.3",
"date": "2025-09-20T12:12:33Z" "date": "2025-09-20T12:12:33Z"
}, },
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@16.0.1",
"date": "2025-10-22T05:44:06Z"
},
{ {
"name": "chrisbenincasa/tunarr", "name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.17", "version": "v0.23.0-alpha.17",
"date": "2025-10-22T00:33:47Z" "date": "2025-10-22T00:33:47Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.30.0",
"date": "2025-10-21T21:37:52Z"
},
{ {
"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": "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": "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",
@@ -174,21 +344,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.2",
"date": "2025-10-21T14:36:48Z"
},
{ {
"name": "laurent22/joplin", "name": "laurent22/joplin",
"version": "server-v3.4.4", "version": "server-v3.4.4",
"date": "2025-09-25T13:19:26Z" "date": "2025-09-25T13:19:26Z"
}, },
{
"name": "wazuh/wazuh",
"version": "v4.14.0",
"date": "2025-10-21T13:39:55Z"
},
{ {
"name": "goauthentik/authentik", "name": "goauthentik/authentik",
"version": "version/2025.10.0-rc2", "version": "version/2025.10.0-rc2",
@@ -219,31 +379,16 @@
"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": "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": "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": "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",
@@ -259,11 +404,6 @@
"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": "rclone/rclone", "name": "rclone/rclone",
"version": "v1.71.2", "version": "v1.71.2",
@@ -274,41 +414,16 @@
"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",
@@ -319,11 +434,6 @@
"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",
@@ -334,21 +444,11 @@
"version": "v13.0.0", "version": "v13.0.0",
"date": "2025-10-19T10:03:18Z" "date": "2025-10-19T10:03:18Z"
}, },
{
"name": "Prowlarr/Prowlarr",
"version": "v2.0.5.5160",
"date": "2025-08-23T21:23:11Z"
},
{ {
"name": "Lidarr/Lidarr", "name": "Lidarr/Lidarr",
"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",
@@ -364,11 +464,6 @@
"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": "Notifiarr/notifiarr", "name": "Notifiarr/notifiarr",
"version": "v0.9.0", "version": "v0.9.0",
@@ -389,26 +484,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",
"date": "2025-10-09T10:27:01Z" "date": "2025-10-09T10:27:01Z"
}, },
{
"name": "9001/copyparty",
"version": "v1.19.17",
"date": "2025-10-17T23:40:02Z"
},
{
"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",
@@ -434,16 +514,6 @@
"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",
@@ -479,11 +549,6 @@
"version": "v3.2.8", "version": "v3.2.8",
"date": "2025-10-16T14:21:48Z" "date": "2025-10-16T14:21:48Z"
}, },
{
"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",
@@ -689,11 +754,6 @@
"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",
@@ -724,16 +784,6 @@
"version": "v0.15.1", "version": "v0.15.1",
"date": "2025-10-07T20:30:56Z" "date": "2025-10-07T20:30:56Z"
}, },
{
"name": "pocket-id/pocket-id",
"version": "v1.13.1",
"date": "2025-10-07T06:32:50Z"
},
{
"name": "sassanix/Warracker",
"version": "0.10.1.14",
"date": "2025-10-06T23:35:16Z"
},
{ {
"name": "Radarr/Radarr", "name": "Radarr/Radarr",
"version": "v5.28.0.10274", "version": "v5.28.0.10274",
@@ -749,6 +799,11 @@
"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",
@@ -799,11 +854,6 @@
"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",
@@ -824,16 +874,6 @@
"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",
@@ -869,21 +909,11 @@
"version": "22.0.2", "version": "22.0.2",
"date": "2025-09-27T01:43:20Z" "date": "2025-09-27T01:43:20Z"
}, },
{
"name": "cross-seed/cross-seed",
"version": "v6.13.5",
"date": "2025-09-27T01:10:59Z"
},
{ {
"name": "traefik/traefik", "name": "traefik/traefik",
"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",
@@ -894,11 +924,6 @@
"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",
@@ -989,11 +1014,6 @@
"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",
@@ -1169,21 +1189,11 @@
"version": "v2.1.1867", "version": "v2.1.1867",
"date": "2025-07-31T18:08:43Z" "date": "2025-07-31T18:08:43Z"
}, },
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.2",
"date": "2025-07-30T10:40:00Z"
},
{ {
"name": "dani-garcia/vaultwarden", "name": "dani-garcia/vaultwarden",
"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",
@@ -1209,11 +1219,6 @@
"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",
@@ -1444,11 +1449,6 @@
"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

@@ -63,27 +63,7 @@ msg_ok "MySQL Server configured"
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing phpMyAdmin" bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)"
$STD apt install -y \
apache2 \
php \
php-mysqli \
php-mbstring \
php-zip \
php-gd \
php-json \
php-curl
curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
mkdir -p /var/www/html/phpMyAdmin
tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
SECRET=$(openssl rand -base64 24)
sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
chmod 660 /var/www/html/phpMyAdmin/config.inc.php
chown -R www-data:www-data /var/www/html/phpMyAdmin
systemctl restart apache2
msg_ok "Installed phpMyAdmin"
fi fi
msg_info "Start Service" msg_info "Start Service"

287
install/patchmon-install.sh Normal file
View File

@@ -0,0 +1,287 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/PatcMmon/PatchMon
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
nginx \
redis-server
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
PG_VERSION="17" setup_postgresql
msg_info "Setup PostgreSQL Database"
DB_NAME=patchmon_db
DB_USER=patchmon_usr
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
{
echo "PatchMon Credentials"
echo "PatchMon Database Name: $DB_NAME"
echo "PatchMon Database User: $DB_USER"
echo "PatchMon Database Password: $DB_PASS"
} >>~/patchmon.creds
msg_ok "Setup PostgreSQL Database"
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
msg_info "Configuring PatchMon"
cd /opt/patchmon
export NODE_ENV=production
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/backend
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/frontend
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
$STD npm run build
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cat <<EOF >/opt/patchmon/backend/.env
# Database Configuration
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
PM_DB_CONN_WAIT_INTERVAL=2
# JWT Configuration
JWT_SECRET="$JWT_SECRET"
JWT_EXPIRES_IN=1h
JWT_REFRESH_EXPIRES_IN=7d
# Server Configuration
PORT=3399
NODE_ENV=production
# API Configuration
API_VERSION=v1
# CORS Configuration
CORS_ORIGIN="http://$LOCAL_IP"
# Session Configuration
SESSION_INACTIVITY_TIMEOUT_MINUTES=30
# User Configuration
DEFAULT_USER_ROLE=user
# Rate Limiting (times in milliseconds)
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX=5000
AUTH_RATE_LIMIT_WINDOW_MS=600000
AUTH_RATE_LIMIT_MAX=500
AGENT_RATE_LIMIT_WINDOW_MS=60000
AGENT_RATE_LIMIT_MAX=1000
# Redis Configuration
REDIS_HOST=localhost
REDIS_PORT=6379
# Logging
LOG_LEVEL=info
ENABLE_LOGGING=true
# TFA Configuration
TFA_REMEMBER_ME_EXPIRES_IN=30d
TFA_MAX_REMEMBER_SESSIONS=5
TFA_SUSPICIOUS_ACTIVITY_THRESHOLD=3
EOF
cat <<EOF >/opt/patchmon/frontend/.env
VITE_API_URL=http://$LOCAL_IP/api/v1
VITE_APP_NAME=PatchMon
VITE_APP_VERSION=1.3.0
EOF
cd /opt/patchmon/backend
$STD npx prisma migrate deploy
$STD npx prisma generate
msg_ok "Configured PatchMon"
msg_info "Configuring Nginx"
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
server {
listen 80;
server_name $LOCAL_IP;
# Security headers
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Frontend
location / {
root /opt/patchmon/frontend/dist;
try_files \$uri \$uri/ /index.html;
}
# Bull Board proxy
location /bullboard {
proxy_pass http://127.0.0.1:3399;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header Cookie \$http_cookie;
proxy_cache_bypass \$http_upgrade;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
# Enable cookie passthrough
proxy_pass_header Set-Cookie;
proxy_cookie_path / /;
# Preserve original client IP
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
if (\$request_method = 'OPTIONS') {
return 204;
}
}
# API proxy
location /api/ {
proxy_pass http://127.0.0.1:3399;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_cache_bypass \$http_upgrade;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
# Preserve original client IP
proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
if (\$request_method = 'OPTIONS') {
return 204;
}
}
# Static assets caching (exclude Bull Board assets)
location ~* ^/(?!bullboard).*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
root /opt/patchmon/frontend/dist;
expires 1y;
add_header Cache-Control "public, immutable";
}
# Health check endpoint
location /health {
proxy_pass http://127.0.0.1:3399/health;
access_log off;
}
}
EOF
ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
$STD nginx -t
systemctl restart nginx
msg_ok "Configured Nginx"
msg_info "Creating service"
cat <<EOF >/etc/systemd/system/patchmon-server.service
[Unit]
Description=PatchMon Service
After=network.target postgresql.service
[Service]
Type=simple
WorkingDirectory=/opt/patchmon/backend
ExecStart=/usr/bin/node src/server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
Environment=PATH=/usr/bin:/usr/local/bin
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/patchmon
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now patchmon-server
msg_ok "Created and started service"
msg_info "Updating settings"
cat <<EOF >/opt/patchmon/backend/update-settings.js
const { PrismaClient } = require('@prisma/client');
const { v4: uuidv4 } = require('uuid');
const prisma = new PrismaClient();
async function updateSettings() {
try {
const existingSettings = await prisma.settings.findFirst();
const settingsData = {
id: uuidv4(),
server_url: 'http://$LOCAL_IP',
server_protocol: 'http',
server_host: '$LOCAL_IP',
server_port: 3399,
update_interval: 60,
auto_update: true,
signup_enabled: false,
ignore_ssl_self_signed: false,
updated_at: new Date()
};
if (existingSettings) {
// Update existing settings
await prisma.settings.update({
where: { id: existingSettings.id },
data: settingsData
});
} else {
// Create new settings record
await prisma.settings.create({
data: settingsData
});
}
console.log('✅ Database settings updated successfully');
} catch (error) {
console.error('❌ Error updating settings:', error.message);
process.exit(1);
} finally {
await prisma.\$disconnect();
}
}
updateSettings();
EOF
cd /opt/patchmon/backend
$STD node update-settings.js
msg_ok "Settings updated successfully"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

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

View File

@@ -14,9 +14,12 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y coreutils $STD apt install -y \
coreutils \
debconf-utils
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing UrBackup Server" msg_info "Installing UrBackup Server"
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
@@ -27,6 +30,8 @@ Components:
Signed-By: /usr/share/keyrings/home-uroni.gpg Signed-By: /usr/share/keyrings/home-uroni.gpg
EOF EOF
$STD apt update $STD apt update
mkdir -p /opt/urbackup/backups
echo "urbackup-server urbackup/backuppath string /opt/urbackup/backups" | debconf-set-selections
$STD apt install -y urbackup-server $STD apt install -y urbackup-server
msg_ok "Installed UrBackup Server" msg_ok "Installed UrBackup Server"