mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			33 Commits
		
	
	
		
			2025-10-24
			...
			2025-10-27
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8b54f615a8 | ||
| 
						 | 
					57d435647b | ||
| 
						 | 
					fe2734f96a | ||
| 
						 | 
					01f1985d2d | ||
| 
						 | 
					92f9033981 | ||
| 
						 | 
					e1603bebec | ||
| 
						 | 
					abdbca59ff | ||
| 
						 | 
					6c662ae6ea | ||
| 
						 | 
					5c04c89f3f | ||
| 
						 | 
					fba1d16626 | ||
| 
						 | 
					3666f4981f | ||
| 
						 | 
					db9809a817 | ||
| 
						 | 
					e69da3846a | ||
| 
						 | 
					cfb76fd0ab | ||
| 
						 | 
					fb11b1a0e2 | ||
| 
						 | 
					66b8d6cb90 | ||
| 
						 | 
					1723775c55 | ||
| 
						 | 
					8852def9a6 | ||
| 
						 | 
					249a02754a | ||
| 
						 | 
					65c79447ea | ||
| 
						 | 
					a6607734b7 | ||
| 
						 | 
					a8d5fc9bc8 | ||
| 
						 | 
					0e7a089949 | ||
| 
						 | 
					e208b571b9 | ||
| 
						 | 
					327544c737 | ||
| 
						 | 
					1c8b7b4e7e | ||
| 
						 | 
					6e5140314f | ||
| 
						 | 
					622f85db23 | ||
| 
						 | 
					55be335b66 | ||
| 
						 | 
					5db685f235 | ||
| 
						 | 
					14027a605a | ||
| 
						 | 
					5f0dba82ad | ||
| 
						 | 
					c0087bf8aa | 
							
								
								
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,50 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-10-28
 | 
			
		||||
 | 
			
		||||
## 2025-10-27
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
 | 
			
		||||
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
 | 
			
		||||
    - jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
 | 
			
		||||
 | 
			
		||||
## 2025-10-26
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
 | 
			
		||||
 | 
			
		||||
## 2025-10-25
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
 | 
			
		||||
 | 
			
		||||
## 2025-10-24
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/alpine-garage.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/alpine-garage.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-Garage"
 | 
			
		||||
var_tags="${var_tags:-alpine;object-storage}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-alpine}"
 | 
			
		||||
var_version="${var_version:-3.22}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  if [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    rc-service garage stop || true
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    rc-service garage start || rc-service garage restart
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										42
									
								
								ct/comfyui.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								ct/comfyui.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL  https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: jdacode
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/comfyanonymous/ComfyUI
 | 
			
		||||
 | 
			
		||||
APP="ComfyUI"
 | 
			
		||||
var_tags="${var_tags:-ai}"
 | 
			
		||||
var_cpu="${var_cpu:-4}"
 | 
			
		||||
var_ram="${var_ram:-8192}"
 | 
			
		||||
var_disk="${var_disk:-25}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/${APP} ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_error "To update use the ${APP} Manager."
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8188${CL}"
 | 
			
		||||
							
								
								
									
										136
									
								
								ct/dispatcharr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								ct/dispatcharr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: ekke85 | MickLesk
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
APP="Dispatcharr"
 | 
			
		||||
