mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			22 Commits
		
	
	
		
			deb13_c_to
			...
			2025-10-25
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					327544c737 | ||
| 
						 | 
					1c8b7b4e7e | ||
| 
						 | 
					6e5140314f | ||
| 
						 | 
					622f85db23 | ||
| 
						 | 
					55be335b66 | ||
| 
						 | 
					5db685f235 | ||
| 
						 | 
					14027a605a | ||
| 
						 | 
					5f0dba82ad | ||
| 
						 | 
					c0087bf8aa | ||
| 
						 | 
					691fc48915 | ||
| 
						 | 
					fe9e894e79 | ||
| 
						 | 
					43356df77f | ||
| 
						 | 
					e4b96ec200 | ||
| 
						 | 
					01a63d0a9d | ||
| 
						 | 
					0a4a64ca0c | ||
| 
						 | 
					4cdb43065d | ||
| 
						 | 
					add12ef634 | ||
| 
						 | 
					3ab5167d8a | ||
| 
						 | 
					b16a7f4562 | ||
| 
						 | 
					fa3f993256 | ||
| 
						 | 
					c0894cb612 | ||
| 
						 | 
					3b96230327 | 
							
								
								
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,12 +10,37 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
### 🚀 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/patchmon
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/patchmon
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____        __       __    __  ___          
 | 
			
		||||
   / __ \____ _/ /______/ /_  /  |/  /___  ____ 
 | 
			
		||||
  / /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
 | 
			
		||||
 / ____/ /_/ / /_/ /__/ / / / /  / / /_/ / / / /
 | 
			
		||||
/_/    \__,_/\__/\___/_/ /_/_/  /_/\____/_/ /_/ 
 | 
			
		||||
                                                
 | 
			
		||||
							
								
								
									
										24
									
								
								ct/mysql.sh
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ct/mysql.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt -y upgrade
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
 | 
			
		||||
    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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								ct/omv.sh
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ct/omv.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt -y upgrade
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
 | 
			
		||||
    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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										76
									
								
								ct/patchmon.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ct/patchmon.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/PatchMon/PatchMon
 | 
			
		||||
 | 
			
		||||
APP="PatchMon"
 | 
			
		||||
var_tags="${var_tags:-monitoring}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d "/opt/patchmon" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
  if check_for_gh_release "PatchMon" "PatchMon/PatchMon"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop patchmon-server
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/patchmon/backend/.env /opt/backend.env
 | 
			
		||||
    cp /opt/patchmon/frontend/.env /opt/frontend.env
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating PatchMon"
 | 
			
		||||
    cd /opt/patchmon
 | 
			
		||||
    export NODE_ENV=production
 | 
			
		||||
    $STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    cd /opt/patchmon/backend
 | 
			
		||||
    $STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    cd /opt/patchmon/frontend
 | 
			
		||||
    $STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    cd /opt/patchmon/backend
 | 
			
		||||
    mv /opt/backend.env /opt/patchmon/backend/.env
 | 
			
		||||
    mv /opt/frontend.env /opt/patchmon/frontend/.env
 | 
			
		||||
    $STD npx prisma migrate deploy
 | 
			
		||||
    $STD npx prisma generate
 | 
			
		||||
    msg_ok "Updated PatchMon"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start patchmon-server
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://docs.bunkerweb.io/latest/",
 | 
			
		||||
  "website": "https://www.bunkerweb.io/",
 | 
			
		||||
  "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.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
 | 
			
		||||
  "config_path": "/opt/guardian/.env",
 | 
			
		||||
  "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.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,48 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "MySQL",
 | 
			
		||||
    "slug": "mysql",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        8
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-10-10",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": "https://dev.mysql.com/doc/",
 | 
			
		||||
    "website": "https://www.mysql.com/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
 | 
			
		||||
    "config_path": "",
 | 
			
		||||
    "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/mysql.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "13"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "MySQL",
 | 
			
		||||
  "slug": "mysql",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-10-10",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://dev.mysql.com/doc/",
 | 
			
		||||
  "website": "https://www.mysql.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/mysql.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat mysql.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Database credentials: `cat mysql.creds`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/patchmon.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/patchmon.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "PatchMon",
 | 
			
		||||
  "slug": "patchmon",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-25",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3399,
 | 
			
		||||
  "documentation": "https://docs.patchmon.net",
 | 
			
		||||
  "website": "https://patchmon.net",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/patchmon.webp",
 | 
			
		||||
  "config_path": "/opt/patchmon/backend/.env, /opt/patchmon/frontend/.env",
 | 
			
		||||
  "description": "Monitor Linux patches across all your hosts with real-time visibility, security update tracking, and comprehensive package management.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/patchmon.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Directory `/opt/urbackup/backups` is set as initial backup path. Change it to your liking",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +1,83 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.2.0.0-2.2.0.0_stable_2025-10-23",
 | 
			
		||||
    "date": "2025-10-23T11:25:25Z"
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.29.0",
 | 
			
		||||
    "date": "2025-10-25T19:49:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.2",
 | 
			
		||||
    "date": "2025-10-23T06:59:32Z"
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.1.5.5216",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v0.24.175",
 | 
			
		||||
    "date": "2025-10-23T05:50:23Z"
 | 
			
		||||
    "version": "v0.24.185",
 | 
			
		||||
    "date": "2025-10-25T05:55:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "YunoHost/yunohost",
 | 
			
		||||
    "version": "debian/12.1.31",
 | 
			
		||||
    "date": "2025-10-23T00:45:04Z"
 | 
			
		||||
    "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-23T00:27:05Z"
 | 
			
		||||
    "date": "2025-10-25T00:27:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
