mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-15 03:33:31 +01:00
Compare commits
85 Commits
add_json
...
pr-update-
| Author | SHA1 | Date | |
|---|---|---|---|
| ab8c5518de | |||
| 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 | |||
| 5854318163 | |||
| 39eda9cb81 | |||
| c757c7a8eb | |||
| 94126be8f9 | |||
| d2cce38266 | |||
| 59fa15af88 | |||
| cafee135c4 | |||
| fe8e1be644 | |||
| 840bdae6f3 | |||
| 6352694326 | |||
| fb5fc0524b | |||
| 9cbbcbdda5 | |||
| 300b4d2a3a | |||
| 0ed1e36d9d | |||
| ca27ae4e4c | |||
| 43f1e88b98 | |||
| f98d2d3d15 | |||
| e22f9fbce7 | |||
| 12e8ca6a95 | |||
| b9967cb56a | |||
| 4134136918 | |||
| da7cafd82c | |||
| 7800578ad4 | |||
| 7c39bc8787 | |||
| 7a91dc765a |
95
CHANGELOG.md
95
CHANGELOG.md
@ -10,8 +10,103 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-12-13
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- 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
|
||||
|
||||
- DiscoPanel ([#9847](https://github.com/community-scripts/ProxmoxVE/pull/9847))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: UmlautAdaptarr [@tremor021](https://github.com/tremor021) ([#9839](https://github.com/community-scripts/ProxmoxVE/pull/9839))
|
||||
- Verdaccio: Small fixes [@tremor021](https://github.com/tremor021) ([#9836](https://github.com/community-scripts/ProxmoxVE/pull/9836))
|
||||
- Refactor: WaveLog [@tremor021](https://github.com/tremor021) ([#9835](https://github.com/community-scripts/ProxmoxVE/pull/9835))
|
||||
- Refactor: Unifi Network Server [@tremor021](https://github.com/tremor021) ([#9838](https://github.com/community-scripts/ProxmoxVE/pull/9838))
|
||||
- Refactor: Umami [@tremor021](https://github.com/tremor021) ([#9840](https://github.com/community-scripts/ProxmoxVE/pull/9840))
|
||||
- Refactor: UrBackup Server [@tremor021](https://github.com/tremor021) ([#9837](https://github.com/community-scripts/ProxmoxVE/pull/9837))
|
||||
- Refactor: Tianji [@tremor021](https://github.com/tremor021) ([#9842](https://github.com/community-scripts/ProxmoxVE/pull/9842))
|
||||
- Tracktor: Remove unused variable [@tremor021](https://github.com/tremor021) ([#9841](https://github.com/community-scripts/ProxmoxVE/pull/9841))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update icon URLs from master to main branch [@MickLesk](https://github.com/MickLesk) ([#9834](https://github.com/community-scripts/ProxmoxVE/pull/9834))
|
||||
|
||||
## 2025-12-09
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
80
ct/discopanel.sh
Normal file
80
ct/discopanel.sh
Normal file
@ -0,0 +1,80 @@
|
||||
#!/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: DragoQC
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://discopanel.app/
|
||||
|
||||
APP="DiscoPanel"
|
||||
var_tags="${var_tags:-gaming}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-15}"
|
||||
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/discopanel" ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_docker
|
||||
|
||||
if check_for_gh_release "discopanel" "nickheyer/discopanel"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop discopanel
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /opt/discopanel_backup_temp
|
||||
cp -r /opt/discopanel/data/discopanel.db \
|
||||
/opt/discopanel/data/.recovery_key \
|
||||
/opt/discopanel_backup_temp/
|
||||
if [[ -d /opt/discopanel/data/servers ]]; then
|
||||
cp -r /opt/discopanel/data/servers /opt/discopanel_backup_temp/
|
||||
fi
|
||||
msg_ok "Created Backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
||||
|
||||
msg_info "Setting up DiscoPanel"
|
||||
cd /opt/discopanel/web/discopanel
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
cd /opt/discopanel
|
||||
$STD go build -o discopanel cmd/discopanel/main.go
|
||||
msg_ok "Setup DiscoPanel"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/discopanel/data
|
||||
cp -a /opt/discopanel_backup_temp/. /opt/discopanel/data/
|
||||
rm -rf /opt/discopanel_backup_temp
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start discopanel
|
||||
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}:8080${CL}"
|
||||
@ -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/discopanel
Normal file
6
ct/headers/discopanel
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ ____ __
|
||||
/ __ \(_)_____________ / __ \____ _____ ___ / /
|
||||
/ / / / / ___/ ___/ __ \/ /_/ / __ `/ __ \/ _ \/ /
|
||||
/ /_/ / (__ ) /__/ /_/ / ____/ /_/ / / / / __/ /
|
||||
/_____/_/____/\___/\____/_/ \__,_/_/ /_/\___/_/
|
||||
|
||||
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
|
||||
|
||||
|
||||
@ -28,7 +28,6 @@ function update_script() {
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
|
||||
if check_for_gh_release "tianji" "msgbyte/tianji"; then
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -27,24 +27,18 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/PCJones/Umlautadaptarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
if [[ ! -f /opt/UmlautAdaptarr_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/UmlautAdaptarr_version.txt)" ]]; then
|
||||
|
||||
if check_for_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop umlautadaptarr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/PCJones/Umlautadaptarr/releases/download/${RELEASE}/linux-x64.zip" -o $temp_file
|
||||
$STD unzip -u $temp_file '*/**' -d /opt/UmlautAdaptarr
|
||||
msg_ok "Updated ${APP}"
|
||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start umlautadaptarr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://ui.com/download/unifi
|
||||
|
||||
APP="Unifi"
|
||||
var_tags="${var_tags:-network;controller;unifi}"
|
||||
var_tags="${var_tags:-network;unifi}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
@ -27,6 +27,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
$STD apt update --allow-releaseinfo-change
|
||||
$STD apt install -y unifi
|
||||
|
||||
@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://www.urbackup.org/
|
||||
|
||||
APP="UrBackup Server"
|
||||
var_tags="${var_tags:-web}"
|
||||
var_tags="${var_tags:-backup}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-16}"
|
||||
@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ function update_script() {
|
||||
|
||||
msg_info "Updating LXC Container"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated LXC Container"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="verdaccio" setup_nodejs
|
||||
|
||||
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",
|
||||
|
||||
35
frontend/public/json/discopanel.json
Normal file
35
frontend/public/json/discopanel.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "DiscoPanel",
|
||||
"slug": "discopanel",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2025-12-10",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://discopanel.app/docs/",
|
||||
"config_path": "",
|
||||
"website": "https://discopanel.app/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/discopanel.webp",
|
||||
"description": "The Minecraft Server Manager That *Actually* Works\nBuilt by someone who was done with bloated panels, endless menus, and tools that break the moment you need them most.\nSpin up servers in minutes, configure your proxy without headaches, and link your own DNS name effortlessly.\nFast setup, clean controls, zero nonsense—just a manager that gets out of your way and lets you play.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/discopanel.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 15,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@ -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": [
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"disable": true,
|
||||
"disable": false,
|
||||
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
|
||||
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
|
||||
"website": "https://palmr.kyantech.com.br/",
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 5005,
|
||||
"documentation": null,
|
||||
"documentation": "https://github.com/PCJones/UmlautAdaptarr/blob/master/README.md",
|
||||
"website": "https://github.com/PCJones/UmlautAdaptarr",
|
||||
"logo": "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/images/logo.png",
|
||||
"config_path": "/opt/UmlautAdaptarr/appsettings.json",
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8443,
|
||||
"documentation": null,
|
||||
"documentation": "https://help.ui.com/hc/en-us/articles/360012282453-Self-Hosting-a-UniFi-Network-Server",
|
||||
"website": "https://www.ui.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ubiquiti-unifi.webp",
|
||||
"config_path": "",
|
||||
|
||||
@ -1,4 +1,344 @@
|
||||
[
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "create-fumadocs-app@16.0.25",
|
||||
"date": "2025-12-13T10:22:03Z"
|
||||
},
|
||||
{
|
||||
"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": "netvisor-io/netvisor",
|
||||
"version": "v0.11.8",
|
||||
"date": "2025-12-13T08:38:03Z"
|
||||
},
|
||||
{
|
||||
"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": "nickheyer/discopanel",
|
||||
"version": "v1.0.13-dev",
|
||||
"date": "2025-12-12T23:45:54Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.13.1",
|
||||
"date": "2025-12-12T21:34:22Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.0.1",
|
||||
"date": "2025-12-12T21:09:19Z"
|
||||
},
|
||||
{
|
||||
"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": "karakeep-app/karakeep",
|
||||
"version": "v0.29.3",
|
||||
"date": "2025-12-12T09:14:41Z"
|
||||
},
|
||||
{
|
||||
"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": "fosrl/pangolin",
|
||||
"version": "1.13.0",
|
||||
"date": "2025-12-11T23:19:41Z"
|
||||
},
|
||||
{
|
||||
"name": "WGDashboard/WGDashboard",
|
||||
"version": "v4.3.0.3",
|
||||
"date": "2025-12-11T23:03:52Z"
|
||||
},
|
||||
{
|
||||
"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": "alam00000/bentopdf",
|
||||
"version": "v1.11.1",
|
||||
"date": "2025-12-11T14:12:20Z"
|
||||
},
|
||||
{
|
||||
"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": "prometheus/alertmanager",
|
||||
"version": "v0.29.0",
|
||||
"date": "2025-11-04T15:00:07Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.72.1",
|
||||
"date": "2025-12-10T14:55:44Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.211.1",
|
||||
"date": "2025-12-10T12:25:19Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "353",
|
||||
"date": "2025-12-10T10:55:50Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.3.2-beta",
|
||||
"date": "2025-12-10T05:42:43Z"
|
||||
},
|
||||
{
|
||||
"name": "miniflux/v2",
|
||||
"version": "2.2.15",
|
||||
"date": "2025-12-10T01:52:14Z"
|
||||
},
|
||||
{
|
||||
"name": "comfyanonymous/ComfyUI",
|
||||
"version": "v0.4.0",
|
||||
"date": "2025-12-10T00:11:48Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta29",
|
||||
@ -14,31 +354,11 @@
|
||||
"version": "v25.11.6",
|
||||
"date": "2025-12-09T21:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.12.2",
|
||||
"date": "2025-12-09T20:39:50Z"
|
||||
},
|
||||
{
|
||||
"name": "mayanayza/netvisor",
|
||||
"version": "v0.11.4",
|
||||
"date": "2025-12-09T20:10:45Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.56.x",
|
||||
"date": "2025-12-09T18:34:00Z"
|
||||
},
|
||||
{
|
||||
"name": "valkey-io/valkey",
|
||||
"version": "9.0.1",
|
||||
"date": "2025-12-09T18:13:25Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.11.5",
|
||||
"date": "2025-12-09T17:54:33Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.90",
|
||||
@ -64,31 +384,16 @@
|
||||
"version": "0.21.4",
|
||||
"date": "2025-12-09T15:25:28Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "gelbphoenix/autocaliweb",
|
||||
"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": "zabbix/zabbix",
|
||||
"version": "7.0.22rc1",
|
||||
"date": "2025-12-09T14:23:34Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/operating-system",
|
||||
"version": "16.3",
|
||||
@ -99,61 +404,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": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-typescript@4.0.14",
|
||||
"date": "2025-12-09T11:11:49Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v2.2.6",
|
||||
"date": "2025-12-09T10:11:01Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.425",
|
||||
"date": "2025-12-09T05:59:35Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r7.0.27-rc0",
|
||||
"date": "2025-12-09T04:34:48Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.13.2",
|
||||
"date": "2025-12-08T05:49:52Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.80.9.dev1",
|
||||
"date": "2025-12-09T01:38:18Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5",
|
||||
"date": "2025-12-09T00:27:10Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2025.12.09",
|
||||
@ -169,31 +424,11 @@
|
||||
"version": "preview-test-fix-subscriptions",
|
||||
"date": "2025-12-08T23:15:30Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.7",
|
||||
"date": "2025-12-01T08:14:11Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"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": "Dokploy/dokploy",
|
||||
"version": "v0.26.0",
|
||||
"date": "2025-12-08T20:44:09Z"
|
||||
},
|
||||
{
|
||||
"name": "hansmi/prometheus-paperless-exporter",
|
||||
"version": "v0.0.9",
|
||||
@ -204,91 +439,21 @@
|
||||
"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": "n8n-io/n8n",
|
||||
"version": "n8n@1.123.4",
|
||||
"date": "2025-12-08T13:30:40Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.45.3",
|
||||
"date": "2025-12-08T16:11:16Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.71",
|
||||
"date": "2025-12-08T14:34:55Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.22.18",
|
||||
"date": "2025-12-08T14:26:24Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.30.0-rc1",
|
||||
"date": "2025-12-08T13:29:14Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.2.1",
|
||||
"date": "2025-12-08T12:01:34Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.08",
|
||||
"date": "2025-12-08T10:13:51Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.7.1",
|
||||
"date": "2025-12-08T10:05:21Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
"date": "2025-12-08T09:36:54Z"
|
||||
},
|
||||
{
|
||||
"name": "WGDashboard/WGDashboard",
|
||||
"version": "v4.3.0.2",
|
||||
"date": "2025-12-08T09:01:37Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.11.8",
|
||||
"date": "2025-11-21T17:06:07Z"
|
||||
},
|
||||
{
|
||||
"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",
|
||||
@ -314,11 +479,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",
|
||||
@ -369,41 +529,16 @@
|
||||
"version": "v4.9.0",
|
||||
"date": "2025-12-06T08:58:40Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.87",
|
||||
"date": "2025-12-06T07:36:26Z"
|
||||
},
|
||||
{
|
||||
"name": "tobychui/zoraxy",
|
||||
"version": "v3.3.0",
|
||||
"date": "2025-12-06T06:18:23Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v13.1.3",
|
||||
"date": "2025-12-06T04:40:09Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.1.1",
|
||||
"date": "2025-12-05T23:48:08Z"
|
||||
},
|
||||
{
|
||||
"name": "HydroshieldMKII/Guardian",
|
||||
"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": "tailscale/tailscale",
|
||||
"version": "v1.92.1",
|
||||
"date": "2025-12-05T15:53:22Z"
|
||||
},
|
||||
{
|
||||
"name": "community-scripts/ProxmoxVE-Local",
|
||||
"version": "v0.5.2",
|
||||
@ -419,26 +554,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",
|
||||
@ -454,15 +574,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",
|
||||
@ -484,16 +599,6 @@
|
||||
"version": "11.0.4",
|
||||
"date": "2025-12-04T09:26:37Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.6",
|
||||
"date": "2025-11-24T15:30:21Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.3.1-beta",
|
||||
"date": "2025-12-04T03:33:38Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v1.2.0-experimental-sql-indexing",
|
||||
@ -504,11 +609,6 @@
|
||||
"version": "v4.36.2",
|
||||
"date": "2025-12-03T22:46:29Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.42.1",
|
||||
"date": "2025-12-03T22:42:22Z"
|
||||
},
|
||||
{
|
||||
"name": "danielbrendel/hortusfox-web",
|
||||
"version": "v5.5",
|
||||
@ -519,11 +619,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",
|
||||
@ -539,11 +634,6 @@
|
||||
"version": "v0.104.0",
|
||||
"date": "2025-12-03T06:48:38Z"
|
||||
},
|
||||
{
|
||||
"name": "comfyanonymous/ComfyUI",
|
||||
"version": "v0.3.77",
|
||||
"date": "2025-12-03T05:02:09Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
@ -554,11 +644,6 @@
|
||||
"version": "v0.17.0",
|
||||
"date": "2025-12-03T00:15:51Z"
|
||||
},
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.6.1",
|
||||
"date": "2025-12-02T23:08:41Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.50",
|
||||
@ -579,11 +664,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",
|
||||
@ -594,11 +674,6 @@
|
||||
"version": "v6.2.4",
|
||||
"date": "2025-12-02T17:47:52Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.540",
|
||||
"date": "2025-12-02T16:56:49Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v5.0.0",
|
||||
@ -629,16 +704,6 @@
|
||||
"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",
|
||||
@ -669,21 +734,6 @@
|
||||
"version": "1.11.5",
|
||||
"date": "2025-12-01T12:58:46Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.211.0",
|
||||
"date": "2025-12-01T11:22:11Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.0.0",
|
||||
"date": "2025-12-01T09:33:08Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "310.6",
|
||||
"date": "2025-12-01T09:04:51Z"
|
||||
},
|
||||
{
|
||||
"name": "photoprism/photoprism",
|
||||
"version": "251130-b3068414c",
|
||||
@ -804,11 +854,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",
|
||||
@ -839,11 +884,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",
|
||||
@ -884,16 +924,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": "rclone/rclone",
|
||||
"version": "v1.72.0",
|
||||
"date": "2025-11-21T18:20:58Z"
|
||||
},
|
||||
{
|
||||
"name": "Bubka/2FAuth",
|
||||
"version": "v5.6.1",
|
||||
@ -1009,11 +1039,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",
|
||||
@ -1089,16 +1114,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": "gethomepage/homepage",
|
||||
"version": "v1.7.0",
|
||||
"date": "2025-11-11T17:24:27Z"
|
||||
},
|
||||
{
|
||||
"name": "CrazyWolf13/web-check",
|
||||
"version": "1.1.0",
|
||||
@ -1179,11 +1194,6 @@
|
||||
"version": "v4.0.16.2944",
|
||||
"date": "2025-11-05T01:56:48Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/alertmanager",
|
||||
"version": "v0.29.0",
|
||||
"date": "2025-11-04T15:00:07Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.13.6",
|
||||
@ -1194,11 +1204,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",
|
||||
@ -1259,11 +1264,6 @@
|
||||
"version": "v0.8.8.3",
|
||||
"date": "2025-10-23T12:31:49Z"
|
||||
},
|
||||
{
|
||||
"name": "miniflux/v2",
|
||||
"version": "2.2.14",
|
||||
"date": "2025-10-23T02:12:05Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.2",
|
||||
@ -1289,11 +1289,6 @@
|
||||
"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",
|
||||
@ -1374,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",
|
||||
@ -1748,5 +1738,15 @@
|
||||
"name": "thelounge/thelounge-deb",
|
||||
"version": "v4.4.3",
|
||||
"date": "2024-04-06T12:24:35Z"
|
||||
},
|
||||
{
|
||||
"name": "deepch/RTSPtoWeb",
|
||||
"version": "v2.4.3",
|
||||
"date": "2023-03-29T12:05:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Shinobi-Systems/Shinobi",
|
||||
"version": "furrykitten-3",
|
||||
"date": "2022-07-15T05:20:17Z"
|
||||
}
|
||||
]
|
||||
|
||||
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"
|
||||
}
|
||||
]
|
||||
}
|
||||
51
install/discopanel-install.sh
Normal file
51
install/discopanel-install.sh
Normal file
@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: DragoQC
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://discopanel.app/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setup_go
|
||||
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
||||
setup_docker
|
||||
|
||||
msg_info "Setting up DiscoPanel"
|
||||
cd /opt/discopanel/web/discopanel
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
cd /opt/discopanel
|
||||
$STD go build -o discopanel cmd/discopanel/main.go
|
||||
msg_ok "Setup DiscoPanel"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/discopanel.service
|
||||
[Unit]
|
||||
Description=DiscoPanel Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/discopanel
|
||||
ExecStart=/opt/discopanel/discopanel
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now discopanel
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@ -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"
|
||||
|
||||
@ -18,38 +18,17 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
python3 \
|
||||
cmake \
|
||||
g++ \
|
||||
build-essential \
|
||||
git \
|
||||
ca-certificates
|
||||
git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="tianji_db" PG_DB_USER="tianji" setup_postgresql_db
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=tianji_db
|
||||
DB_USER=tianji
|
||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||
TIANJI_SECRET="$(openssl rand -base64 32 | cut -c1-24)"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
|
||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||
{
|
||||
echo ""
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "Tianji Secret: $TIANJI_SECRET"
|
||||
} >>~/tianji.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
fetch_and_deploy_gh_release "tianji" "msgbyte/tianji"
|
||||
|
||||
msg_info "Setup Tianji"
|
||||
msg_info "Setting up Tianji"
|
||||
cd /opt/tianji
|
||||
$STD pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile
|
||||
$STD pnpm build:static
|
||||
@ -69,7 +48,7 @@ rm -rf /opt/tianji/website
|
||||
rm -rf /opt/tianji/reporter
|
||||
msg_ok "Setup Tianji"
|
||||
|
||||
msg_info "Setup AppRise"
|
||||
msg_info "Setting up AppRise"
|
||||
$STD uv pip install apprise cryptography --system
|
||||
msg_ok "Setup AppRise"
|
||||
|
||||
@ -84,7 +63,6 @@ ExecStart=/usr/bin/node /opt/tianji/src/server/dist/src/server/main.js
|
||||
WorkingDirectory=/opt/tianji/src/server
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
Environment=NODE_ENV=production
|
||||
|
||||
[Install]
|
||||
|
||||
@ -21,7 +21,6 @@ cd /opt/tracktor
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
mkdir -p /opt/tracktor-data/{uploads,logs}
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/tracktor.env
|
||||
NODE_ENV=production
|
||||
DB_PATH=/opt/tracktor-data/tracktor.db
|
||||
|
||||
@ -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,34 +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 "Setting up postgresql"
|
||||
DB_NAME=umamidb
|
||||
DB_USER=umami
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
{
|
||||
echo "Umami-Credentials"
|
||||
echo "Umami Database User: $DB_USER"
|
||||
echo "Umami Database Password: $DB_PASS"
|
||||
echo "Umami Database Name: $DB_NAME"
|
||||
echo "Umami Secret Key: $SECRET_KEY"
|
||||
} >>~/umami.creds
|
||||
msg_ok "Set up postgresql"
|
||||
|
||||
msg_info "Configuring Umami"
|
||||
cd /opt/umami
|
||||
$STD yarn install
|
||||
echo -e "DATABASE_URL=postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME" >>/opt/umami/.env
|
||||
$STD yarn run build
|
||||
$STD pnpm install
|
||||
echo -e "DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" >>/opt/umami/.env
|
||||
$STD pnpm run build
|
||||
msg_ok "Configured Umami"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@ -53,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
|
||||
|
||||
@ -14,30 +14,20 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/microsoft-prod.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: https://packages.microsoft.com/debian/12/prod/
|
||||
Suites: bookworm
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/microsoft-prod.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft.asc" \
|
||||
"https://packages.microsoft.com/debian/12/prod/" \
|
||||
"bookworm" \
|
||||
"main"
|
||||
$STD apt install -y \
|
||||
dotnet-sdk-8.0 \
|
||||
aspnetcore-runtime-8.0
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Umlautadaptarr"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -s https://api.github.com/repos/PCJones/Umlautadaptarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
curl -fsSL "https://github.com/PCJones/Umlautadaptarr/releases/download/${RELEASE}/linux-x64.zip" -o $temp_file
|
||||
$STD unzip -j $temp_file '*/**' -d /opt/UmlautAdaptarr
|
||||
rm -f $temp_file
|
||||
echo "${RELEASE}" >"/opt/UmlautAdaptarr_version.txt"
|
||||
msg_ok "Installation completed"
|
||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||
|
||||
msg_info "Creating appsettings.json"
|
||||
msg_info "Setting up UmlautAdaptarr"
|
||||
cat <<EOF >/opt/UmlautAdaptarr/appsettings.json
|
||||
{
|
||||
"Logging": {
|
||||
@ -97,7 +87,7 @@ cat <<EOF >/opt/UmlautAdaptarr/appsettings.json
|
||||
}
|
||||
}
|
||||
EOF
|
||||
msg_ok "appsettings.json created"
|
||||
msg_ok "Setup UmlautAdaptarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/umlautadaptarr.service
|
||||
@ -116,7 +106,7 @@ Environment=ASPNETCORE_ENVIRONMENT=Production
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl -q --now enable umlautadaptarr
|
||||
systemctl enable -q --now umlautadaptarr
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@ -17,63 +17,28 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y apt-transport-https
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Eclipse Temurin JRE"
|
||||
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/adoptium.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: https://packages.adoptium.net/artifactory/deb
|
||||
Suites: bookworm
|
||||
Components: main
|
||||
Architectures: amd64
|
||||
Signed-By: /usr/share/keyrings/adoptium.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y temurin-17-jre
|
||||
msg_ok "Installed Eclipse Temurin JRE"
|
||||
JAVA_VERION="17" setup_java
|
||||
setup_deb822_repo \
|
||||
"unifi" \
|
||||
"https://dl.ui.com/unifi/unifi-repo.gpg" \
|
||||
"https://www.ui.com/downloads/unifi/debian" \
|
||||
"stable" \
|
||||
"ubiquiti" \
|
||||
"amd64"
|
||||
|
||||
if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then
|
||||
msg_ok "No AVX Support Detected"
|
||||
msg_info "Installing MongoDB 4.4"
|
||||
msg_warn "No AVX Support Detected. MongoDB v4.4 will be installed"
|
||||
if ! dpkg -l | grep -q "libssl1.1"; then
|
||||
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u4_amd64.deb" -o "libssl1.1_1.1.1w-0+deb11u4_amd64.deb"
|
||||
$STD dpkg -i libssl1.1_1.1.1w-0+deb11u4_amd64.deb
|
||||
fi
|
||||
curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor -o /usr/share/keyrings/mongodb-server-4.4.gpg
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: https://repo.mongodb.org/apt/debian
|
||||
Suites: buster/mongodb-org/4.4
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/mongodb-server-4.4.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y mongodb-org
|
||||
MONGO_VERSION="4.4" setup_mongodb
|
||||
else
|
||||
msg_info "Installing MongoDB 7.0"
|
||||
curl -fsSL "https://www.mongodb.org/static/pgp/server-7.0.asc" | gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: http://repo.mongodb.org/apt/debian
|
||||
Suites: bookworm/mongodb-org/7.0
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/mongodb-server-7.0.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y mongodb-org
|
||||
MONGO_VERSION="7.0" setup_mongodb
|
||||
fi
|
||||
msg_ok "Installed MongoDB"
|
||||
|
||||
msg_info "Installing UniFi Network Server"
|
||||
curl -fsSL "https://dl.ui.com/unifi/unifi-repo.gpg" -o "/usr/share/keyrings/unifi-repo.gpg"
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: https://www.ui.com/downloads/unifi/debian
|
||||
Suites: stable
|
||||
Components: ubiquiti
|
||||
Architectures: amd64
|
||||
Signed-By: /usr/share/keyrings/unifi-repo.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y unifi
|
||||
msg_ok "Installed UniFi Network Server"
|
||||
|
||||
|
||||
@ -14,25 +14,21 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
coreutils \
|
||||
debconf-utils
|
||||
$STD apt install -y debconf-utils
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing UrBackup Server"
|
||||
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Debian_12/Release.key | gpg --dearmor -o /usr/share/keyrings/home-uroni.gpg
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/home-uroni.sources >/dev/null
|
||||
Types: deb
|
||||
URIs: http://download.opensuse.org/repositories/home:/uroni/Debian_12/
|
||||
Suites: ./
|
||||
Components:
|
||||
Signed-By: /usr/share/keyrings/home-uroni.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
setup_deb822_repo \
|
||||
"urbackup" \
|
||||
"https://download.opensuse.org/repositories/home:uroni/Debian_13/Release.key" \
|
||||
"http://download.opensuse.org/repositories/home:/uroni/Debian_13/" \
|
||||
"./" \
|
||||
""
|
||||
|
||||
msg_info "Setting up UrBackup Server"
|
||||
mkdir -p /opt/urbackup/backups
|
||||
echo "urbackup-server urbackup/backuppath string /opt/urbackup/backups" | debconf-set-selections
|
||||
$STD apt install -y urbackup-server
|
||||
msg_ok "Installed UrBackup Server"
|
||||
msg_ok "Setup UrBackup Server"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@ -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
|
||||
|
||||
@ -14,9 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
ca-certificates \
|
||||
build-essential
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="verdaccio" setup_nodejs
|
||||
@ -24,7 +22,6 @@ NODE_VERSION="22" NODE_MODULE="verdaccio" setup_nodejs
|
||||
msg_info "Configuring Verdaccio"
|
||||
mkdir -p /opt/verdaccio/config
|
||||
mkdir -p /opt/verdaccio/storage
|
||||
|
||||
cat <<EOF >/opt/verdaccio/config/config.yaml
|
||||
# Verdaccio configuration
|
||||
storage: /opt/verdaccio/storage
|
||||
@ -58,7 +55,6 @@ web:
|
||||
sort_packages: asc
|
||||
login: true
|
||||
EOF
|
||||
|
||||
chown -R root:root /opt/verdaccio
|
||||
chmod -R 755 /opt/verdaccio
|
||||
msg_ok "Configured Verdaccio"
|
||||
@ -81,7 +77,6 @@ KillMode=control-group
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now verdaccio
|
||||
msg_ok "Created Service"
|
||||
|
||||
|
||||
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
|
||||
@ -15,23 +15,9 @@ update_os
|
||||
|
||||
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" PHP_MAX_EXECUTION_TIME="600" setup_php
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="wavelog" MARIADB_DB_USER="waveloguser" setup_mariadb_db
|
||||
fetch_and_deploy_gh_release "wavelog" "wavelog/wavelog" "tarball"
|
||||
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=wavelog
|
||||
DB_USER=waveloguser
|
||||
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 "Wavelog-Credentials"
|
||||
echo "Wavelog Database User: $DB_USER"
|
||||
echo "Wavelog Database Password: $DB_PASS"
|
||||
echo "Wavelog Database Name: $DB_NAME"
|
||||
} >>~/wavelog.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Configuring Wavelog"
|
||||
chown -R www-data:www-data /opt/wavelog/
|
||||
find /opt/wavelog/ -type d -exec chmod 755 {} \;
|
||||
|
||||
@ -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