var_tags="${var_tags:-media;arr}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d "/opt/dispatcharr" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  setup_uv
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop dispatcharr-celery
 | 
			
		||||
    systemctl stop dispatcharr-celerybeat
 | 
			
		||||
    systemctl stop dispatcharr-daphne
 | 
			
		||||
    systemctl stop dispatcharr
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source /opt/dispatcharr/.env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
      if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
 | 
			
		||||
        PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
 | 
			
		||||
        msg_info "Database backup created"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    $STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Backup created: $BACKUP_FILE"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Dispatcharr Backend"
 | 
			
		||||
    if [[ -f /tmp/dispatcharr.env.backup ]]; then
 | 
			
		||||
      mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celery.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-daphne.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    rm -rf .venv
 | 
			
		||||
    $STD uv venv
 | 
			
		||||
    $STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
    $STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
    msg_ok "Updated Dispatcharr Backend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
    cd /opt/dispatcharr/frontend
 | 
			
		||||
    $STD npm install --legacy-peer-deps
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Running Django Migrations"
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    if [[ -f .env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source .env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
    fi
 | 
			
		||||
    $STD uv run python manage.py migrate --noinput
 | 
			
		||||
    $STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
    msg_ok "Migrations Complete"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start dispatcharr
 | 
			
		||||
    systemctl start dispatcharr-celery
 | 
			
		||||
    systemctl start dispatcharr-celerybeat
 | 
			
		||||
    systemctl start dispatcharr-daphne
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Cleanup completed"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Garage"
 | 
			
		||||
var_tags="${var_tags:-object-storage}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop garage
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start garage
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-garage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-garage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                  ______                          
 | 
			
		||||
   /   |  / /___  (_)___  ___        / ____/___ __________ _____ ____ 
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/      \____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
        /_/                                              /____/       
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/comfyui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/comfyui
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ______                ____      __  ______
 | 
			
		||||
  / ____/___  ____ ___  / __/_  __/ / / /  _/
 | 
			
		||||
 / /   / __ \/ __ `__ \/ /_/ / / / / / // /  
 | 
			
		||||
/ /___/ /_/ / / / / / / __/ /_/ / /_/ // /   
 | 
			
		||||
\____/\____/_/ /_/ /_/_/  \__, /\____/___/   
 | 
			
		||||
                         /____/              
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/dispatcharr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/dispatcharr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____  _                  __       __                   
 | 
			
		||||
   / __ \(_)________  ____ _/ /______/ /_  ____ ___________
 | 
			
		||||
  / / / / / ___/ __ \/ __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
 | 
			
		||||
 / /_/ / (__  ) /_/ / /_/ / /_/ /__/ / / / /_/ / /  / /    
 | 
			
		||||
/_____/_/____/ .___/\__,_/\__/\___/_/ /_/\__,_/_/  /_/     
 | 
			
		||||
            /_/                                            
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/garage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/garage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ______                          
 | 
			
		||||
  / ____/___ __________ _____ ____ 
 | 
			
		||||
 / / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
\____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
                      /____/       
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/patchmon
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/patchmon
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____        __       __    __  ___          
 | 
			
		||||
   / __ \____ _/ /______/ /_  /  |/  /___  ____ 
 | 
			
		||||
  / /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
 | 
			
		||||
 / ____/ /_/ / /_/ /__/ / / / /  / / /_/ / / / /
 | 
			
		||||
/_/    \__,_/\__/\___/_/ /_/_/  /_/\____/_/ /_/ 
 | 
			
		||||
                                                
 | 
			
		||||
@@ -30,6 +30,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
    msg_info "Updating Intel Dependencies"
 | 
			
		||||
    rm .intel-*
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								ct/mylar3.sh
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								ct/mylar3.sh
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/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: davalanche
 | 
			
		||||
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mylar3/mylar3
 | 
			
		||||
 | 
			
		||||
@@ -25,16 +25,10 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf /opt/mylar3/* /opt/mylar3/.*
 | 
			
		||||
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "mylar3" "mylar3/mylar3"; then
 | 
			
		||||
    fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
 | 
			
		||||
    systemctl restart mylar3
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
@@ -46,4 +40,4 @@ 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}:8090${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
@@ -27,12 +27,13 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    msg_info "Updating PiHole"
 | 
			
		||||
    set +e
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt upgrade -y
 | 
			
		||||
    /usr/local/bin/pihole -up
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
    msg_ok "Updated PiHole"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,8 @@ function update_script() {
 | 
			
		||||
    $STD unzip "$brwsr_tmp"
 | 
			
		||||
    mv browserless-"$TAG"/ /opt/browserless
 | 
			
		||||
    cd /opt/browserless
 | 
			
		||||
    $STD npm install typescript
 | 
			
		||||
    $STD npm install esbuild
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
    $STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								frontend/public/json/comfyui.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								frontend/public/json/comfyui.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ComfyUI",
 | 
			
		||||
  "slug": "comfyui",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    20
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-26",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/opt",
 | 
			
		||||
  "interface_port": 8188,
 | 
			
		||||
  "documentation": "https://github.com/comfyanonymous/ComfyUI",
 | 
			
		||||
  "website": "https://www.comfy.org/",
 | 
			
		||||
  "logo": "https://framerusercontent.com/images/3cNQMWKzIhIrQ5KErBm7dSmbd2w.png",
 | 
			
		||||
  "description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/comfyui.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 4,
 | 
			
		||||
        "ram": 8192,
 | 
			
		||||
        "hdd": 25,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Application takes long time to install. Please be patient!",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Please check that you have installed the drivers for your GPU.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/dispatcharr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/dispatcharr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Dispatcharr",
 | 
			
		||||
  "slug": "dispatcharr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 9191,
 | 
			
		||||
  "documentation": "https://dispatcharr.github.io/Dispatcharr-Docs/",
 | 
			
		||||
  "website": "https://github.com/Dispatcharr/Dispatcharr",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dispatcharr.webp",
 | 
			
		||||
  "config_path": "/opt/dispatcharr/.env",
 | 
			
		||||
  "description": "Dispatcharr is an open-source powerhouse for managing IPTV streams and EPG data with elegance and control. Born from necessity and built with passion, it started as a personal project by OkinawaBoss and evolved with contributions from legends like dekzter, SergeantPanda and Bucatini.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/dispatcharr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								frontend/public/json/garage.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								frontend/public/json/garage.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Garage",
 | 
			
		||||
  "slug": "garage",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3900,
 | 
			
		||||
  "documentation": "https://garagehq.deuxfleurs.fr/documentation/quick-start/",
 | 
			
		||||
  "website": "https://garagehq.deuxfleurs.fr/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garage.webp",
 | 
			
		||||
  "config_path": "/etc/garage.toml",
 | 
			
		||||
  "description": "Garage is a lightweight, self-hosted, S3-compatible object storage service built for distributed environments. It is designed to be simple, efficient, and easy to deploy across multiple nodes.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "ct/alpine-garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "alpine",
 | 
			
		||||
        "version": "3.22"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Garage configuration file is located at `/etc/garage.toml`. You can edit RPC and API bindings, tokens, and data directories there.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Admin API runs by default on port `3903`, S3 API on port `3900`, Web UI on `3902`. Adjust firewall rules accordingly.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To view your generated tokens and RPC secret, check `~/garage.creds` after installation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										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,18 +1,223 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.26-rc0",
 | 
			
		||||
    "date": "2025-10-24T22:33:52Z"
 | 
			
		||||
    "name": "chrisbenincasa/tunarr",
 | 
			
		||||
    "version": "v0.23.0-alpha.18",
 | 
			
		||||
    "date": "2025-10-27T23:09:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "3000.2.1",
 | 
			
		||||
    "date": "2025-10-27T21:08:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.90.3",
 | 
			
		||||
    "date": "2025-10-27T20:21:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.10.0",
 | 
			
		||||
    "date": "2025-10-27T19:58:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.77.7.dev2",
 | 
			
		||||
    "date": "2025-10-27T18:50:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.5.2",
 | 
			
		||||
    "date": "2025-10-24T21:42:54Z"
 | 
			
		||||
    "version": "v4.5.3",
 | 
			
		||||
    "date": "2025-10-25T13:27:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.33",
 | 
			
		||||
    "date": "2025-10-27T17:57:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.21",
 | 
			
		||||
    "date": "2025-10-16T09:46:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.17.0-beta14",
 | 
			
		||||
    "date": "2025-10-27T14:18:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.117.2",
 | 
			
		||||
    "date": "2025-10-27T12:23:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.14.1",
 | 
			
		||||
    "date": "2025-10-27T13:19:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-rc.2",
 | 
			
		||||
    "date": "2025-10-27T12:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "create-fumadocs-app@16.0.5",
 | 
			
		||||
    "date": "2025-10-27T11:34:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "juanfont/headscale",
 | 
			
		||||
    "version": "v0.27.0",
 | 
			
		||||
    "date": "2025-10-27T11:16:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.4-rc1-int",
 | 
			
		||||
    "date": "2025-10-27T09:57:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.1-alpha.2",
 | 
			
		||||
    "date": "2025-10-27T09:36:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.5.0",
 | 
			
		||||
    "date": "2025-10-27T08:29:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
    "date": "2025-09-24T08:33:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.196",
 | 
			
		||||
    "date": "2025-10-27T05:55:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "javedh-dev/tracktor",
 | 
			
		||||
    "version": "0.4.0",
 | 
			
		||||
    "date": "2025-10-27T05:49:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.2",
 | 
			
		||||
    "date": "2025-10-07T08:11:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.11.1",
 | 
			
		||||
    "date": "2025-10-27T02:02:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "1.0.1",
 | 
			
		||||
    "date": "2025-10-27T01:35:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-27T00:27:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v4.0.1",
 | 
			
		||||
    "date": "2025-10-15T16:53:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.0.16-rc1",
 | 
			
		||||
    "date": "2025-10-26T23:32:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.2",
 | 
			
		||||
    "date": "2025-10-23T06:59:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.28.0.10274",
 | 
			
		||||
    "date": "2025-10-06T21:31:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.30.3",
 | 
			
		||||
    "date": "2025-10-24T21:21:10Z"
 | 
			
		||||
    "version": "v1.30.4",
 | 
			
		||||
    "date": "2025-10-26T17:22:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v1.0.0",
 | 
			
		||||
    "date": "2025-10-26T16:27:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "v2025.10.7",
 | 
			
		||||
    "date": "2025-10-26T15:31:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.15.0",
 | 
			
		||||
    "date": "2025-10-26T15:20:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.1.0.M2",
 | 
			
		||||
    "date": "2025-10-26T14:38:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.8.0",
 | 
			
		||||
    "date": "2025-10-26T14:23:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v13.0.2",
 | 
			
		||||
    "date": "2025-10-26T06:33:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.5",
 | 
			
		||||
    "date": "2025-09-27T01:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.29.0",
 | 
			
		||||
    "date": "2025-10-25T19:49:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "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": "danielbrendel/hortusfox-web",
 | 
			
		||||
    "version": "v5.3",
 | 
			
		||||
    "date": "2025-10-25T13:50:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pi-hole/pi-hole",
 | 
			
		||||
    "version": "v6.2.1",
 | 
			
		||||
    "date": "2025-10-25T10:39:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.24.7",
 | 
			
		||||
    "date": "2025-10-25T01:23:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
@@ -24,21 +229,6 @@
 | 
			
		||||
    "version": "v1.43.0",
 | 
			
		||||
    "date": "2025-10-24T19:16:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.30",
 | 
			
		||||
    "date": "2025-10-24T18:41:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.90.2",
 | 
			
		||||
    "date": "2025-10-24T18:02:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "3000.0.2",
 | 
			
		||||
    "date": "2025-10-24T17:55:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v2.7.12",
 | 
			
		||||
@@ -59,26 +249,11 @@
 | 
			
		||||
    "version": "v0.25.2",
 | 
			
		||||
    "date": "2025-10-24T12:30:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.14.0",
 | 
			
		||||
    "date": "2025-10-24T11:59:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.116.2",
 | 
			
		||||
    "date": "2025-10-21T11:39:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.5",
 | 
			
		||||
    "date": "2025-10-24T11:12:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-openapi@9.6.3",
 | 
			
		||||
    "date": "2025-10-24T11:08:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.7.3",
 | 
			
		||||
@@ -94,11 +269,6 @@
 | 
			
		||||
    "version": "3.3.4",
 | 
			
		||||
    "date": "2025-10-24T06:43:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.179",
 | 
			
		||||
    "date": "2025-10-24T05:54:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "1.0.8",
 | 
			
		||||
@@ -114,16 +284,6 @@
 | 
			
		||||
    "version": "2025.10.3",
 | 
			
		||||
    "date": "2025-10-24T01:08:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-24T00:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v4.0.1",
 | 
			
		||||
    "date": "2025-10-15T16:53:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.13.1",
 | 
			
		||||
@@ -134,11 +294,6 @@
 | 
			
		||||
    "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",
 | 
			
		||||
@@ -154,31 +309,11 @@
 | 
			
		||||
    "version": "v2.7.0",
 | 
			
		||||
    "date": "2025-10-23T17:15:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-10-16T07:20:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.28.0",
 | 
			
		||||
    "date": "2025-10-23T16:16:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "juanfont/headscale",
 | 
			
		||||
    "version": "v0.26.1",
 | 
			
		||||
    "date": "2025-06-06T11:22:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.41.5",
 | 
			
		||||
    "date": "2025-10-23T15:12:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.2",
 | 
			
		||||
    "date": "2025-10-23T06:59:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.68",
 | 
			
		||||
@@ -199,11 +334,6 @@
 | 
			
		||||
    "version": "v2.2.0.0_stable_2025-10-23",
 | 
			
		||||
    "date": "2025-10-23T11:48:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.78.7-nightly",
 | 
			
		||||
    "date": "2025-10-22T22:33:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.99",
 | 
			
		||||
@@ -254,11 +384,6 @@
 | 
			
		||||
    "version": "release-1.24.1",
 | 
			
		||||
    "date": "2025-10-22T10:28:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.21",
 | 
			
		||||
    "date": "2025-10-16T09:46:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.4rc1",
 | 
			
		||||
@@ -274,11 +399,6 @@
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisbenincasa/tunarr",
 | 
			
		||||
    "version": "v0.23.0-alpha.17",
 | 
			
		||||
    "date": "2025-10-22T00:33:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.15.3",
 | 
			
		||||
@@ -309,11 +429,6 @@
 | 
			
		||||
    "version": "server-v3.4.4",
 | 
			
		||||
    "date": "2025-09-25T13:19:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.10.0-rc2",
 | 
			
		||||
    "date": "2025-10-21T00:19:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AlexxIT/go2rtc",
 | 
			
		||||
    "version": "v1.9.11",
 | 
			
		||||
@@ -344,11 +459,6 @@
 | 
			
		||||
    "version": "v0.16.0-rc1",
 | 
			
		||||
    "date": "2025-10-21T00:37:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2025-10-20T22:10:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.105.1",
 | 
			
		||||
@@ -369,26 +479,11 @@
 | 
			
		||||
    "version": "v1.71.2",
 | 
			
		||||
    "date": "2025-10-20T15:25:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-rc.1",
 | 
			
		||||
    "date": "2025-10-20T11:53:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
 | 
			
		||||
    "date": "2025-10-20T07:01:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "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": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta27",
 | 
			
		||||
@@ -409,11 +504,6 @@
 | 
			
		||||
    "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",
 | 
			
		||||
@@ -459,16 +549,6 @@
 | 
			
		||||
    "version": "v25.4",
 | 
			
		||||
    "date": "2025-10-09T10:27:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.17",
 | 
			
		||||
    "date": "2025-10-17T23:40:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v13.0.1",
 | 
			
		||||
    "date": "2025-10-17T18:54:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.4",
 | 
			
		||||
@@ -499,15 +579,10 @@
 | 
			
		||||
    "version": "v1.5.0",
 | 
			
		||||
    "date": "2025-10-16T23:14:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.0.2",
 | 
			
		||||
    "date": "2025-10-16T21:27:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.12.6-rc1",
 | 
			
		||||
    "date": "2025-10-16T16:36:25Z"
 | 
			
		||||
    "version": "v0.12.6",
 | 
			
		||||
    "date": "2025-10-16T20:07:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "minio/minio",
 | 
			
		||||
@@ -529,11 +604,6 @@
 | 
			
		||||
    "version": "4.9.2",
 | 
			
		||||
    "date": "2025-10-16T03:24:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v1.0.0-test8",
 | 
			
		||||
    "date": "2025-10-16T01:32:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
@@ -669,21 +739,6 @@
 | 
			
		||||
    "version": "10.1.48",
 | 
			
		||||
    "date": "2025-10-10T14:46:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.16.34",
 | 
			
		||||
    "date": "2025-10-10T11:57:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.1-alpha.1",
 | 
			
		||||
    "date": "2025-10-10T06:57:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mealie-recipes/mealie",
 | 
			
		||||
    "version": "v3.3.2",
 | 
			
		||||
@@ -699,11 +754,6 @@
 | 
			
		||||
    "version": "v3.4.2",
 | 
			
		||||
    "date": "2025-10-09T19:05:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.7.1",
 | 
			
		||||
    "date": "2025-10-09T15:42:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "silverbulletmd/silverbullet",
 | 
			
		||||
    "version": "2.1.9",
 | 
			
		||||
@@ -714,11 +764,6 @@
 | 
			
		||||
    "version": "11.0.1",
 | 
			
		||||
    "date": "2025-10-09T12:34:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.38.1",
 | 
			
		||||
@@ -759,16 +804,6 @@
 | 
			
		||||
    "version": "v0.15.1",
 | 
			
		||||
    "date": "2025-10-07T20:30:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "0.10.1.14",
 | 
			
		||||
    "date": "2025-10-06T23:35:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.28.0.10274",
 | 
			
		||||
    "date": "2025-10-06T21:31:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kometa-Team/Kometa",
 | 
			
		||||
    "version": "v2.2.2",
 | 
			
		||||
@@ -814,11 +849,6 @@
 | 
			
		||||
    "version": "2.520",
 | 
			
		||||
    "date": "2025-10-05T00:51:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.2.2",
 | 
			
		||||
    "date": "2025-10-03T06:22:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.10.0",
 | 
			
		||||
@@ -879,31 +909,16 @@
 | 
			
		||||
    "version": "1.27.1",
 | 
			
		||||
    "date": "2025-09-27T13:07:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "javedh-dev/tracktor",
 | 
			
		||||
    "version": "0.3.18",
 | 
			
		||||
    "date": "2025-09-27T10:32:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "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",
 | 
			
		||||
@@ -914,11 +929,6 @@
 | 
			
		||||
    "version": "2025.09.24",
 | 
			
		||||
    "date": "2025-09-24T13:51:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
    "date": "2025-09-24T08:33:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_0",
 | 
			
		||||
@@ -1179,11 +1189,6 @@
 | 
			
		||||
    "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",
 | 
			
		||||
@@ -1214,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",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								install/alpine-garage-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								install/alpine-garage-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add --no-cache openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
  echo "Garage Tokens and Secrets"
 | 
			
		||||
  echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
  echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
  echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "0.0.0.0:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "0.0.0.0:3900"
 | 
			
		||||
root_domain = ".s3.garage"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "0.0.0.0:3902"
 | 
			
		||||
root_domain = ".web.garage"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Configured Garage"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<'EOF' >/etc/init.d/garage
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
name="Garage Object Storage"
 | 
			
		||||
command="/usr/local/bin/garage"
 | 
			
		||||
command_args="server"
 | 
			
		||||
command_background="yes"
 | 
			
		||||
pidfile="/run/garage.pid"
 | 
			
		||||
depend() {
 | 
			
		||||
    need net
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
chmod +x /etc/init.d/garage
 | 
			
		||||
$STD rc-update add garage default
 | 
			
		||||
$STD rc-service garage restart || rc-service garage start
 | 
			
		||||
msg_ok "Service active"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
							
								
								
									
										87
									
								
								install/comfyui-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								install/comfyui-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: jdacode
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/comfyanonymous/ComfyUI
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo "${TAB3}Choose the GPU type for ComfyUI:"
 | 
			
		||||
echo "${TAB3}[1]-None  [2]-NVIDIA  [3]-AMD  [4]-Intel"
 | 
			
		||||
read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice
 | 
			
		||||
gpu_choice=${gpu_choice:-1}
 | 
			
		||||
case "$gpu_choice" in
 | 
			
		||||
1) comfyui_gpu_type="none";;
 | 
			
		||||
2) comfyui_gpu_type="nvidia";;
 | 
			
		||||
3) comfyui_gpu_type="amd";;
 | 
			
		||||
4) comfyui_gpu_type="intel";;
 | 
			
		||||
*) comfyui_gpu_type="none"; echo "${TAB3}Invalid choice. Defaulting to ${comfyui_gpu_type}." ;;
 | 
			
		||||
esac
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
 | 
			
		||||
 | 
			
		||||
msg_info "Python dependencies"
 | 
			
		||||
$STD uv venv "/opt/ComfyUI/venv"
 | 
			
		||||
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --extra-index-url "https://download.pytorch.org/whl/cu128" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
elif [[ "${comfyui_gpu_type,,}" == "amd" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --index-url "https://download.pytorch.org/whl/rocm6.3" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
elif [[ "${comfyui_gpu_type,,}" == "intel" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --index-url "https://download.pytorch.org/whl/xpu" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
fi
 | 
			
		||||
$STD uv pip install -r "/opt/ComfyUI/requirements.txt" --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
msg_ok "Python dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/comfyui.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=ComfyUI Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/ComfyUI
 | 
			
		||||
ExecStart=/opt/ComfyUI/venv/bin/python /opt/ComfyUI/main.py --listen --port 8188 --cpu
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now comfyui
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										263
									
								
								install/dispatcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								install/dispatcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,263 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: ekke85
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  libpq-dev \
 | 
			
		||||
  nginx \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  ffmpeg \
 | 
			
		||||
  procps \
 | 
			
		||||
  streamlink
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_uv
 | 
			
		||||
NODE_VERSION="24" setup_nodejs
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Creating PostgreSQL Database"
 | 
			
		||||
DB_NAME=dispatcharr_db
 | 
			
		||||
DB_USER=dispatcharr_usr
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
 | 
			
		||||
{
 | 
			
		||||
  echo "Dispatcharr Credentials"
 | 
			
		||||
  echo "Database Name: $DB_NAME"
 | 
			
		||||
  echo "Database User: $DB_USER"
 | 
			
		||||
  echo "Database Password: $DB_PASS"
 | 
			
		||||
  echo ""
 | 
			
		||||
} >>~/dispatcharr.creds
 | 
			
		||||
msg_ok "Created PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies with uv"
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
$STD uv venv
 | 
			
		||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
$STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
msg_ok "Installed Python Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Dispatcharr"
 | 
			
		||||
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
 | 
			
		||||
export POSTGRES_DB=$DB_NAME
 | 
			
		||||
export POSTGRES_USER=$DB_USER
 | 
			
		||||
export POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
export POSTGRES_HOST=localhost
 | 
			
		||||
$STD uv run python manage.py migrate --noinput
 | 
			
		||||
$STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/.env
 | 
			
		||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
 | 
			
		||||
POSTGRES_DB=$DB_NAME
 | 
			
		||||
POSTGRES_USER=$DB_USER
 | 
			
		||||
POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
POSTGRES_HOST=localhost
 | 
			
		||||
CELERY_BROKER_URL=redis://localhost:6379/0
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/dispatcharr/frontend
 | 
			
		||||
$STD npm install --legacy-peer-deps
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Configured Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/dispatcharr.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80;
 | 
			
		||||
    server_name _;
 | 
			
		||||
 | 
			
		||||
    # Serve static assets with correct MIME types
 | 
			
		||||
    location /assets/ {
 | 
			
		||||
        alias /opt/dispatcharr/frontend/dist/assets/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
 | 
			
		||||
        # Explicitly set MIME types for webpack-built assets
 | 
			
		||||
        types {
 | 
			
		||||
            text/javascript js;
 | 
			
		||||
            text/css css;
 | 
			
		||||
            image/png png;
 | 
			
		||||
            image/svg+xml svg svgz;
 | 
			
		||||
            font/woff2 woff2;
 | 
			
		||||
            font/woff woff;
 | 
			
		||||
            font/ttf ttf;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /static/ {
 | 
			
		||||
        alias /opt/dispatcharr/static/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /media/ {
 | 
			
		||||
        alias /opt/dispatcharr/media/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /ws/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8001;
 | 
			
		||||
        proxy_http_version 1.1;
 | 
			
		||||
        proxy_set_header Upgrade \$http_upgrade;
 | 
			
		||||
        proxy_set_header Connection "Upgrade";
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # All other requests proxy to Gunicorn
 | 
			
		||||
    location / {
 | 
			
		||||
        include proxy_params;
 | 
			
		||||
        proxy_pass http://127.0.0.1:5656;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
systemctl restart nginx
 | 
			
		||||
msg_ok "Configured Nginx"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run gunicorn \\
 | 
			
		||||
    --workers=4 \\
 | 
			
		||||
    --worker-class=gevent \\
 | 
			
		||||
    --timeout=300 \\
 | 
			
		||||
    --bind 0.0.0.0:5656 \\
 | 
			
		||||
    dispatcharr.wsgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celery.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr worker -l info -c 4
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celery.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr beat -l info
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run daphne -b 0.0.0.0 -p 8001 dispatcharr.asgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Web Server
 | 
			
		||||
After=network.target postgresql.service redis-server.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celery.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Worker
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celery.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celerybeat.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Beat Scheduler
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-daphne.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr WebSocket Server (Daphne)
 | 
			
		||||
After=network.target
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now dispatcharr dispatcharr-celery dispatcharr-celerybeat dispatcharr-daphne
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										95
									
								
								install/garage-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								install/garage-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Garage"
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 32)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
    echo "Garage Tokens and Secrets"
 | 
			
		||||
    echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
    echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
    echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >>~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "[::]:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "[::]:3900"
 | 
			
		||||
root_domain = ".s3.garage.localhost"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "[::]:3902"
 | 
			
		||||
root_domain = ".web.garage.localhost"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "[::]:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "[::]:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Set up Garage"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<'EOF' >/etc/systemd/system/garage.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Garage Object Storage (Deuxfleurs)
 | 
			
		||||
After=network-online.target
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/local/bin/garage -c /etc/garage.toml server
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/var/lib/garage
 | 
			
		||||
Environment=RUST_LOG=info
 | 
			
		||||
StandardOutput=append:/var/log/garage.log
 | 
			
		||||
StandardError=append:/var/log/garage.log
 | 
			
		||||
LimitNOFILE=65536
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
$STD systemctl enable -q --now garage
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -19,9 +19,11 @@ if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
 | 
			
		||||
else
 | 
			
		||||
  $STD apt -y install intel-opencl-icd
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
  chgrp video /dev/dri
 | 
			
		||||
  chmod 755 /dev/dri
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: davalanche
 | 
			
		||||
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mylar3/mylar3
 | 
			
		||||
 | 
			
		||||
@@ -14,7 +14,6 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y jq
 | 
			
		||||
cat <<EOF >/etc/apt/sources.list.d/non-free.sources
 | 
			
		||||
Types: deb
 | 
			
		||||
URIs: http://deb.debian.org/debian
 | 
			
		||||
@@ -23,22 +22,17 @@ Components: non-free non-free-firmware
 | 
			
		||||
EOF
 | 
			
		||||
$STD apt update
 | 
			
		||||
$STD apt install -y unrar
 | 
			
		||||
rm /etc/apt/sources.list.d/non-free.sources
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt install -y python3-pip
 | 
			
		||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
$STD pip install -U --no-cache-dir pip
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION}"
 | 
			
		||||
mkdir -p /opt/mylar3
 | 
			
		||||
mkdir -p /opt/mylar3-data
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
 | 
			
		||||
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
 | 
			
		||||
$STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
$STD uv venv /opt/mylar3/.venv
 | 
			
		||||
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
 | 
			
		||||
msg_ok "Installed ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -48,7 +42,7 @@ Description=Mylar3 Service
 | 
			
		||||
After=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/python3 /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
 | 
			
		||||
ExecStart=/opt/mylar3/.venv/bin/python /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
 | 
			
		||||
GuessMainPID=no
 | 
			
		||||
Type=forking
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
@@ -61,6 +61,8 @@ cd /opt/browserless
 | 
			
		||||
$STD npm install
 | 
			
		||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
$STD npm install typescript --save-dev
 | 
			
		||||
$STD npm install esbuild --save-dev
 | 
			
		||||
$STD npm run build
 | 
			
		||||
$STD npm run build:function
 | 
			
		||||
$STD npm prune production
 | 
			
		||||
 
 | 
			
		||||
@@ -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