@@ -30,30 +85,175 @@
 | 
			
		||||
    "date": "2025-10-15T16:53:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.78.7-nightly",
 | 
			
		||||
    "date": "2025-10-22T22:33:31Z"
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.26-rc0",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v0.9.99",
 | 
			
		||||
    "date": "2025-10-22T22:20:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.4",
 | 
			
		||||
    "date": "2025-10-22T21:23:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.5",
 | 
			
		||||
    "date": "2025-09-27T20:59:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.19.1",
 | 
			
		||||
    "date": "2025-10-22T20:40:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "issue-596",
 | 
			
		||||
@@ -114,56 +314,26 @@
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v0.23.0-alpha.17",
 | 
			
		||||
    "date": "2025-10-22T00:33:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.30.0",
 | 
			
		||||
    "date": "2025-10-21T21:37:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.15.3",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "jenkins-2.533",
 | 
			
		||||
    "date": "2025-10-21T18:26:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.27.2",
 | 
			
		||||
    "date": "2025-10-21T18:03:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "kyantech/Palmr",
 | 
			
		||||
    "version": "v3.2.5-beta",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v1.140.0",
 | 
			
		||||
@@ -174,21 +344,11 @@
 | 
			
		||||
    "version": "v12.2.1",
 | 
			
		||||
    "date": "2025-10-21T14:40:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.7.2",
 | 
			
		||||
    "date": "2025-10-21T14:36:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "laurent22/joplin",
 | 
			
		||||
    "version": "server-v3.4.4",
 | 
			
		||||
    "date": "2025-09-25T13:19:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "v4.14.0",
 | 
			
		||||
    "date": "2025-10-21T13:39:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.10.0-rc2",
 | 
			
		||||
@@ -219,31 +379,16 @@
 | 
			
		||||
    "version": "pmm-6401-v1.128.0",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v0.16.0-rc1",
 | 
			
		||||
    "date": "2025-10-21T00:37:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.13.0",
 | 
			
		||||
    "date": "2025-10-21T00:21:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2025-10-20T22:10:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.8.1",
 | 
			
		||||
    "date": "2025-10-20T20:53:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.105.1",
 | 
			
		||||
@@ -259,11 +404,6 @@
 | 
			
		||||
    "version": "4.9.1.80",
 | 
			
		||||
    "date": "2025-09-30T20:25:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.91.0-pre",
 | 
			
		||||
    "date": "2025-10-20T16:18:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rclone/rclone",
 | 
			
		||||
    "version": "v1.71.2",
 | 
			
		||||
