Compare commits

..

3 Commits

Author SHA1 Message Date
CanbiZ
d2f61af129 -
Added copyright, author, and license information.
2025-11-16 09:54:57 +01:00
CanbiZ
47cbdec252 Enhance healthchecks update process with backup and venv
Added backup creation for existing healthchecks installation before updating. Enhanced the update process by recreating the Python virtual environment and installing requirements.
2025-11-16 09:54:03 +01:00
CanbiZ
7f28f12989 Refactor: Healthchecks 2025-11-16 09:51:27 +01:00
44 changed files with 563 additions and 1218 deletions

View File

@@ -22,18 +22,6 @@ body:
validations:
required: true
- type: dropdown
id: verbose_run
attributes:
label: 🔎 Did you run the script with verbose mode enabled?
description: "Required for debugging any script issue. A verbose log is mandatory."
options:
- ""
- "Yes, verbose mode was enabled and the output is included below"
- "No (this issue will likely be closed automatically)"
validations:
required: true
- type: input
id: script_name
attributes:

View File

@@ -10,87 +10,15 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-20
## 2025-11-19
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- HotFix: Fix NetVisor env var [@vhsdream](https://github.com/vhsdream) ([#9286](https://github.com/community-scripts/ProxmoxVE/pull/9286))
- Jotty: reduce RAM requirement [@vhsdream](https://github.com/vhsdream) ([#9272](https://github.com/community-scripts/ProxmoxVE/pull/9272))
- Nginx Proxy Manager: Pin version to v2.13.4 [@tremor021](https://github.com/tremor021) ([#9259](https://github.com/community-scripts/ProxmoxVE/pull/9259))
- #### ✨ New Features
- PVE 9.1 version support [@MickLesk](https://github.com/MickLesk) ([#9280](https://github.com/community-scripts/ProxmoxVE/pull/9280))
- force disable IPv6 if IPV6_METHOD = none [@MickLesk](https://github.com/MickLesk) ([#9277](https://github.com/community-scripts/ProxmoxVE/pull/9277))
- #### 💥 Breaking Changes
- NetVisor: v0.10.0 fixes [@vhsdream](https://github.com/vhsdream) ([#9255](https://github.com/community-scripts/ProxmoxVE/pull/9255))
## 2025-11-18
### 🚀 Updated Scripts
- librenms: Fix password to short [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#9236](https://github.com/community-scripts/ProxmoxVE/pull/9236))
- #### 🐞 Bug Fixes
- Huntarr: Downgrade Python to 3.12 [@MickLesk](https://github.com/MickLesk) ([#9246](https://github.com/community-scripts/ProxmoxVE/pull/9246))
- kasm: fix release fetching [@MickLesk](https://github.com/MickLesk) ([#9244](https://github.com/community-scripts/ProxmoxVE/pull/9244))
## 2025-11-17
### 🆕 New Scripts
- Passbolt ([#9226](https://github.com/community-scripts/ProxmoxVE/pull/9226))
- Domain-Locker ([#9214](https://github.com/community-scripts/ProxmoxVE/pull/9214))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Domain Monitor: Fix encryption key length in install script [@tremor021](https://github.com/tremor021) ([#9239](https://github.com/community-scripts/ProxmoxVE/pull/9239))
- NetVisor: add build deps, increase RAM [@vhsdream](https://github.com/vhsdream) ([#9205](https://github.com/community-scripts/ProxmoxVE/pull/9205))
- fix: restart apache2 after installing zabbix config [@AlphaLawless](https://github.com/AlphaLawless) ([#9206](https://github.com/community-scripts/ProxmoxVE/pull/9206))
- #### ✨ New Features
- [core]: harmonize app_name for creds [@MickLesk](https://github.com/MickLesk) ([#9224](https://github.com/community-scripts/ProxmoxVE/pull/9224))
- #### 💥 Breaking Changes
- Refactor: paperless-ngx (Breaking Change Inside) [@MickLesk](https://github.com/MickLesk) ([#9223](https://github.com/community-scripts/ProxmoxVE/pull/9223))
### 🧰 Maintenance
- #### 📂 Github
- github: add verbose mode check to bug report template [@MickLesk](https://github.com/MickLesk) ([#9234](https://github.com/community-scripts/ProxmoxVE/pull/9234))
## 2025-11-16
### 🆕 New Scripts
- Metabase ([#9190](https://github.com/community-scripts/ProxmoxVE/pull/9190))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Change backup directory to /opt for paperless-ngx [@ProfDrYoMan](https://github.com/ProfDrYoMan) ([#9195](https://github.com/community-scripts/ProxmoxVE/pull/9195))
- Kimai: remove deprecated admin_lte section [@MickLesk](https://github.com/MickLesk) ([#9182](https://github.com/community-scripts/ProxmoxVE/pull/9182))
- healthchecks: bump python to 3.13 [@MickLesk](https://github.com/MickLesk) ([#9175](https://github.com/community-scripts/ProxmoxVE/pull/9175))
### 🌐 Website
- #### 📝 Script Information
- fixed config_path for donetick [@TazztheMonster](https://github.com/TazztheMonster) ([#9203](https://github.com/community-scripts/ProxmoxVE/pull/9203))
## 2025-11-15
### 🚀 Updated Scripts

View File

@@ -1,67 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Lissy93/domain-locker
APP="Domain-Locker"
var_tags="${var_tags:-Monitoring}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-10240}"
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/domain-locker ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then
msg_info "Stopping Service"
systemctl stop domain-locker
msg_info "Service stopped"
PG_VERSION="17" setup_postgresql
setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker"
msg_info "Installing Modules (patience)"
cd /opt/domain-locker
$STD npm install
msg_ok "Installed Modules"
msg_info "Building Domain-Locker (a lot of patience)"
set -a
source /opt/domain-locker.env
set +a
$STD npm run build
msg_info "Built Domain-Locker"
msg_info "Restarting Services"
systemctl start domain-locker
msg_ok "Restarted Services"
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}:3000${CL}"

View File

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

View File

@@ -1,6 +0,0 @@
__ ___ __ __
/ |/ /__ / /_____ _/ /_ ____ _________
/ /|_/ / _ \/ __/ __ `/ __ \/ __ `/ ___/ _ \
/ / / / __/ /_/ /_/ / /_/ / /_/ (__ ) __/
/_/ /_/\___/\__/\__,_/_.___/\__,_/____/\___/

View File

@@ -1,6 +0,0 @@
____ __ ____
/ __ \____ ___________/ /_ ____ / / /_
/ /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/
/ ____/ /_/ (__ |__ ) /_/ / /_/ / / /_
/_/ \__,_/____/____/_.___/\____/_/\__/

View File

@@ -28,26 +28,42 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "healthchecks" "healthchecks/healthchecks"; then
msg_info "Stopping Services"
systemctl stop healthchecks
msg_ok "Stopped Services"
PYTHON_VERSION="3.13" setup_uv
msg_info "Backing up existing installation"
BACKUP="/opt/healthchecks-backup-$(date +%F-%H%M)"
cp -a /opt/healthchecks "$BACKUP"
msg_ok "Backup created at $BACKUP"
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Updating healthchecks"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
msg_ok "Updated healthchecks"
if [[ -d venv ]]; then
rm -rf venv
fi
msg_info "Recreating Python venv"
$STD python3 -m venv venv
$STD source venv/bin/activate
$STD pip install --upgrade pip wheel
msg_ok "Created venv"
msg_info "Installing requirements"
$STD pip install gunicorn -r requirements.txt
msg_ok "Installed requirements"
msg_info "Running Django migrations"
$STD python manage.py migrate --noinput
$STD python manage.py collectstatic --noinput
$STD python manage.py compress
msg_ok "Completed Django migrations and static build"
msg_info "Starting Services"
systemctl start healthchecks
systemctl restart caddy
systemctl reload caddy
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -29,7 +29,7 @@ function update_script() {
exit
fi
PYTHON_VERSION="3.12" setup_uv
setup_uv
if check_for_gh_release "huntarr" "plexguide/Huntarr.io"; then
msg_info "Stopping Service"

View File

@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
APP="jotty"
var_tags="${var_tags:-tasks;notes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"

View File

@@ -1,65 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.metabase.com/
APP="Metabase"
var_tags="${var_tags:-analytics}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
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/metabase ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "metabase" "metabase/metabase"; then
msg_info "Stopping Service"
systemctl stop metabase
msg_info "Stopped Service"
msg_info "Creating backup"
mv /opt/metabase/.env /opt
msg_ok "Created backup"
msg_info "Updating Metabase"
RELEASE=$(get_latest_github_release "metabase/metabase")
curl -fsSL "https://downloads.metabase.com/v${RELEASE}.x/metabase.jar" -o /opt/metabase/metabase.jar
echo $RELEASE >~/.metabase
msg_ok "Updated Metabase"
msg_info "Restoring backup"
mv /opt/.env /opt/metabase
msg_ok "Restored backup"
msg_info "Starting Service"
systemctl start metabase
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}:3000${CL}"

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="NetVisor"
var_tags="${var_tags:-analytics}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
@@ -35,30 +35,18 @@ function update_script() {
msg_ok "Stopped services"
msg_info "Backing up configurations"
cp /opt/netvisor/.env /opt/netvisor.env.bak
cp /opt/netvisor/.env /opt/netvisor.env
msg_ok "Backed up configurations"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "mayanayza/netvisor" "tarball" "latest" "/opt/netvisor"
if ! dpkg -l | grep -q "pkg-config"; then
$STD apt install -y pkg-config
fi
if ! dpkg -l | grep -q "libssl-dev"; then
$STD apt install -y libssl-dev
fi
TOOLCHAIN="$(grep "channel" /opt/netvisor/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
cp /opt/netvisor.env.bak /opt/netvisor/.env
LOCAL_IP="$(hostname -I | awk '{print $1}')"
if ! grep -q "PUBLIC_URL"; then
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/netvisor/.env
fi
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/netvisor/.env
mv /opt/netvisor.env /opt/netvisor/.env
msg_info "Creating frontend UI"
export PUBLIC_SERVER_HOSTNAME=default
export PUBLIC_SERVER_PORT=""
export PUBLIC_SERVER_PORT=60072
cd /opt/netvisor/ui
$STD npm ci --no-fund --no-audit
$STD npm run build
@@ -70,16 +58,10 @@ function update_script() {
mv ./target/release/server /usr/bin/netvisor-server
msg_ok "Built Netvisor-server"
msg_info "Building Netvisor-daemon"
msg_info "Building Netvisor-daemon (amd64 version)"
$STD cargo build --release --bin daemon
cp ./target/release/daemon /usr/bin/netvisor-daemon
msg_ok "Built Netvisor-daemon"
sed -i -e 's|-target|-url|' \
-e 's| --server-port |:|' \
/etc/systemd/system/netvisor-daemon.service
sed -i '/^ \"server_target.*$/d' /root/.config/daemon/config.json
systemctl daemon-reload
msg_ok "Built Netvisor-daemon (amd64 version)"
msg_info "Starting services"
systemctl start netvisor-server netvisor-daemon

View File

@@ -49,12 +49,11 @@ function update_script() {
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
#RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
#grep "tag_name" |
#awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }')
RELEASE="2.13.4"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}" "/opt/nginxproxymanager"
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager"
msg_info "Stopping Services"
systemctl stop openresty

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -32,11 +32,19 @@ function update_script() {
if lscpu | grep -q 'avx'; then
MONGO_VERSION="8.0" setup_mongodb
else
msg_error "No AVX detected (CPU-Flag)! We have discontinued support for this. You are welcome to try it manually with a Debian LXC, but due to the many issues with Omada, we currently only support AVX CPUs."
exit 10
msg_warn "No AVX detected: Using older MongoDB 4.4"
MONGO_VERSION="4.4" setup_mongodb
fi
JAVA_VERSION="21" setup_java
msg_info "Checking if right Azul Zulu Java is installed"
java_version=$(java -version 2>&1 | awk -F[\"_] '/version/ {print $2}')
if [[ "$java_version" =~ ^1\.8\.* ]]; then
$STD apt remove --purge -y zulu8-jdk
$STD apt -y install zulu21-jre-headless
msg_ok "Updated Azul Zulu Java to 21"
else
msg_ok "Azul Zulu Java 21 already installed"
fi
msg_info "Updating Omada Controller"
OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/omada-controller/" |

View File

@@ -27,27 +27,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
# Check for old data structure and prompt migration
if [[ -f /opt/paperless/paperless.conf ]]; then
local OLD_DIRS=()
[[ -d /opt/paperless/consume ]] && OLD_DIRS+=("consume")
[[ -d /opt/paperless/data ]] && OLD_DIRS+=("data")
[[ -d /opt/paperless/media ]] && OLD_DIRS+=("media")
if [[ ${#OLD_DIRS[@]} -gt 0 ]]; then
msg_error "Old data structure detected in /opt/paperless/"
msg_custom "📂" "Found directories: ${OLD_DIRS[*]}"
echo -e ""
msg_custom "🔄" "Migration required to new data structure (/opt/paperless_data/)"
msg_custom "📖" "Please follow the migration guide:"
echo -e "${TAB}${GATEWAY}${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/9223${CL}"
echo -e ""
msg_custom "⚠️" "Update aborted. Please migrate your data first."
exit 1
fi
fi
if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx"; then
msg_info "Stopping all Paperless-ngx Services"
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
@@ -55,9 +34,15 @@ function update_script() {
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
msg_info "Backing up configuration"
local BACKUP_DIR="/opt/paperless_backup_$$"
msg_info "Backing up user data and configuration"
local BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do
dir_name=$(basename "$dir")
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
fi
done
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
msg_ok "Backup completed to $BACKUP_DIR"
@@ -98,9 +83,16 @@ function update_script() {
rm -rf /opt/paperless/venv
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
msg_info "Backing up configuration"
local BACKUP_DIR="/opt/paperless_backup_$$"
msg_info "Backing up user data and configuration"
local BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do
dir_name=$(basename "$dir")
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
fi
done
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
msg_ok "Backup completed to $BACKUP_DIR"
@@ -129,9 +121,16 @@ function update_script() {
done
$STD systemctl daemon-reload
msg_info "Backing up configuration"
BACKUP_DIR="/opt/paperless_backup_$$"
msg_info "Backing up user data and configuration"
BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do
dir_name=$(basename "$dir")
if [[ ! "$dir_name" =~ ^(docker|docs|scripts|src|static)$ ]]; then
cp -r "/opt/paperless/$dir_name" "$BACKUP_DIR/" 2>/dev/null || true
fi
done
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
msg_ok "Backup completed to $BACKUP_DIR"

View File

@@ -1,44 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.passbolt.com/
APP="Passbolt"
var_tags="${var_tags:-auth}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-2}"
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 /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated $APP LXC"
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}https://${IP}${CL}"

View File

@@ -1,44 +0,0 @@
{
"name": "Domain Locker",
"slug": "domain-locker",
"categories": [
9
],
"date_created": "2025-11-17",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://domain-locker.com/about",
"config_path": "/opt/domain-locker.env",
"website": "https://github.com/Lissy93/domain-locker",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/domain-locker.webp",
"description": "The all-in-one tool, for keeping track of your domain name portfolio. Got domain names? Get Domain Locker! ",
"install_methods": [
{
"type": "default",
"script": "ct/domain-locker.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Show DB credentials: `cat ~/Domain-Locker.creds`",
"type": "info"
},
{
"text": "Domain-locker takes quite some time to build and a lot of ressources, RAM and Cores can be lowered after install.",
"type": "info"
}
]
}

View File

@@ -10,7 +10,7 @@
"privileged": false,
"interface_port": 2021,
"documentation": "https://docs.donetick.com/getting-started/",
"config_path": "/opt/donetick/config/selfhosted.yaml",
"config_path": "/opt/donetick/config/selfhosted.yml",
"website": "https://donetick.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/donetick.webp",
"description": "Donetick an open-source, user-friendly app for managing tasks and chores, featuring customizable options to help you and others stay organized",

View File

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

View File

@@ -20,7 +20,7 @@
"script": "ct/jotty.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"ram": 4096,
"hdd": 6,
"os": "debian",
"version": "13"

View File

@@ -28,13 +28,8 @@
}
],
"default_credentials": {
"username": null,
"password": null
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "After installation, the admin user credentials are saved in the file ~/librenms.creds inside the container.",
"type": "info"
}
]
"notes": []
}

View File

@@ -1,35 +0,0 @@
{
"name": "Metabase",
"slug": "metabase",
"categories": [
9
],
"date_created": "2025-11-16",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://www.metabase.com/docs/latest/",
"config_path": "/opt/metabase/.env",
"website": "https://www.metabase.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metabase.webp",
"description": "Metabase is an open-source business intelligence platform. You can use Metabase to ask questions about your data, or embed Metabase in your app to let your customers explore their data on their own.",
"install_methods": [
{
"type": "default",
"script": "ct/metabase.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -20,7 +20,7 @@
"script": "ct/netvisor.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"ram": 2048,
"hdd": 6,
"os": "Debian",
"version": "13"
@@ -35,10 +35,6 @@
{
"text": "The integrated daemon config is located at `/root/.config/daemon/config.json`",
"type": "info"
},
{
"text": "When using a reverse proxy, edit `/opt/netvisor/ui/build/_app/env.js`: add 443 to `PUBLIC_SERVER_PORT` and remove 'default' from `PUBLIC_SERVER_HOSTNAME`.",
"type": "info"
}
]
}

View File

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

View File

@@ -1,44 +0,0 @@
{
"name": "Passbolt",
"slug": "passbolt",
"categories": [
6
],
"date_created": "2025-11-17",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://www.passbolt.com/docs/",
"config_path": "/etc/passbolt/passbolt.php",
"website": "https://www.passbolt.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/passbolt.webp",
"description": "Passbolt is a hybrid credential platform. It is built-first for modern IT teams, yet simple enough for everyone. A sovereign, battle-tested solution that delivers for a team of 5, or an organisation of 5000.",
"install_methods": [
{
"type": "default",
"script": "ct/passbolt.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 2,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Type `cat ~/passbolt.creds` to see MariaDB database credentials. You will need those to setup Passbolt.",
"type": "info"
},
{
"text": "The application uses self-signed certificates. You can also use Let's Encrypt to get a valid certificate for your domain. Please read the documentation for more information.",
"type": "info"
}
]
}

View File

@@ -1,369 +1,54 @@
[
{
"name": "esphome/esphome",
"version": "2025.11.0",
"date": "2025-11-19T22:37:46Z"
},
{
"name": "immich-app/immich",
"version": "v2.3.0",
"date": "2025-11-19T22:36:35Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.3.5",
"date": "2025-11-19T20:53:34Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.308.0-rc.0",
"date": "2025-11-19T19:48:05Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.4",
"date": "2025-11-19T20:25:37Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.77.3-stable-patch-2",
"date": "2025-11-19T19:00:37Z"
},
{
"name": "coder/code-server",
"version": "v4.106.0",
"date": "2025-11-19T18:01:23Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.90.8",
"date": "2025-11-19T16:30:57Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.51.3",
"date": "2025-11-19T15:45:28Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.6.2",
"date": "2025-11-19T15:31:59Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.11.2",
"date": "2025-11-19T15:26:29Z"
},
{
"name": "grafana/grafana",
"version": "v12.3.0",
"date": "2025-11-19T15:15:43Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.10.2",
"date": "2025-11-19T15:08:41Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.11.3",
"date": "2025-11-19T14:57:27Z"
},
{
"name": "hivemq/hivemq-community-edition",
"version": "2025.5",
"date": "2025-11-19T14:48:47Z"
},
{
"name": "ollama/ollama",
"version": "v0.13.0",
"date": "2025-11-19T14:16:07Z"
},
{
"name": "nextcloud/nextcloudpi",
"version": "v1.56.0",
"date": "2025-11-19T14:11:24Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.11.7",
"date": "2025-11-17T08:40:53Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.120.4",
"date": "2025-11-19T12:57:55Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.69",
"date": "2025-10-30T15:31:50Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.538",
"date": "2025-11-19T12:09:00Z"
},
{
"name": "jupyter/notebook",
"version": "v7.5.0",
"date": "2025-11-19T08:36:29Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.102.0",
"date": "2025-11-19T06:53:59Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.327",
"date": "2025-11-19T05:55:51Z"
},
{
"name": "element-hq/synapse",
"version": "v1.143.0rc1",
"date": "2025-11-19T00:09:31Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-19T00:27:10Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v1.0.1-stable",
"date": "2025-11-10T16:51:44Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "testing",
"date": "2025-11-17T16:24:26Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.23",
"date": "2025-11-18T21:36:15Z"
},
{
"name": "umami-software/umami",
"version": "v3.0.1",
"date": "2025-11-18T18:50:35Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.5",
"date": "2025-11-12T15:24:23Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-test-fix-subscriptions",
"date": "2025-11-18T17:42:54Z"
},
{
"name": "traefik/traefik",
"version": "v3.6.2",
"date": "2025-11-18T16:25:16Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-12.1.2",
"date": "2025-11-18T15:16:21Z"
},
{
"name": "redis/redis",
"version": "8.4.0",
"date": "2025-11-18T15:06:37Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@16.0.17",
"date": "2025-11-18T12:28:43Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.5",
"date": "2025-11-18T11:47:48Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.5",
"date": "2025-11-18T10:50:21Z"
},
{
"name": "emqx/emqx",
"version": "e6.1.0-alpha.1",
"date": "2025-11-18T10:33:45Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w47-4.14.2",
"date": "2025-11-18T07:24:43Z"
},
{
"name": "documenso/documenso",
"version": "v2.0.13",
"date": "2025-11-18T05:59:02Z"
},
{
"name": "0xERR0R/blocky",
"version": "v0.28.2",
"date": "2025-11-18T05:51:46Z"
},
{
"name": "theonedev/onedev",
"version": "v13.1.0",
"date": "2025-11-18T00:06:49Z"
},
{
"name": "ipfs/kubo",
"version": "v0.38.2",
"date": "2025-10-30T02:44:09Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.130.0",
"date": "2025-11-17T21:16:38Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.8",
"date": "2025-11-13T04:42:27Z"
},
{
"name": "influxdata/telegraf",
"version": "v1.36.4",
"date": "2025-11-17T17:15:29Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.4.5",
"date": "2025-11-17T15:20:35Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-11-17T09:29:20Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.2.1",
"date": "2025-11-17T02:47:15Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.3.0.5236",
"date": "2025-11-16T22:41:22Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v3.1.0.4875",
"date": "2025-11-16T22:40:18Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.11.3",
"date": "2025-11-16T22:40:10Z"
},
{
"name": "Radarr/Radarr",
"version": "v6.0.4.10291",
"date": "2025-11-16T22:39:01Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.21.0",
"date": "2025-08-23T18:33:53Z"
},
{
"name": "TwiN/gatus",
"version": "v5.32.0",
"date": "2025-11-16T21:08:56Z"
},
{
"name": "binwiederhier/ntfy",
"version": "v2.15.0",
"date": "2025-11-16T18:53:49Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.8",
"date": "2025-11-16T17:04:37Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.11",
"date": "2025-11-16T16:21:04Z"
},
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.12",
"date": "2025-11-16T16:14:55Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.8.0",
"date": "2025-11-16T15:54:50Z"
},
{
"name": "outline/outline",
"version": "v1.1.0",
"date": "2025-11-16T15:07:09Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.11.1",
"date": "2025-11-16T13:04:21Z"
},
{
"name": "TechnitiumSoftware/DnsServer",
"version": "v14.1.0",
"date": "2025-11-16T11:32:10Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.11",
"date": "2025-11-16T01:29:06Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.4.0",
"date": "2025-11-16T01:02:49Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.6",
"date": "2025-11-15T22:56:45Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-test-fix-subscriptions",
"date": "2025-11-15T20:51:48Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.79.3-stable",
"date": "2025-11-15T20:28:05Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.528.2",
"date": "2025-11-15T20:15:39Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.5",
"date": "2025-10-06T15:25:17Z"
},
{
"name": "karakeep-app/karakeep",
"version": "android/v1.8.2-2",
"date": "2025-11-15T13:18:41Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.311",
"date": "2025-11-15T05:55:28Z"
},
{
"name": "cloudreve/cloudreve",
"version": "4.10.1",
"date": "2025-11-15T04:36:48Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-15T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "henrygd/beszel",
"version": "v0.16.1",
@@ -374,6 +59,11 @@
"version": "2025.11.2",
"date": "2025-11-14T22:10:50Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.5",
"date": "2025-11-12T15:24:23Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.43.3",
@@ -384,26 +74,76 @@
"version": "2.43.0",
"date": "2025-11-14T17:20:16Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.119.2",
"date": "2025-11-14T17:06:16Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.5.0",
"date": "2025-11-14T16:23:33Z"
},
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-rc.1",
"date": "2025-11-14T15:46:14Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.308.0-rc.0",
"date": "2025-11-14T15:20:35Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.3",
"date": "2025-11-14T14:49:25Z"
},
{
"name": "grafana/grafana",
"version": "rrc_steady_12.4.0-19174562009.patch4",
"date": "2025-11-14T14:12:58Z"
},
{
"name": "documenso/documenso",
"version": "v2.0.12",
"date": "2025-11-14T13:48:27Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-11.8.5",
"date": "2025-11-14T13:24:20Z"
},
{
"name": "emqx/emqx",
"version": "e5.9.2",
"date": "2025-11-14T12:20:13Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.16.2",
"date": "2025-11-14T12:05:36Z"
},
{
"name": "outline/outline",
"version": "v1.1.0-0",
"date": "2025-11-14T11:41:10Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.7.0",
"date": "2025-11-14T09:45:13Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.51.1",
"date": "2025-11-14T09:22:24Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
@@ -419,6 +159,11 @@
"version": "v4.6.5",
"date": "2025-11-14T06:59:44Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.86.1",
@@ -429,16 +174,41 @@
"version": "v4.31.0",
"date": "2025-11-14T00:18:50Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.14",
"date": "2025-11-13T23:16:04Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.11",
"date": "2025-11-12T20:27:51Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.7.7",
"date": "2025-11-13T21:28:44Z"
},
{
"name": "0xERR0R/blocky",
"version": "v0.28.1",
"date": "2025-11-13T21:25:32Z"
},
{
"name": "pommee/goaway",
"version": "v0.62.18",
"date": "2025-11-13T19:49:21Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@10.0.6",
"date": "2025-11-13T16:37:11Z"
},
{
"name": "traefik/traefik",
"version": "v3.6.1",
"date": "2025-11-13T14:28:54Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.33.0",
@@ -449,16 +219,46 @@
"version": "1.7.9",
"date": "2025-11-13T10:26:37Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.25.0.improve-s3-multipart-upload-1",
"date": "2025-11-13T09:25:48Z"
},
{
"name": "docker/compose",
"version": "v2.40.3",
"date": "2025-10-30T09:35:37Z"
},
{
"name": "redis/redis",
"version": "8.4-int2",
"date": "2025-11-13T08:17:31Z"
},
{
"name": "evcc-io/evcc",
"version": "0.209.8",
"date": "2025-11-13T07:20:49Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.8",
"date": "2025-11-13T04:42:27Z"
},
{
"name": "esphome/esphome",
"version": "2025.10.5",
"date": "2025-11-12T01:09:44Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.4",
"date": "2025-11-12T21:27:04Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.14.1",
"date": "2025-11-12T18:11:43Z"
},
{
"name": "pymedusa/Medusa",
"version": "v1.0.25",
@@ -474,11 +274,26 @@
"version": "351",
"date": "2025-11-12T11:28:06Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.4.4",
"date": "2025-11-12T10:43:23Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.101.0",
"date": "2025-11-12T07:13:22Z"
},
{
"name": "webmin/webmin",
"version": "2.600",
"date": "2025-11-12T05:01:55Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
@@ -504,6 +319,16 @@
"version": "v1.7.0",
"date": "2025-11-11T17:24:27Z"
},
{
"name": "mattermost/mattermost",
"version": "mattermost-redux@11.1.0",
"date": "2025-11-11T17:15:00Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.10",
"date": "2025-11-11T16:26:27Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.6",
@@ -514,6 +339,16 @@
"version": "1.1.0",
"date": "2025-11-11T14:30:28Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.11.1",
"date": "2025-11-11T12:23:00Z"
},
{
"name": "element-hq/synapse",
"version": "v1.142.0",
"date": "2025-11-11T10:33:50Z"
},
{
"name": "FlareSolverr/FlareSolverr",
"version": "v3.4.5",
@@ -524,6 +359,16 @@
"version": "4.9.1.90",
"date": "2025-11-11T01:00:32Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.11.11",
"date": "2025-11-11T00:35:03Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.3",
"date": "2025-11-10T22:29:05Z"
},
{
"name": "postgres/postgres",
"version": "REL_13_23",
@@ -534,6 +379,11 @@
"version": "v1.69.0",
"date": "2025-11-10T17:22:00Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v1.0.1-stable",
"date": "2025-11-10T16:51:44Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.3.5",
@@ -564,6 +414,11 @@
"version": "v2.4.5",
"date": "2025-11-09T17:14:01Z"
},
{
"name": "TechnitiumSoftware/DnsServer",
"version": "v14.0.1",
"date": "2025-11-09T13:03:18Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.14",
@@ -584,11 +439,21 @@
"version": "v1.17.2",
"date": "2025-11-08T22:47:58Z"
},
{
"name": "TwiN/gatus",
"version": "v5.31.0",
"date": "2025-11-08T22:18:46Z"
},
{
"name": "hargata/lubelog",
"version": "v1.5.4",
"date": "2025-11-08T16:26:45Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.7",
"date": "2025-11-08T15:47:24Z"
},
{
"name": "heiher/hev-socks5-server",
"version": "2.11.1",
@@ -614,6 +479,16 @@
"version": "debian/12.1.35",
"date": "2025-11-07T14:35:24Z"
},
{
"name": "umami-software/umami",
"version": "v3.0.0",
"date": "2025-11-07T06:13:49Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.10",
"date": "2025-11-06T23:10:38Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.52.0",
@@ -634,6 +509,11 @@
"version": "v1.15.0",
"date": "2025-11-06T15:03:22Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.11.2",
"date": "2025-11-06T12:08:24Z"
},
{
"name": "transmission/transmission",
"version": "4.0.1-beta.1",
@@ -674,6 +554,11 @@
"version": "6.2.9",
"date": "2025-11-05T13:55:39Z"
},
{
"name": "immich-app/immich",
"version": "v2.2.3",
"date": "2025-11-05T13:47:03Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.18.4",
@@ -714,6 +599,11 @@
"version": "v0.9.100",
"date": "2025-11-04T17:44:39Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "v1.129.1",
"date": "2025-11-04T15:15:47Z"
},
{
"name": "prometheus/alertmanager",
"version": "v0.29.0",
@@ -749,11 +639,21 @@
"version": "v25.11.0",
"date": "2025-11-04T00:32:21Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.10.1",
"date": "2025-11-03T16:49:16Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.2.1",
"date": "2025-11-03T06:57:15Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.11.2",
"date": "2025-11-03T02:29:00Z"
},
{
"name": "maxdorninger/MediaManager",
"version": "v1.9.1",
@@ -764,6 +664,11 @@
"version": "v3.2.9",
"date": "2025-11-02T05:48:39Z"
},
{
"name": "theonedev/onedev",
"version": "v13.0.10",
"date": "2025-11-02T02:47:45Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.20",
@@ -779,6 +684,11 @@
"version": "0.42.1",
"date": "2020-06-07T07:27:04Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.90.6",
"date": "2025-10-31T22:24:04Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.5",
@@ -804,11 +714,26 @@
"version": "1.0.2",
"date": "2025-10-30T18:23:23Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.69",
"date": "2025-10-30T15:31:50Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v3.0.1.4866",
"date": "2025-10-30T14:29:25Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.4",
"date": "2025-10-30T14:25:23Z"
},
{
"name": "ipfs/kubo",
"version": "v0.38.2",
"date": "2025-10-30T02:44:09Z"
},
{
"name": "homebridge/homebridge",
"version": "v1.11.1",
@@ -844,6 +769,16 @@
"version": "v3.0.0-beta.2",
"date": "2025-10-28T10:16:29Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.2.0",
"date": "2025-10-27T16:56:40Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.28.0.10274",
"date": "2025-10-06T21:31:07Z"
},
{
"name": "openhab/openhab-core",
"version": "5.1.0.M2",
@@ -859,6 +794,11 @@
"version": "v13.0.2",
"date": "2025-10-26T06:33:05Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.1.5.5216",
"date": "2025-10-25T19:41:59Z"
},
{
"name": "usememos/memos",
"version": "v0.25.2",
@@ -904,6 +844,21 @@
"version": "v3.2.5-beta",
"date": "2025-10-21T16:49:14Z"
},
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.11",
"date": "2025-10-21T13:21:02Z"
},
{
"name": "influxdata/telegraf",
"version": "v1.36.3",
"date": "2025-10-21T12:53:58Z"
},
{
"name": "coder/code-server",
"version": "v4.105.1",
"date": "2025-10-20T20:19:23Z"
},
{
"name": "rclone/rclone",
"version": "v1.71.2",
@@ -944,6 +899,11 @@
"version": "0.20.4",
"date": "2025-10-18T10:00:42Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.6.1",
"date": "2025-10-17T15:21:59Z"
},
{
"name": "diced/zipline",
"version": "v4.3.2",
@@ -964,6 +924,11 @@
"version": "v2.13.1",
"date": "2025-10-15T13:29:37Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.3.3",
"date": "2025-10-15T13:18:27Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
@@ -1029,6 +994,11 @@
"version": "mysql-cluster-7.6.36",
"date": "2025-10-06T15:19:49Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.10.1",
"date": "2025-10-06T14:23:20Z"
},
{
"name": "jordan-dalby/ByteStash",
"version": "v1.5.9",
@@ -1184,6 +1154,11 @@
"version": "v0.11.0",
"date": "2025-09-01T16:19:38Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.7.3",
"date": "2025-08-31T15:59:43Z"
},
{
"name": "Forceu/Gokapi",
"version": "v2.1.0",
@@ -1204,6 +1179,11 @@
"version": "0.6.25",
"date": "2025-08-24T08:51:55Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.21.0",
"date": "2025-08-23T18:33:53Z"
},
{
"name": "caddyserver/caddy",
"version": "v2.10.2",
@@ -1259,6 +1239,11 @@
"version": "v1.28.3",
"date": "2025-08-06T12:32:02Z"
},
{
"name": "binwiederhier/ntfy",
"version": "v2.14.0",
"date": "2025-08-05T08:31:35Z"
},
{
"name": "inspircd/inspircd",
"version": "v4.8.0",
@@ -1279,6 +1264,11 @@
"version": "v0.4.5",
"date": "2025-07-29T16:39:18Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3",
"date": "2025-07-22T14:39:54Z"
},
{
"name": "sbondCo/Watcharr",
"version": "v2.1.1",
@@ -1294,6 +1284,11 @@
"version": "250707-d28b3101e",
"date": "2025-07-07T15:15:21Z"
},
{
"name": "hivemq/hivemq-community-edition",
"version": "2025.4",
"date": "2025-07-01T18:01:37Z"
},
{
"name": "typesense/typesense",
"version": "v29.0",
@@ -1414,6 +1409,11 @@
"version": "v1.34.0",
"date": "2025-03-26T08:48:34Z"
},
{
"name": "nextcloud/nextcloudpi",
"version": "v1.55.4",
"date": "2025-03-24T11:31:02Z"
},
{
"name": "redlib-org/redlib",
"version": "v0.36.0",

View File

@@ -1,72 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CrazyWolf13/domain-locker
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PG_VERSION="17" setup_postgresql
PG_DB_NAME="domainlocker_db" PG_DB_USER="domainlocker" setup_postgresql_db
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker"
msg_info "Installing Modules (patience)"
cd /opt/domain-locker
$STD npm install
msg_ok "Installed Modules"
msg_info "Building Domain-Locker (a lot of patience)"
cat <<EOF >/opt/domain-locker.env
# Database connection
DL_PG_HOST=localhost
DL_PG_PORT=5432
DL_PG_USER=$PG_DB_USER
DL_PG_PASSWORD=$PG_DB_PASS
DL_PG_NAME=$PG_DB_NAME
# Build + Runtime
DL_ENV_TYPE=selfHosted
NITRO_PRESET=node_server
NODE_ENV=production
EOF
set -a
source /opt/domain-locker.env
set +a
$STD npm run build
msg_info "Built Domain-Locker"
msg_info "Building Database schema"
export PGPASSWORD="$DL_PG_PASSWORD"
$STD psql -h "$DL_PG_HOST" -p "$DL_PG_PORT" -U "$DL_PG_USER" -d "$DL_PG_NAME" -f "/opt/domain-locker/db/schema.sql"
msg_ok "Built Database schema"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/domain-locker.service
[Unit]
Description=Domain-Locker Service
After=network.target
[Service]
EnvironmentFile=/opt/domain-locker.env
WorkingDirectory=/opt/domain-locker
ExecStart=/opt/domain-locker/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl start --now -q domain-locker
msg_info "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -33,7 +33,7 @@ MARIADB_DB_NAME="domain_monitor" MARIADB_DB_USER="domainmonitor" setup_mariadb_d
fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
msg_info "Setting up Domain Monitor"
ENC_KEY=$(openssl rand -base64 32 | tr -d '\n')
ENC_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32)
cd /opt/domain-monitor
$STD composer install
cp env.example.txt .env

View File

@@ -1,5 +1,4 @@
#!/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
@@ -16,43 +15,44 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
gcc \
python3 \
python3-dev \
python3-venv \
libpq-dev \
libcurl4-openssl-dev \
libssl-dev \
caddy
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << EOF
[global]
break-system-packages = true
EOF
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.13" setup_uv
PG_VERSION=16 setup_postgresql
PG_DB_NAME="healthchecks_db" PG_DB_USER="hc_user" PG_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) setup_postgresql_db
msg_info "Setup Database"
DB_NAME=healthchecks_db
DB_USER=hc_user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
msg_info "Setup Keys (Admin / Secret)"
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
ADMIN_EMAIL="admin@helper-scripts.local"
ADMIN_PASSWORD="$DB_PASS"
$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 "healthchecks-Credentials"
echo "healthchecks Database User: $DB_USER"
echo "healthchecks Database Password: $DB_PASS"
echo "healthchecks Database Name: $DB_NAME"
echo "healthchecks Admin Email: $ADMIN_EMAIL"
echo "healthchecks Admin Password: $ADMIN_PASSWORD"
} >>~/healthchecks.creds
msg_ok "Set up Database"
msg_ok "Set up Keys"
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Setup healthchecks"
msg_info "Installing Healthchecks (venv)"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
python3 -m venv venv
source venv/bin/activate
$STD pip install --upgrade pip wheel
$STD pip install gunicorn -r requirements.txt
msg_ok "Installed Python packages"
LOCAL_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/healthchecks/hc/local_settings.py
@@ -83,18 +83,19 @@ DATABASES = {
}
EOF
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
msg_info "Running Django setup"
$STD python manage.py makemigrations
$STD python manage.py migrate --noinput
$STD python manage.py collectstatic --noinput
$STD python manage.py compress
cat <<EOF | $STD uv run -- python manage.py shell
python <<EOF
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(email="${ADMIN_EMAIL}").exists():
User.objects.create_superuser("${ADMIN_EMAIL}", "${ADMIN_EMAIL}", "${ADMIN_PASSWORD}")
EOF
msg_ok "Installed healthchecks"
msg_ok "Configured Django"
msg_info "Configuring Caddy"
cat <<EOF >/etc/caddy/Caddyfile
@@ -108,7 +109,7 @@ ${LOCAL_IP} {
EOF
msg_ok "Configured Caddy"
msg_info "Creating Service"
msg_info "Creating systemd service"
cat <<EOF >/etc/systemd/system/healthchecks.service
[Unit]
Description=Healthchecks Service
@@ -116,12 +117,13 @@ After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/healthchecks/
ExecStart=/usr/local/bin/uv run -- gunicorn hc.wsgi:application --bind 127.0.0.1:8000
ExecStart=/opt/healthchecks/venv/bin/gunicorn hc.wsgi:application --bind 127.0.0.1:8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now healthchecks caddy
systemctl reload caddy
msg_ok "Created Service"

View File

@@ -13,7 +13,7 @@ setting_up_container
network_check
update_os
PYTHON_VERSION="3.12" setup_uv
setup_uv
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io"
msg_info "Configure Huntarr"

View File

@@ -13,26 +13,12 @@ setting_up_container
network_check
update_os
msg_info "Detecting latest Kasm Workspaces release"
KASM_URL=$(
curl -fsSL "https://www.kasm.com/downloads" \
| tr '\n' ' ' \
| grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' \
| head -n 1
)
if [[ -z "$KASM_URL" ]]; then
msg_error "Unable to detect latest Kasm release URL."
exit 1
fi
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"
KASM_VERSION=$(curl -fsSL 'https://www.kasmweb.com/downloads' | grep -o 'https://kasm-static-content.s3.amazonaws.com/kasm_release_[^"]*\.tar\.gz' | head -n 1 | sed -E 's/.*release_(.*)\.tar\.gz/\1/')
msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
msg_warn "The following code is NOT maintained or audited by our repository."
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ install.sh inside tar.gz $KASM_URL"
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ install.sh inside tar.gz https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
echo
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
@@ -41,7 +27,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
fi
msg_info "Installing Kasm Workspaces"
curl -fsSL -o "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
curl -fsSL -o "/opt/kasm_release_${KASM_VERSION}.tar.gz" "https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
cd /opt
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
chmod +x /opt/kasm_release/install.sh
@@ -53,10 +39,10 @@ awk '
in_token && /^-+$/ {dash_count++}
in_token && dash_count==2 {exit}
' ~/kasm-install.output >~/kasm.creds
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
rm -f ~/kasm-install.output
msg_ok "Installed Kasm Workspaces"
motd_ssh
customize
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
rm -f ~/kasm-install.output
cleanup_lxc

View File

@@ -113,19 +113,11 @@ mkdir -p /etc/bash_completion.d/
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
APP_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
APP_USER="admin"
{
echo "LibreNMS Credentials"
echo "Username: ${APP_USER}"
echo "Password: ${APP_PASSWORD}"
} >>~/librenms.creds
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev"
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && php8.4 artisan migrate --force"
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && php8.4 artisan key:generate --force"
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && lnms db:seed --force"
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && lnms user:add -p ${APP_PASSWORD} ${APP_USER} --role=admin"
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && lnms user:add -p admin -r admin admin"
RANDOM_STRING=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9')
sed -i "s/RANDOMSTRINGHERE/$RANDOM_STRING/g" /etc/snmp/snmpd.conf

View File

@@ -1,59 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.metabase.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
JAVA_VERSION="21" setup_java
PG_VERSION="17" setup_postgresql
PG_DB_NAME="metabase_db" PG_DB_USER="metabase" setup_postgresql_db
msg_info "Setting up Metabase"
mkdir -p /opt/metabase
RELEASE=$(get_latest_github_release "metabase/metabase")
curl -fsSL "https://downloads.metabase.com/v${RELEASE}.x/metabase.jar" -o /opt/metabase/metabase.jar
cd /opt/metabase
cat <<EOF >/opt/metabase/.env
MB_DB_TYPE=postgres
MB_DB_DBNAME=$PG_DB_NAME
MB_DB_PORT=5432
MB_DB_USER=$PG_DB_USER
MB_DB_PASS=$PG_DB_PASS
MB_DB_HOST=localhost
EOF
echo $RELEASE >~/.metabase
msg_ok "Setup Metabase"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/metabase.service
[Unit]
Description=Metabase Service
After=network.target
[Service]
EnvironmentFile=/opt/metabase/.env
WorkingDirectory=/opt/metabase
ExecStart=/usr/bin/java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
Restart=always
SuccessExitStatus=143
TimeoutStopSec=120
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now metabase
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -15,9 +15,7 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
libssl-dev \
pkg-config
build-essential
msg_ok "Installed Dependencies"
PG_VERSION=17 setup_postgresql
@@ -31,7 +29,7 @@ RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
msg_info "Creating frontend UI"
export PUBLIC_SERVER_HOSTNAME=default
export PUBLIC_SERVER_PORT=""
export PUBLIC_SERVER_PORT=60072
cd /opt/netvisor/ui
$STD npm ci --no-fund --no-audit
$STD npm run build
@@ -49,18 +47,20 @@ cp ./target/release/daemon /usr/bin/netvisor-daemon
msg_ok "Built Netvisor-daemon"
msg_info "Configuring server & daemon for first-run"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cat <<EOF >/opt/netvisor/.env
### - UI
PUBLIC_SERVER_HOSTNAME=default
PUBLIC_SERVER_PORT=60072
### - SERVER
NETVISOR_DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME
NETVISOR_WEB_EXTERNAL_PATH="/opt/netvisor/ui/build"
NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072
NETVISOR_SERVER_PORT=60072
NETVISOR_LOG_LEVEL=info
NETVISOR_INTEGRATED_DAEMON_URL=http://127.0.0.1:60073
## - uncomment to disable signups
# NETVISOR_DISABLE_REGISTRATION=true
## - uncomment when using TLS
## - uncomment when behind reverse proxy
# NETVISOR_USE_SECURE_SESSION_COOKIES=true
### - OIDC (optional)
@@ -72,14 +72,8 @@ NETVISOR_INTEGRATED_DAEMON_URL=http://127.0.0.1:60073
## - Callback URL for reference
# http://your-netvisor-domain:60072/api/auth/oidc/callback
### - SMTP (password reset and notifications - optional)
# NETVISOR_SMTP_RELAY=smtp.gmail.com:587
# NETVISOR_SMTP_USERNAME=your-email@gmail.com
# NETVISOR_SMTP_PASSWORD=your-app-password
# NETVISOR_SMTP_EMAIL=netvisor@yourdomain.tld
### - INTEGRATED DAEMON
NETVISOR_SERVER_URL=http://127.0.0.1:60072
NETVISOR_SERVER_TARGET=127.0.0.1
NETVISOR_BIND_ADDRESS=0.0.0.0
NETVISOR_NAME="netvisor-daemon"
NETVISOR_HEARTBEAT_INTERVAL=30
@@ -116,7 +110,7 @@ After=network.target netvisor-server.service
[Service]
Type=simple
EnvironmentFile=/opt/netvisor/.env
ExecStart=/usr/bin/netvisor-daemon --server-url http://127.0.0.1:60072 --network-id ${NETWORK_ID} --daemon-api-key ${API_KEY}
ExecStart=/usr/bin/netvisor-daemon --server-target http://127.0.0.1 --server-port 60072 --network-id ${NETWORK_ID} --daemon-api-key ${API_KEY}
Restart=always
RestartSec=10
StandardOutput=journal

View File

@@ -54,12 +54,11 @@ msg_ok "Installed Openresty"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
# RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
# grep "tag_name" |
# awk '{print substr($2, 3, length($2)-4) }')
RELEASE="2.13.4"
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v2.13.4"
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager"
msg_info "Setting up Environment"
ln -sf /usr/bin/python3 /usr/bin/python

View File

@@ -17,15 +17,24 @@ msg_info "Installing Dependencies"
$STD apt install -y jsvc
msg_ok "Installed Dependencies"
JAVA_VERSION="21" setup_java
msg_info "Checking CPU Features"
if lscpu | grep -q 'avx'; then
MONGODB_VERSION="8.0"
msg_ok "AVX detected: Using MongoDB 8.0"
MONGO_VERSION="8.0" setup_mongodb
else
msg_error "No AVX detected (CPU-Flag)! We have discontinued support for this. You are welcome to try it manually with a Debian LXC, but due to the many issues with Omada, we currently only support AVX CPUs."
exit 10
MONGO_VERSION="4.4" setup_mongodb
fi
msg_info "Installing Azul Zulu Java"
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc"
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o zulu-repo.deb
$STD dpkg -i zulu-repo.deb
$STD apt update
$STD apt -y install zulu21-jre-headless
msg_ok "Installed Azul Zulu Java"
if ! dpkg -l | grep -q 'libssl1.1'; then
msg_info "Installing libssl (if needed)"
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "/tmp/libssl.deb"
@@ -41,9 +50,14 @@ OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/o
OMADA_PKG=$(basename "$OMADA_URL")
curl -fsSL "$OMADA_URL" -o "$OMADA_PKG"
$STD dpkg -i "$OMADA_PKG"
rm -rf "$OMADA_PKG"
msg_ok "Installed Omada Controller"
motd_ssh
customize
cleanup_lxc
msg_info "Cleaning up"
rm -rf "$OMADA_PKG" zulu-repo.deb
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -44,36 +44,46 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PG_VERSION="16" setup_postgresql
PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db
PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
msg_info "Setting up PostgreSQL database"
DB_NAME=paperlessdb
DB_USER=paperless
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
$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 "Paperless-ngx-Credentials"
echo "Paperless-ngx Database Name: $DB_NAME"
echo "Paperless-ngx Database User: $DB_USER"
echo "Paperless-ngx Database Password: $DB_PASS"
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
echo "Paperless-ngx WebUI User: admin"
echo "Paperless-ngx WebUI Password: $DB_PASS"
} >>~/paperless-ngx.creds
msg_ok "Setup PostgreSQL database"
msg_info "Setup Paperless-ngx"
cd /opt/paperless
rm -rf /opt/paperless/docker
$STD uv sync --all-extras
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
mkdir -p /opt/paperless_data/{consume,data,media,trash}
mkdir -p /opt/paperless/static
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
{
echo ""
echo "Paperless-ngx Secret Key: $SECRET_KEY"
echo "Paperless-ngx WebUI User: admin"
echo "Paperless-ngx WebUI Password: $PG_DB_PASS"
} >>~/paperless-ngx.creds
mkdir -p {consume,data,media,static}
sed -i \
-e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless_data/consume|" \
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless_data/data|" \
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless_data/media|" \
-e "s|#PAPERLESS_EMPTY_TRASH_DIR=|PAPERLESS_EMPTY_TRASH_DIR=/opt/paperless_data/trash|" \
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$PG_DB_NAME|" \
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$PG_DB_USER|" \
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$PG_DB_PASS|" \
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
/opt/paperless/paperless.conf
cd /opt/paperless/src
@@ -87,7 +97,7 @@ msg_info "Setting up admin Paperless-ngx User & Password"
cat <<EOF | uv run -- python /opt/paperless/src/manage.py shell
from django.contrib.auth import get_user_model
UserModel = get_user_model()
user = UserModel.objects.create_user('admin', password='$PG_DB_PASS')
user = UserModel.objects.create_user('admin', password='$DB_PASS')
user.is_superuser = True
user.is_staff = True
user.save()
@@ -98,8 +108,8 @@ msg_info "Installing Natural Language Toolkit (Patience)"
cd /opt/paperless
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data snowball_data
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data stopwords
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab ||
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab || \
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
for policy_file in /etc/ImageMagick-6/policy.xml /etc/ImageMagick-7/policy.xml; do
if [[ -f "$policy_file" ]]; then
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' "$policy_file"
@@ -176,4 +186,11 @@ fi
motd_ssh
customize
cleanup_lxc
msg_info "Cleaning up"
rm -rf /opt/paperless/docker
rm -rf /tmp/ghostscript*
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -1,51 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.passbolt.com/
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 \
apt-transport-https \
python3-certbot-nginx \
debconf-utils
msg_ok "Installed dependencies"
setup_mariadb
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" MARIADB_DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)" setup_mariadb_db
setup_deb822_repo \
"passbolt" \
"https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x3D1A0346C8E1802F774AEF21DE8B853FC155581D" \
"https://download.passbolt.com/ce/debian" \
"buster" \
"stable"
create_self_signed_cert "passbolt"
msg_info "Setting up Passbolt (Patience)"
export DEBIAN_FRONTEND=noninteractive
IP_ADDR=$(hostname -I | awk '{print $1}')
echo passbolt-ce-server passbolt/mysql-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-username string $MARIADB_DB_USER | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-password password $MARIADB_DB_PASS | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-password-repeat password $MARIADB_DB_PASS | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-dbname string $MARIADB_DB_NAME | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration-three-choices select manual | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-domain string $IP_ADDR | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-file string /etc/ssl/passbolt/passbolt.crt | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-key-file string /etc/ssl/passbolt/passbolt.key | debconf-set-selections
$STD apt install -y --no-install-recommends passbolt-ce-server
msg_ok "Setup Passbolt"
motd_ssh
customize
cleanup_lxc

View File

@@ -108,7 +108,7 @@ else
AGENT_SERVICE="zabbix-agent"
fi
systemctl restart zabbix-server apache2
systemctl restart zabbix-server
systemctl enable -q --now zabbix-server $AGENT_SERVICE apache2
msg_ok "Started Services"

View File

@@ -13,16 +13,10 @@ load_functions
verb_ip6() {
set_std_mode # Set STD mode based on VERBOSE
if [ "$IPV6_METHOD" == "none" ] || [ "$DISABLEIPV6" == "yes" ]; then
msg_info "Disabling IPv6"
if [ "$DISABLEIPV6" == "yes" ]; then
$STD sysctl -w net.ipv6.conf.all.disable_ipv6=1
$STD sysctl -w net.ipv6.conf.default.disable_ipv6=1
$STD sysctl -w net.ipv6.conf.lo.disable_ipv6=1
echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >>/etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >>/etc/sysctl.conf
$STD rc-update add sysctl default
msg_ok "Disabled IPv6"
fi
}

View File

@@ -30,6 +30,7 @@ post_to_api() {
"ram_size": $RAM_SIZE,
"os_type": "$var_os",
"os_version": "$var_version",
"disableip6": "",
"nsapp": "$NSAPP",
"method": "$METHOD",
"pve_version": "$pve_version",
@@ -80,6 +81,7 @@ post_to_api_vm() {
"ram_size": $RAM_SIZE,
"os_type": "$var_os",
"os_version": "$var_version",
"disableip6": "",
"nsapp": "$NSAPP",
"method": "$METHOD",
"pve_version": "$pve_version",

View File

@@ -65,7 +65,7 @@ root_check() {
}
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
# Supported: Proxmox VE 8.0.x 8.9.x, 9.0 and 9.1
# Supported: Proxmox VE 8.0.x 8.9.x and 9.0 (NOT 9.1+)
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
@@ -81,12 +81,12 @@ pve_check() {
return 0
fi
# Check for Proxmox VE 9.x: allow 9.0 and 9.1
# Check for Proxmox VE 9.x: allow ONLY 9.0
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1"
if ((MINOR != 0)); then
msg_error "This version of Proxmox VE is not yet supported."
msg_error "Supported: Proxmox VE version 9.0"
exit 1
fi
return 0
@@ -94,7 +94,7 @@ pve_check() {
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0"
exit 1
}

View File

@@ -200,6 +200,7 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
fi
# This checks for the presence of valid Container Storage and Template Storage locations
msg_info "Validating storage"
if ! check_storage_support "rootdir"; then
msg_error "No valid storage found for 'rootdir' [Container]"
exit 1
@@ -209,6 +210,7 @@ if ! check_storage_support "vztmpl"; then
exit 1
fi
#msg_info "Checking template storage"
while true; do
if select_storage template; then
TEMPLATE_STORAGE="$STORAGE_RESULT"

View File

@@ -15,13 +15,9 @@ load_functions
verb_ip6() {
set_std_mode # Set STD mode based on VERBOSE
if [ "$IPV6_METHOD" == "none" ] || [ "$DISABLEIPV6" == "yes" ]; then
msg_info "Disabling IPv6"
$STD echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf
$STD echo "net.ipv6.conf.default.disable_ipv6 = 1" >>/etc/sysctl.conf
$STD echo "net.ipv6.conf.lo.disable_ipv6 = 1" >>/etc/sysctl.conf
if [ "$DISABLEIPV6" == "yes" ]; then
echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf
$STD sysctl -p
msg_ok "Disabled IPv6"
fi
}

View File

@@ -3117,8 +3117,7 @@ function setup_mariadb_db() {
$STD mariadb -u root -e "FLUSH PRIVILEGES;"
local app_name="${APPLICATION,,}"
local CREDS_FILE="${MARIADB_DB_CREDS_FILE:-${HOME}/${app_name}.creds}"
local CREDS_FILE="${MARIADB_DB_CREDS_FILE:-${HOME}/${APPLICATION}.creds}"
{
echo "MariaDB Credentials"
echo "Database: $MARIADB_DB_NAME"
@@ -3806,73 +3805,10 @@ function setup_postgresql() {
local SUITE
case "$DISTRO_CODENAME" in
trixie | forky | sid)
# For Debian Testing/Unstable, try PostgreSQL repo first, fallback to native packages
if verify_repo_available "https://apt.postgresql.org/pub/repos/apt" "trixie-pgdg"; then
SUITE="trixie-pgdg"
setup_deb822_repo \
"pgdg" \
"https://www.postgresql.org/media/keys/ACCC4CF8.asc" \
"https://apt.postgresql.org/pub/repos/apt" \
"$SUITE" \
"main"
if ! $STD apt update; then
msg_warn "Failed to update PostgreSQL repository, falling back to native packages"
SUITE=""
fi
else
SUITE=""
fi
# If no repo or packages not installable, use native Debian packages
if [[ -z "$SUITE" ]] || ! apt-cache show "postgresql-${PG_VERSION}" 2>/dev/null | grep -q "Version:"; then
msg_info "Using native Debian packages for $DISTRO_CODENAME"
# Install ssl-cert dependency if available
if apt-cache search "^ssl-cert$" 2>/dev/null | grep -q .; then
$STD apt install -y ssl-cert 2>/dev/null || true
fi
if ! $STD apt install -y postgresql postgresql-client 2>/dev/null; then
msg_error "Failed to install native PostgreSQL packages"
return 1
fi
if ! command -v psql >/dev/null 2>&1; then
msg_error "PostgreSQL installed but psql command not found"
return 1
fi
# Restore database backup if we upgraded from previous version
if [[ -n "$CURRENT_PG_VERSION" ]]; then
msg_info "Restoring PostgreSQL databases from backup..."
$STD runuser -u postgres -- psql </var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql 2>/dev/null || {
msg_warn "Failed to restore database backup - this may be expected for major version upgrades"
}
fi
$STD systemctl enable --now postgresql 2>/dev/null || true
# Get actual installed version
INSTALLED_VERSION="$(psql -V 2>/dev/null | awk '{print $3}' | cut -d. -f1)"
# Add PostgreSQL binaries to PATH
if ! grep -q '/usr/lib/postgresql' /etc/environment 2>/dev/null; then
echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/'"${INSTALLED_VERSION}"'/bin"' >/etc/environment
fi
cache_installed_version "postgresql" "$INSTALLED_VERSION"
msg_ok "Setup PostgreSQL $INSTALLED_VERSION (native)"
# Install optional modules if specified
if [[ -n "$PG_MODULES" ]]; then
IFS=',' read -ra MODULES <<<"$PG_MODULES"
for module in "${MODULES[@]}"; do
$STD apt install -y "postgresql-${INSTALLED_VERSION}-${module}" 2>/dev/null || true
done
fi
return 0
SUITE="bookworm-pgdg"
fi
;;
*)
@@ -4036,8 +3972,7 @@ function setup_postgresql_db() {
fi
# Save credentials
local app_name="${APPLICATION,,}"
local CREDS_FILE="${PG_DB_CREDS_FILE:-${HOME}/${app_name}.creds}"
local CREDS_FILE="${PG_DB_CREDS_FILE:-${HOME}/${APPLICATION}.creds}"
{
echo "PostgreSQL Credentials"
echo "Database: $PG_DB_NAME"