Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
8d6675ffb7 fix(migration): atomic /usr/bin/update replacement to prevent syntax errors
All 8 migration scripts (runtipi, dockge, dokploy, coolify, komodo,
alpine-komodo, overseerr, jellyseerr) overwrote /usr/bin/update in-place
while the parent shell still had the file open for reading. Since the
new content is longer than the original, bash would read leftover bytes
after the child process exited, causing garbled output or syntax errors
like: /usr/bin/update: line 2: syntax error near unexpected token )

Fix:
- Write to a temp file first, then mv over /usr/bin/update (atomic
  inode replacement so parent shell sees EOF on old fd)
- Remove unnecessary shebang from heredoc content in overseerr/jellyseerr
  (consistent with all other update scripts and install.func)
2026-03-04 07:44:14 +01:00
46 changed files with 305 additions and 902 deletions

View File

@@ -8,7 +8,7 @@ on:
jobs: jobs:
check-new-script: check-new-script:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: self-hosted runs-on: coolify-runner
permissions: permissions:
pull-requests: write pull-requests: write
contents: read contents: read

View File

@@ -410,70 +410,18 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-03-06
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
- #### ✨ New Features
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
## 2026-03-05
### 🆕 New Scripts
- ddclient ([#12587](https://github.com/community-scripts/ProxmoxVE/pull/12587))
- Netbird ([#12585](https://github.com/community-scripts/ProxmoxVE/pull/12585))
- Papra ([#12577](https://github.com/community-scripts/ProxmoxVE/pull/12577))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fluid-calendar: add build-essential to install and update dependencies [@Copilot](https://github.com/Copilot) ([#12602](https://github.com/community-scripts/ProxmoxVE/pull/12602))
- Refactor: BentoPDF [@vhsdream](https://github.com/vhsdream) ([#12597](https://github.com/community-scripts/ProxmoxVE/pull/12597))
- Tianji: Fix the bug introduced by the refactor [@tremor021](https://github.com/tremor021) ([#12564](https://github.com/community-scripts/ProxmoxVE/pull/12564))
- PowerDNS: use 'launch=' instead of 'launch+=' for gsqlite3 backend [@MickLesk](https://github.com/MickLesk) ([#12579](https://github.com/community-scripts/ProxmoxVE/pull/12579))
### 🗑️ Deleted Scripts
- Suwayomi-Server: remove due to inactivity and very low usage [@MickLesk](https://github.com/MickLesk) ([#12596](https://github.com/community-scripts/ProxmoxVE/pull/12596))
### 💾 Core
- #### 🔧 Refactor
- core: add var_os / var_version to whitelist for app.vars [@MickLesk](https://github.com/MickLesk) ([#12576](https://github.com/community-scripts/ProxmoxVE/pull/12576))
## 2026-03-04 ## 2026-03-04
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- fix: gitea-mirror [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12549](https://github.com/community-scripts/ProxmoxVE/pull/12549))
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526)) - fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
- update: stirling-pdf: java 25 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12552](https://github.com/community-scripts/ProxmoxVE/pull/12552))
- Docmost: register NoopAuditService globally when EE submodule is missing [@MickLesk](https://github.com/MickLesk) ([#12551](https://github.com/community-scripts/ProxmoxVE/pull/12551))
- jellyseer/overseer migration corrupting /usr/bin/update [@MickLesk](https://github.com/MickLesk) ([#12539](https://github.com/community-scripts/ProxmoxVE/pull/12539))
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
- #### 🔧 Refactor
- Fluid-Calendar: NodeJS bump [@tremor021](https://github.com/tremor021) ([#12558](https://github.com/community-scripts/ProxmoxVE/pull/12558))
- Refactor: LiteLLM [@tremor021](https://github.com/tremor021) ([#12550](https://github.com/community-scripts/ProxmoxVE/pull/12550))
### 💾 Core ### 💾 Core
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- tools: fall back to distro packages for psql [@MickLesk](https://github.com/MickLesk) ([#12542](https://github.com/community-scripts/ProxmoxVE/pull/12542))
- fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521)) - fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521))
## 2026-03-03 ## 2026-03-03

View File

@@ -27,21 +27,21 @@ function update_script() {
fi fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
msg_info "Updating RustDesk Server to v${RELEASE}" msg_info "Updating RustDesk Server to v${RELEASE}"
$STD apk -U upgrade $STD apk -U upgrade
$STD service rustdesk-server-hbbs stop $STD service rustdesk-server-hbbs stop
$STD service rustdesk-server-hbbr stop $STD service rustdesk-server-hbbr stop
temp_file1=$(mktemp) temp_file1=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1" curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
$STD unzip "$temp_file1" $STD unzip "$temp_file1"
cp -r amd64/* /opt/rustdesk-server/ cp -r amd64/* /opt/rustdesk-server/
echo "${RELEASE}" >~/.rustdesk-server echo "${RELEASE}" >~/.rustdesk-server
$STD service rustdesk-server-hbbs start $STD service rustdesk-server-hbbs start
$STD service rustdesk-server-hbbr start $STD service rustdesk-server-hbbr start
rm -rf amd64 rm -rf amd64
rm -f "$temp_file1" rm -f $temp_file1
msg_ok "Updated RustDesk Server" msg_ok "Updated RustDesk Server"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
@@ -56,7 +56,7 @@ function update_script() {
echo "${APIRELEASE}" >~/.rustdesk-api echo "${APIRELEASE}" >~/.rustdesk-api
$STD service rustdesk-api start $STD service rustdesk-api start
rm -rf release rm -rf release
rm -f "$temp_file2" rm -f $temp_file2
msg_ok "Updated RustDesk API" msg_ok "Updated RustDesk API"
else else
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}" msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"

View File

@@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="BentoPDF" APP="BentoPDF"
var_tags="${var_tags:-pdf-editor}" var_tags="${var_tags:-pdf-editor}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
@@ -35,32 +35,16 @@ function update_script() {
systemctl stop bentopdf systemctl stop bentopdf
msg_ok "Stopped Service" msg_ok "Stopped Service"
[[ -f /opt/bentopdf/.env.production ]] && cp /opt/bentopdf/.env.production /opt/production.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
msg_info "Updating BentoPDF" msg_info "Updating BentoPDF"
cd /opt/bentopdf cd /opt/bentopdf
$STD npm ci --no-audit --no-fund $STD npm ci --no-audit --no-fund
$STD npm install http-server -g
if [[ -f /opt/production.env ]]; then
mv /opt/production.env ./.env.production
else
cp ./.env.example ./.env.production
fi
export NODE_OPTIONS="--max-old-space-size=3072"
export SIMPLE_MODE=true export SIMPLE_MODE=true
export VITE_USE_CDN=true $STD npm run build -- --mode production
$STD npm run build:all
msg_ok "Updated BentoPDF" msg_ok "Updated BentoPDF"
msg_info "Starting Service" msg_info "Starting Service"
if grep -q '8080' /etc/systemd/system/bentopdf.service; then
sed -i -e 's|/bentopdf|/bentopdf/dist|' \
-e 's|npx.*|npx http-server -g -b -d false -r --no-dotfiles|' \
/etc/systemd/system/bentopdf.service
systemctl daemon-reload
fi
systemctl start bentopdf systemctl start bentopdf
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"

View File

@@ -33,23 +33,17 @@ function update_script() {
systemctl stop cryptpad systemctl stop cryptpad
msg_info "Stopped Service" msg_info "Stopped Service"
msg_info "Creating backup" msg_info "Backing up configuration"
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/ [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do msg_ok "Backed up configuration"
[ -d "/opt/cryptpad/${dir}" ] && mv "/opt/cryptpad/${dir}" "/tmp/cryptpad_${dir//\//_}"
done
msg_ok "Created backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
msg_info "Restoring backup" msg_info "Restoring configuration"
mv /opt/config.js /opt/cryptpad/config/ mv /opt/config.js /opt/cryptpad/config/
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do msg_ok "Configuration restored"
[ -d "/tmp/cryptpad_${dir//\//_}" ] && mv "/tmp/cryptpad_${dir//\//_}" "/opt/cryptpad/${dir}"
done
msg_ok "Restored backup"
msg_info "Updating CryptPad" msg_info "Updating CryptaPad"
cd /opt/cryptpad cd /opt/cryptpad
$STD npm ci $STD npm ci
$STD npm run install:components $STD npm run install:components

View File

@@ -1,46 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: mitchscobell
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ddclient.net/
APP="ddclient"
var_tags="${var_tags:-network}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/ddclient.conf ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ddclient"
$STD apt update
$STD apt install --only-upgrade -y ddclient
$STD systemctl restart ddclient
msg_ok "Updated ddclient"
msg_ok "Updated successfully!"
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@@ -48,17 +48,6 @@ function update_script() {
cd /opt/docmost cd /opt/docmost
mv /opt/.env /opt/docmost/.env mv /opt/.env /opt/docmost/.env
mv /opt/data /opt/docmost/data mv /opt/data /opt/docmost/data
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
# included in GitHub tarballs. The community NoopAuditService exists but
# is only exported by CoreModule child modules such as UserModule cannot
# resolve it. Making CoreModule @Global() exposes the token app-wide.
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
fi
$STD pnpm install --force $STD pnpm install --force
$STD pnpm build $STD pnpm build
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@@ -28,10 +28,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
ensure_dependencies build-essential
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop fluid-calendar systemctl stop fluid-calendar

View File

@@ -87,8 +87,6 @@ EOF
msg_ok "Old Enviroment fixed" msg_ok "Old Enviroment fixed"
fi fi
ensure_dependencies git
if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop gitea-mirror systemctl stop gitea-mirror
@@ -96,7 +94,7 @@ EOF
msg_info "Backup Data" msg_info "Backup Data"
mkdir -p /opt/gitea-mirror-backup/data mkdir -p /opt/gitea-mirror-backup/data
cp -r /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/ cp /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/
msg_ok "Backup Data" msg_ok "Backup Data"
msg_info "Installing Bun" msg_info "Installing Bun"
@@ -113,11 +111,12 @@ EOF
$STD bun run setup $STD bun run setup
$STD bun run build $STD bun run build
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4) APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
sudo sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
msg_ok "Updated and rebuilt ${APP}" msg_ok "Updated and rebuilt ${APP}"
msg_info "Restoring Data" msg_info "Restoring Data"
cp -r /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
msg_ok "Restored Data" msg_ok "Restored Data"
msg_info "Starting Service" msg_info "Starting Service"

View File

@@ -1,6 +0,0 @@
__ __ ___ __
____/ /___/ /____/ (_)__ ____ / /_
/ __ / __ / ___/ / / _ \/ __ \/ __/
/ /_/ / /_/ / /__/ / / __/ / / / /_
\__,_/\__,_/\___/_/_/\___/_/ /_/\__/

View File

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

View File

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

View File

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

View File

@@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Service" msg_ok "Stopped Service"
VENV_PATH="/opt/litellm/.venv" VENV_PATH="/opt/litellm/.venv"
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv PYTHON_VERSION="3.13" setup_uv
msg_info "Updating LiteLLM" msg_info "Updating LiteLLM"
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma

View File

@@ -1,47 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: TechHutTV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://netbird.io/
APP="NetBird"
var_tags="${var_tags:-network;vpn}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
var_tun="${var_tun:-yes}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/netbird/config.json ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Netbird"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated successfully!"
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 NetBird by entering the container and running:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}netbird up${CL}"

View File

@@ -1,68 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/papra-hq/papra
APP="Papra"
var_tags="${var_tags:-document-management}"
var_cpu="${var_cpu:-2}"
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}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/papra ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "papra" "papra-hq/papra"; then
msg_info "Stopping Service"
systemctl stop papra
msg_ok "Stopped Service"
msg_info "Backing up Configuration"
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
msg_info "Building Application"
cd /opt/papra
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
$STD pnpm install --frozen-lockfile
$STD pnpm --filter "@papra/app-client..." run build
$STD pnpm --filter "@papra/app-server..." run build
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
rm -f /opt/papra_env.bak
msg_ok "Built Application"
msg_info "Starting Service"
systemctl start papra
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}:1221${CL}"

View File

@@ -47,10 +47,7 @@ function update_script() {
cp /opt/poweradmin_powerdns.db.bak /opt/poweradmin/powerdns.db cp /opt/poweradmin_powerdns.db.bak /opt/poweradmin/powerdns.db
rm -rf /opt/poweradmin/install rm -rf /opt/poweradmin/install
rm -f /opt/poweradmin_settings.php.bak /opt/poweradmin_powerdns.db.bak rm -f /opt/poweradmin_settings.php.bak /opt/poweradmin_powerdns.db.bak
chown -R www-data:pdns /opt/poweradmin chown -R www-data:www-data /opt/poweradmin
chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
msg_ok "Updated Poweradmin" msg_ok "Updated Poweradmin"
msg_info "Restarting Services" msg_info "Restarting Services"

View File

@@ -29,7 +29,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "rustdesk-api"; then RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop rustdesk-hbbr systemctl stop rustdesk-hbbr
systemctl stop rustdesk-hbbs systemctl stop rustdesk-hbbs
@@ -44,7 +46,7 @@ function update_script() {
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb" fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
msg_info "Starting services" msg_info "Starting services"
systemctl start -q rustdesk-* systemctl start -q rustdesk-* --all
msg_ok "Services started" msg_ok "Services started"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"

View File

@@ -35,7 +35,7 @@ function update_script() {
fi fi
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="25" setup_java JAVA_VERSION="21" setup_java
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop stirlingpdf libreoffice-listener unoserver systemctl stop stirlingpdf libreoffice-listener unoserver

56
ct/suwayomiserver.sh Normal file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server
APP="SuwayomiServer"
var_tags="${var_tags:-media;manga}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/bin/suwayomi-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server"; then
JAVA_VERSION=21 setup_java
msg_info "Stopping Service"
systemctl stop suwayomi-server
msg_info "Stopped Service"
fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
msg_info "Starting Service"
systemctl start suwayomi-server
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"

View File

@@ -29,10 +29,6 @@ function update_script() {
exit exit
fi fi
if grep -q '^WF_CORS_ALLOW_ORIGINS=\*$' /opt/wealthfolio/.env; then
sed -i "s|^WF_CORS_ALLOW_ORIGINS=\*$|WF_CORS_ALLOW_ORIGINS=http://${LOCAL_IP}:8080|" /opt/wealthfolio/.env
fi
if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop wealthfolio systemctl stop wealthfolio

View File

@@ -19,7 +19,7 @@
"type": "default", "type": "default",
"script": "ct/bentopdf.sh", "script": "ct/bentopdf.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 1,
"ram": 4096, "ram": 4096,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",

View File

@@ -1,44 +0,0 @@
{
"name": "ddclient",
"slug": "ddclient",
"categories": [
4
],
"date_created": "2026-03-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://ddclient.net/",
"website": "https://ddclient.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ddclient.webp",
"config_path": "/etc/ddclient.conf",
"description": "ddclient is a Perl client used to update dynamic DNS entries for accounts on a wide range of dynamic DNS service providers. It supports multiple protocols and providers, allowing automatic IP address updates for your domain names.",
"install_methods": [
{
"type": "default",
"script": "ct/ddclient.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "After installation, edit `/etc/ddclient.conf` with your dynamic DNS provider credentials"
},
{
"type": "info",
"text": "Sample configuration is created for Namecheap but can be modified for other providers"
}
]
}

View File

@@ -1,5 +1,5 @@
{ {
"generated": "2026-03-06T18:13:12Z", "generated": "2026-03-04T06:16:35Z",
"versions": [ "versions": [
{ {
"slug": "2fauth", "slug": "2fauth",
@@ -39,9 +39,9 @@
{ {
"slug": "ampache", "slug": "ampache",
"repo": "ampache/ampache", "repo": "ampache/ampache",
"version": "7.9.2", "version": "7.9.1",
"pinned": false, "pinned": false,
"date": "2026-03-05T03:54:03Z" "date": "2026-02-25T08:52:58Z"
}, },
{ {
"slug": "argus", "slug": "argus",
@@ -193,9 +193,9 @@
{ {
"slug": "checkmate", "slug": "checkmate",
"repo": "bluewave-labs/Checkmate", "repo": "bluewave-labs/Checkmate",
"version": "v3.5.0", "version": "v3.4.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T19:51:22Z" "date": "2026-02-20T21:08:55Z"
}, },
{ {
"slug": "cleanuparr", "slug": "cleanuparr",
@@ -214,9 +214,9 @@
{ {
"slug": "comfyui", "slug": "comfyui",
"repo": "comfyanonymous/ComfyUI", "repo": "comfyanonymous/ComfyUI",
"version": "v0.16.3", "version": "v0.15.1",
"pinned": false, "pinned": false,
"date": "2026-03-05T23:18:25Z" "date": "2026-02-26T22:01:35Z"
}, },
{ {
"slug": "commafeed", "slug": "commafeed",
@@ -270,9 +270,9 @@
{ {
"slug": "databasus", "slug": "databasus",
"repo": "databasus/databasus", "repo": "databasus/databasus",
"version": "v3.17.0", "version": "v3.16.4",
"pinned": false, "pinned": false,
"date": "2026-03-06T07:07:22Z" "date": "2026-03-01T08:20:17Z"
}, },
{ {
"slug": "dawarich", "slug": "dawarich",
@@ -284,9 +284,9 @@
{ {
"slug": "discopanel", "slug": "discopanel",
"repo": "nickheyer/discopanel", "repo": "nickheyer/discopanel",
"version": "v2.0.0", "version": "v1.0.37",
"pinned": false, "pinned": false,
"date": "2026-03-06T08:19:39Z" "date": "2026-02-18T08:53:43Z"
}, },
{ {
"slug": "dispatcharr", "slug": "dispatcharr",
@@ -298,9 +298,9 @@
{ {
"slug": "docmost", "slug": "docmost",
"repo": "docmost/docmost", "repo": "docmost/docmost",
"version": "v0.70.1", "version": "v0.70.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T12:54:49Z" "date": "2026-03-03T20:33:08Z"
}, },
{ {
"slug": "domain-locker", "slug": "domain-locker",
@@ -326,9 +326,9 @@
{ {
"slug": "drawio", "slug": "drawio",
"repo": "jgraph/drawio", "repo": "jgraph/drawio",
"version": "v29.6.1", "version": "v29.5.2",
"pinned": false, "pinned": false,
"date": "2026-03-06T09:14:17Z" "date": "2026-02-22T10:36:14Z"
}, },
{ {
"slug": "duplicati", "slug": "duplicati",
@@ -382,9 +382,9 @@
{ {
"slug": "firefly", "slug": "firefly",
"repo": "firefly-iii/firefly-iii", "repo": "firefly-iii/firefly-iii",
"version": "v6.5.4", "version": "v6.5.2",
"pinned": false, "pinned": false,
"date": "2026-03-06T09:07:56Z" "date": "2026-03-03T05:42:27Z"
}, },
{ {
"slug": "fladder", "slug": "fladder",
@@ -438,9 +438,9 @@
{ {
"slug": "ghostfolio", "slug": "ghostfolio",
"repo": "ghostfolio/ghostfolio", "repo": "ghostfolio/ghostfolio",
"version": "2.247.0", "version": "2.246.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T07:48:00Z" "date": "2026-03-03T19:37:20Z"
}, },
{ {
"slug": "gitea", "slug": "gitea",
@@ -452,9 +452,9 @@
{ {
"slug": "gitea-mirror", "slug": "gitea-mirror",
"repo": "RayLabsHQ/gitea-mirror", "repo": "RayLabsHQ/gitea-mirror",
"version": "v3.12.4", "version": "v3.12.0",
"pinned": false, "pinned": false,
"date": "2026-03-06T05:02:40Z" "date": "2026-03-04T02:53:42Z"
}, },
{ {
"slug": "glance", "slug": "glance",
@@ -473,9 +473,9 @@
{ {
"slug": "gokapi", "slug": "gokapi",
"repo": "Forceu/Gokapi", "repo": "Forceu/Gokapi",
"version": "v2.2.3", "version": "v2.2.2",
"pinned": false, "pinned": false,
"date": "2026-03-04T21:29:16Z" "date": "2026-01-31T21:11:27Z"
}, },
{ {
"slug": "gotify", "slug": "gotify",
@@ -501,9 +501,9 @@
{ {
"slug": "grocy", "slug": "grocy",
"repo": "grocy/grocy", "repo": "grocy/grocy",
"version": "v4.6.0", "version": "v4.5.0",
"pinned": false, "pinned": false,
"date": "2026-03-06T17:35:19Z" "date": "2025-03-28T19:02:22Z"
}, },
{ {
"slug": "guardian", "slug": "guardian",
@@ -606,16 +606,16 @@
{ {
"slug": "invoiceninja", "slug": "invoiceninja",
"repo": "invoiceninja/invoiceninja", "repo": "invoiceninja/invoiceninja",
"version": "v5.12.70", "version": "v5.12.69",
"pinned": false, "pinned": false,
"date": "2026-03-06T01:53:38Z" "date": "2026-02-26T22:23:32Z"
}, },
{ {
"slug": "jackett", "slug": "jackett",
"repo": "Jackett/Jackett", "repo": "Jackett/Jackett",
"version": "v0.24.1292", "version": "v0.24.1275",
"pinned": false, "pinned": false,
"date": "2026-03-06T05:57:21Z" "date": "2026-03-04T05:53:40Z"
}, },
{ {
"slug": "jellystat", "slug": "jellystat",
@@ -641,9 +641,9 @@
{ {
"slug": "kapowarr", "slug": "kapowarr",
"repo": "Casvt/Kapowarr", "repo": "Casvt/Kapowarr",
"version": "V1.3.0", "version": "V1.2.0",
"pinned": false, "pinned": false,
"date": "2026-03-06T16:38:21Z" "date": "2025-04-16T14:55:28Z"
}, },
{ {
"slug": "karakeep", "slug": "karakeep",
@@ -662,16 +662,16 @@
{ {
"slug": "keycloak", "slug": "keycloak",
"repo": "keycloak/keycloak", "repo": "keycloak/keycloak",
"version": "26.5.5", "version": "26.5.4",
"pinned": false, "pinned": false,
"date": "2026-03-05T15:40:30Z" "date": "2026-02-20T09:19:45Z"
}, },
{ {
"slug": "kima-hub", "slug": "kima-hub",
"repo": "Chevron7Locked/kima-hub", "repo": "Chevron7Locked/kima-hub",
"version": "v1.6.2", "version": "v1.6.1",
"pinned": false, "pinned": false,
"date": "2026-03-05T05:38:02Z" "date": "2026-03-03T16:13:53Z"
}, },
{ {
"slug": "kimai", "slug": "kimai",
@@ -690,9 +690,9 @@
{ {
"slug": "koel", "slug": "koel",
"repo": "koel/koel", "repo": "koel/koel",
"version": "v8.3.1", "version": "v8.3.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T08:22:06Z" "date": "2026-01-08T21:32:58Z"
}, },
{ {
"slug": "koillection", "slug": "koillection",
@@ -872,9 +872,9 @@
{ {
"slug": "metube", "slug": "metube",
"repo": "alexta69/metube", "repo": "alexta69/metube",
"version": "2026.03.06", "version": "2026.03.03",
"pinned": false, "pinned": false,
"date": "2026-03-06T13:52:56Z" "date": "2026-03-03T19:15:55Z"
}, },
{ {
"slug": "miniflux", "slug": "miniflux",
@@ -1061,9 +1061,9 @@
{ {
"slug": "paperless-ngx", "slug": "paperless-ngx",
"repo": "paperless-ngx/paperless-ngx", "repo": "paperless-ngx/paperless-ngx",
"version": "v2.20.10", "version": "v2.20.9",
"pinned": false, "pinned": false,
"date": "2026-03-04T19:20:57Z" "date": "2026-02-28T10:17:35Z"
}, },
{ {
"slug": "patchmon", "slug": "patchmon",
@@ -1110,9 +1110,9 @@
{ {
"slug": "photoprism", "slug": "photoprism",
"repo": "photoprism/photoprism", "repo": "photoprism/photoprism",
"version": "260305-fad9d5395", "version": "251130-b3068414c",
"pinned": false, "pinned": false,
"date": "2026-03-05T20:25:12Z" "date": "2025-12-01T05:07:31Z"
}, },
{ {
"slug": "pihole-exporter", "slug": "pihole-exporter",
@@ -1138,9 +1138,9 @@
{ {
"slug": "pocketbase", "slug": "pocketbase",
"repo": "pocketbase/pocketbase", "repo": "pocketbase/pocketbase",
"version": "v0.36.6", "version": "v0.36.5",
"pinned": false, "pinned": false,
"date": "2026-03-06T08:07:09Z" "date": "2026-02-21T11:45:32Z"
}, },
{ {
"slug": "pocketid", "slug": "pocketid",
@@ -1229,9 +1229,9 @@
{ {
"slug": "pulse", "slug": "pulse",
"repo": "rcourtman/Pulse", "repo": "rcourtman/Pulse",
"version": "v5.1.21", "version": "v5.1.18",
"pinned": false, "pinned": false,
"date": "2026-03-06T12:13:08Z" "date": "2026-03-03T22:09:15Z"
}, },
{ {
"slug": "pve-scripts-local", "slug": "pve-scripts-local",
@@ -1306,9 +1306,9 @@
{ {
"slug": "recyclarr", "slug": "recyclarr",
"repo": "recyclarr/recyclarr", "repo": "recyclarr/recyclarr",
"version": "v8.4.0", "version": "v8.3.2",
"pinned": false, "pinned": false,
"date": "2026-03-06T01:25:59Z" "date": "2026-02-25T22:39:51Z"
}, },
{ {
"slug": "reitti", "slug": "reitti",
@@ -1333,10 +1333,10 @@
}, },
{ {
"slug": "rustdeskserver", "slug": "rustdeskserver",
"repo": "lejianwen/rustdesk-server", "repo": "rustdesk/rustdesk-server",
"version": "v0.1.2", "version": "1.1.15",
"pinned": false, "pinned": false,
"date": "2025-09-01T02:52:30Z" "date": "2026-01-12T05:38:30Z"
}, },
{ {
"slug": "rustypaste", "slug": "rustypaste",
@@ -1355,9 +1355,9 @@
{ {
"slug": "scanopy", "slug": "scanopy",
"repo": "scanopy/scanopy", "repo": "scanopy/scanopy",
"version": "v0.14.14", "version": "v0.14.11",
"pinned": false, "pinned": false,
"date": "2026-03-06T06:50:38Z" "date": "2026-03-02T08:48:42Z"
}, },
{ {
"slug": "scraparr", "slug": "scraparr",
@@ -1369,9 +1369,9 @@
{ {
"slug": "seaweedfs", "slug": "seaweedfs",
"repo": "seaweedfs/seaweedfs", "repo": "seaweedfs/seaweedfs",
"version": "4.15", "version": "4.13",
"pinned": false, "pinned": false,
"date": "2026-03-05T06:30:30Z" "date": "2026-02-17T01:09:45Z"
}, },
{ {
"slug": "seelf", "slug": "seelf",
@@ -1390,9 +1390,9 @@
{ {
"slug": "semaphore", "slug": "semaphore",
"repo": "semaphoreui/semaphore", "repo": "semaphoreui/semaphore",
"version": "v2.17.16", "version": "v2.17.15",
"pinned": false, "pinned": false,
"date": "2026-03-05T12:39:05Z" "date": "2026-02-28T09:04:40Z"
}, },
{ {
"slug": "shelfmark", "slug": "shelfmark",
@@ -1411,9 +1411,9 @@
{ {
"slug": "silverbullet", "slug": "silverbullet",
"repo": "silverbulletmd/silverbullet", "repo": "silverbulletmd/silverbullet",
"version": "2.5.2", "version": "2.4.1",
"pinned": false, "pinned": false,
"date": "2026-03-06T12:20:58Z" "date": "2026-01-16T12:08:28Z"
}, },
{ {
"slug": "slskd", "slug": "slskd",
@@ -1467,16 +1467,16 @@
{ {
"slug": "sportarr", "slug": "sportarr",
"repo": "Sportarr/Sportarr", "repo": "Sportarr/Sportarr",
"version": "v4.0.986.1061", "version": "v4.0.985.1060",
"pinned": false, "pinned": false,
"date": "2026-03-06T01:04:24Z" "date": "2026-03-04T01:00:04Z"
}, },
{ {
"slug": "stirling-pdf", "slug": "stirling-pdf",
"repo": "Stirling-Tools/Stirling-PDF", "repo": "Stirling-Tools/Stirling-PDF",
"version": "v2.7.0", "version": "v2.5.3",
"pinned": false, "pinned": false,
"date": "2026-03-06T11:21:47Z" "date": "2026-02-23T23:23:39Z"
}, },
{ {
"slug": "streamlink-webui", "slug": "streamlink-webui",
@@ -1565,9 +1565,9 @@
{ {
"slug": "tinyauth", "slug": "tinyauth",
"repo": "steveiliop56/tinyauth", "repo": "steveiliop56/tinyauth",
"version": "v5.0.1", "version": "v5.0.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T21:05:05Z" "date": "2026-03-02T18:43:57Z"
}, },
{ {
"slug": "traccar", "slug": "traccar",
@@ -1593,9 +1593,9 @@
{ {
"slug": "traefik", "slug": "traefik",
"repo": "traefik/traefik", "repo": "traefik/traefik",
"version": "v3.6.10", "version": "v3.6.9",
"pinned": false, "pinned": false,
"date": "2026-03-06T15:08:35Z" "date": "2026-02-23T17:21:17Z"
}, },
{ {
"slug": "trilium", "slug": "trilium",
@@ -1607,9 +1607,9 @@
{ {
"slug": "trip", "slug": "trip",
"repo": "itskovacs/TRIP", "repo": "itskovacs/TRIP",
"version": "1.41.1", "version": "1.41.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T07:25:35Z" "date": "2026-02-23T17:57:31Z"
}, },
{ {
"slug": "tududi", "slug": "tududi",
@@ -1663,9 +1663,9 @@
{ {
"slug": "uptimekuma", "slug": "uptimekuma",
"repo": "louislam/uptime-kuma", "repo": "louislam/uptime-kuma",
"version": "2.2.0", "version": "2.1.3",
"pinned": false, "pinned": false,
"date": "2026-03-05T02:08:14Z" "date": "2026-02-19T05:37:30Z"
}, },
{ {
"slug": "vaultwarden", "slug": "vaultwarden",
@@ -1698,9 +1698,9 @@
{ {
"slug": "wallos", "slug": "wallos",
"repo": "ellite/Wallos", "repo": "ellite/Wallos",
"version": "v4.6.2", "version": "v4.6.1",
"pinned": false, "pinned": false,
"date": "2026-03-05T22:18:06Z" "date": "2026-02-10T21:06:46Z"
}, },
{ {
"slug": "wanderer", "slug": "wanderer",
@@ -1719,9 +1719,9 @@
{ {
"slug": "watcharr", "slug": "watcharr",
"repo": "sbondCo/Watcharr", "repo": "sbondCo/Watcharr",
"version": "v3.0.0", "version": "v2.1.1",
"pinned": false, "pinned": false,
"date": "2026-03-04T09:29:14Z" "date": "2025-07-15T22:38:01Z"
}, },
{ {
"slug": "watchyourlan", "slug": "watchyourlan",
@@ -1741,7 +1741,7 @@
"slug": "wealthfolio", "slug": "wealthfolio",
"repo": "afadil/wealthfolio", "repo": "afadil/wealthfolio",
"version": "v3.0.3", "version": "v3.0.3",
"pinned": true, "pinned": false,
"date": "2026-03-03T21:47:55Z" "date": "2026-03-03T21:47:55Z"
}, },
{ {
@@ -1824,9 +1824,9 @@
{ {
"slug": "zitadel", "slug": "zitadel",
"repo": "zitadel/zitadel", "repo": "zitadel/zitadel",
"version": "v4.12.1", "version": "v4.12.0",
"pinned": false, "pinned": false,
"date": "2026-03-04T12:40:17Z" "date": "2026-03-02T08:16:10Z"
}, },
{ {
"slug": "zoraxy", "slug": "zoraxy",
@@ -1838,9 +1838,9 @@
{ {
"slug": "zwave-js-ui", "slug": "zwave-js-ui",
"repo": "zwave-js/zwave-js-ui", "repo": "zwave-js/zwave-js-ui",
"version": "v11.14.0", "version": "v11.12.0",
"pinned": false, "pinned": false,
"date": "2026-03-06T09:34:32Z" "date": "2026-02-19T10:14:19Z"
} }
] ]
} }

View File

@@ -1,50 +0,0 @@
{
"name": "NetBird",
"slug": "netbird",
"categories": [4],
"date_created": "2026-03-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://docs.netbird.io/",
"website": "https://netbird.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/netbird.webp",
"config_path": "/etc/netbird/config.json",
"description": "NetBird is an open source VPN management platform that creates secure peer-to-peer networks using WireGuard. It enables secure connectivity between devices anywhere in the world without complex firewall configurations or port forwarding. NetBird offers features like zero-configuration networking, SSO integration, access control policies, and a centralized management dashboard. It's designed to be simple to deploy and manage, making it ideal for connecting remote teams, securing IoT devices, or building secure infrastructure networks.",
"install_methods": [
{
"type": "default",
"script": "ct/netbird.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "The NetBird client (agent) allows a peer to join a pre-existing NetBird deployment. If a NetBird deployment is not yet available, there are both managed and self-hosted options available.",
"type": "info"
},
{
"text": "After installation, enter the container and run `netbird` to view the commands.",
"type": "info"
},
{
"text": "Use a Setup Key from your NetBird dashboard or SSO login to authenticate during setup or in the container.",
"type": "info"
},
{
"text": "Check connection status with `netbird status`.",
"type": "info"
}
]
}

View File

@@ -1,56 +0,0 @@
{
"name": "Papra",
"slug": "papra",
"categories": [
12
],
"date_created": "2026-03-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 1221,
"documentation": "https://github.com/CorentinTh/papra",
"website": "https://github.com/CorentinTh/papra",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/papra.webp",
"config_path": "/opt/papra/.env",
"description": "Papra is a modern, self-hosted document management system with full-text search, OCR support, and automatic document processing. Built with Node.js and featuring a clean web interface for organizing and managing your documents.",
"install_methods": [
{
"type": "default",
"script": "ct/papra.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "First visit will prompt you to create an account",
"type": "info"
},
{
"text": "Tesseract OCR is pre-installed for all languages",
"type": "info"
},
{
"text": "Documents are stored in /opt/papra/app-data/documents",
"type": "info"
},
{
"text": "Ingestion folder available at /opt/papra/ingestion for automatic document import",
"type": "info"
},
{
"text": "Email functionality runs in dry-run mode by default",
"type": "warning"
}
]
}

View File

@@ -54,10 +54,6 @@
{ {
"text": "To see admin password on Alpine, type `cat ~/rustdesk.creds` inside LXC.", "text": "To see admin password on Alpine, type `cat ~/rustdesk.creds` inside LXC.",
"type": "info" "type": "info"
},
{
"text": "This script uses hbbs/hbbr builds from `lejianwen/rustdesk-server` (instead of the official repo) for full compatibility with the RustDesk API (SSO/OAuth). See `https://github.com/community-scripts/ProxmoxVE/issues/12079`.",
"type": "info"
} }
] ]
} }

View File

@@ -0,0 +1,40 @@
{
"name": "Suwayomi-Server",
"slug": "suwayomi-server",
"categories": [
13
],
"date_created": "2025-08-01",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4567,
"documentation": "https://github.com/Suwayomi/Suwayomi-Server/wiki",
"website": "https://github.com/Suwayomi/Suwayomi-Server",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/suwayomi.webp",
"config_path": "",
"description": "A free and open source manga reader server that runs extensions built for Mihon (Tachiyomi).",
"install_methods": [
{
"type": "default",
"script": "ct/suwayomiserver.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "This application can be conflicting with Kaspersky products. You maybe need to disable Kaspersky in order to use this application.",
"type": "info"
}
]
}

View File

@@ -13,10 +13,10 @@ setting_up_container
network_check network_check
update_os update_os
RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Installing RustDesk Server v${RELEASE}" msg_info "Installing RustDesk Server v${RELEASE}"
temp_file1=$(mktemp) temp_file1=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1" curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
$STD unzip "$temp_file1" $STD unzip "$temp_file1"
mv amd64 /opt/rustdesk-server mv amd64 /opt/rustdesk-server
mkdir -p /root/.config/rustdesk mkdir -p /root/.config/rustdesk

View File

@@ -19,12 +19,8 @@ fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "
msg_info "Setup BentoPDF" msg_info "Setup BentoPDF"
cd /opt/bentopdf cd /opt/bentopdf
$STD npm ci --no-audit --no-fund $STD npm ci --no-audit --no-fund
$STD npm install http-server -g
cp ./.env.example ./.env.production
export NODE_OPTIONS="--max-old-space-size=3072"
export SIMPLE_MODE=true export SIMPLE_MODE=true
export VITE_USE_CDN=true $STD npm run build -- --mode production
$STD npm run build:all
msg_ok "Setup BentoPDF" msg_ok "Setup BentoPDF"
msg_info "Creating Service" msg_info "Creating Service"
@@ -35,8 +31,8 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
WorkingDirectory=/opt/bentopdf/dist WorkingDirectory=/opt/bentopdf
ExecStart=/usr/bin/npx http-server -g -b -d false -r --no-dotfiles ExecStart=/usr/bin/npx serve dist -p 8080
Restart=always Restart=always
RestartSec=10 RestartSec=10

View File

@@ -33,7 +33,7 @@ done
# Install MongoDB Database Tools via direct .deb (no APT repo for Debian 13) # Install MongoDB Database Tools via direct .deb (no APT repo for Debian 13)
[[ "$(get_os_info id)" == "ubuntu" ]] && MONGO_DIST="ubuntu2204" || MONGO_DIST="debian12" [[ "$(get_os_info id)" == "ubuntu" ]] && MONGO_DIST="ubuntu2204" || MONGO_DIST="debian12"
MONGO_VERSION=$(get_latest_gh_tag "mongodb/mongo-tools" "100." || echo "100.14.1") MONGO_VERSION=$(get_latest_gh_tag "mongodb/mongo-tools" "100." || echo "100.14.1")
fetch_and_deploy_from_url "https://fastdl.mongodb.org/tools/db/mongodb-database-tools-${MONGO_DIST}-x86_64-${MONGO_VERSION}.deb" "" fetch_and_deploy_from_url "https://fastdl.mongodb.org/tools/db/mongodb-database-tools-${MONGO_DIST}-x86_64-${MONGO_VERSION}.deb"
mkdir -p /usr/local/mongodb-database-tools/bin mkdir -p /usr/local/mongodb-database-tools/bin
[[ -f /usr/bin/mongodump ]] && ln -sf /usr/bin/mongodump /usr/local/mongodb-database-tools/bin/mongodump [[ -f /usr/bin/mongodump ]] && ln -sf /usr/bin/mongodump /usr/local/mongodb-database-tools/bin/mongodump
[[ -f /usr/bin/mongorestore ]] && ln -sf /usr/bin/mongorestore /usr/local/mongodb-database-tools/bin/mongorestore [[ -f /usr/bin/mongorestore ]] && ln -sf /usr/bin/mongorestore /usr/local/mongodb-database-tools/bin/mongorestore

View File

@@ -1,37 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 mitchscobell
# Author: mitchscobell
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ddclient.net/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing ddclient"
DEBIAN_FRONTEND=noninteractive $STD apt -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y ddclient
msg_ok "Installed ddclient"
msg_info "Creating ddclient service"
cat << EOF >/etc/ddclient.conf
protocol=namecheap
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
use=web, web=dynamicdns.park-your-domain.com/getip
server=dynamicdns.park-your-domain.com
login=yourdomain.com
password='your-ddns-password'
@,www
EOF
chmod 600 /etc/ddclient.conf
systemctl enable -q --now ddclient
msg_ok "Created ddclient service"
motd_ssh
customize
cleanup_lxc

View File

@@ -26,17 +26,6 @@ fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
msg_info "Configuring Docmost (Patience)" msg_info "Configuring Docmost (Patience)"
cd /opt/docmost cd /opt/docmost
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
# included in GitHub tarballs. The community NoopAuditService exists but
# is only exported by CoreModule child modules such as UserModule cannot
# resolve it. Making CoreModule @Global() exposes the token app-wide.
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
fi
mv .env.example .env mv .env.example .env
mkdir data mkdir data
sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \

View File

@@ -14,14 +14,12 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y zip
build-essential \
zip
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
NODE_VERSION="24" setup_nodejs NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball" fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
msg_info "Configuring fluid-calendar" msg_info "Configuring fluid-calendar"

View File

@@ -18,8 +18,7 @@ $STD apt install -y \
build-essential \ build-essential \
openssl \ openssl \
sqlite3 \ sqlite3 \
unzip \ unzip
git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Bun" msg_info "Installing Bun"

View File

@@ -20,8 +20,24 @@ $STD apt install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="litellm_db" PG_DB_USER="litellm" setup_postgresql_db PYTHON_VERSION="3.13" setup_uv
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv
msg_info "Setting up PostgreSQL"
DB_NAME="litellm_db"
DB_USER="litellm"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
{
echo "${APPLICATION} Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/litellm.creds
msg_ok "Set up PostgreSQL"
msg_info "Setting up Virtual Environment" msg_info "Setting up Virtual Environment"
mkdir -p /opt/litellm mkdir -p /opt/litellm
@@ -37,9 +53,10 @@ mkdir -p /opt
cat <<EOF >/opt/litellm/litellm.yaml cat <<EOF >/opt/litellm/litellm.yaml
general_settings: general_settings:
master_key: sk-1234 master_key: sk-1234
database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME
store_model_in_db: true store_model_in_db: true
EOF EOF
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "Configured LiteLLM" msg_ok "Configured LiteLLM"
@@ -56,6 +73,7 @@ Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now litellm systemctl enable -q --now litellm
msg_ok "Created Service" msg_ok "Created Service"

View File

@@ -1,180 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: TechHutTV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://netbird.io/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing NetBird"
setup_deb822_repo \
"netbird" \
"https://pkgs.netbird.io/debian/public.key" \
"https://pkgs.netbird.io/debian" \
"stable"
$STD apt install -y netbird
msg_ok "Installed NetBird"
msg_info "Starting NetBird Service"
systemctl enable -q --now netbird
msg_ok "Started NetBird Service"
echo ""
echo ""
echo -e "${BL}NetBird Deployment Type${CL}"
echo "─────────────────────────────────────────"
echo "Are you using NetBird Managed or Self-Hosted?"
echo ""
echo " 1) NetBird Managed (default) - Use NetBird's managed service"
echo " 2) Self-Hosted - Use your own NetBird management server"
echo ""
read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-1}"
NETBIRD_MGMT_URL=""
case "$DEPLOYMENT_TYPE" in
1)
msg_ok "Using NetBird Managed service"
;;
2)
echo ""
echo -e "${BL}Self-Hosted Configuration${CL}"
echo "─────────────────────────────────────────"
echo "Enter your NetBird management server URL."
echo "Example: https://management.example.com"
echo ""
read -r -p "Management URL: " NETBIRD_MGMT_URL
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_warn "No management URL provided. Run 'netbird up --management-url <url>' to connect."
else
NETBIRD_MGMT_URL="${NETBIRD_MGMT_URL%/}"
msg_ok "Management URL configured: ${NETBIRD_MGMT_URL}"
fi
;;
*)
msg_warn "Invalid selection. Using NetBird Managed service."
;;
esac
echo ""
echo ""
echo -e "${BL}NetBird Connection Setup${CL}"
echo "─────────────────────────────────────────"
echo "Choose how to connect to your NetBird network:"
echo ""
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
echo " 1) Setup Key (default) - Use a pre-generated setup key"
echo " 2) SSO Login - Authenticate via browser with your identity provider"
echo " 3) Skip - Configure later with 'netbird up'"
else
echo " 1) Setup Key (default) - Use a pre-generated setup key"
echo " 2) Skip - Configure later with 'netbird up'"
fi
echo ""
read -r -p "Select authentication method [1]: " AUTH_METHOD
AUTH_METHOD="${AUTH_METHOD:-1}"
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
case "$AUTH_METHOD" in
1)
echo ""
echo "Enter your NetBird setup key from the NetBird dashboard."
echo ""
read -r -p "Setup key: " NETBIRD_SETUP_KEY
echo ""
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
msg_warn "No setup key provided. Run 'netbird up -k <key>' to connect."
else
msg_info "Connecting to NetBird with setup key"
if $STD netbird up -k "$NETBIRD_SETUP_KEY"; then
msg_ok "Connected to NetBird"
else
msg_warn "Connection failed. Run 'netbird up -k <key>' to retry."
fi
fi
;;
2)
echo ""
echo -e "${BL}SSO Authentication${CL}"
echo "─────────────────────────────────────────"
echo "A login URL will appear below."
echo "Copy the URL and open it in your browser to authenticate."
echo ""
msg_info "Starting SSO login"
netbird login 2>&1 || true
echo ""
msg_info "Connecting to NetBird"
if $STD netbird up; then
msg_ok "Connected to NetBird"
else
msg_warn "Connection failed. Run 'netbird up' to retry."
fi
;;
3)
msg_ok "Skipped. Run 'netbird up' to connect."
;;
*)
msg_warn "Invalid selection. Run 'netbird up' to connect."
;;
esac
else
case "$AUTH_METHOD" in
1)
echo ""
echo "Enter your NetBird setup key from the NetBird dashboard."
echo ""
read -r -p "Setup key: " NETBIRD_SETUP_KEY
echo ""
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_warn "No setup key provided. Run 'netbird up -k <key> --management-url <url>' to connect."
else
msg_warn "No setup key provided. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to connect."
fi
else
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_error "Management URL is required for self-hosted deployments. Please configure it first."
else
msg_info "Connecting to NetBird with setup key"
if $STD netbird up -k "$NETBIRD_SETUP_KEY" --management-url "$NETBIRD_MGMT_URL"; then
msg_ok "Connected to NetBird"
else
msg_warn "Connection failed. Run 'netbird up -k <key> --management-url $NETBIRD_MGMT_URL' to retry."
fi
fi
fi
;;
2)
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_ok "Skipped. Run 'netbird up --management-url <url>' to connect."
else
msg_ok "Skipped. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to connect."
fi
;;
*)
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_warn "Invalid selection. Run 'netbird up --management-url <url>' to connect."
else
msg_warn "Invalid selection. Run 'netbird up --management-url $NETBIRD_MGMT_URL' to connect."
fi
;;
esac
fi
motd_ssh
customize
cleanup_lxc

View File

@@ -1,79 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/papra-hq/papra
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 \
tesseract-ocr \
tesseract-ocr-all
msg_ok "Installed Dependencies"
RELEASE=$(curl -fsSL https://api.github.com/repos/papra-hq/papra/releases | grep -oP '"tag_name":\s*"\K@papra/app@[^"]+' | head -n1)
fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" "${RELEASE}" "/opt/papra"
pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json)
NODE_VERSION="24" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs
msg_info "Installing Papra (Patience)"
cd /opt/papra
$STD pnpm install --frozen-lockfile
$STD pnpm --filter "@papra/app-client..." run build
$STD pnpm --filter "@papra/app-server..." run build
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
msg_ok "Installed Papra"
msg_info "Configuring Papra"
mkdir -p /opt/papra_data/{db,documents,ingestion}
[[ ! -f /opt/papra_data/.secret ]] && openssl rand -hex 32 >/opt/papra_data/.secret
cat <<EOF >/opt/papra/apps/papra-server/.env
NODE_ENV=production
SERVER_SERVE_PUBLIC_DIR=true
PORT=1221
DATABASE_URL=file:/opt/papra_data/db/db.sqlite
DOCUMENT_STORAGE_FILESYSTEM_ROOT=/opt/papra_data/documents
PAPRA_CONFIG_DIR=/opt/papra_data
AUTH_SECRET=$(cat /opt/papra_data/.secret)
BETTER_AUTH_SECRET=$(cat /opt/papra_data/.secret)
BETTER_AUTH_TELEMETRY=0
CLIENT_BASE_URL=http://${LOCAL_IP}:1221
SERVER_BASE_URL=http://${LOCAL_IP}:1221
EMAILS_DRY_RUN=true
INGESTION_FOLDER_IS_ENABLED=true
INGESTION_FOLDER_ROOT_PATH=/opt/papra_data/ingestion
EOF
msg_ok "Configured Papra"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/papra.service
[Unit]
Description=Papra Document Management
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/papra/apps/papra-server
EnvironmentFile=/opt/papra/apps/papra-server/.env
ExecStartPre=/usr/bin/pnpm run migrate:up
ExecStart=/usr/bin/node dist/index.js
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now papra
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -38,12 +38,6 @@ msg_info "Setting up PowerDNS"
$STD apt install -y \ $STD apt install -y \
pdns-server \ pdns-server \
pdns-backend-sqlite3 pdns-backend-sqlite3
sed -i 's/^launch=$/# launch=/' /etc/powerdns/pdns.conf
rm -f /etc/powerdns/pdns.d/bind.conf
cat <<EOF >/etc/powerdns/pdns.d/gsqlite3.conf
launch=gsqlite3
gsqlite3-database=/opt/poweradmin/powerdns.db
EOF
msg_ok "Setup PowerDNS" msg_ok "Setup PowerDNS"
fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball" fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
@@ -131,13 +125,9 @@ cat <<EOF >/etc/apache2/sites-enabled/poweradmin.conf
</VirtualHost> </VirtualHost>
EOF EOF
$STD a2enmod rewrite headers $STD a2enmod rewrite headers
chown -R www-data:pdns /opt/poweradmin chown -R www-data:www-data /opt/poweradmin
chmod 775 /opt/poweradmin $STD systemctl restart apache2
chown pdns:pdns /opt/poweradmin/powerdns.db msg_info "Created Service"
chmod 664 /opt/poweradmin/powerdns.db
usermod -aG pdns www-data
$STD systemctl restart pdns apache2
msg_ok "Created Service"
motd_ssh motd_ssh
customize customize

View File

@@ -13,13 +13,10 @@ setting_up_container
network_check network_check
update_os update_os
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb" fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb" fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb" fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb" fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
systemctl enable -q --now rustdesk-hbbr
systemctl enable -q --now rustdesk-hbbs
systemctl enable -q --now rustdesk-api
motd_ssh motd_ssh
customize customize

View File

@@ -31,7 +31,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="25" setup_java JAVA_VERSION="21" setup_java
read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response
response=${response,,} # Convert to lowercase response=${response,,} # Convert to lowercase

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server
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 libc++-dev
msg_ok "Installed Dependencies"
JAVA_VERSION=21 setup_java
fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/suwayomi-server.service
[Unit]
Description=Suwayomi-Server Service
After=network.target
[Service]
ExecStart=/usr/bin/suwayomi-server
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now suwayomi-server
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -27,8 +27,6 @@ PG_VERSION="17" setup_postgresql
PG_DB_NAME="tianji_db" PG_DB_USER="tianji" setup_postgresql_db PG_DB_NAME="tianji_db" PG_DB_USER="tianji" setup_postgresql_db
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "tianji" "msgbyte/tianji" "tarball" fetch_and_deploy_gh_release "tianji" "msgbyte/tianji" "tarball"
TIANJI_SECRET=$(openssl rand -base64 256 | tr -dc 'A-Za-z' | head -c 64)
echo "Tianji Secret: $TIANJI_SECRET" >>~/tianji.creds
msg_info "Setting up Tianji" msg_info "Setting up Tianji"
cd /opt/tianji cd /opt/tianji

View File

@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
setup_rust setup_rust
NODE_VERSION="20" NODE_MODULE="pnpm" setup_nodejs NODE_VERSION="20" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "wealthfolio" "afadil/wealthfolio" "tarball" "v3.0.3" fetch_and_deploy_gh_release "wealthfolio" "afadil/wealthfolio" "tarball"
msg_info "Building Frontend (patience)" msg_info "Building Frontend (patience)"
cd /opt/wealthfolio cd /opt/wealthfolio
@@ -51,8 +51,8 @@ WF_DB_PATH=/opt/wealthfolio_data/wealthfolio.db
WF_SECRET_KEY=${SECRET_KEY} WF_SECRET_KEY=${SECRET_KEY}
WF_AUTH_PASSWORD_HASH=${WF_PASSWORD_HASH} WF_AUTH_PASSWORD_HASH=${WF_PASSWORD_HASH}
WF_STATIC_DIR=/opt/wealthfolio/dist WF_STATIC_DIR=/opt/wealthfolio/dist
WF_CORS_ALLOW_ORIGINS=*
WF_REQUEST_TIMEOUT_MS=30000 WF_REQUEST_TIMEOUT_MS=30000
WF_CORS_ALLOW_ORIGINS=http://${LOCAL_IP}:8080
EOF EOF
echo "WF_PASSWORD=${WF_PASSWORD}" >~/wealthfolio.creds echo "WF_PASSWORD=${WF_PASSWORD}" >~/wealthfolio.creds
msg_ok "Configured Wealthfolio" msg_ok "Configured Wealthfolio"

View File

@@ -1032,8 +1032,8 @@ load_vars_file() {
local VAR_WHITELIST=( local VAR_WHITELIST=(
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl
var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu
var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_net var_nesting var_ns var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain
) )
# Whitelist check helper # Whitelist check helper
@@ -1214,8 +1214,8 @@ default_var_settings() {
local VAR_WHITELIST=( local VAR_WHITELIST=(
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl
var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu
var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_net var_nesting var_ns var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
) )
# Snapshot: environment variables (highest precedence) # Snapshot: environment variables (highest precedence)
@@ -1376,8 +1376,8 @@ if ! declare -p VAR_WHITELIST >/dev/null 2>&1; then
declare -ag VAR_WHITELIST=( declare -ag VAR_WHITELIST=(
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu
var_gateway var_hostname var_ipv6_method var_mac var_mtu var_gateway var_hostname var_ipv6_method var_mac var_mtu
var_net var_ns var_os var_pw var_ram var_tags var_tun var_unprivileged var_net var_ns var_pw var_ram var_tags var_tun var_unprivileged
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_verbose var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage
) )
fi fi
@@ -1549,8 +1549,6 @@ _build_current_app_vars_tmp() {
echo "# Generated on $(date -u '+%Y-%m-%dT%H:%M:%SZ')" echo "# Generated on $(date -u '+%Y-%m-%dT%H:%M:%SZ')"
echo echo
echo "var_os=$(_sanitize_value "${var_os:-}")"
echo "var_version=$(_sanitize_value "${var_version:-}")"
echo "var_unprivileged=$(_sanitize_value "$_unpriv")" echo "var_unprivileged=$(_sanitize_value "$_unpriv")"
echo "var_cpu=$(_sanitize_value "$_cpu")" echo "var_cpu=$(_sanitize_value "$_cpu")"
echo "var_ram=$(_sanitize_value "$_ram")" echo "var_ram=$(_sanitize_value "$_ram")"
@@ -3619,16 +3617,16 @@ build_container() {
$PCT_OPTIONS_STRING" $PCT_OPTIONS_STRING"
fi fi
# Add searchdomain if specified # Add storage if specified
if [ -n "$SD" ]; then if [ -n "$SD" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
$SD" -searchdomain $SD"
fi fi
# Add nameserver if specified # Add nameserver if specified
if [ -n "$NS" ]; then if [ -n "$NS" ]; then
PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING PCT_OPTIONS_STRING="$PCT_OPTIONS_STRING
$NS" -nameserver $NS"
fi fi
# Network configuration # Network configuration

View File

@@ -6500,13 +6500,14 @@ function setup_postgresql() {
local SUITE local SUITE
case "$DISTRO_CODENAME" in case "$DISTRO_CODENAME" in
trixie | forky | sid) trixie | forky | sid)
if verify_repo_available "https://apt.postgresql.org/pub/repos/apt" "trixie-pgdg"; then if verify_repo_available "https://apt.postgresql.org/pub/repos/apt" "trixie-pgdg"; then
SUITE="trixie-pgdg" SUITE="trixie-pgdg"
else else
msg_warn "PGDG repo not available for ${DISTRO_CODENAME}, falling back to distro packages" SUITE="bookworm-pgdg"
USE_PGDG_REPO=false setup_postgresql
return $?
fi fi
;; ;;
*) *)
SUITE=$(get_fallback_suite "$DISTRO_ID" "$DISTRO_CODENAME" "https://apt.postgresql.org/pub/repos/apt") SUITE=$(get_fallback_suite "$DISTRO_ID" "$DISTRO_CODENAME" "https://apt.postgresql.org/pub/repos/apt")
@@ -7999,7 +8000,7 @@ EOF
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function fetch_and_deploy_from_url() { function fetch_and_deploy_from_url() {
local url="$1" local url="$1"
local directory="${2:-}" local directory="$2"
if [[ -z "$url" ]]; then if [[ -z "$url" ]]; then
msg_error "URL parameter is required" msg_error "URL parameter is required"