@@ -274,41 +414,16 @@
 | 
			
		||||
    "version": "7.0.0-rc.1",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v10.11.0",
 | 
			
		||||
    "date": "2025-10-20T00:45:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.10.2",
 | 
			
		||||
    "date": "2025-10-20T00:42:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta27",
 | 
			
		||||
@@ -319,11 +434,6 @@
 | 
			
		||||
    "version": "5.2.3",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v2.2.1",
 | 
			
		||||
@@ -334,21 +444,11 @@
 | 
			
		||||
    "version": "v13.0.0",
 | 
			
		||||
    "date": "2025-10-19T10:03:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.0.5.5160",
 | 
			
		||||
    "date": "2025-08-23T21:23:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.14.5.4836",
 | 
			
		||||
    "date": "2025-10-08T15:30:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.3.3",
 | 
			
		||||
    "date": "2025-10-18T22:27:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ellite/Wallos",
 | 
			
		||||
    "version": "v4.5.0",
 | 
			
		||||
@@ -364,11 +464,6 @@
 | 
			
		||||
    "version": "v2.1.10",
 | 
			
		||||
    "date": "2025-10-18T18:46:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.42.1",
 | 
			
		||||
    "date": "2025-10-18T18:31:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Notifiarr/notifiarr",
 | 
			
		||||
    "version": "v0.9.0",
 | 
			
		||||
@@ -389,26 +484,11 @@
 | 
			
		||||
    "version": "v13.0.9",
 | 
			
		||||
    "date": "2025-10-18T09:59:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.5.1",
 | 
			
		||||
    "date": "2025-10-18T08:12:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.4",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v13.0.1",
 | 
			
		||||
@@ -434,16 +514,6 @@
 | 
			
		||||
    "version": "v11.5.2",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v4.3.2",
 | 
			
		||||
@@ -479,11 +549,6 @@
 | 
			
		||||
    "version": "v3.2.8",
 | 
			
		||||
    "date": "2025-10-16T14:21:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-10-16T07:20:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.9.2",
 | 
			
		||||
@@ -689,11 +754,6 @@
 | 
			
		||||
    "version": "v1.68.0",
 | 
			
		||||
    "date": "2025-10-08T18:33:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.67",
 | 
			
		||||
    "date": "2025-09-29T14:45:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.30.0",
 | 
			
		||||
@@ -724,16 +784,6 @@
 | 
			
		||||
    "version": "v0.15.1",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v5.28.0.10274",
 | 
			
		||||
@@ -749,6 +799,11 @@
 | 
			
		||||
    "version": "v1.6.5",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v25.10.1",
 | 
			
		||||
@@ -799,11 +854,6 @@
 | 
			
		||||
    "version": "v3.5.7.pypi",
 | 
			
		||||
    "date": "2025-10-01T05:32:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.41.4",
 | 
			
		||||
    "date": "2025-09-30T22:26:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WordPress/WordPress",
 | 
			
		||||
    "version": "4.7.31",
 | 
			
		||||
@@ -824,16 +874,6 @@
 | 
			
		||||
    "version": "v1.11.1",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
@@ -869,21 +909,11 @@
 | 
			
		||||
    "version": "22.0.2",
 | 
			
		||||
    "date": "2025-09-27T01:43:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.5",
 | 
			
		||||
    "date": "2025-09-27T01:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.5.3",
 | 
			
		||||
    "date": "2025-09-26T09:31:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.26.0-dev",
 | 
			
		||||
    "date": "2025-09-24T16:45:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Threadfin/Threadfin",
 | 
			
		||||
    "version": "1.2.39",
 | 
			
		||||
@@ -894,11 +924,6 @@
 | 
			
		||||
    "version": "2025.09.24",
 | 
			
		||||
    "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",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
@@ -989,11 +1014,6 @@
 | 
			
		||||
    "version": "v2.7.6",
 | 
			
		||||
    "date": "2025-09-15T15:50:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "usememos/memos",
 | 
			
		||||
    "version": "v0.25.1",
 | 
			
		||||
    "date": "2025-09-15T14:57:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karakeep-app/karakeep",
 | 
			
		||||
    "version": "cli/v0.27.1",
 | 
			
		||||
