mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-14 19:23:32 +01:00
Compare commits
63 Commits
2025-12-10
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
| b7f8309a33 | |||
| e22284635a | |||
| c978c49cc9 | |||
| 882babeaf3 | |||
| a411d780ea | |||
| 86a3099452 | |||
| 26a8caa2eb | |||
| 415a2c1215 | |||
| 308a1cb91e | |||
| 1e97124c0c | |||
| 3f8685067f | |||
| 5adf98fada | |||
| 4cd81a9769 | |||
| d83af67c62 | |||
| e9d14b3a15 | |||
| 13cbe0fdbf | |||
| 52db0d94ed | |||
| e38436340b | |||
| 139e86b945 | |||
| a91151549d | |||
| 5ec7d0fd4d | |||
| 02911dc07c | |||
| 1bb3837646 | |||
| 8e6f911963 | |||
| 05a66e3729 | |||
| 5ef41a8ef0 | |||
| 9f264ff4a1 | |||
| 21f55e5cab | |||
| d3f21bf6a0 | |||
| c1a953cd29 | |||
| 909c323b57 | |||
| d03b38ea13 | |||
| 276e1bbf10 | |||
| 6135f1f8a6 | |||
| cf14c1b540 | |||
| e27a68275b | |||
| ec433b3abc | |||
| b4db6a6c70 | |||
| 11a407b54f | |||
| af5172a8cf | |||
| 115ea10ecd | |||
| 8549f2a84d | |||
| c80c2a2ecb | |||
| 7255edc21b | |||
| 18d620705d | |||
| 2b1f62e74f | |||
| f5b0c03362 | |||
| 1afefd20e9 | |||
| 723f9d63d6 | |||
| 1ea0172b75 | |||
| ef63f853b4 | |||
| 179233810e | |||
| 748c08ddb5 | |||
| de944792de | |||
| 091271c8d6 | |||
| 7fae5d71f5 | |||
| 3bc45aa0a2 | |||
| 313b1b0b00 | |||
| 3ad0777048 | |||
| 7dcb2fa985 | |||
| 6e86fa4c3b | |||
| 747e472d1f | |||
| 38a9ad8e09 |
75
CHANGELOG.md
75
CHANGELOG.md
@ -10,8 +10,83 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-12-14
|
||||
|
||||
## 2025-12-13
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Umami: Use `pnpm` [@tremor021](https://github.com/tremor021) ([#9937](https://github.com/community-scripts/ProxmoxVE/pull/9937))
|
||||
- Tunarr: Switch to prebuild archive [@tremor021](https://github.com/tremor021) ([#9920](https://github.com/community-scripts/ProxmoxVE/pull/9920))
|
||||
- [HOTFIX] NetVisor: backup OIDC config before update [@vhsdream](https://github.com/vhsdream) ([#9895](https://github.com/community-scripts/ProxmoxVE/pull/9895))
|
||||
- Update OPNsense download URL to version 14.3 [@jaredcarling42-design](https://github.com/jaredcarling42-design) ([#9899](https://github.com/community-scripts/ProxmoxVE/pull/9899))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Add optional TLS setup to Valkey installer [@pshankinclarke](https://github.com/pshankinclarke) ([#9789](https://github.com/community-scripts/ProxmoxVE/pull/9789))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Spoolman [@tremor021](https://github.com/tremor021) ([#9873](https://github.com/community-scripts/ProxmoxVE/pull/9873))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- AdGuardHome-Sync ([#9783](https://github.com/community-scripts/ProxmoxVE/pull/9783))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update category value in glance.json and adguard-home.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9932](https://github.com/community-scripts/ProxmoxVE/pull/9932))
|
||||
- Change category ID from 6 to 3 in coolify.json and dokploy.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9930](https://github.com/community-scripts/ProxmoxVE/pull/9930))
|
||||
|
||||
## 2025-12-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Wallabag ([#9904](https://github.com/community-scripts/ProxmoxVE/pull/9904))
|
||||
- InvoiceNinja ([#9905](https://github.com/community-scripts/ProxmoxVE/pull/9905))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Pangolin: URL fixes [@tremor021](https://github.com/tremor021) ([#9902](https://github.com/community-scripts/ProxmoxVE/pull/9902))
|
||||
|
||||
## 2025-12-11
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Speedtest-Tracker ([#9802](https://github.com/community-scripts/ProxmoxVE/pull/9802))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- dokploy: require unprivileged LXC environment [@MickLesk](https://github.com/MickLesk) ([#9891](https://github.com/community-scripts/ProxmoxVE/pull/9891))
|
||||
- Update NetVisor repo information [@vhsdream](https://github.com/vhsdream) ([#9864](https://github.com/community-scripts/ProxmoxVE/pull/9864))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Syncthing: Various fixes [@tremor021](https://github.com/tremor021) ([#9872](https://github.com/community-scripts/ProxmoxVE/pull/9872))
|
||||
- Sonarr: Fix standard [@tremor021](https://github.com/tremor021) ([#9874](https://github.com/community-scripts/ProxmoxVE/pull/9874))
|
||||
- Refactor: Snipe-IT [@tremor021](https://github.com/tremor021) ([#9876](https://github.com/community-scripts/ProxmoxVE/pull/9876))
|
||||
- Technitium DNS: Various fixes [@tremor021](https://github.com/tremor021) ([#9863](https://github.com/community-scripts/ProxmoxVE/pull/9863))
|
||||
- SonarQube: Fixes [@tremor021](https://github.com/tremor021) ([#9875](https://github.com/community-scripts/ProxmoxVE/pull/9875))
|
||||
- endurain: remove unneeded deps [@johanngrobe](https://github.com/johanngrobe) ([#9855](https://github.com/community-scripts/ProxmoxVE/pull/9855))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: skip -features flag when empty [@MickLesk](https://github.com/MickLesk) ([#9871](https://github.com/community-scripts/ProxmoxVE/pull/9871))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- paperless: add note on website (uv usage) [@MickLesk](https://github.com/MickLesk) ([#9833](https://github.com/community-scripts/ProxmoxVE/pull/9833))
|
||||
|
||||
## 2025-12-10
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
|
||||
6
ct/headers/invoiceninja
Normal file
6
ct/headers/invoiceninja
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ _ ___ _
|
||||
/ _/___ _ ______ (_)_______ / | / (_)___ (_)___ _
|
||||
/ // __ \ | / / __ \/ / ___/ _ \/ |/ / / __ \ / / __ `/
|
||||
_/ // / / / |/ / /_/ / / /__/ __/ /| / / / / / / / /_/ /
|
||||
/___/_/ /_/|___/\____/_/\___/\___/_/ |_/_/_/ /_/_/ /\__,_/
|
||||
/___/
|
||||
6
ct/headers/speedtest-tracker
Normal file
6
ct/headers/speedtest-tracker
Normal file
@ -0,0 +1,6 @@
|
||||
_____ ____ __ ______ __
|
||||
/ ___/____ ___ ___ ____/ / /____ _____/ /_ /_ __/________ ______/ /_____ _____
|
||||
\__ \/ __ \/ _ \/ _ \/ __ / __/ _ \/ ___/ __/_____/ / / ___/ __ `/ ___/ //_/ _ \/ ___/
|
||||
___/ / /_/ / __/ __/ /_/ / /_/ __(__ ) /_/_____/ / / / / /_/ / /__/ ,< / __/ /
|
||||
/____/ .___/\___/\___/\__,_/\__/\___/____/\__/ /_/ /_/ \__,_/\___/_/|_|\___/_/
|
||||
/_/
|
||||
6
ct/headers/wallabag
Normal file
6
ct/headers/wallabag
Normal file
@ -0,0 +1,6 @@
|
||||
_ __ ____ __
|
||||
| | / /___ _/ / /___ _/ /_ ____ _____ _
|
||||
| | /| / / __ `/ / / __ `/ __ \/ __ `/ __ `/
|
||||
| |/ |/ / /_/ / / / /_/ / /_/ / /_/ / /_/ /
|
||||
|__/|__/\__,_/_/_/\__,_/_.___/\__,_/\__, /
|
||||
/____/
|
||||
79
ct/invoiceninja.sh
Normal file
79
ct/invoiceninja.sh
Normal file
@ -0,0 +1,79 @@
|
||||
#!/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://invoiceninja.com/
|
||||
|
||||
APP="InvoiceNinja"
|
||||
var_tags="${var_tags:-invoicing;business}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
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/invoiceninja ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "invoiceninja" "invoiceninja/invoiceninja"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop supervisor nginx php8.4-fpm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /tmp/invoiceninja_backup
|
||||
cp /opt/invoiceninja/.env /tmp/invoiceninja_backup/
|
||||
cp -r /opt/invoiceninja/storage /tmp/invoiceninja_backup/ 2>/dev/null || true
|
||||
cp -r /opt/invoiceninja/public/storage /tmp/invoiceninja_backup/public_storage 2>/dev/null || true
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
cp /tmp/invoiceninja_backup/.env /opt/invoiceninja/
|
||||
cp -r /tmp/invoiceninja_backup/storage/* /opt/invoiceninja/storage/ 2>/dev/null || true
|
||||
cp -r /tmp/invoiceninja_backup/public_storage/* /opt/invoiceninja/public/storage/ 2>/dev/null || true
|
||||
rm -rf /tmp/invoiceninja_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/invoiceninja
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan optimize
|
||||
chown -R www-data:www-data /opt/invoiceninja
|
||||
chmod -R 755 /opt/invoiceninja/storage
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start php8.4-fpm nginx supervisor
|
||||
msg_ok "Started 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}:8080/setup${CL}"
|
||||
@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mayanayza/netvisor
|
||||
# Source: https://github.com/netvisor-io/netvisor
|
||||
|
||||
APP="NetVisor"
|
||||
var_tags="${var_tags:-analytics}"
|
||||
@ -29,16 +29,19 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "netvisor" "mayanayza/netvisor"; then
|
||||
if check_for_gh_release "netvisor" "netvisor-io/netvisor"; then
|
||||
msg_info "Stopping services"
|
||||
systemctl stop netvisor-daemon netvisor-server
|
||||
msg_ok "Stopped services"
|
||||
|
||||
msg_info "Backing up configurations"
|
||||
cp /opt/netvisor/.env /opt/netvisor.env.bak
|
||||
if [[ -f /opt/netvisor/oidc.toml ]]; then
|
||||
cp /opt/netvisor/oidc.toml /opt/netvisor.oidc.toml
|
||||
fi
|
||||
msg_ok "Backed up configurations"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "mayanayza/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netvisor" "netvisor-io/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
|
||||
if ! dpkg -l | grep -q "pkg-config"; then
|
||||
$STD apt install -y pkg-config
|
||||
@ -49,7 +52,10 @@ function update_script() {
|
||||
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
|
||||
mv /opt/netvisor.env.bak /opt/netvisor/.env
|
||||
if [[ -f /opt/netvisor.oidc.toml ]]; then
|
||||
mv /opt/netvisor.oidc.toml /opt/netvisor/oidc.toml
|
||||
fi
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
if ! grep -q "PUBLIC_URL" /opt/netvisor/.env; then
|
||||
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/netvisor/.env
|
||||
|
||||
@ -36,16 +36,16 @@ function update_script() {
|
||||
systemctl stop nginx
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
msg_info "Creating Backup"
|
||||
mv /opt/snipe-it /opt/snipe-it-backup
|
||||
msg_ok "Backup created"
|
||||
msg_ok "Created Backup"
|
||||
|
||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||
setup_composer
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Snipe-IT"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||
@ -63,7 +63,7 @@ function update_script() {
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
rm -rf /opt/snipe-it-backup
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Snipe-IT"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start nginx
|
||||
|
||||
@ -33,30 +33,30 @@ function update_script() {
|
||||
systemctl stop sonarqube
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating backup"
|
||||
msg_info "Creating Backup"
|
||||
BACKUP_DIR="/opt/sonarqube-backup"
|
||||
mv /opt/sonarqube ${BACKUP_DIR}
|
||||
msg_ok "Backup created"
|
||||
msg_ok "Created Backup"
|
||||
|
||||
msg_info "Installing sonarqube"
|
||||
msg_info "Updating SonarQube"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-* /opt/sonarqube
|
||||
msg_ok "Installed sonarqube"
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
msg_info "Restoring backup"
|
||||
msg_info "Restoring Backup"
|
||||
cp -rp ${BACKUP_DIR}/data/ /opt/sonarqube/data/
|
||||
cp -rp ${BACKUP_DIR}/extensions/ /opt/sonarqube/extensions/
|
||||
cp -p ${BACKUP_DIR}/conf/sonar.properties /opt/sonarqube/conf/sonar.properties
|
||||
rm -rf ${BACKUP_DIR}
|
||||
chown -R sonarqube:sonarqube /opt/sonarqube
|
||||
msg_ok "Backup restored"
|
||||
msg_ok "Restored Backup"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start sonarqube
|
||||
msg_ok "Service started"
|
||||
msg_ok "Service Started"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@ -27,6 +27,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop sonarr
|
||||
msg_ok "Stopped Service"
|
||||
@ -38,6 +39,7 @@ function update_script() {
|
||||
mv Sonarr /opt
|
||||
rm -rf SonarrV4.tar.gz
|
||||
msg_ok "Updated Sonarr"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start sonarr
|
||||
msg_ok "Started Service"
|
||||
|
||||
83
ct/speedtest-tracker.sh
Normal file
83
ct/speedtest-tracker.sh
Normal file
@ -0,0 +1,83 @@
|
||||
#!/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: AlphaLawless
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/alexjustesen/speedtest-tracker
|
||||
|
||||
APP="Speedtest-Tracker"
|
||||
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/speedtest-tracker ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker"; then
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop speedtest-tracker
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating Speedtest CLI"
|
||||
$STD apt update
|
||||
$STD apt --only-upgrade install -y speedtest
|
||||
msg_ok "Updated Speedtest CLI"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp -r /opt/speedtest-tracker /opt/speedtest-tracker-backup
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker"
|
||||
|
||||
msg_info "Updating Speedtest Tracker"
|
||||
cp -r /opt/speedtest-tracker-backup/.env /opt/speedtest-tracker/.env
|
||||
cd /opt/speedtest-tracker
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --optimize-autoloader --no-dev
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan view:clear
|
||||
chown -R www-data:www-data /opt/speedtest-tracker
|
||||
chmod -R 755 /opt/speedtest-tracker/storage
|
||||
chmod -R 755 /opt/speedtest-tracker/bootstrap/cache
|
||||
msg_ok "Updated Speedtest Tracker"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start speedtest-tracker
|
||||
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}"
|
||||
@ -27,32 +27,29 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "spoolman" "Donkie/Spoolman"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop spoolman
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
cd /opt
|
||||
rm -rf spoolman_bak
|
||||
mv spoolman spoolman_bak
|
||||
curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip" -o $(basename "https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip")
|
||||
$STD unzip spoolman.zip -d spoolman
|
||||
cd spoolman
|
||||
msg_info "Creating Backup"
|
||||
[ -d /opt/spoolman_bak ] && rm -rf /opt/spoolman_bak
|
||||
mv /opt/spoolman /opt/spoolman_bak
|
||||
msg_ok "Created Backup"
|
||||
|
||||
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
|
||||
msg_info "Updating Spoolman"
|
||||
cd /opt/spoolman
|
||||
$STD pip3 install -r requirements.txt
|
||||
curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env"
|
||||
rm -rf /opt/spoolman.zip
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
cp /opt/spoolman_bak/.env /opt/spoolman
|
||||
msg_ok "Updated Spoolman"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start spoolman
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@ -27,9 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
|
||||
msg_info "Updating Syncthing"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -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:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -30,6 +30,14 @@ function update_script() {
|
||||
|
||||
if is_package_installed "aspnetcore-runtime-8.0"; then
|
||||
$STD apt remove -y aspnetcore-runtime-8.0
|
||||
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
[ -f /usr/share/keyrings/microsoft-prod.gpg ] && rm -f /usr/share/keyrings/microsoft-prod.gpg
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie" \
|
||||
"main"
|
||||
$STD apt install -y aspnetcore-runtime-9.0
|
||||
fi
|
||||
|
||||
|
||||
@ -40,7 +40,9 @@ function update_script() {
|
||||
msg_error "Backup failed: /usr/local/share/tunarr does not exist"
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz"
|
||||
cd /opt/tunarr
|
||||
mv tunarr* tunarr
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tunarr
|
||||
|
||||
@ -37,8 +37,8 @@ function update_script() {
|
||||
|
||||
msg_info "Updating Umami"
|
||||
cd /opt/umami
|
||||
$STD yarn install
|
||||
$STD yarn run build
|
||||
$STD pnpm install
|
||||
$STD pnpm run build
|
||||
msg_ok "Updated Umami"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
71
ct/wallabag.sh
Normal file
71
ct/wallabag.sh
Normal file
@ -0,0 +1,71 @@
|
||||
#!/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://wallabag.org/
|
||||
|
||||
APP="Wallabag"
|
||||
var_tags="${var_tags:-productivity;read-it-later}"
|
||||
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/wallabag ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "wallabag" "wallabag/wallabag"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx php8.3-fpm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/wallabag/app/config/parameters.yml /tmp/wallabag_parameters.yml.bak
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz"
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
cp /tmp/wallabag_parameters.yml.bak /opt/wallabag/app/config/parameters.yml
|
||||
rm -f /tmp/wallabag_parameters.yml.bak
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/wallabag
|
||||
$STD php bin/console cache:clear --env=prod
|
||||
$STD php bin/console doctrine:migrations:migrate --env=prod --no-interaction
|
||||
chown -R www-data:www-data /opt/wallabag
|
||||
chmod -R 755 /opt/wallabag/{var,web/assets}
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start php8.3-fpm nginx
|
||||
msg_ok "Started 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}:8000${CL}"
|
||||
59
frontend/public/json/adguardhome-sync.json
Normal file
59
frontend/public/json/adguardhome-sync.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"name": "AdGuardHome-Sync",
|
||||
"slug": "adguardhome-sync",
|
||||
"categories": [
|
||||
5
|
||||
],
|
||||
"date_created": "2025-12-13",
|
||||
"type": "addon",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/bakito/adguardhome-sync",
|
||||
"website": "https://github.com/bakito/adguardhome-sync",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adguardhome-sync.webp",
|
||||
"config_path": "/opt/adguardhome-sync/adguardhome-sync.yaml",
|
||||
"description": "Synchronize AdGuardHome config to one or multiple replica instances. Syncs General Settings, Filters, Rewrites, Services, Clients, DNS Config, DHCP Config and Theme.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "tools/addon/adguardhome-sync.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "tools/addon/adguardhome-sync.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Edit /opt/adguardhome-sync/adguardhome-sync.yaml to configure your AdGuardHome instances",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Origin = Primary instance, Replicas = Instances to sync to",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Update with: update_adguardhome-sync",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "Coolify",
|
||||
"slug": "coolify",
|
||||
"categories": [
|
||||
6
|
||||
3
|
||||
],
|
||||
"date_created": "2025-12-09",
|
||||
"type": "ct",
|
||||
|
||||
@ -2,12 +2,12 @@
|
||||
"name": "Dokploy",
|
||||
"slug": "dokploy",
|
||||
"categories": [
|
||||
6
|
||||
3
|
||||
],
|
||||
"date_created": "2025-12-09",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"privileged": true,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://docs.dokploy.com/",
|
||||
"config_path": "/etc/dokploy",
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "Glance",
|
||||
"slug": "glance",
|
||||
"categories": [
|
||||
9
|
||||
10
|
||||
],
|
||||
"date_created": "2024-12-02",
|
||||
"type": "ct",
|
||||
|
||||
48
frontend/public/json/invoiceninja.json
Normal file
48
frontend/public/json/invoiceninja.json
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "InvoiceNinja",
|
||||
"slug": "invoiceninja",
|
||||
"categories": [
|
||||
3
|
||||
],
|
||||
"date_created": "2025-12-12",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://invoiceninja.github.io/selfhost.html",
|
||||
"config_path": "/opt/invoiceninja/.env",
|
||||
"website": "https://invoiceninja.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/invoice-ninja.webp",
|
||||
"description": "Invoice Ninja is a free, open-source invoicing, quotes, expenses and time-tracking application for freelancers and businesses. Features include recurring invoices, online payments, client portal, and multi-company support.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/invoiceninja.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "First visit http://IP:8080/setup to complete the initial configuration",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Database credentials are stored in ~/invoiceninja.creds",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Configure SMTP settings in /opt/invoiceninja/.env for email functionality",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -9,9 +9,9 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 60072,
|
||||
"documentation": "https://github.com/mayanayza/netvisor",
|
||||
"documentation": "https://github.com/netvisor-io/netvisor",
|
||||
"config_path": "/opt/netvisor/.env, OIDC: /opt/netvisor/oidc.toml",
|
||||
"website": "https://github.com/mayanayza/netvisor",
|
||||
"website": "https://netvisor.io",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/netvisor.png",
|
||||
"description": "Automatically discover and visually document network infrastructure",
|
||||
"install_methods": [
|
||||
|
||||
@ -39,6 +39,10 @@
|
||||
{
|
||||
"text": "Script installs English as default OCR language. To install additional languages, use `apt-get install tesseract-ocr-[lang]`, where [lang] is the language code (e.g. `apt-get install tesseract-ocr-deu`).",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Paperless-NGX use uv, so all calls need to start with `uv run` f.e. `uv run python3 manage.py document_exporter $path` instead `python3 manage.py`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
35
frontend/public/json/speedtest-tracker.json
Normal file
35
frontend/public/json/speedtest-tracker.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Speedtest-Tracker",
|
||||
"slug": "speedtest-tracker",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-12-11",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.speedtest-tracker.dev/",
|
||||
"website": "https://github.com/alexjustesen/speedtest-tracker",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/speedtest-tracker.webp",
|
||||
"config_path": "/opt/speedtest-tracker/.env",
|
||||
"description": "Speedtest Tracker is a self-hosted application that runs scheduled speed tests using the Ookla Speedtest CLI and saves the results to a database for historical tracking and visualization.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/speedtest-tracker.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin@example.com",
|
||||
"password": "password"
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@ -1,69 +1,334 @@
|
||||
[
|
||||
{
|
||||
"name": "WGDashboard/WGDashboard",
|
||||
"version": "v4.3.0.3",
|
||||
"date": "2025-12-10T23:05:31Z"
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.14",
|
||||
"date": "2025-12-14T00:04:18Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.23.0-alpha.32",
|
||||
"date": "2025-12-10T21:26:24Z"
|
||||
"name": "martabal/qbittorrent-exporter",
|
||||
"version": "v1.13.2",
|
||||
"date": "2025-12-13T22:59:03Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.92.2",
|
||||
"date": "2025-12-10T21:20:31Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.13.3-rc1",
|
||||
"date": "2025-12-10T20:59:27Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.56.x",
|
||||
"date": "2025-12-10T20:09:24Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.9.dev5",
|
||||
"date": "2025-12-10T16:52:35Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.8.0",
|
||||
"date": "2025-12-10T16:44:33Z"
|
||||
"name": "diced/zipline",
|
||||
"version": "v4.4.0",
|
||||
"date": "2025-12-13T22:49:07Z"
|
||||
},
|
||||
{
|
||||
"name": "netvisor-io/netvisor",
|
||||
"version": "v0.11.6",
|
||||
"date": "2025-12-10T16:40:51Z"
|
||||
"version": "v0.11.9",
|
||||
"date": "2025-12-13T21:48:17Z"
|
||||
},
|
||||
{
|
||||
"name": "karlomikus/bar-assistant",
|
||||
"version": "v5.10.0",
|
||||
"date": "2025-12-13T20:17:27Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.13.1",
|
||||
"date": "2025-12-13T18:00:27Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2025-12-14",
|
||||
"date": "2025-12-13T16:39:17Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v1.1.4-beta",
|
||||
"date": "2025-12-13T15:59:06Z"
|
||||
},
|
||||
{
|
||||
"name": "WGDashboard/WGDashboard",
|
||||
"version": "v4.3.1",
|
||||
"date": "2025-12-13T15:38:37Z"
|
||||
},
|
||||
{
|
||||
"name": "alam00000/bentopdf",
|
||||
"version": "v1.11.2",
|
||||
"date": "2025-12-13T15:28:49Z"
|
||||
},
|
||||
{
|
||||
"name": "autobrr/autobrr",
|
||||
"version": "v1.71.0",
|
||||
"date": "2025-12-13T14:38:09Z"
|
||||
},
|
||||
{
|
||||
"name": "karakeep-app/karakeep",
|
||||
"version": "cli/v0.29.1",
|
||||
"date": "2025-12-13T13:55:51Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.0.2",
|
||||
"date": "2025-12-13T13:34:22Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@10.1.4",
|
||||
"date": "2025-12-13T12:01:58Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.88.0",
|
||||
"date": "2025-12-13T09:36:24Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.13.4-rc0",
|
||||
"date": "2025-12-13T00:29:01Z"
|
||||
},
|
||||
{
|
||||
"name": "Dokploy/dokploy",
|
||||
"version": "v0.26.2",
|
||||
"date": "2025-12-13T07:48:09Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.445",
|
||||
"date": "2025-12-13T05:56:19Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.9",
|
||||
"date": "2025-11-28T20:36:20Z"
|
||||
},
|
||||
{
|
||||
"name": "release-argus/Argus",
|
||||
"version": "0.28.0",
|
||||
"date": "2025-12-13T04:44:37Z"
|
||||
},
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.7.0",
|
||||
"date": "2025-12-13T01:20:58Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5",
|
||||
"date": "2025-12-13T00:27:05Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.20.2",
|
||||
"date": "2025-12-12T23:47:48Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.13.1",
|
||||
"date": "2025-12-12T21:34:22Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.27",
|
||||
"date": "2025-12-12T20:54:32Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v2.8.0",
|
||||
"date": "2025-12-12T20:25:00Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.2.0",
|
||||
"date": "2025-12-12T19:52:05Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.46.0",
|
||||
"date": "2025-12-12T19:23:36Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.57.x",
|
||||
"date": "2025-12-12T19:08:53Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.12.3",
|
||||
"date": "2025-12-12T18:12:39Z"
|
||||
},
|
||||
{
|
||||
"name": "docmost/docmost",
|
||||
"version": "v0.24.0",
|
||||
"date": "2025-12-12T18:05:49Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.14.1",
|
||||
"date": "2025-12-12T17:37:58Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.11.5",
|
||||
"date": "2025-12-09T17:54:33Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.7",
|
||||
"date": "2025-12-01T08:14:11Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.2",
|
||||
"date": "2025-12-03T16:12:05Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.6",
|
||||
"date": "2025-11-24T15:30:21Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.30.0",
|
||||
"date": "2025-12-12T14:03:52Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.123.5-exp.0",
|
||||
"date": "2025-12-10T16:35:50Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.11.8",
|
||||
"date": "2025-11-21T17:06:07Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.7.5",
|
||||
"date": "2025-12-12T13:54:02Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.09",
|
||||
"date": "2025-12-12T13:06:36Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.2.0.102-2.2.0.102_canary_2025-12-12",
|
||||
"date": "2025-12-12T12:03:15Z"
|
||||
},
|
||||
{
|
||||
"name": "passbolt/passbolt_api",
|
||||
"version": "v5.8.0-test.2",
|
||||
"date": "2025-12-12T11:43:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.4.3",
|
||||
"date": "2025-12-12T11:35:00Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.9.dev6",
|
||||
"date": "2025-12-12T11:00:12Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "4.0.1-rc.1",
|
||||
"date": "2025-12-12T10:52:28Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.3.7",
|
||||
"date": "2025-12-12T09:13:40Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.106.3",
|
||||
"date": "2025-12-01T22:06:12Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v13.1.5",
|
||||
"date": "2025-12-12T03:30:50Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
"version": "v3.0.3",
|
||||
"date": "2025-12-12T02:39:27Z"
|
||||
},
|
||||
{
|
||||
"name": "motioneye-project/motioneye",
|
||||
"version": "0.43.1",
|
||||
"date": "2025-12-11T22:45:52Z"
|
||||
},
|
||||
{
|
||||
"name": "coollabsio/coolify",
|
||||
"version": "v4.0.0-beta.454",
|
||||
"date": "2025-12-11T20:37:05Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.30.22",
|
||||
"date": "2025-12-11T18:02:06Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "prototype-v1.30.0-network-topology.2",
|
||||
"date": "2025-12-11T16:47:51Z"
|
||||
},
|
||||
{
|
||||
"name": "endurain-project/endurain",
|
||||
"version": "v0.16.2",
|
||||
"date": "2025-12-11T15:16:01Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.1.3",
|
||||
"date": "2025-12-11T13:31:56Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.6rc1",
|
||||
"date": "2025-12-11T12:01:51Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.62.24",
|
||||
"date": "2025-12-11T09:54:59Z"
|
||||
},
|
||||
{
|
||||
"name": "linkwarden/linkwarden",
|
||||
"version": "v2.13.2",
|
||||
"date": "2025-12-11T06:31:24Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.5",
|
||||
"date": "2025-09-27T20:59:46Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.33.1",
|
||||
"date": "2025-12-11T01:59:13Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.92.2",
|
||||
"date": "2025-12-10T21:20:31Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.8.0",
|
||||
"date": "2025-12-10T16:44:33Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.541",
|
||||
"date": "2025-12-10T15:57:13Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.7.2",
|
||||
"date": "2025-12-10T12:52:31Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/alertmanager",
|
||||
"version": "v0.29.0",
|
||||
"date": "2025-11-04T15:00:07Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.30.0-rc2",
|
||||
"date": "2025-12-10T14:58:00Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.72.1",
|
||||
@ -74,86 +339,31 @@
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@10.1.2",
|
||||
"date": "2025-12-10T13:59:19Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.211.1",
|
||||
"date": "2025-12-10T12:25:19Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.1.2",
|
||||
"date": "2025-12-10T11:46:48Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "353",
|
||||
"date": "2025-12-10T10:55:50Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v13.1.4",
|
||||
"date": "2025-12-10T10:24:13Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.87",
|
||||
"date": "2025-12-06T07:36:26Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.2.15rc1",
|
||||
"date": "2025-12-10T10:20:02Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.11.8",
|
||||
"date": "2025-11-21T17:06:07Z"
|
||||
},
|
||||
{
|
||||
"name": "Dokploy/dokploy",
|
||||
"version": "v0.26.1",
|
||||
"date": "2025-12-10T06:53:36Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.429",
|
||||
"date": "2025-12-10T05:56:09Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.3.2-beta",
|
||||
"date": "2025-12-10T05:42:43Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.11.5",
|
||||
"date": "2025-12-09T17:54:33Z"
|
||||
},
|
||||
{
|
||||
"name": "miniflux/v2",
|
||||
"version": "2.2.15",
|
||||
"date": "2025-12-10T01:52:14Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5",
|
||||
"date": "2025-12-10T00:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "comfyanonymous/ComfyUI",
|
||||
"version": "v0.4.0",
|
||||
@ -174,11 +384,6 @@
|
||||
"version": "v25.11.6",
|
||||
"date": "2025-12-09T21:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.12.2",
|
||||
"date": "2025-12-09T20:39:50Z"
|
||||
},
|
||||
{
|
||||
"name": "valkey-io/valkey",
|
||||
"version": "9.0.1",
|
||||
@ -214,21 +419,11 @@
|
||||
"version": "v0.11.3",
|
||||
"date": "2025-12-09T14:41:10Z"
|
||||
},
|
||||
{
|
||||
"name": "release-argus/Argus",
|
||||
"version": "0.27.0",
|
||||
"date": "2025-12-09T14:33:38Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "v2025.12.0",
|
||||
"date": "2025-12-09T14:30:23Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.7",
|
||||
"date": "2025-12-01T08:14:11Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/operating-system",
|
||||
"version": "16.3",
|
||||
@ -239,21 +434,11 @@
|
||||
"version": "6.16.1+251125",
|
||||
"date": "2025-12-09T12:27:31Z"
|
||||
},
|
||||
{
|
||||
"name": "joaovitoriasilva/endurain",
|
||||
"version": "v0.16.0",
|
||||
"date": "2025-12-09T12:26:46Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.4.7",
|
||||
"date": "2025-12-09T11:44:49Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.27-rc0",
|
||||
"date": "2025-12-09T04:34:48Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2025.12.09",
|
||||
@ -274,16 +459,6 @@
|
||||
"version": "4.5.5",
|
||||
"date": "2025-10-24T11:12:22Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.12.2",
|
||||
"date": "2025-12-08T21:36:42Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.13.0-rc.0",
|
||||
"date": "2025-12-08T21:17:44Z"
|
||||
},
|
||||
{
|
||||
"name": "hansmi/prometheus-paperless-exporter",
|
||||
"version": "v0.0.9",
|
||||
@ -294,26 +469,6 @@
|
||||
"version": "v1.37.0",
|
||||
"date": "2025-12-08T20:36:16Z"
|
||||
},
|
||||
{
|
||||
"name": "pommee/goaway",
|
||||
"version": "v0.62.23",
|
||||
"date": "2025-12-08T20:30:54Z"
|
||||
},
|
||||
{
|
||||
"name": "TuroYT/snowshare",
|
||||
"version": "v1.1.2",
|
||||
"date": "2025-12-08T20:29:51Z"
|
||||
},
|
||||
{
|
||||
"name": "coollabsio/coolify",
|
||||
"version": "v4.0.0-beta.453",
|
||||
"date": "2025-12-08T20:23:48Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.45.3",
|
||||
"date": "2025-12-08T16:11:16Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.71",
|
||||
@ -324,31 +479,11 @@
|
||||
"version": "2.2.1",
|
||||
"date": "2025-12-08T12:01:34Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.08",
|
||||
"date": "2025-12-08T10:13:51Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
"date": "2025-12-08T09:36:54Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.9",
|
||||
"date": "2025-11-28T20:36:20Z"
|
||||
},
|
||||
{
|
||||
"name": "maxdorninger/MediaManager",
|
||||
"version": "v1.10.0",
|
||||
"date": "2025-12-07T23:41:51Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.12-dev",
|
||||
"date": "2025-12-07T22:56:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.3.0",
|
||||
@ -374,11 +509,6 @@
|
||||
"version": "2.222.0",
|
||||
"date": "2025-12-07T09:09:47Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
"version": "v2.20.1",
|
||||
"date": "2025-12-07T01:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "sysadminsmedia/homebox",
|
||||
"version": "v0.22.0-rc.2",
|
||||
@ -439,11 +569,6 @@
|
||||
"version": "v1.3.1",
|
||||
"date": "2025-12-05T19:12:48Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.13.2",
|
||||
"date": "2025-12-05T16:03:08Z"
|
||||
},
|
||||
{
|
||||
"name": "community-scripts/ProxmoxVE-Local",
|
||||
"version": "v0.5.2",
|
||||
@ -459,26 +584,11 @@
|
||||
"version": "e6.1.0-streams.1",
|
||||
"date": "2025-12-05T12:27:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.4.2",
|
||||
"date": "2025-12-05T12:20:54Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.2",
|
||||
"date": "2025-12-03T16:12:05Z"
|
||||
},
|
||||
{
|
||||
"name": "traefik/traefik",
|
||||
"version": "v3.6.4",
|
||||
"date": "2025-12-05T09:58:17Z"
|
||||
},
|
||||
{
|
||||
"name": "alam00000/bentopdf",
|
||||
"version": "v1.10.5",
|
||||
"date": "2025-12-05T09:28:50Z"
|
||||
},
|
||||
{
|
||||
"name": "transmission/transmission",
|
||||
"version": "4.0.1-beta.1",
|
||||
@ -494,15 +604,10 @@
|
||||
"version": "v2.10.2",
|
||||
"date": "2025-08-23T03:10:31Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.30.20",
|
||||
"date": "2025-12-04T18:17:47Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "coverity-w49-4.14.2",
|
||||
"date": "2025-12-02T14:01:48Z"
|
||||
"version": "coverity-w50-4.14.2",
|
||||
"date": "2025-12-04T15:06:55Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
@ -524,16 +629,6 @@
|
||||
"version": "11.0.4",
|
||||
"date": "2025-12-04T09:26:37Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "testing",
|
||||
"date": "2025-12-04T08:39:16Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v1.2.0-experimental-sql-indexing",
|
||||
"date": "2025-12-04T01:35:46Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.36.2",
|
||||
@ -549,11 +644,6 @@
|
||||
"version": "v25.12.0",
|
||||
"date": "2025-12-03T17:45:09Z"
|
||||
},
|
||||
{
|
||||
"name": "karakeep-app/karakeep",
|
||||
"version": "v0.29.1",
|
||||
"date": "2025-12-03T16:56:18Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.2.10",
|
||||
@ -579,11 +669,6 @@
|
||||
"version": "v0.17.0",
|
||||
"date": "2025-12-03T00:15:51Z"
|
||||
},
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.6.1",
|
||||
"date": "2025-12-02T22:54:10Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.50",
|
||||
@ -604,11 +689,6 @@
|
||||
"version": "v5.0.86-docker",
|
||||
"date": "2025-12-02T21:16:02Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v2.8.0",
|
||||
"date": "2025-12-02T20:22:32Z"
|
||||
},
|
||||
{
|
||||
"name": "WordPress/WordPress",
|
||||
"version": "6.9",
|
||||
@ -649,26 +729,11 @@
|
||||
"version": "3000.7.0",
|
||||
"date": "2025-12-01T23:29:47Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.20.1",
|
||||
"date": "2025-12-01T22:45:34Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.106.3",
|
||||
"date": "2025-12-01T22:06:12Z"
|
||||
},
|
||||
{
|
||||
"name": "C4illin/ConvertX",
|
||||
"version": "v0.16.0",
|
||||
"date": "2025-12-01T21:35:19Z"
|
||||
},
|
||||
{
|
||||
"name": "martabal/qbittorrent-exporter",
|
||||
"version": "v1.13.0",
|
||||
"date": "2025-12-01T21:06:38Z"
|
||||
},
|
||||
{
|
||||
"name": "slskd/slskd",
|
||||
"version": "0.24.1",
|
||||
@ -689,11 +754,6 @@
|
||||
"version": "1.11.5",
|
||||
"date": "2025-12-01T12:58:46Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.0.0",
|
||||
"date": "2025-12-01T09:33:08Z"
|
||||
},
|
||||
{
|
||||
"name": "photoprism/photoprism",
|
||||
"version": "251130-b3068414c",
|
||||
@ -749,11 +809,6 @@
|
||||
"version": "v25.9.0",
|
||||
"date": "2025-11-29T16:37:28Z"
|
||||
},
|
||||
{
|
||||
"name": "autobrr/autobrr",
|
||||
"version": "v1.70.0",
|
||||
"date": "2025-11-29T14:44:38Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.9",
|
||||
@ -814,11 +869,6 @@
|
||||
"version": "v4.7.0",
|
||||
"date": "2025-11-26T16:59:45Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.2.0.2-2.2.0.2_beta_2025-11-26",
|
||||
"date": "2025-11-26T14:20:54Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.1.6",
|
||||
@ -829,11 +879,6 @@
|
||||
"version": "release-1.24.2",
|
||||
"date": "2025-11-26T11:22:30Z"
|
||||
},
|
||||
{
|
||||
"name": "karlomikus/bar-assistant",
|
||||
"version": "v5.9.3",
|
||||
"date": "2025-11-25T18:18:34Z"
|
||||
},
|
||||
{
|
||||
"name": "Dolibarr/dolibarr",
|
||||
"version": "22.0.3",
|
||||
@ -849,11 +894,6 @@
|
||||
"version": "2.3.6",
|
||||
"date": "2025-11-24T19:40:27Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.3.6",
|
||||
"date": "2025-11-24T13:02:52Z"
|
||||
},
|
||||
{
|
||||
"name": "silverbulletmd/silverbullet",
|
||||
"version": "2.3.0",
|
||||
@ -894,11 +934,6 @@
|
||||
"version": "v14.2.0",
|
||||
"date": "2025-11-22T12:54:08Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.33.0",
|
||||
"date": "2025-11-21T22:54:49Z"
|
||||
},
|
||||
{
|
||||
"name": "Bubka/2FAuth",
|
||||
"version": "v5.6.1",
|
||||
@ -1014,11 +1049,6 @@
|
||||
"version": "v0.28.2",
|
||||
"date": "2025-11-18T05:51:46Z"
|
||||
},
|
||||
{
|
||||
"name": "passbolt/passbolt_api",
|
||||
"version": "v5.7.2",
|
||||
"date": "2025-11-17T15:17:55Z"
|
||||
},
|
||||
{
|
||||
"name": "librenms/librenms",
|
||||
"version": "25.11.0",
|
||||
@ -1094,11 +1124,6 @@
|
||||
"version": "v5.1.0",
|
||||
"date": "2025-11-12T10:44:24Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.5",
|
||||
"date": "2025-09-27T20:59:46Z"
|
||||
},
|
||||
{
|
||||
"name": "CrazyWolf13/web-check",
|
||||
"version": "1.1.0",
|
||||
@ -1144,11 +1169,6 @@
|
||||
"version": "v0.9.1",
|
||||
"date": "2025-11-06T02:26:53Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2025-11-05",
|
||||
"date": "2025-11-05T18:08:26Z"
|
||||
},
|
||||
{
|
||||
"name": "javedh-dev/tracktor",
|
||||
"version": "0.5.1",
|
||||
@ -1189,11 +1209,6 @@
|
||||
"version": "v3.0.9",
|
||||
"date": "2025-11-04T07:28:45Z"
|
||||
},
|
||||
{
|
||||
"name": "motioneye-project/motioneye",
|
||||
"version": "0.42.1",
|
||||
"date": "2020-06-07T07:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "wanetty/upgopher",
|
||||
"version": "v1.12.0",
|
||||
@ -1269,21 +1284,11 @@
|
||||
"version": "v4.5.0",
|
||||
"date": "2025-10-18T22:00:50Z"
|
||||
},
|
||||
{
|
||||
"name": "diced/zipline",
|
||||
"version": "v4.3.2",
|
||||
"date": "2025-10-17T04:13:23Z"
|
||||
},
|
||||
{
|
||||
"name": "minio/minio",
|
||||
"version": "RELEASE.2025-10-15T17-29-55Z",
|
||||
"date": "2025-10-16T19:33:51Z"
|
||||
},
|
||||
{
|
||||
"name": "linkwarden/linkwarden",
|
||||
"version": "v2.13.1",
|
||||
"date": "2025-10-15T13:29:37Z"
|
||||
},
|
||||
{
|
||||
"name": "rogerfar/rdt-client",
|
||||
"version": "v2.0.119",
|
||||
@ -1364,11 +1369,6 @@
|
||||
"version": "v0.18.3",
|
||||
"date": "2025-09-19T16:16:11Z"
|
||||
},
|
||||
{
|
||||
"name": "docmost/docmost",
|
||||
"version": "v0.23.2",
|
||||
"date": "2025-09-18T17:18:59Z"
|
||||
},
|
||||
{
|
||||
"name": "eclipse-mosquitto/mosquitto",
|
||||
"version": "2.1.0-test1",
|
||||
|
||||
40
frontend/public/json/wallabag.json
Normal file
40
frontend/public/json/wallabag.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "Wallabag",
|
||||
"slug": "wallabag",
|
||||
"categories": [
|
||||
12
|
||||
],
|
||||
"date_created": "2025-12-12",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"config_path": "/opt/wallabag/app/config/parameters.yml",
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://doc.wallabag.org/",
|
||||
"website": "https://wallabag.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/wallabag.webp",
|
||||
"description": "Wallabag is a self-hosted read-it-later application. Save web articles to read them later, offline, in a clean and distraction-free interface. Features tagging, full-text search, and browser/mobile app integrations.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/wallabag.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 6,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Database credentials are stored in ~/wallabag.creds",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -14,10 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
default-libmysqlclient-dev \
|
||||
build-essential \
|
||||
pkg-config
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
168
install/invoiceninja-install.sh
Normal file
168
install/invoiceninja-install.sh
Normal file
@ -0,0 +1,168 @@
|
||||
#!/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://invoiceninja.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 \
|
||||
nginx \
|
||||
supervisor
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="invoiceninja" MARIADB_DB_USER="invoiceninja" setup_mariadb_db
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,gmp,imagick,intl,mbstring,mysql,soap,xml,zip" setup_php
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
|
||||
|
||||
msg_info "Configuring InvoiceNinja"
|
||||
cd /opt/invoiceninja
|
||||
APP_KEY=$(php artisan key:generate --show)
|
||||
cat <<EOF >/opt/invoiceninja/.env
|
||||
APP_NAME="Invoice Ninja"
|
||||
APP_ENV=production
|
||||
APP_KEY=${APP_KEY}
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://${LOCAL_IP}:8080
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=${MARIADB_DB_NAME}
|
||||
DB_USERNAME=${MARIADB_DB_USER}
|
||||
DB_PASSWORD=${MARIADB_DB_PASS}
|
||||
|
||||
MULTI_DB_ENABLED=false
|
||||
DEMO_MODE=false
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
LOG_CHANNEL=stack
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_CONNECTION=database
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MAIL_MAILER=log
|
||||
MAIL_HOST=null
|
||||
MAIL_PORT=null
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="noreply@localhost"
|
||||
MAIL_FROM_NAME="Invoice Ninja"
|
||||
|
||||
REQUIRE_HTTPS=false
|
||||
NINJA_ENVIRONMENT=selfhost
|
||||
PDF_GENERATOR=snappdf
|
||||
|
||||
TRUSTED_PROXIES=*
|
||||
INTERNAL_QUEUE_ENABLED=false
|
||||
EOF
|
||||
|
||||
mkdir -p /opt/invoiceninja/bootstrap/cache
|
||||
mkdir -p /opt/invoiceninja/storage/{app/public,framework/{cache/data,sessions,views},logs}
|
||||
chown -R www-data:www-data /opt/invoiceninja
|
||||
chmod -R 775 /opt/invoiceninja/storage /opt/invoiceninja/bootstrap/cache
|
||||
msg_ok "Configured InvoiceNinja"
|
||||
|
||||
msg_info "Setting up Database"
|
||||
cd /opt/invoiceninja
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan route:clear
|
||||
$STD php artisan view:clear
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan db:seed --force
|
||||
$STD php artisan optimize
|
||||
msg_ok "Set up Database"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<'EOF' >/etc/nginx/sites-available/invoiceninja
|
||||
server {
|
||||
listen 8080;
|
||||
server_name _;
|
||||
root /opt/invoiceninja/public;
|
||||
index index.php;
|
||||
|
||||
client_max_body_size 50M;
|
||||
charset utf-8;
|
||||
|
||||
gzip on;
|
||||
gzip_types application/javascript application/x-javascript text/javascript text/plain application/xml application/json;
|
||||
gzip_proxied no-cache no-store private expired auth;
|
||||
gzip_min_length 1000;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location = /index.php {
|
||||
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
fastcgi_read_timeout 300;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
return 403;
|
||||
}
|
||||
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
|
||||
error_log /var/log/nginx/invoiceninja_error.log;
|
||||
access_log /var/log/nginx/invoiceninja_access.log;
|
||||
}
|
||||
EOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/invoiceninja /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Setting up Queue Worker"
|
||||
cat <<'EOF' >/etc/supervisor/conf.d/invoiceninja-worker.conf
|
||||
[program:invoiceninja-worker]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=php /opt/invoiceninja/artisan queue:work --sleep=3 --tries=3 --max-time=3600
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopasgroup=true
|
||||
killasgroup=true
|
||||
user=www-data
|
||||
numprocs=2
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/var/log/invoiceninja-worker.log
|
||||
stopwaitsecs=3600
|
||||
EOF
|
||||
|
||||
touch /var/log/invoiceninja-worker.log
|
||||
chown www-data:www-data /var/log/invoiceninja-worker.log
|
||||
$STD supervisorctl reread
|
||||
$STD supervisorctl update
|
||||
msg_ok "Set up Queue Worker"
|
||||
|
||||
msg_info "Setting up Cron"
|
||||
cat <<'EOF' >/etc/cron.d/invoiceninja
|
||||
* * * * * www-data cd /opt/invoiceninja && php artisan schedule:run >> /dev/null 2>&1
|
||||
EOF
|
||||
msg_ok "Set up Cron"
|
||||
|
||||
msg_info "Enabling Services"
|
||||
systemctl enable -q --now php8.4-fpm nginx supervisor
|
||||
msg_ok "Enabled Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@ -3,7 +3,7 @@
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mayanayza/netvisor
|
||||
# Source: https://github.com/netvisor-io/netvisor
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@ -24,7 +24,7 @@ PG_VERSION=17 setup_postgresql
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_DB_NAME="netvisor_db" PG_DB_USER="netvisor" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "netvisor" "mayanayza/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
fetch_and_deploy_gh_release "netvisor" "netvisor-io/netvisor" "tarball" "latest" "/opt/netvisor"
|
||||
|
||||
TOOLCHAIN="$(grep "channel" /opt/netvisor/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||
@ -78,7 +78,7 @@ NETVISOR_BIND_ADDRESS=0.0.0.0
|
||||
NETVISOR_NAME="netvisor-daemon"
|
||||
NETVISOR_HEARTBEAT_INTERVAL=30
|
||||
|
||||
### - see https://github.com/mayanayza/netvisor/blob/main/docs/CONFIGURATION.md for more options
|
||||
### - see https://github.com/netvisor-io/netvisor/blob/main/docs/CONFIGURATION.md for more options
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/netvisor-server.service
|
||||
|
||||
@ -62,7 +62,7 @@ server:
|
||||
secret: "$SECRET_KEY"
|
||||
|
||||
gerbil:
|
||||
base_endpoint: "$pango_url"
|
||||
base_endpoint: "${pango_url#https://}"
|
||||
|
||||
flags:
|
||||
require_email_verification: false
|
||||
@ -130,7 +130,7 @@ http:
|
||||
routers:
|
||||
# HTTP to HTTPS redirect router
|
||||
main-app-router-redirect:
|
||||
rule: "Host(\`$pango_url\`)"
|
||||
rule: "Host(\`${pango_url#https://}\`)"
|
||||
service: next-service
|
||||
entryPoints:
|
||||
- web
|
||||
@ -139,7 +139,7 @@ http:
|
||||
|
||||
# Next.js router (handles everything except API and WebSocket paths)
|
||||
next-router:
|
||||
rule: "Host(\`$pango_url\`) && !PathPrefix(\`/api/v1\`)"
|
||||
rule: "Host(\`${pango_url#https://}\`) && !PathPrefix(\`/api/v1\`)"
|
||||
service: next-service
|
||||
entryPoints:
|
||||
- websecure
|
||||
@ -148,7 +148,7 @@ http:
|
||||
|
||||
# API router (handles /api/v1 paths)
|
||||
api-router:
|
||||
rule: "Host(\`$pango_url\`) && PathPrefix(\`/api/v1\`)"
|
||||
rule: "Host(\`${pango_url#https://}\`) && PathPrefix(\`/api/v1\`)"
|
||||
service: api-service
|
||||
entryPoints:
|
||||
- websecure
|
||||
@ -157,7 +157,7 @@ http:
|
||||
|
||||
# WebSocket router
|
||||
ws-router:
|
||||
rule: "Host(\`$pango_url\`)"
|
||||
rule: "Host(\`${pango_url#https://}\`)"
|
||||
service: api-service
|
||||
entryPoints:
|
||||
- websecure
|
||||
|
||||
@ -23,45 +23,29 @@ PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" P
|
||||
setup_composer
|
||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=snipeit_db
|
||||
DB_USER=snipeit
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "SnipeIT-Credentials"
|
||||
echo "SnipeIT Database User: $DB_USER"
|
||||
echo "SnipeIT Database Password: $DB_PASS"
|
||||
echo "SnipeIT Database Name: $DB_NAME"
|
||||
} >>~/snipeit.creds
|
||||
msg_ok "Set up database"
|
||||
MARIADB_DB_NAME="snipeit_db" MARIADB_DB_USER="snipeit" setup_mariadb_db
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring Snipe-IT"
|
||||
cd /opt/snipe-it
|
||||
cp .env.example .env
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
|
||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||
-e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \
|
||||
-e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \
|
||||
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" .env
|
||||
|
||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$LOCAL_IP|" \
|
||||
-e "s|^DB_DATABASE=.*|DB_DATABASE=$MARIADB_DB_NAME|" \
|
||||
-e "s|^DB_USERNAME=.*|DB_USERNAME=$MARIADB_DB_USER|" \
|
||||
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$MARIADB_DB_PASS|" .env
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
$STD php artisan key:generate --force
|
||||
msg_ok "Configured SnipeIT"
|
||||
msg_ok "Configured Snipe-IT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
||||
server {
|
||||
listen 80;
|
||||
root /opt/snipe-it/public;
|
||||
server_name $IPADDRESS;
|
||||
server_name $LOCAL_IP;
|
||||
client_max_body_size 100M;
|
||||
index index.php;
|
||||
|
||||
|
||||
@ -14,24 +14,11 @@ update_os
|
||||
|
||||
JAVA_VERSION="21" setup_java
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="sonarqube" PG_DB_USER="sonarqube" setup_postgresql_db
|
||||
|
||||
msg_info "Installing Postgresql"
|
||||
DB_NAME="sonarqube"
|
||||
DB_USER="sonarqube"
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"
|
||||
{
|
||||
echo "Application Credentials"
|
||||
echo "DB_NAME: $DB_NAME"
|
||||
echo "DB_USER: $DB_USER"
|
||||
echo "DB_PASS: $DB_PASS"
|
||||
} >>~/sonarqube.creds
|
||||
msg_ok "Installed PostgreSQL"
|
||||
|
||||
msg_info "Configuring SonarQube"
|
||||
msg_info "Setting up SonarQube"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
mv /opt/sonarqube-* /opt/sonarqube
|
||||
|
||||
@ -24,7 +24,6 @@ curl -fsSL "https://services.sonarr.tv/v1/download/main/latest?version=4&os=linu
|
||||
tar -xzf SonarrV4.tar.gz
|
||||
mv Sonarr /opt
|
||||
rm -rf SonarrV4.tar.gz
|
||||
|
||||
msg_ok "Installed Sonarr v4"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@ -32,12 +31,14 @@ cat <<EOF >/etc/systemd/system/sonarr.service
|
||||
[Unit]
|
||||
Description=Sonarr Daemon
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/Sonarr/Sonarr -nobrowser -data=/var/lib/sonarr/
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
162
install/speedtest-tracker-install.sh
Normal file
162
install/speedtest-tracker-install.sh
Normal file
@ -0,0 +1,162 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: AlphaLawless
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/alexjustesen/speedtest-tracker
|
||||
|
||||
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 \
|
||||
nginx \
|
||||
sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker"
|
||||
|
||||
msg_info "Installing Speedtest CLI"
|
||||
setup_deb822_repo \
|
||||
"speedtest-cli" \
|
||||
"https://packagecloud.io/ookla/speedtest-cli/gpgkey" \
|
||||
"https://packagecloud.io/ookla/speedtest-cli/debian" \
|
||||
"$(get_os_info codename)" \
|
||||
"main"
|
||||
$STD apt install -y speedtest
|
||||
msg_ok "Installed Speedtest CLI"
|
||||
|
||||
msg_info "Configuring PHP-FPM runtime directory"
|
||||
mkdir -p /etc/systemd/system/php8.4-fpm.service.d/
|
||||
cat <<EOF >/etc/systemd/system/php8.4-fpm.service.d/override.conf
|
||||
[Service]
|
||||
RuntimeDirectory=php
|
||||
RuntimeDirectoryMode=0755
|
||||
EOF
|
||||
msg_ok "Configured PHP-FPM runtime directory"
|
||||
|
||||
msg_info "Setting up Speedtest Tracker"
|
||||
cd /opt/speedtest-tracker
|
||||
APP_KEY=$(php -r "echo bin2hex(random_bytes(16));")
|
||||
TIMEZONE=$(timedatectl | grep "Time zone" | awk '{print $3}')
|
||||
cat <<EOF >/opt/speedtest-tracker/.env
|
||||
APP_NAME="Speedtest Tracker"
|
||||
APP_ENV=production
|
||||
APP_TIMEZONE=${TIMEZONE}
|
||||
APP_KEY=base64:$(echo -n $APP_KEY | base64)
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://${LOCAL_IP}
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
DB_DATABASE=/opt/speedtest-tracker/database/database.sqlite
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
SPEEDTEST_SCHEDULE="0 */6 * * *"
|
||||
SPEEDTEST_SERVERS=
|
||||
PRUNE_RESULTS_OLDER_THAN=0
|
||||
|
||||
DISPLAY_TIMEZONE=${TIMEZONE}
|
||||
EOF
|
||||
mkdir -p /opt/speedtest-tracker/database
|
||||
touch /opt/speedtest-tracker/database/database.sqlite
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --optimize-autoloader --no-dev
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
$STD php artisan key:generate --force
|
||||
$STD php artisan migrate --force --seed
|
||||
$STD php artisan config:clear
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan view:clear
|
||||
chown -R www-data:www-data /opt/speedtest-tracker
|
||||
chmod -R 755 /opt/speedtest-tracker/storage
|
||||
chmod -R 755 /opt/speedtest-tracker/bootstrap/cache
|
||||
msg_ok "Set up Speedtest Tracker"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/speedtest-tracker.service
|
||||
[Unit]
|
||||
Description=Speedtest Tracker Queue Worker
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
Group=www-data
|
||||
Restart=always
|
||||
ExecStart=/usr/bin/php /opt/speedtest-tracker/artisan queue:work --sleep=3 --tries=3 --max-time=3600
|
||||
WorkingDirectory=/opt/speedtest-tracker
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now speedtest-tracker
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Setting up Scheduler"
|
||||
cat <<EOF >/etc/cron.d/speedtest-tracker
|
||||
* * * * * www-data cd /opt/speedtest-tracker && php artisan schedule:run >> /dev/null 2>&1
|
||||
EOF
|
||||
msg_ok "Set up Scheduler"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/speedtest-tracker
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /opt/speedtest-tracker/public;
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
|
||||
index index.php;
|
||||
|
||||
charset utf-8;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.php?\$query_string;
|
||||
}
|
||||
|
||||
location = /favicon.ico { access_log off; log_not_found off; }
|
||||
location = /robots.txt { access_log off; log_not_found off; }
|
||||
|
||||
error_page 404 /index.php;
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
location ~ /\.(?!well-known).* {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/speedtest-tracker /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@ -17,12 +17,10 @@ update_os
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
make \
|
||||
libpq-dev \
|
||||
ca-certificates
|
||||
libpq-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Python3"
|
||||
msg_info "Setting up Python3"
|
||||
$STD apt install -y \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
@ -30,17 +28,13 @@ $STD apt install -y \
|
||||
python3-pip
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing Spoolman"
|
||||
RELEASE=$(curl -fsSL https://github.com/Donkie/Spoolman/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/Donkie/Spoolman/releases/download/$RELEASE/spoolman.zip" -o "spoolman.zip"
|
||||
$STD unzip spoolman.zip -d spoolman
|
||||
rm -rf spoolman.zip
|
||||
cd spoolman
|
||||
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
|
||||
msg_info "Setting up Spoolman"
|
||||
cd /opt/spoolman
|
||||
$STD pip3 install --upgrade --ignore-installed -r requirements.txt
|
||||
curl -fsSL "https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example" -o ".env"
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Spoolman"
|
||||
cp .env.example .env
|
||||
msg_ok "Setup Spoolman"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<'EOF' >/etc/systemd/system/spoolman.service
|
||||
|
||||
@ -13,26 +13,20 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setting up Syncthing repo"
|
||||
mkdir -p /usr/share/keyrings
|
||||
curl -fsSL "https://syncthing.net/release-key.gpg" -o /usr/share/keyrings/syncthing-archive-keyring.gpg
|
||||
cat <<EOF >/etc/apt/sources.list.d/syncthing.sources
|
||||
Types: deb
|
||||
URIs: https://apt.syncthing.net/
|
||||
Suites: syncthing
|
||||
Components: stable-v2
|
||||
Signed-By: /usr/share/keyrings/syncthing-archive-keyring.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
msg_ok "Set up Syncthing repo"
|
||||
setup_deb822_repo \
|
||||
"syncthing" \
|
||||
"https://syncthing.net/release-key.gpg" \
|
||||
"https://apt.syncthing.net/" \
|
||||
"syncthing" \
|
||||
"stable-v2"
|
||||
|
||||
msg_info "Installing Syncthing"
|
||||
msg_info "Setting up Syncthing"
|
||||
$STD apt install -y syncthing
|
||||
systemctl enable -q --now syncthing@root
|
||||
sleep 5
|
||||
sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml
|
||||
systemctl restart syncthing@root
|
||||
msg_ok "Installed Syncthing"
|
||||
msg_ok "Setup Syncthing"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@ -13,13 +13,15 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing ASP.NET Core Runtime"
|
||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o "packages-microsoft-prod.deb"
|
||||
$STD dpkg -i packages-microsoft-prod.deb
|
||||
rm -rf packages-microsoft-prod.deb
|
||||
$STD apt update
|
||||
msg_info "Installing Dependencies"
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie" \
|
||||
"main"
|
||||
$STD apt install -y aspnetcore-runtime-9.0
|
||||
msg_ok "Installed ASP.NET Core Runtime"
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
||||
msg_info "Installing Technitium DNS"
|
||||
|
||||
@ -61,7 +61,9 @@ else
|
||||
fi
|
||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
||||
|
||||
fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64"
|
||||
fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz"
|
||||
cd /opt/tunarr
|
||||
mv tunarr* tunarr
|
||||
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||
|
||||
msg_info "Set ErsatzTV-ffmpeg links"
|
||||
|
||||
@ -13,16 +13,16 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="umamidb" PG_DB_USER="umami" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
|
||||
|
||||
msg_info "Configuring Umami"
|
||||
cd /opt/umami
|
||||
$STD yarn install
|
||||
$STD pnpm install
|
||||
echo -e "DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" >>/opt/umami/.env
|
||||
$STD yarn run build
|
||||
$STD pnpm run build
|
||||
msg_ok "Configured Umami"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@ -35,7 +35,7 @@ Type=simple
|
||||
Restart=always
|
||||
User=root
|
||||
WorkingDirectory=/opt/umami
|
||||
ExecStart=/usr/bin/yarn run start
|
||||
ExecStart=/usr/bin/pnpm run start
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@ -32,10 +32,46 @@ echo "# Memory-optimized settings for small-scale deployments" >> /etc/valkey/va
|
||||
echo "maxmemory ${MAXMEMORY_MB}mb" >> /etc/valkey/valkey.conf
|
||||
echo "maxmemory-policy allkeys-lru" >> /etc/valkey/valkey.conf
|
||||
echo "maxmemory-samples 10" >> /etc/valkey/valkey.conf
|
||||
msg_ok "Installed Valkey"
|
||||
|
||||
echo
|
||||
read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only
|
||||
msg_info "Configuring TLS for Valkey..."
|
||||
|
||||
create_self_signed_cert "Valkey"
|
||||
TLS_DIR="/etc/ssl/valkey"
|
||||
TLS_CERT="$TLS_DIR/valkey.crt"
|
||||
TLS_KEY="$TLS_DIR/valkey.key"
|
||||
chown valkey:valkey "$TLS_CERT" "$TLS_KEY"
|
||||
|
||||
if [[ ${tls_only,,} =~ ^(y|yes)$ ]]; then
|
||||
{
|
||||
echo ""
|
||||
echo "# TLS configuration generated by Proxmox VE Valkey helper-script"
|
||||
echo "port 0"
|
||||
echo "tls-port 6379"
|
||||
echo "tls-cert-file $TLS_DIR/valkey.crt"
|
||||
echo "tls-key-file $TLS_DIR/valkey.key"
|
||||
echo "tls-auth-clients no"
|
||||
} >> /etc/valkey/valkey.conf
|
||||
msg_ok "Enabled TLS-only mode on port 6379"
|
||||
else
|
||||
{
|
||||
echo ""
|
||||
echo "# TLS configuration generated by Proxmox VE Valkey helper-script"
|
||||
echo "tls-port 6380"
|
||||
echo "tls-cert-file $TLS_DIR/valkey.crt"
|
||||
echo "tls-key-file $TLS_DIR/valkey.key"
|
||||
echo "tls-auth-clients no"
|
||||
} >> /etc/valkey/valkey.conf
|
||||
msg_ok "Enabled TLS on port 6380 and TCP on 6379"
|
||||
fi
|
||||
fi
|
||||
|
||||
systemctl enable -q --now valkey-server
|
||||
systemctl restart valkey-server
|
||||
msg_ok "Installed Valkey"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
148
install/wallabag-install.sh
Normal file
148
install/wallabag-install.sh
Normal file
@ -0,0 +1,148 @@
|
||||
#!/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://wallabag.org/
|
||||
|
||||
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 \
|
||||
nginx \
|
||||
redis-server \
|
||||
imagemagick
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
import_local_ip
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="wallabag" MARIADB_DB_USER="wallabag" setup_mariadb_db
|
||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="bcmath,bz2,curl,gd,imagick,intl,mbstring,mysql,redis,tidy,xml,zip" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz"
|
||||
|
||||
msg_info "Configuring Wallabag"
|
||||
cd /opt/wallabag
|
||||
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
cat <<EOF >/opt/wallabag/app/config/parameters.yml
|
||||
parameters:
|
||||
database_driver: pdo_mysql
|
||||
database_host: 127.0.0.1
|
||||
database_port: 3306
|
||||
database_name: ${MARIADB_DB_NAME}
|
||||
database_user: ${MARIADB_DB_USER}
|
||||
database_password: ${MARIADB_DB_PASS}
|
||||
database_path: null
|
||||
database_table_prefix: wallabag_
|
||||
database_socket: null
|
||||
database_charset: utf8mb4
|
||||
|
||||
domain_name: http://${LOCAL_IP}:8000
|
||||
server_name: Wallabag
|
||||
|
||||
mailer_dsn: null
|
||||
|
||||
locale: en
|
||||
|
||||
secret: ${SECRET_KEY}
|
||||
|
||||
twofactor_auth: false
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
fosuser_registration: true
|
||||
fosuser_confirmation: false
|
||||
|
||||
fos_oauth_server_access_token_lifetime: 3600
|
||||
fos_oauth_server_refresh_token_lifetime: 1209600
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
|
||||
rss_limit: 50
|
||||
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
rabbitmq_prefetch_count: 10
|
||||
|
||||
redis_scheme: tcp
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
redis_path: null
|
||||
redis_password: null
|
||||
|
||||
sentry_dsn: null
|
||||
EOF
|
||||
chown -R www-data:www-data /opt/wallabag
|
||||
msg_ok "Configured Wallabag"
|
||||
|
||||
msg_info "Installing Wallabag (Patience)"
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
export SYMFONY_ENV=prod
|
||||
cd /opt/wallabag
|
||||
$STD php bin/console wallabag:install --env=prod --no-interaction
|
||||
$STD php bin/console cache:clear --env=prod
|
||||
chown -R www-data:www-data /opt/wallabag
|
||||
chmod -R 755 /opt/wallabag/{var,web/assets}
|
||||
msg_ok "Installed Wallabag"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<'EOF' >/etc/nginx/sites-available/wallabag
|
||||
server {
|
||||
listen 8000;
|
||||
server_name _;
|
||||
root /opt/wallabag/web;
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
|
||||
index app.php;
|
||||
charset utf-8;
|
||||
|
||||
location / {
|
||||
try_files $uri /app.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ ^/app\.php(/|$) {
|
||||
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||
internal;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
return 404;
|
||||
}
|
||||
|
||||
location ~ /\.(?!well-known).* {
|
||||
deny all;
|
||||
}
|
||||
|
||||
error_log /var/log/nginx/wallabag_error.log;
|
||||
access_log /var/log/nginx/wallabag_access.log;
|
||||
}
|
||||
EOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/wallabag /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
msg_info "Enabling Services"
|
||||
systemctl enable -q --now redis-server
|
||||
systemctl enable -q --now php8.3-fpm
|
||||
systemctl enable -q --now nginx
|
||||
msg_ok "Enabled Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@ -1047,7 +1047,7 @@ advanced_settings() {
|
||||
local _enable_mknod="${var_mknod:-0}"
|
||||
local _mount_fs="${var_mount_fs:-}"
|
||||
local _protect_ct="${var_protection:-no}"
|
||||
|
||||
|
||||
# Detect host timezone for default (if not set via var_timezone)
|
||||
local _host_timezone=""
|
||||
if command -v timedatectl >/dev/null 2>&1; then
|
||||
@ -2630,10 +2630,15 @@ build_container() {
|
||||
export DEV_MODE_DRYRUN="${DEV_MODE_DRYRUN:-false}"
|
||||
|
||||
# Build PCT_OPTIONS as multi-line string
|
||||
PCT_OPTIONS_STRING=" -features $FEATURES
|
||||
-hostname $HN
|
||||
PCT_OPTIONS_STRING=" -hostname $HN
|
||||
-tags $TAGS"
|
||||
|
||||
# Only add -features if FEATURES is not empty
|
||||
if [ -n "$FEATURES" ]; then
|
||||
PCT_OPTIONS_STRING=" -features $FEATURES
|
||||
$PCT_OPTIONS_STRING"
|
||||
fi
|
||||
|
||||
# Add storage if specified
|
||||
if [ -n "$SD" ]; then
|
||||
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
|
||||
|
||||
342
tools/addon/adguardhome-sync.sh
Normal file
342
tools/addon/adguardhome-sync.sh
Normal file
@ -0,0 +1,342 @@
|
||||
#!/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://github.com/bakito/adguardhome-sync
|
||||
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
# Enable error handling
|
||||
set -Eeuo pipefail
|
||||
trap 'error_handler' ERR
|
||||
|
||||
# ==============================================================================
|
||||
# CONFIGURATION
|
||||
# ==============================================================================
|
||||
APP="AdGuardHome-Sync"
|
||||
APP_TYPE="addon"
|
||||
INSTALL_PATH="/opt/adguardhome-sync"
|
||||
CONFIG_PATH="/opt/adguardhome-sync/adguardhome-sync.yaml"
|
||||
DEFAULT_PORT=8080
|
||||
|
||||
# Initialize all core functions (colors, formatting, icons, STD mode)
|
||||
load_functions
|
||||
|
||||
# ==============================================================================
|
||||
# HEADER
|
||||
# ==============================================================================
|
||||
function header_info {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
___ __ ____ __ _____
|
||||
/ | ____/ /___ ___ ______ __________/ / / / /___ ____ ___ ___ / ___/__ ______ _____
|
||||
/ /| |/ __ / __ `/ / / / __ `/ ___/ __ / /_/ / __ \/ __ `__ \/ _ \ \__ \/ / / / __ \/ ___/
|
||||
/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / __ / /_/ / / / / / / __/ ___/ / /_/ / / / / /__
|
||||
/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/_/ /_/\____/_/ /_/ /_/\___/ /____/\__, /_/ /_/\___/
|
||||
/____/ /____/
|
||||
EOF
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# HELPER FUNCTIONS
|
||||
# ==============================================================================
|
||||
get_ip() {
|
||||
hostname -I 2>/dev/null | awk '{print $1}' || echo "127.0.0.1"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# OS DETECTION
|
||||
# ==============================================================================
|
||||
if [[ -f "/etc/alpine-release" ]]; then
|
||||
OS="Alpine"
|
||||
SERVICE_PATH="/etc/init.d/adguardhome-sync"
|
||||
elif [[ -f "/etc/debian_version" ]]; then
|
||||
OS="Debian"
|
||||
SERVICE_PATH="/etc/systemd/system/adguardhome-sync.service"
|
||||
else
|
||||
msg_error "Unsupported OS detected. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# UNINSTALL
|
||||
# ==============================================================================
|
||||
function uninstall() {
|
||||
msg_info "Uninstalling ${APP}"
|
||||
if [[ "$OS" == "Alpine" ]]; then
|
||||
rc-service adguardhome-sync stop &>/dev/null || true
|
||||
rc-update del adguardhome-sync &>/dev/null || true
|
||||
rm -f "$SERVICE_PATH"
|
||||
else
|
||||
systemctl disable --now adguardhome-sync.service &>/dev/null || true
|
||||
rm -f "$SERVICE_PATH"
|
||||
fi
|
||||
rm -rf "$INSTALL_PATH"
|
||||
rm -f "/usr/local/bin/update_adguardhome-sync"
|
||||
rm -f "$HOME/.adguardhome-sync"
|
||||
msg_ok "${APP} has been uninstalled"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# UPDATE
|
||||
# ==============================================================================
|
||||
function update() {
|
||||
if check_for_gh_release "adguardhome-sync" "bakito/adguardhome-sync"; then
|
||||
msg_info "Stopping service"
|
||||
if [[ "$OS" == "Alpine" ]]; then
|
||||
rc-service adguardhome-sync stop &>/dev/null || true
|
||||
else
|
||||
systemctl stop adguardhome-sync.service &>/dev/null || true
|
||||
fi
|
||||
msg_ok "Stopped service"
|
||||
|
||||
msg_info "Backing up configuration"
|
||||
cp "$CONFIG_PATH" /tmp/adguardhome-sync.yaml.bak 2>/dev/null || true
|
||||
msg_ok "Backed up configuration"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Restoring configuration"
|
||||
cp /tmp/adguardhome-sync.yaml.bak "$CONFIG_PATH" 2>/dev/null || true
|
||||
rm -f /tmp/adguardhome-sync.yaml.bak
|
||||
msg_ok "Restored configuration"
|
||||
|
||||
msg_info "Starting service"
|
||||
if [[ "$OS" == "Alpine" ]]; then
|
||||
rc-service adguardhome-sync start
|
||||
else
|
||||
systemctl start adguardhome-sync.service
|
||||
fi
|
||||
msg_ok "Started service"
|
||||
msg_ok "Updated successfully"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# INSTALL
|
||||
# ==============================================================================
|
||||
function install() {
|
||||
local ip
|
||||
ip=$(get_ip)
|
||||
|
||||
fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz"
|
||||
|
||||
# Gather configuration from user
|
||||
echo ""
|
||||
echo -e "${TAB}Enter details for your AdGuard Home instances."
|
||||
echo -e "${TAB}The Origin is your primary instance, Replica will sync from it."
|
||||
echo ""
|
||||
|
||||
# Origin instance
|
||||
echo -e "${YW}── Origin (Primary) Instance ──${CL}"
|
||||
local origin_url origin_user origin_pass
|
||||
read -rp " Origin URL (e.g., http://192.168.1.1): " origin_url
|
||||
origin_url="${origin_url:-http://192.168.1.1}"
|
||||
# Add http:// if no protocol specified
|
||||
[[ ! "$origin_url" =~ ^https?:// ]] && origin_url="http://${origin_url}"
|
||||
read -rp " Origin Username [admin]: " origin_user
|
||||
origin_user="${origin_user:-admin}"
|
||||
read -rsp " Origin Password: " origin_pass
|
||||
echo ""
|
||||
origin_pass="${origin_pass:-changeme}"
|
||||
|
||||
# Replica instance
|
||||
echo ""
|
||||
echo -e "${YW}── Replica Instance ──${CL}"
|
||||
local replica_url replica_user replica_pass
|
||||
read -rp " Replica URL (e.g., http://192.168.1.2): " replica_url
|
||||
replica_url="${replica_url:-http://192.168.1.2}"
|
||||
# Add http:// if no protocol specified
|
||||
[[ ! "$replica_url" =~ ^https?:// ]] && replica_url="http://${replica_url}"
|
||||
read -rp " Replica Username [admin]: " replica_user
|
||||
replica_user="${replica_user:-admin}"
|
||||
read -rsp " Replica Password: " replica_pass
|
||||
echo ""
|
||||
replica_pass="${replica_pass:-changeme}"
|
||||
echo ""
|
||||
|
||||
msg_info "Creating configuration"
|
||||
cat <<EOF >"$CONFIG_PATH"
|
||||
# AdGuardHome-Sync Configuration
|
||||
# Documentation: https://github.com/bakito/adguardhome-sync
|
||||
|
||||
# Cron expression for sync interval (e.g., every 2 hours: "0 */2 * * *")
|
||||
cron: "0 */2 * * *"
|
||||
|
||||
# Run sync on startup
|
||||
runOnStart: true
|
||||
|
||||
# Continue sync on errors
|
||||
continueOnError: false
|
||||
|
||||
# Origin AdGuardHome instance (primary)
|
||||
origin:
|
||||
url: "${origin_url}"
|
||||
username: "${origin_user}"
|
||||
password: "${origin_pass}"
|
||||
insecureSkipVerify: false
|
||||
|
||||
# Replica instances (one or more)
|
||||
replicas:
|
||||
- url: "${replica_url}"
|
||||
username: "${replica_user}"
|
||||
password: "${replica_pass}"
|
||||
insecureSkipVerify: false
|
||||
# Add more replicas as needed:
|
||||
# - url: "http://192.168.1.3"
|
||||
# username: "admin"
|
||||
# password: "changeme"
|
||||
|
||||
# API settings (web UI)
|
||||
api:
|
||||
port: ${DEFAULT_PORT}
|
||||
darkMode: true
|
||||
metrics:
|
||||
enabled: false
|
||||
|
||||
# Sync features (all enabled by default)
|
||||
features:
|
||||
dns:
|
||||
accessLists: true
|
||||
serverConfig: true
|
||||
rewrites: true
|
||||
dhcp:
|
||||
serverConfig: true
|
||||
staticLeases: true
|
||||
generalSettings: true
|
||||
queryLogConfig: true
|
||||
statsConfig: true
|
||||
clientSettings: true
|
||||
services: true
|
||||
filters: true
|
||||
theme: true
|
||||
EOF
|
||||
chmod 600 "$CONFIG_PATH"
|
||||
msg_ok "Created configuration"
|
||||
|
||||
msg_info "Creating service"
|
||||
if [[ "$OS" == "Alpine" ]]; then
|
||||
cat <<EOF >"$SERVICE_PATH"
|
||||
#!/sbin/openrc-run
|
||||
|
||||
name="adguardhome-sync"
|
||||
description="AdGuardHome Sync"
|
||||
command="${INSTALL_PATH}/adguardhome-sync"
|
||||
command_args="run --config ${CONFIG_PATH}"
|
||||
command_background=true
|
||||
pidfile="/run/\${RC_SVCNAME}.pid"
|
||||
output_log="/var/log/adguardhome-sync.log"
|
||||
error_log="/var/log/adguardhome-sync.log"
|
||||
|
||||
depend() {
|
||||
need net
|
||||
after firewall
|
||||
}
|
||||
EOF
|
||||
chmod +x "$SERVICE_PATH"
|
||||
rc-update add adguardhome-sync default
|
||||
rc-service adguardhome-sync start
|
||||
else
|
||||
cat <<EOF >"$SERVICE_PATH"
|
||||
[Unit]
|
||||
Description=AdGuardHome Sync
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=${INSTALL_PATH}/adguardhome-sync run --config ${CONFIG_PATH}
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now adguardhome-sync &>/dev/null
|
||||
fi
|
||||
msg_ok "Created and started service"
|
||||
|
||||
# Create update script
|
||||
msg_info "Creating update script"
|
||||
cat <<'UPDATEEOF' >/usr/local/bin/update_adguardhome-sync
|
||||
#!/usr/bin/env bash
|
||||
# AdGuardHome-Sync Update Script
|
||||
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/adguardhome-sync.sh)"
|
||||
UPDATEEOF
|
||||
chmod +x /usr/local/bin/update_adguardhome-sync
|
||||
msg_ok "Created update script (/usr/local/bin/update_adguardhome-sync)"
|
||||
|
||||
echo ""
|
||||
msg_ok "${APP} installed successfully"
|
||||
msg_ok "Web UI: ${BL}http://${ip}:${DEFAULT_PORT}${CL}"
|
||||
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
|
||||
echo ""
|
||||
msg_warn "Edit the config file to add your AdGuardHome instances!"
|
||||
msg_warn " Origin: Your primary AdGuardHome instance"
|
||||
msg_warn " Replicas: One or more replica instances to sync to"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# MAIN
|
||||
# ==============================================================================
|
||||
|
||||
# Handle type=update (called from update script)
|
||||
if [[ "${type:-}" == "update" ]]; then
|
||||
header_info
|
||||
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then
|
||||
update
|
||||
else
|
||||
msg_error "${APP} is not installed. Nothing to update."
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
header_info
|
||||
|
||||
IP=$(get_ip)
|
||||
|
||||
# Check if already installed
|
||||
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then
|
||||
msg_warn "${APP} is already installed."
|
||||
echo ""
|
||||
|
||||
echo -n "${TAB}Uninstall ${APP}? (y/N): "
|
||||
read -r uninstall_prompt
|
||||
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
uninstall
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -n "${TAB}Update ${APP}? (y/N): "
|
||||
read -r update_prompt
|
||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
update
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg_warn "No action selected. Exiting."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Fresh installation
|
||||
msg_warn "${APP} is not installed."
|
||||
echo ""
|
||||
echo -e "${TAB}${INFO} This will install:"
|
||||
echo -e "${TAB} - AdGuardHome-Sync (Go binary)"
|
||||
echo -e "${TAB} - Systemd/OpenRC service"
|
||||
echo -e "${TAB} - Web UI on port ${DEFAULT_PORT}"
|
||||
echo ""
|
||||
|
||||
echo -n "${TAB}Install ${APP}? (y/N): "
|
||||
read -r install_prompt
|
||||
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
install
|
||||
else
|
||||
msg_warn "Installation cancelled. Exiting."
|
||||
exit 0
|
||||
fi
|
||||
6
tools/headers/adguardhome-sync
Normal file
6
tools/headers/adguardhome-sync
Normal file
@ -0,0 +1,6 @@
|
||||
___ ________ ____ __ _____
|
||||
/ | ____/ / ____/_ ______ __________/ / / / /___ ____ ___ ___ / ___/__ ______ _____
|
||||
/ /| |/ __ / / __/ / / / __ `/ ___/ __ / /_/ / __ \/ __ `__ \/ _ \______\__ \/ / / / __ \/ ___/
|
||||
/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / __ / /_/ / / / / / / __/_____/__/ / /_/ / / / / /__
|
||||
/_/ |_\__,_/\____/\__,_/\__,_/_/ \__,_/_/ /_/\____/_/ /_/ /_/\___/ /____/\__, /_/ /_/\___/
|
||||
/____/
|
||||
@ -578,7 +578,7 @@ fi
|
||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
||||
msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image"
|
||||
URL="https://download.freebsd.org/releases/VM-IMAGES/14.2-RELEASE/amd64/Latest/FreeBSD-14.2-RELEASE-amd64.qcow2.xz"
|
||||
URL="https://download.freebsd.org/releases/VM-IMAGES/14.3-RELEASE/amd64/Latest/FreeBSD-14.3-RELEASE-amd64.qcow2.xz"
|
||||
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
|
||||
curl -f#SL -o "$(basename "$URL")" "$URL"
|
||||
echo -en "\e[1A\e[0K"
|
||||
|
||||
Reference in New Issue
Block a user