@@ -1169,21 +1189,11 @@
 | 
			
		||||
    "version": "v2.1.1867",
 | 
			
		||||
    "date": "2025-07-31T18:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "danielbrendel/hortusfox-web",
 | 
			
		||||
    "version": "v5.2",
 | 
			
		||||
    "date": "2025-07-30T10:40:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dani-garcia/vaultwarden",
 | 
			
		||||
    "version": "1.34.3",
 | 
			
		||||
    "date": "2025-07-30T09:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.7.29",
 | 
			
		||||
    "date": "2025-07-29T22:20:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "caddyserver/xcaddy",
 | 
			
		||||
    "version": "v0.4.5",
 | 
			
		||||
@@ -1209,11 +1219,6 @@
 | 
			
		||||
    "version": "v2.1.1",
 | 
			
		||||
    "date": "2025-07-15T22:38:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pi-hole/pi-hole",
 | 
			
		||||
    "version": "v6.1.4",
 | 
			
		||||
    "date": "2025-07-14T21:22:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homebridge/homebridge",
 | 
			
		||||
    "version": "v1.11.0",
 | 
			
		||||
@@ -1444,11 +1449,6 @@
 | 
			
		||||
    "version": "v1.11.2",
 | 
			
		||||
    "date": "2025-02-24T19:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "drakkan/sftpgo",
 | 
			
		||||
    "version": "v2.6.6",
 | 
			
		||||
    "date": "2025-02-24T19:14:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "babybuddy/babybuddy",
 | 
			
		||||
    "version": "v2.7.1",
 | 
			
		||||
 
 | 
			
		||||
@@ -63,27 +63,7 @@ msg_ok "MySQL Server configured"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  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"
 | 
			
		||||
  bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Start Service"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										287
									
								
								install/patchmon-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										287
									
								
								install/patchmon-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,287 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/PatcMmon/PatchMon
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  nginx \
 | 
			
		||||
  redis-server
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="24" setup_nodejs
 | 
			
		||||
PG_VERSION="17" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Setup PostgreSQL Database"
 | 
			
		||||
DB_NAME=patchmon_db
 | 
			
		||||
DB_USER=patchmon_usr
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
 | 
			
		||||
{
 | 
			
		||||
  echo "PatchMon Credentials"
 | 
			
		||||
  echo "PatchMon Database Name: $DB_NAME"
 | 
			
		||||
  echo "PatchMon Database User: $DB_USER"
 | 
			
		||||
  echo "PatchMon Database Password: $DB_PASS"
 | 
			
		||||
} >>~/patchmon.creds
 | 
			
		||||
msg_ok "Setup PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring PatchMon"
 | 
			
		||||
cd /opt/patchmon
 | 
			
		||||
export NODE_ENV=production
 | 
			
		||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
cd /opt/patchmon/backend
 | 
			
		||||
$STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
cd /opt/patchmon/frontend
 | 
			
		||||
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
$STD npm run build
 | 
			
		||||
 | 
			
		||||
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
 | 
			
		||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
			
		||||
cat <<EOF >/opt/patchmon/backend/.env
 | 
			
		||||
# Database Configuration
 | 
			
		||||
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
 | 
			
		||||
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
 | 
			
		||||
PM_DB_CONN_WAIT_INTERVAL=2
 | 
			
		||||
 | 
			
		||||
# JWT Configuration
 | 
			
		||||
JWT_SECRET="$JWT_SECRET"
 | 
			
		||||
JWT_EXPIRES_IN=1h
 | 
			
		||||
JWT_REFRESH_EXPIRES_IN=7d
 | 
			
		||||
 | 
			
		||||
# Server Configuration
 | 
			
		||||
PORT=3399
 | 
			
		||||
NODE_ENV=production
 | 
			
		||||
 | 
			
		||||
# API Configuration
 | 
			
		||||
API_VERSION=v1
 | 
			
		||||
 | 
			
		||||
# CORS Configuration
 | 
			
		||||
CORS_ORIGIN="http://$LOCAL_IP"
 | 
			
		||||
 | 
			
		||||
# Session Configuration
 | 
			
		||||
SESSION_INACTIVITY_TIMEOUT_MINUTES=30
 | 
			
		||||
 | 
			
		||||
# User Configuration
 | 
			
		||||
DEFAULT_USER_ROLE=user
 | 
			
		||||
 | 
			
		||||
# Rate Limiting (times in milliseconds)
 | 
			
		||||
RATE_LIMIT_WINDOW_MS=900000
 | 
			
		||||
RATE_LIMIT_MAX=5000
 | 
			
		||||
AUTH_RATE_LIMIT_WINDOW_MS=600000
 | 
			
		||||
AUTH_RATE_LIMIT_MAX=500
 | 
			
		||||
AGENT_RATE_LIMIT_WINDOW_MS=60000
 | 
			
		||||
AGENT_RATE_LIMIT_MAX=1000
 | 
			
		||||
 | 
			
		||||
# Redis Configuration
 | 
			
		||||
REDIS_HOST=localhost
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
 | 
			
		||||
# Logging
 | 
			
		||||
LOG_LEVEL=info
 | 
			
		||||
ENABLE_LOGGING=true
 | 
			
		||||
 | 
			
		||||
# TFA Configuration
 | 
			
		||||
TFA_REMEMBER_ME_EXPIRES_IN=30d
 | 
			
		||||
TFA_MAX_REMEMBER_SESSIONS=5
 | 
			
		||||
TFA_SUSPICIOUS_ACTIVITY_THRESHOLD=3
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/patchmon/frontend/.env
 | 
			
		||||
VITE_API_URL=http://$LOCAL_IP/api/v1
 | 
			
		||||
VITE_APP_NAME=PatchMon
 | 
			
		||||
VITE_APP_VERSION=1.3.0
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cd /opt/patchmon/backend
 | 
			
		||||
$STD npx prisma migrate deploy
 | 
			
		||||
$STD npx prisma generate
 | 
			
		||||
msg_ok "Configured PatchMon"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80;
 | 
			
		||||
    server_name $LOCAL_IP;
 | 
			
		||||
 | 
			
		||||
    # Security headers
 | 
			
		||||
    add_header X-Frame-Options DENY always;
 | 
			
		||||
    add_header X-Content-Type-Options nosniff always;
 | 
			
		||||
    add_header X-XSS-Protection "1; mode=block" always;
 | 
			
		||||
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
 | 
			
		||||
 | 
			
		||||
    # Frontend
 | 
			
		||||
    location / {
 | 
			
		||||
        root /opt/patchmon/frontend/dist;
 | 
			
		||||
        try_files \$uri \$uri/ /index.html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Bull Board proxy
 | 
			
		||||
    location /bullboard {
 | 
			
		||||
        proxy_pass http://127.0.0.1:3399;
 | 
			
		||||
        proxy_http_version 1.1;
 | 
			
		||||
        proxy_set_header Upgrade \$http_upgrade;
 | 
			
		||||
        proxy_set_header Connection 'upgrade';
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
        proxy_set_header X-Forwarded-Host \$host;
 | 
			
		||||
        proxy_set_header Cookie \$http_cookie;
 | 
			
		||||
        proxy_cache_bypass \$http_upgrade;
 | 
			
		||||
        proxy_read_timeout 300s;
 | 
			
		||||
        proxy_connect_timeout 75s;
 | 
			
		||||
 
 | 
			
		||||
        # Enable cookie passthrough
 | 
			
		||||
        proxy_pass_header Set-Cookie;
 | 
			
		||||
        proxy_cookie_path / /;
 | 
			
		||||
 
 | 
			
		||||
        # Preserve original client IP
 | 
			
		||||
        proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
 | 
			
		||||
        if (\$request_method = 'OPTIONS') {
 | 
			
		||||
            return 204;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # API proxy
 | 
			
		||||
    location /api/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:3399;
 | 
			
		||||
        proxy_http_version 1.1;
 | 
			
		||||
        proxy_set_header Upgrade \$http_upgrade;
 | 
			
		||||
        proxy_set_header Connection 'upgrade';
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
        proxy_cache_bypass \$http_upgrade;
 | 
			
		||||
        proxy_read_timeout 300s;
 | 
			
		||||
        proxy_connect_timeout 75s;
 | 
			
		||||
 
 | 
			
		||||
        # Preserve original client IP
 | 
			
		||||
        proxy_set_header X-Original-Forwarded-For \$http_x_forwarded_for;
 | 
			
		||||
        if (\$request_method = 'OPTIONS') {
 | 
			
		||||
            return 204;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Static assets caching (exclude Bull Board assets)
 | 
			
		||||
    location ~* ^/(?!bullboard).*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
 | 
			
		||||
        root /opt/patchmon/frontend/dist;
 | 
			
		||||
        expires 1y;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
    # Health check endpoint
 | 
			
		||||
    location /health {
 | 
			
		||||
        proxy_pass http://127.0.0.1:3399/health;
 | 
			
		||||
        access_log off;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
$STD nginx -t
 | 
			
		||||
systemctl restart nginx
 | 
			
		||||
msg_ok "Configured Nginx"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/patchmon-server.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=PatchMon Service
 | 
			
		||||
After=network.target postgresql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/patchmon/backend
 | 
			
		||||
ExecStart=/usr/bin/node src/server.js
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=10
 | 
			
		||||
Environment=NODE_ENV=production
 | 
			
		||||
Environment=PATH=/usr/bin:/usr/local/bin
 | 
			
		||||
NoNewPrivileges=true
 | 
			
		||||
PrivateTmp=true
 | 
			
		||||
ProtectSystem=strict
 | 
			
		||||
ProtectHome=true
 | 
			
		||||
ReadWritePaths=/opt/patchmon
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now patchmon-server
 | 
			
		||||
msg_ok "Created and started service"
 | 
			
		||||
 | 
			
		||||
msg_info "Updating settings"
 | 
			
		||||
cat <<EOF >/opt/patchmon/backend/update-settings.js
 | 
			
		||||
const { PrismaClient } = require('@prisma/client');
 | 
			
		||||
const { v4: uuidv4 } = require('uuid');
 | 
			
		||||
const prisma = new PrismaClient();
 | 
			
		||||
 | 
			
		||||
async function updateSettings() {
 | 
			
		||||
  try {
 | 
			
		||||
    const existingSettings = await prisma.settings.findFirst();
 | 
			
		||||
 | 
			
		||||
    const settingsData = {
 | 
			
		||||
      id: uuidv4(),
 | 
			
		||||
      server_url: 'http://$LOCAL_IP',
 | 
			
		||||
      server_protocol: 'http',
 | 
			
		||||
      server_host: '$LOCAL_IP',
 | 
			
		||||
      server_port: 3399,
 | 
			
		||||
      update_interval: 60,
 | 
			
		||||
      auto_update: true,
 | 
			
		||||
      signup_enabled: false,
 | 
			
		||||
      ignore_ssl_self_signed: false,
 | 
			
		||||
      updated_at: new Date()
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  if (existingSettings) {
 | 
			
		||||
    // Update existing settings
 | 
			
		||||
    await prisma.settings.update({
 | 
			
		||||
      where: { id: existingSettings.id },
 | 
			
		||||
      data: settingsData
 | 
			
		||||
    });
 | 
			
		||||
  } else {
 | 
			
		||||
    // Create new settings record
 | 
			
		||||
    await prisma.settings.create({
 | 
			
		||||
      data: settingsData
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log('✅ Database settings updated successfully');
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error('❌ Error updating settings:', error.message);
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
  } finally {
 | 
			
		||||
    await prisma.\$disconnect();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
updateSettings();
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cd /opt/patchmon/backend
 | 
			
		||||
$STD node update-settings.js
 | 
			
		||||
msg_ok "Settings updated successfully"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  apache2-utils \
 | 
			
		||||
  python3-pip \
 | 
			
		||||
  python3.11-venv
 | 
			
		||||
  python3-venv
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Radicale"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,12 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y coreutils
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  coreutils \
 | 
			
		||||
  debconf-utils
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
EOF
 | 
			
		||||
$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
 | 
			
		||||
msg_ok "Installed UrBackup Server"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user