Compare commits

..

2 Commits

Author SHA1 Message Date
CanbiZ
2c6bee8691 english comment 2025-11-05 11:34:22 +01:00
CanbiZ
a0761478a0 Add robust package and repository management helpers
Introduces unified helper functions for package installation, repository management, and legacy cleanup across Debian/Ubuntu upgrades. Adds retry logic for APT operations, keyring cleanup, service management, version checks, and tool-specific repository setup. Refactors setup functions for Composer, FFmpeg, Go, Ghostscript, ImageMagick, Java, hardware acceleration, and MariaDB to use new helpers, improving reliability and upgrade safety.
2025-11-05 11:25:02 +01:00
33 changed files with 532 additions and 756 deletions

View File

@@ -10,66 +10,8 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-07
### 🆕 New Scripts
- infisical ([#8926](https://github.com/community-scripts/ProxmoxVE/pull/8926))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update script URLs to ProxmoxVE repository [@MickLesk](https://github.com/MickLesk) ([#8946](https://github.com/community-scripts/ProxmoxVE/pull/8946))
- tools.func: fix amd64 arm64 mismatch [@MickLesk](https://github.com/MickLesk) ([#8943](https://github.com/community-scripts/ProxmoxVE/pull/8943))
- ghostfolio: refactor CoinGecko key prompts in installer [@MickLesk](https://github.com/MickLesk) ([#8935](https://github.com/community-scripts/ProxmoxVE/pull/8935))
- flaresolverr: pin release to 3.4.3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8937](https://github.com/community-scripts/ProxmoxVE/pull/8937))
## 2025-11-06
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- OpenProject: Remove duplicate server_path_prefix configuration [@tremor021](https://github.com/tremor021) ([#8919](https://github.com/community-scripts/ProxmoxVE/pull/8919))
- Grist: Fix change directory to /opt/grist before build steps [@tremor021](https://github.com/tremor021) ([#8913](https://github.com/community-scripts/ProxmoxVE/pull/8913))
- Jotty hotfix: SSO_FALLBACK_LOCAL value [@vhsdream](https://github.com/vhsdream) ([#8907](https://github.com/community-scripts/ProxmoxVE/pull/8907))
- npm: add Debian version check to update script [@MickLesk](https://github.com/MickLesk) ([#8901](https://github.com/community-scripts/ProxmoxVE/pull/8901))
- #### ✨ New Features
- MongoDB: install script now use setup_mongodb [@MickLesk](https://github.com/MickLesk) ([#8897](https://github.com/community-scripts/ProxmoxVE/pull/8897))
- #### 🔧 Refactor
- Refactor: Graylog [@tremor021](https://github.com/tremor021) ([#8912](https://github.com/community-scripts/ProxmoxVE/pull/8912))
## 2025-11-05 ## 2025-11-05
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.2.3 [@vhsdream](https://github.com/vhsdream) ([#8861](https://github.com/community-scripts/ProxmoxVE/pull/8861))
- Jotty: increase RAM to 4GB [@vhsdream](https://github.com/vhsdream) ([#8887](https://github.com/community-scripts/ProxmoxVE/pull/8887))
- Zabbix: fix agent service recognition in update [@MickLesk](https://github.com/MickLesk) ([#8881](https://github.com/community-scripts/ProxmoxVE/pull/8881))
- #### 💥 Breaking Changes
- fix: npm: refactor for v2.13.x [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8870](https://github.com/community-scripts/ProxmoxVE/pull/8870))
- #### 🔧 Refactor
- Refactor: Open WebUI [@tremor021](https://github.com/tremor021) ([#8874](https://github.com/community-scripts/ProxmoxVE/pull/8874))
- Refactor(tools.func): Add Retry Logic, OS-Upgrade Safety, Smart Version Detection + 10 Critical Bugfixes [@MickLesk](https://github.com/MickLesk) ([#8871](https://github.com/community-scripts/ProxmoxVE/pull/8871))
### 🌐 Website
- #### 📝 Script Information
- npm: Increase RAM and HDD, update Certbot notes [@MickLesk](https://github.com/MickLesk) ([#8882](https://github.com/community-scripts/ProxmoxVE/pull/8882))
- Update config_path in donetick.json [@fyxtro](https://github.com/fyxtro) ([#8872](https://github.com/community-scripts/ProxmoxVE/pull/8872))
## 2025-11-04 ## 2025-11-04
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -33,13 +33,13 @@ function update_script() {
msg_error "You must upgrade your LXC to Debian Trixie before updating." msg_error "You must upgrade your LXC to Debian Trixie before updating."
exit exit
fi fi
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.4.3"; then if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
msg_info "Stopping service" msg_info "Stopping service"
systemctl stop flaresolverr systemctl stop flaresolverr
msg_ok "Stopped service" msg_ok "Stopped service"
rm -rf /opt/flaresolverr rm -rf /opt/flaresolverr
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.4.3" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz" fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Starting service" msg_info "Starting service"
systemctl start flaresolverr systemctl start flaresolverr

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-8192}" var_ram="${var_ram:-8192}"
var_disk="${var_disk:-30}" var_disk="${var_disk:-30}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -28,32 +28,15 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop graylog-datanode systemctl stop graylog-datanode
systemctl stop graylog-server systemctl stop graylog-server
msg_info "Stopped Service" msg_info "Stopped Service"
CURRENT_VERSION=$(apt list --installed 2>/dev/null | grep graylog-server | grep -oP '\d+\.\d+\.\d+') msg_info "Updating $APP"
$STD apt-get update
if dpkg --compare-versions "$CURRENT_VERSION" lt "6.3"; then $STD apt-get upgrade -y
MONGO_VERSION="8.0" setup_mongodb msg_ok "Updated $APP"
msg_info "Updating Graylog"
$STD apt update
$STD apt upgrade -y
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
$STD dpkg -i graylog-7.0-repository_latest.deb
$STD apt update
$STD apt install -y graylog-server graylog-datanode
rm -f graylog-7.0-repository_latest.deb
msg_ok "Updated Graylog"
elif dpkg --compare-versions "$CURRENT_VERSION" ge "7.0"; then
msg_info "Updating Graylog"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated Graylog"
fi
msg_info "Starting Service" msg_info "Starting Service"
systemctl start graylog-datanode systemctl start graylog-datanode

View File

@@ -47,7 +47,6 @@ function update_script() {
cp -r /opt/grist_bak/docs/* /opt/grist/docs/ cp -r /opt/grist_bak/docs/* /opt/grist/docs/
cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db
cp /opt/grist_bak/landing.db /opt/grist/landing.db cp /opt/grist_bak/landing.db /opt/grist/landing.db
cd /opt/grist
$STD yarn install $STD yarn install
$STD yarn run build:prod $STD yarn run build:prod
$STD yarn run install:python $STD yarn run install:python

View File

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

View File

@@ -93,7 +93,7 @@ EOF
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="2.2.3" RELEASE="2.2.2"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop immich-web systemctl stop immich-web

View File

@@ -1,60 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://infisical.com/
APP="Infisical"
var_tags="${var_tags:-auth}"
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 /etc/infisical ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping service"
$STD infisical-ctl stop
msg_ok "Service stopped"
msg_info "Creating backup"
DB_PASS=$(grep -Po '(?<=^Database Password:\s).*' ~/infisical.creds | head -n1)
PGPASSWORD=$DB_PASS pg_dump -U infisical -h localhost -d infisical_db > /opt/infisical_backup.sql
msg_ok "Created backup"
msg_info "Updating Infisical"
$STD apt update
$STD apt install -y infisical-core
$STD infisical-ctl reconfigure
msg_ok "Updated Infisical"
msg_info "Starting service"
infisical-ctl start
msg_ok "Started service"
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 it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

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

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: dkuku # Author: dkuku
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

View File

@@ -1,15 +1,15 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 Community-Script ORG # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: CrazyWolf13 # Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://nginxproxymanager.com/ # Source: https://nginxproxymanager.com/
APP="Nginx Proxy Manager" APP="Nginx Proxy Manager"
var_tags="${var_tags:-proxy}" var_tags="${var_tags:-proxy}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -28,12 +28,6 @@ function update_script() {
exit exit
fi fi
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
msg_error "Wrong Debian version detected!"
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
exit
fi
if command -v node &>/dev/null; then if command -v node &>/dev/null; then
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1) CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then
@@ -48,47 +42,60 @@ function update_script() {
fi fi
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
export NODE_OPTIONS="--openssl-legacy-provider"
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" | grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }') awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" msg_info "Downloading NPM v${RELEASE}"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
cd nginx-proxy-manager-"${RELEASE}" || exit
msg_ok "Downloaded NPM v${RELEASE}"
msg_info "Building Frontend"
(
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
cd ./frontend || exit
# Replace node-sass with sass in package.json before installation
sed -i 's/"node-sass".*$/"sass": "^1.92.1",/g' package.json
$STD yarn install --network-timeout 600000
$STD yarn build
)
msg_ok "Built Frontend"
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop openresty systemctl stop openresty
systemctl stop npm systemctl stop npm
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Cleaning old files" msg_info "Cleaning Old Files"
$STD rm -rf /app \ rm -rf /app \
/var/www/html \ /var/www/html \
/etc/nginx \ /etc/nginx \
/var/log/nginx \ /var/log/nginx \
/var/lib/nginx \ /var/lib/nginx \
/var/cache/nginx "$STD" /var/cache/nginx
msg_ok "Cleaned old files" msg_ok "Cleaned Old Files"
msg_info "Setting up Environment" msg_info "Setting up Environment"
ln -sf /usr/bin/python3 /usr/bin/python ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /opt/certbot/bin/certbot /usr/local/bin/certbot
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -sf /usr/local/openresty/nginx/ /etc/nginx ln -sf /usr/local/openresty/nginx/ /etc/nginx
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/backend/package.json sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/frontend/package.json NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
sed -i 's+^daemon+#daemon+g' /opt/nginxproxymanager/docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find /opt/nginxproxymanager -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do for NGINX_CONF in $NGINX_CONFS; do
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF" sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
done done
mkdir -p /var/www/html /etc/nginx/logs mkdir -p /var/www/html /etc/nginx/logs
cp -r /opt/nginxproxymanager/docker/rootfs/var/www/html/* /var/www/html/ cp -r docker/rootfs/var/www/html/* /var/www/html/
cp -r /opt/nginxproxymanager/docker/rootfs/etc/nginx/* /etc/nginx/ cp -r docker/rootfs/etc/nginx/* /etc/nginx/
cp /opt/nginxproxymanager/docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
cp /opt/nginxproxymanager/docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
rm -f /etc/nginx/conf.d/dev.conf rm -f /etc/nginx/conf.d/dev.conf
mkdir -p /tmp/nginx/body \ mkdir -p /tmp/nginx/body \
/run/nginx \ /run/nginx \
/data/nginx \ /data/nginx \
@@ -105,33 +112,27 @@ function update_script() {
/var/lib/nginx/cache/public \ /var/lib/nginx/cache/public \
/var/lib/nginx/cache/private \ /var/lib/nginx/cache/private \
/var/cache/nginx/proxy_temp /var/cache/nginx/proxy_temp
chmod -R 777 /var/cache/nginx chmod -R 777 /var/cache/nginx
chown root /tmp/nginx chown root /tmp/nginx
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem $STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
fi fi
mkdir -p /app/global /app/frontend/images
cp -r frontend/dist/* /app/frontend
cp -r frontend/app-images/* /app/frontend/images
cp -r backend/* /app
cp -r global/* /app/global
mkdir -p /app/frontend/images # Update Certbot and plugins in virtual environment
cp -r /opt/nginxproxymanager/backend/* /app if [ -d /opt/certbot ]; then
msg_ok "Set up Environment" $STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel
$STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare
msg_info "Building Frontend" fi
export NODE_OPTIONS="--max_old_space_size=2048 --openssl-legacy-provider" msg_ok "Setup Environment"
cd /opt/nginxproxymanager/frontend
# Replace node-sass with sass in package.json before installation
sed -E -i 's/"node-sass" *: *"([^"]*)"/"sass": "\1"/g' package.json
$STD yarn install --network-timeout 600000
$STD yarn build
cp -r /opt/nginxproxymanager/frontend/dist/* /app/frontend
cp -r /opt/nginxproxymanager/frontend/public/images/* /app/frontend/images
msg_ok "Built Frontend"
msg_info "Initializing Backend" msg_info "Initializing Backend"
rm -rf /app/config/default.json $STD rm -rf /app/config/default.json
if [ ! -f /app/config/production.json ]; then if [ ! -f /app/config/production.json ]; then
cat <<'EOF' >/app/config/production.json cat <<'EOF' >/app/config/production.json
{ {
@@ -147,37 +148,23 @@ function update_script() {
} }
EOF EOF
fi fi
cd /app cd /app || exit
export NODE_OPTIONS="--openssl-legacy-provider"
$STD yarn install --network-timeout 600000 $STD yarn install --network-timeout 600000
msg_ok "Initialized Backend" msg_ok "Initialized Backend"
msg_info "Updating Certbot"
[ -f /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg ] && rm -f /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg
[ -f /etc/apt/sources.list.d/openresty.list ] && rm -f /etc/apt/sources.list.d/openresty.list
[ ! -f /etc/apt/trusted.gpg.d/openresty.gpg ] && curl -fsSL https://openresty.org/package/pubkey.gpg | gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/openresty.gpg
[ ! -f /etc/apt/sources.list.d/openresty.sources ] && cat <<'EOF' >/etc/apt/sources.list.d/openresty.sources
Types: deb
URIs: http://openresty.org/package/debian/
Suites: bookworm
Components: openresty
Signed-By: /etc/apt/trusted.gpg.d/openresty.gpg
EOF
$STD apt update
$STD apt -y install openresty
if [ -d /opt/certbot ]; then
$STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel
$STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare
fi
msg_ok "Updated Certbot"
msg_info "Starting Services" msg_info "Starting Services"
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager sed -i 's/su npm npm/su root root/g' /etc/logrotate.d/nginx-proxy-manager
sed -i 's/include-system-site-packages = false/include-system-site-packages = true/g' /opt/certbot/pyvenv.cfg
systemctl enable -q --now openresty systemctl enable -q --now openresty
systemctl enable -q --now npm systemctl enable -q --now npm
systemctl restart openresty
msg_ok "Started Services" msg_ok "Started Services"
msg_info "Cleaning up"
rm -rf ~/nginx-proxy-manager-*
msg_ok "Cleaned"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck | Co-Author: havardthom | Co-Author: Slaviša Arežina (tremor021) # Author: havardthom
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://openwebui.com/ # Source: https://openwebui.com/
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}" var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}" var_disk="${var_disk:-25}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -23,7 +23,7 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /root/.open-webui ]]; then if [[ ! -d /opt/open-webui ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
@@ -50,8 +50,29 @@ function update_script() {
fi fi
fi fi
msg_info "Restarting Open WebUI to initiate update" msg_info "Updating ${APP} (Patience)"
systemctl restart open-webui cd /opt/open-webui
mkdir -p /opt/open-webui-backup
cp -rf /opt/open-webui/backend/data /opt/open-webui-backup
git add -A
$STD git stash
$STD git reset --hard
output=$(git pull --no-rebase)
if echo "$output" | grep -q "Already up to date."; then
msg_ok "$APP is already up to date."
exit
fi
systemctl stop open-webui.service
$STD npm install --force
export NODE_OPTIONS="--max-old-space-size=6000"
$STD npm run build
cd ./backend
$STD pip install -r requirements.txt -U
cp -rf /opt/open-webui-backup/* /opt/open-webui/backend
if git stash list | grep -q 'stash@{'; then
$STD git stash pop
fi
systemctl start open-webui.service
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -39,7 +39,6 @@ function update_script() {
msg_ok "Backup created" msg_ok "Backup created"
msg_info "Installing sonarqube" msg_info "Installing 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=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
unzip -q "$temp_file" -d /opt unzip -q "$temp_file" -d /opt

View File

@@ -42,8 +42,12 @@ function update_script() {
fi fi
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop zabbix-server $STD systemctl stop zabbix-server
systemctl stop "$AGENT_SERVICE" if systemctl list-unit-files | grep -q zabbix-agent2; then
$STD systemctl stop zabbix-agent2
else
$STD systemctl stop zabbix-agent
fi
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Updating Zabbix" msg_info "Updating Zabbix"
@@ -84,8 +88,12 @@ function update_script() {
msg_ok "Updated Zabbix" msg_ok "Updated Zabbix"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start zabbix-server $STD systemctl start zabbix-server
systemctl start "$AGENT_SERVICE" if systemctl list-unit-files | grep -q zabbix-agent2; then
$STD systemctl start zabbix-agent2
else
$STD systemctl start zabbix-agent
fi
systemctl restart apache2 systemctl restart apache2
msg_ok "Started Services" msg_ok "Started Services"

View File

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

View File

@@ -1,44 +1,44 @@
{ {
"name": "Graylog", "name": "Graylog",
"slug": "graylog", "slug": "graylog",
"categories": [ "categories": [
9 9
], ],
"date_created": "2025-02-12", "date_created": "2025-02-12",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 9000, "interface_port": 9000,
"documentation": "https://go2docs.graylog.org/current/home.htm", "documentation": "https://go2docs.graylog.org/current/home.htm",
"website": "https://graylog.org/", "website": "https://graylog.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp",
"config_path": "/etc/graylog/server/server.conf", "config_path": "/etc/graylog/server/server.conf",
"description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.", "description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/graylog.sh", "script": "ct/graylog.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 8192, "ram": 8192,
"hdd": 30, "hdd": 30,
"os": "debian", "os": "debian",
"version": "13" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
},
"notes": [
{
"text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
"type": "info"
}, },
{ "notes": [
"text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup", {
"type": "info" "text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
} "type": "info"
] },
{
"text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup",
"type": "info"
}
]
} }

View File

@@ -1,35 +0,0 @@
{
"name": "Infisical",
"slug": "infisical",
"categories": [
6
],
"date_created": "2025-11-07",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://infisical.com/docs/documentation/getting-started/overview",
"config_path": "/etc/infisical/infisical.rb",
"website": "https://infisical.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/infisical.webp",
"description": "Secrets, certificates, and access management on autopilot. All-in-one platform to securely manage application secrets, certificates, SSH keys, and configurations across your team and infrastructure.",
"install_methods": [
{
"type": "default",
"script": "ct/infisical.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

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

View File

@@ -20,8 +20,8 @@
"script": "ct/nginxproxymanager.sh", "script": "ct/nginxproxymanager.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 2048, "ram": 1024,
"hdd": 8, "hdd": 4,
"os": "debian", "os": "debian",
"version": "13" "version": "13"
} }
@@ -33,8 +33,12 @@
}, },
"notes": [ "notes": [
{ {
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.", "text": "Since there are hundreds of Certbot instances, it's necessary to install the specific Certbot of your preference. Running `/app/scripts/install-certbot-plugins` within the nginxproxymanager LXC shell will install many additional plugins.",
"type": "info" "type": "warning"
},
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
} }
] ]
} }

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.openwebui.com/", "documentation": "https://docs.openwebui.com/",
"website": "https://openwebui.com/", "website": "https://openwebui.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/open-webui.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/open-webui.webp",
"config_path": "/root/.env", "config_path": "/opt/open-webui/.env",
"description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI", "description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI",
"install_methods": [ "install_methods": [
{ {
@@ -23,7 +23,7 @@
"ram": 8192, "ram": 8192,
"hdd": 25, "hdd": 25,
"os": "debian", "os": "debian",
"version": "13" "version": "12"
} }
} }
], ],
@@ -35,10 +35,6 @@
{ {
"text": "Script contains optional installation of Ollama.", "text": "Script contains optional installation of Ollama.",
"type": "info" "type": "info"
},
{
"text": "Initial run of the application/container can take some time, depending on your host speed, as the application is installed/updated at runtime. Please be patient!",
"type": "warning"
} }
] ]
} }

View File

@@ -1,254 +1,4 @@
[ [
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.10",
"date": "2025-11-06T23:10:38Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.52.0",
"date": "2025-11-06T22:39:26Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.26.4",
"date": "2025-11-06T22:38:52Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.36",
"date": "2025-11-06T21:45:33Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.5",
"date": "2025-11-06T20:20:13Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.12",
"date": "2025-11-06T18:43:51Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-11.8.4",
"date": "2025-11-06T17:24:30Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.85.1",
"date": "2025-10-31T10:45:26Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.41.6",
"date": "2025-11-06T15:32:07Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.15.0",
"date": "2025-11-06T15:03:22Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.11.2",
"date": "2025-11-06T12:08:24Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.s3-snapshots-5",
"date": "2025-11-06T11:43:12Z"
},
{
"name": "transmission/transmission",
"version": "4.0.1-beta.1",
"date": "2024-12-13T00:16:24Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.17.0-beta20",
"date": "2025-11-06T10:49:56Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.3",
"date": "2025-11-06T09:56:20Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.11.06",
"date": "2025-11-06T08:45:02Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.100.1",
"date": "2025-11-06T07:53:11Z"
},
{
"name": "apache/tomcat",
"version": "9.0.112",
"date": "2025-11-06T07:49:59Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.252",
"date": "2025-11-06T05:55:30Z"
},
{
"name": "Kozea/Radicale",
"version": "v3.5.8",
"date": "2025-11-06T05:32:51Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.4",
"date": "2025-11-01T19:48:08Z"
},
{
"name": "apache/couchdb",
"version": "3.5.1-RC1",
"date": "2025-11-06T03:23:20Z"
},
{
"name": "Notifiarr/notifiarr",
"version": "v0.9.1",
"date": "2025-11-06T02:26:53Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-06T00:27:04Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.10",
"date": "2025-11-05T21:41:21Z"
},
{
"name": "neo4j/neo4j",
"version": "5.26.16",
"date": "2025-11-05T20:41:40Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.79.1.dev6",
"date": "2025-11-05T19:25:05Z"
},
{
"name": "home-assistant/core",
"version": "2025.11.0",
"date": "2025-11-05T19:23:12Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-11-05",
"date": "2025-11-05T18:08:26Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.118.2",
"date": "2025-11-05T18:07:04Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.5",
"date": "2025-10-06T15:25:17Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w45-4.14.1",
"date": "2025-11-05T16:56:57Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.11.6",
"date": "2025-11-04T09:43:16Z"
},
{
"name": "javedh-dev/tracktor",
"version": "0.5.1",
"date": "2025-11-05T15:51:02Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.6.4",
"date": "2025-11-05T15:57:00Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.2.9",
"date": "2025-11-05T13:55:39Z"
},
{
"name": "immich-app/immich",
"version": "v2.2.3",
"date": "2025-11-05T13:47:03Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.2.0.100-2.2.0.100_canary_2025-11-05",
"date": "2025-11-05T13:01:37Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.18.4",
"date": "2025-04-05T19:12:57Z"
},
{
"name": "getumbrel/umbrel",
"version": "1.5.0",
"date": "2025-11-05T11:10:20Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.2-alpha.1",
"date": "2025-11-05T09:55:26Z"
},
{
"name": "glpi-project/glpi",
"version": "11.0.2",
"date": "2025-11-05T09:55:05Z"
},
{
"name": "nicolargo/glances",
"version": "v4.4.1",
"date": "2025-11-05T09:08:23Z"
},
{
"name": "evcc-io/evcc",
"version": "0.209.7",
"date": "2025-11-05T08:32:08Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.1",
"date": "2025-11-05T06:06:08Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.535",
"date": "2025-11-05T05:30:07Z"
},
{
"name": "slskd/slskd",
"version": "0.24.0",
"date": "2025-11-05T02:17:00Z"
},
{
"name": "Sonarr/Sonarr",
"version": "v4.0.16.2944",
"date": "2025-11-05T01:56:48Z"
},
{
"name": "gethomepage/homepage",
"version": "v1.6.1",
"date": "2025-11-05T00:21:14Z"
},
{ {
"name": "FlareSolverr/FlareSolverr", "name": "FlareSolverr/FlareSolverr",
"version": "v3.4.4", "version": "v3.4.4",
@@ -259,15 +9,25 @@
"version": "v0.15.4", "version": "v0.15.4",
"date": "2025-11-04T22:34:12Z" "date": "2025-11-04T22:34:12Z"
}, },
{
"name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.21",
"date": "2025-11-04T22:05:17Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.11.1",
"date": "2025-11-04T20:55:51Z"
},
{ {
"name": "go-gitea/gitea", "name": "go-gitea/gitea",
"version": "v1.25.1", "version": "v1.25.1",
"date": "2025-11-04T20:01:09Z" "date": "2025-11-04T20:01:09Z"
}, },
{ {
"name": "runtipi/runtipi", "name": "home-assistant/core",
"version": "nightly", "version": "2025.10.4",
"date": "2025-11-04T19:16:17Z" "date": "2025-10-24T20:03:03Z"
}, },
{ {
"name": "element-hq/synapse", "name": "element-hq/synapse",
@@ -284,6 +44,21 @@
"version": "v1.30.6", "version": "v1.30.6",
"date": "2025-11-04T17:41:01Z" "date": "2025-11-04T17:41:01Z"
}, },
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0-s3-snapshots-4",
"date": "2025-11-04T16:46:01Z"
},
{
"name": "gethomepage/homepage",
"version": "v1.6.0",
"date": "2025-11-04T16:19:09Z"
},
{ {
"name": "VictoriaMetrics/VictoriaMetrics", "name": "VictoriaMetrics/VictoriaMetrics",
"version": "v1.129.1", "version": "v1.129.1",
@@ -304,11 +79,21 @@
"version": "1.11.4", "version": "1.11.4",
"date": "2025-11-04T12:43:30Z" "date": "2025-11-04T12:43:30Z"
}, },
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.535",
"date": "2025-11-04T12:31:36Z"
},
{ {
"name": "home-assistant/operating-system", "name": "home-assistant/operating-system",
"version": "16.3", "version": "16.3",
"date": "2025-11-04T12:28:47Z" "date": "2025-11-04T12:28:47Z"
}, },
{
"name": "mattermost/mattermost",
"version": "v10.11.6",
"date": "2025-11-04T09:43:16Z"
},
{ {
"name": "syncthing/syncthing", "name": "syncthing/syncthing",
"version": "v2.0.11", "version": "v2.0.11",
@@ -324,11 +109,36 @@
"version": "v3.0.9", "version": "v3.0.9",
"date": "2025-11-04T07:28:45Z" "date": "2025-11-04T07:28:45Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.24.247",
"date": "2025-11-04T05:53:52Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.4",
"date": "2025-11-01T19:48:08Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.0",
"date": "2025-11-04T04:47:23Z"
},
{
"name": "immich-app/immich",
"version": "v2.2.3",
"date": "2025-11-04T03:14:34Z"
},
{ {
"name": "esphome/esphome", "name": "esphome/esphome",
"version": "2025.10.4", "version": "2025.10.4",
"date": "2025-11-04T03:04:13Z" "date": "2025-11-04T03:04:13Z"
}, },
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.4",
"date": "2025-11-04T01:34:35Z"
},
{ {
"name": "hyperion-project/hyperion.ng", "name": "hyperion-project/hyperion.ng",
"version": "2.1.1", "version": "2.1.1",
@@ -339,16 +149,41 @@
"version": "v25.11.0", "version": "v25.11.0",
"date": "2025-11-04T00:32:21Z" "date": "2025-11-04T00:32:21Z"
}, },
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-04T00:27:08Z"
},
{ {
"name": "inventree/InvenTree", "name": "inventree/InvenTree",
"version": "1.1.2", "version": "1.1.2",
"date": "2025-11-03T23:16:29Z" "date": "2025-11-03T23:16:29Z"
}, },
{
"name": "BerriAI/litellm",
"version": "v1.79.1.rc.2",
"date": "2025-11-03T23:14:45Z"
},
{ {
"name": "gtsteffaniak/filebrowser", "name": "gtsteffaniak/filebrowser",
"version": "v1.0.0-stable", "version": "v1.0.0-stable",
"date": "2025-11-03T22:24:23Z" "date": "2025-11-03T22:24:23Z"
}, },
{
"name": "azukaar/Cosmos-Server",
"version": "v0.18.4",
"date": "2025-04-05T19:12:57Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.37",
"date": "2025-10-30T07:54:49Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.6.2",
"date": "2025-11-03T19:45:24Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-rc.0", "version": "@jupyter-notebook/ui-components@7.5.0-rc.0",
@@ -379,6 +214,31 @@
"version": "debian/12.1.34", "version": "debian/12.1.34",
"date": "2025-11-03T16:42:07Z" "date": "2025-11-03T16:42:07Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.0.17",
"date": "2025-11-03T15:30:01Z"
},
{
"name": "Sonarr/Sonarr",
"version": "v4.0.15.2941",
"date": "2025-06-20T17:20:54Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.117.3",
"date": "2025-10-28T12:00:42Z"
},
{
"name": "nicolargo/glances",
"version": "v4.4.1",
"date": "2025-11-03T13:52:05Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "7.0.0",
"date": "2025-11-03T12:22:00Z"
},
{ {
"name": "Paymenter/Paymenter", "name": "Paymenter/Paymenter",
"version": "v1.4.2", "version": "v1.4.2",
@@ -439,11 +299,21 @@
"version": "3.3.6", "version": "3.3.6",
"date": "2025-11-01T10:41:15Z" "date": "2025-11-01T10:41:15Z"
}, },
{
"name": "ollama/ollama",
"version": "v0.12.9",
"date": "2025-10-31T23:33:13Z"
},
{ {
"name": "tailscale/tailscale", "name": "tailscale/tailscale",
"version": "v1.90.6", "version": "v1.90.6",
"date": "2025-10-31T22:24:04Z" "date": "2025-10-31T22:24:04Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.209.6",
"date": "2025-10-31T20:13:49Z"
},
{ {
"name": "homarr-labs/homarr", "name": "homarr-labs/homarr",
"version": "v1.43.1", "version": "v1.43.1",
@@ -454,11 +324,26 @@
"version": "v3.4.0", "version": "v3.4.0",
"date": "2025-10-31T18:50:18Z" "date": "2025-10-31T18:50:18Z"
}, },
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-10-31",
"date": "2025-10-31T17:57:06Z"
},
{ {
"name": "pommee/goaway", "name": "pommee/goaway",
"version": "v0.62.12", "version": "v0.62.12",
"date": "2025-10-31T17:30:55Z" "date": "2025-10-31T17:30:55Z"
}, },
{
"name": "zitadel/zitadel",
"version": "v4.6.2",
"date": "2025-10-31T15:41:19Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "testing",
"date": "2025-10-30T14:33:36Z"
},
{ {
"name": "zabbix/zabbix", "name": "zabbix/zabbix",
"version": "7.4.5", "version": "7.4.5",
@@ -474,11 +359,26 @@
"version": "planka-1.1.1", "version": "planka-1.1.1",
"date": "2025-10-31T12:38:47Z" "date": "2025-10-31T12:38:47Z"
}, },
{
"name": "chrisvel/tududi",
"version": "v0.85.1",
"date": "2025-10-31T10:45:26Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w44-4.14.1",
"date": "2025-10-29T11:28:37Z"
},
{ {
"name": "garethgeorge/backrest", "name": "garethgeorge/backrest",
"version": "v1.10.1", "version": "v1.10.1",
"date": "2025-10-31T08:25:57Z" "date": "2025-10-31T08:25:57Z"
}, },
{
"name": "getumbrel/umbrel",
"version": "1.4.2",
"date": "2025-05-09T08:54:49Z"
},
{ {
"name": "pymedusa/Medusa", "name": "pymedusa/Medusa",
"version": "v1.0.24", "version": "v1.0.24",
@@ -499,6 +399,11 @@
"version": "v5.30.0", "version": "v5.30.0",
"date": "2025-10-30T16:52:58Z" "date": "2025-10-30T16:52:58Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.10.30",
"date": "2025-10-30T16:22:45Z"
},
{ {
"name": "AdguardTeam/AdGuardHome", "name": "AdguardTeam/AdGuardHome",
"version": "v0.107.69", "version": "v0.107.69",
@@ -514,6 +419,11 @@
"version": "v5.4", "version": "v5.4",
"date": "2025-10-30T14:25:23Z" "date": "2025-10-30T14:25:23Z"
}, },
{
"name": "neo4j/neo4j",
"version": "5.26.15",
"date": "2025-10-30T11:17:14Z"
},
{ {
"name": "docker/compose", "name": "docker/compose",
"version": "v2.40.3", "version": "v2.40.3",
@@ -569,11 +479,21 @@
"version": "350", "version": "350",
"date": "2025-10-29T09:51:00Z" "date": "2025-10-29T09:51:00Z"
}, },
{
"name": "pocket-id/pocket-id",
"version": "v1.14.2",
"date": "2025-10-29T08:37:03Z"
},
{ {
"name": "apache/cassandra", "name": "apache/cassandra",
"version": "cassandra-5.0.6", "version": "cassandra-5.0.6",
"date": "2025-10-29T07:40:47Z" "date": "2025-10-29T07:40:47Z"
}, },
{
"name": "SigNoz/signoz",
"version": "v0.99.0",
"date": "2025-10-29T06:32:09Z"
},
{ {
"name": "openobserve/openobserve", "name": "openobserve/openobserve",
"version": "v0.15.3", "version": "v0.15.3",
@@ -599,6 +519,11 @@
"version": "v4.4.5", "version": "v4.4.5",
"date": "2025-10-28T18:35:47Z" "date": "2025-10-28T18:35:47Z"
}, },
{
"name": "javedh-dev/tracktor",
"version": "0.4.4",
"date": "2025-10-28T17:39:14Z"
},
{ {
"name": "pi-hole/pi-hole", "name": "pi-hole/pi-hole",
"version": "v6.2.2", "version": "v6.2.2",
@@ -639,6 +564,11 @@
"version": "v0.27.0", "version": "v0.27.0",
"date": "2025-10-27T11:16:35Z" "date": "2025-10-27T11:16:35Z"
}, },
{
"name": "emqx/emqx",
"version": "e6.0.1-alpha.2",
"date": "2025-10-27T09:36:30Z"
},
{ {
"name": "Radarr/Radarr", "name": "Radarr/Radarr",
"version": "v5.28.0.10274", "version": "v5.28.0.10274",
@@ -694,11 +624,26 @@
"version": "v2.7.0", "version": "v2.7.0",
"date": "2025-10-23T17:15:07Z" "date": "2025-10-23T17:15:07Z"
}, },
{
"name": "HabitRPG/habitica",
"version": "v5.41.5",
"date": "2025-10-23T15:12:42Z"
},
{ {
"name": "Kareadita/Kavita", "name": "Kareadita/Kavita",
"version": "v0.8.8.3", "version": "v0.8.8.3",
"date": "2025-10-23T12:31:49Z" "date": "2025-10-23T12:31:49Z"
}, },
{
"name": "duplicati/duplicati",
"version": "v2.2.0.0_stable_2025-10-23",
"date": "2025-10-23T11:48:25Z"
},
{
"name": "rcourtman/Pulse",
"version": "issue-596",
"date": "2025-10-22T19:48:56Z"
},
{ {
"name": "louislam/uptime-kuma", "name": "louislam/uptime-kuma",
"version": "2.0.2", "version": "2.0.2",
@@ -779,6 +724,11 @@
"version": "v2.1.10", "version": "v2.1.10",
"date": "2025-10-18T18:46:36Z" "date": "2025-10-18T18:46:36Z"
}, },
{
"name": "Notifiarr/notifiarr",
"version": "v0.9.0",
"date": "2025-10-18T17:03:56Z"
},
{ {
"name": "TasmoAdmin/TasmoAdmin", "name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.2", "version": "v4.3.2",
@@ -814,11 +764,21 @@
"version": "RELEASE.2025-10-15T17-29-55Z", "version": "RELEASE.2025-10-15T17-29-55Z",
"date": "2025-10-16T19:33:51Z" "date": "2025-10-16T19:33:51Z"
}, },
{
"name": "open-webui/open-webui",
"version": "v0.6.34",
"date": "2025-10-16T16:55:58Z"
},
{ {
"name": "cloudreve/cloudreve", "name": "cloudreve/cloudreve",
"version": "4.9.2", "version": "4.9.2",
"date": "2025-10-16T03:24:44Z" "date": "2025-10-16T03:24:44Z"
}, },
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{ {
"name": "linkwarden/linkwarden", "name": "linkwarden/linkwarden",
"version": "v2.13.1", "version": "v2.13.1",
@@ -894,11 +854,21 @@
"version": "v1.17.1", "version": "v1.17.1",
"date": "2025-10-10T16:12:41Z" "date": "2025-10-10T16:12:41Z"
}, },
{
"name": "apache/tomcat",
"version": "10.1.48",
"date": "2025-10-10T14:46:53Z"
},
{ {
"name": "projectsend/projectsend", "name": "projectsend/projectsend",
"version": "r1945", "version": "r1945",
"date": "2025-10-10T02:30:05Z" "date": "2025-10-10T02:30:05Z"
}, },
{
"name": "glpi-project/glpi",
"version": "11.0.1",
"date": "2025-10-09T12:34:15Z"
},
{ {
"name": "autobrr/autobrr", "name": "autobrr/autobrr",
"version": "v1.68.0", "version": "v1.68.0",
@@ -909,6 +879,11 @@
"version": "v2.30.0", "version": "v2.30.0",
"date": "2025-10-08T16:03:49Z" "date": "2025-10-08T16:03:49Z"
}, },
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.8",
"date": "2025-10-08T12:19:18Z"
},
{ {
"name": "gotson/komga", "name": "gotson/komga",
"version": "1.23.5", "version": "1.23.5",
@@ -954,6 +929,11 @@
"version": "2.520", "version": "2.520",
"date": "2025-10-05T00:51:34Z" "date": "2025-10-05T00:51:34Z"
}, },
{
"name": "Kozea/Radicale",
"version": "v3.5.7.pypi",
"date": "2025-10-01T05:32:27Z"
},
{ {
"name": "WordPress/WordPress", "name": "WordPress/WordPress",
"version": "4.7.31", "version": "4.7.31",
@@ -1204,11 +1184,21 @@
"version": "v2.5.308", "version": "v2.5.308",
"date": "2025-08-13T07:09:29Z" "date": "2025-08-13T07:09:29Z"
}, },
{
"name": "slskd/slskd",
"version": "0.23.2",
"date": "2025-08-10T23:35:07Z"
},
{ {
"name": "ioBroker/ioBroker", "name": "ioBroker/ioBroker",
"version": "1012-08-09", "version": "1012-08-09",
"date": "2025-08-10T13:50:58Z" "date": "2025-08-10T13:50:58Z"
}, },
{
"name": "MariaDB/server",
"version": "mariadb-12.0.2",
"date": "2025-08-07T21:23:15Z"
},
{ {
"name": "TryGhost/Ghost-CLI", "name": "TryGhost/Ghost-CLI",
"version": "v1.28.3", "version": "v1.28.3",
@@ -1349,6 +1339,11 @@
"version": "2025-05-07-r1", "version": "2025-05-07-r1",
"date": "2025-05-07T12:18:42Z" "date": "2025-05-07T12:18:42Z"
}, },
{
"name": "apache/couchdb",
"version": "3.5.0",
"date": "2025-05-05T16:28:24Z"
},
{ {
"name": "TechnitiumSoftware/DnsServer", "name": "TechnitiumSoftware/DnsServer",
"version": "v13.6.0", "version": "v13.6.0",
@@ -1419,6 +1414,11 @@
"version": "v0.22.1", "version": "v0.22.1",
"date": "2025-03-18T21:01:22Z" "date": "2025-03-18T21:01:22Z"
}, },
{
"name": "transmission/transmission",
"version": "4.0.1-beta.1",
"date": "2024-12-13T00:16:24Z"
},
{ {
"name": "excalidraw/excalidraw", "name": "excalidraw/excalidraw",
"version": "v0.18.0", "version": "v0.18.0",

View File

@@ -32,7 +32,7 @@ $STD apt install -y google-chrome-stable
rm /etc/apt/sources.list.d/google-chrome.list rm /etc/apt/sources.list.d/google-chrome.list
msg_ok "Installed Chrome" msg_ok "Installed Chrome"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.4.3" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz" fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/flaresolverr.service cat <<EOF >/etc/systemd/system/flaresolverr.service

View File

@@ -60,10 +60,11 @@ $STD npm ci
$STD npm run build:production $STD npm run build:production
msg_ok "Built Ghostfolio" msg_ok "Built Ghostfolio"
echo -e "" msg_ok "Optional CoinGecko API Configuration"
msg_custom "🪙" "$YW" "CoinGecko API keys are optional but provide better cryptocurrency data." echo
msg_custom "🪙" "$YW" "You can skip this and add them later by editing /opt/ghostfolio/.env" echo -e "${YW}CoinGecko API keys are optional but provide better cryptocurrency data.${CL}"
echo -e "" echo -e "${YW}You can skip this and add them later by editing /opt/ghostfolio/.env${CL}"
echo
read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY
read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY

View File

@@ -13,12 +13,12 @@ setting_up_container
network_check network_check
update_os update_os
MONGO_VERSION="8.0" setup_mongodb MONGO_VERSION="7.0" setup_mongodb
msg_info "Setup Graylog Data Node" msg_info "Setup Graylog Data Node"
PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb" curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-6.3-repository_latest.deb" -o "graylog-6.3-repository_latest.deb"
$STD dpkg -i graylog-7.0-repository_latest.deb $STD dpkg -i graylog-6.3-repository_latest.deb
$STD apt-get update $STD apt-get update
$STD apt-get install graylog-datanode -y $STD apt-get install graylog-datanode -y
sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf
@@ -42,4 +42,9 @@ msg_ok "Setup ${APPLICATION}"
motd_ssh motd_ssh
customize customize
cleanup_lxc
msg_info "Cleaning up"
rm -f graylog-*-repository_latest.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -288,7 +288,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.2.3" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.2.2" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)" msg_info "Installing ${APPLICATION} (patience)"

View File

@@ -1,68 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://infisical.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
apt-transport-https \
ca-certificates \
redis
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
msg_info "Setting up Infisical Repository"
setup_deb822_repo \
"infisical" \
"https://artifacts-infisical-core.infisical.com/infisical.gpg" \
"https://artifacts-infisical-core.infisical.com/deb" \
"stable"
msg_ok "Setup Infisical repository"
msg_info "Configuring PostgreSQL"
DB_NAME="infisical_db"
DB_USER="infisical"
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 "Infiscal Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/infisical.creds
msg_ok "Configured PostgreSQL"
msg_info "Setting up Infisical"
AUTH_SECRET="$(openssl rand -base64 32 | tr -d '\n')"
ENC_KEY="$(openssl rand -hex 16 | tr -d '\n')"
IP_ADDR=$(hostname -I | awk '{print $1}')
$STD apt install -y infisical-core
mkdir -p /etc/infisical
cat <<EOF >/etc/infisical/infisical.rb
infisical_core['ENCRYPTION_KEY'] = '$ENC_KEY'
infisical_core['AUTH_SECRET'] = '$AUTH_SECRET'
infisical_core['HOST'] = '$IP_ADDR'
infisical_core['DB_CONNECTION_URI'] = 'postgres://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}'
infisical_core['REDIS_URL'] = 'redis://localhost:6379'
EOF
$STD infisical-ctl reconfigure
msg_ok "Setup Infisical"
motd_ssh
customize
cleanup_lxc

View File

@@ -40,7 +40,7 @@ NODE_ENV=production
# OIDC_ISSUER=<your-oidc-issuer-url> # OIDC_ISSUER=<your-oidc-issuer-url>
# OIDC_CLIENT_ID=<oidc-client-id> # OIDC_CLIENT_ID=<oidc-client-id>
# APP_URL=<https://app.domain.tld> # APP_URL=<https://app.domain.tld>
# SSO_FALLBACK_LOCAL=yes # Allow both SSO and normal login # SSO_FALLBACK_LOCAL=true # Allow both SSO and normal login
# OIDC_CLIENT_SECRET=your_client_secret # Enable confidential client mode with client authentication # OIDC_CLIENT_SECRET=your_client_secret # Enable confidential client mode with client authentication
# OIDC_ADMIN_GROUPS=admins # Map provider groups to admin role # OIDC_ADMIN_GROUPS=admins # Map provider groups to admin role
EOF EOF

View File

@@ -15,12 +15,25 @@ update_os
read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
MONGO_VERSION="8.0" setup_mongodb MONGODB_VERSION="8.0"
else else
MONGO_VERSION="7.0" setup_mongodb MONGODB_VERSION="7.0"
fi fi
msg_info "Installing MongoDB $MONGODB_VERSION"
curl -fsSL "https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
cat <<EOF >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.sources
Types: deb
URIs: http://repo.mongodb.org/apt/debian
Suites: $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION}
Components: main
Signed-By: /usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
EOF
$STD apt update
$STD apt install -y mongodb-org
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
msg_ok "Installed MongoDB $MONGO_VERSION" systemctl enable -q --now mongod
msg_ok "Installed MongoDB $MONGODB_VERSION"
motd_ssh motd_ssh
customize customize

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 Community-Scripts ORG # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: CrazyWolf13 # Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://nginxproxymanager.com/ # Source: https://nginxproxymanager.com/
@@ -39,15 +39,18 @@ $STD /opt/certbot/bin/pip install certbot certbot-dns-cloudflare
ln -sf /opt/certbot/bin/certbot /usr/local/bin/certbot ln -sf /opt/certbot/bin/certbot /usr/local/bin/certbot
msg_ok "Set up Certbot" msg_ok "Set up Certbot"
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
msg_info "Installing Openresty" msg_info "Installing Openresty"
curl -fsSL "https://openresty.org/package/pubkey.gpg" | gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty.gpg curl -fsSL "https://openresty.org/package/pubkey.gpg" | gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg
cat <<'EOF' >/etc/apt/sources.list.d/openresty.sources case "$VERSION" in
Types: deb trixie)
URIs: http://openresty.org/package/debian/ echo -e "deb http://openresty.org/package/debian bookworm openresty" >/etc/apt/sources.list.d/openresty.list
Suites: bookworm ;;
Components: openresty *)
Signed-By: /etc/apt/trusted.gpg.d/openresty.gpg echo -e "deb http://openresty.org/package/debian $VERSION openresty" >/etc/apt/sources.list.d/openresty.list
EOF ;;
esac
$STD apt update $STD apt update
$STD apt -y install openresty $STD apt -y install openresty
msg_ok "Installed Openresty" msg_ok "Installed Openresty"
@@ -58,25 +61,28 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-
grep "tag_name" | grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }') awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" msg_info "Downloading Nginx Proxy Manager v${RELEASE}"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
cd ./nginx-proxy-manager-"${RELEASE}"
msg_ok "Downloaded Nginx Proxy Manager v${RELEASE}"
msg_info "Setting up Environment" msg_info "Setting up Environment"
ln -sf /usr/bin/python3 /usr/bin/python ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -sf /usr/local/openresty/nginx/ /etc/nginx ln -sf /usr/local/openresty/nginx/ /etc/nginx
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/backend/package.json sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/frontend/package.json sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
sed -i 's+^daemon+#daemon+g' /opt/nginxproxymanager/docker/rootfs/etc/nginx/nginx.conf sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find /opt/nginxproxymanager -type f -name "*.conf") NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do for NGINX_CONF in $NGINX_CONFS; do
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF" sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
done done
mkdir -p /var/www/html /etc/nginx/logs mkdir -p /var/www/html /etc/nginx/logs
cp -r /opt/nginxproxymanager/docker/rootfs/var/www/html/* /var/www/html/ cp -r docker/rootfs/var/www/html/* /var/www/html/
cp -r /opt/nginxproxymanager/docker/rootfs/etc/nginx/* /etc/nginx/ cp -r docker/rootfs/etc/nginx/* /etc/nginx/
cp /opt/nginxproxymanager/docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
cp /opt/nginxproxymanager/docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
rm -f /etc/nginx/conf.d/dev.conf rm -f /etc/nginx/conf.d/dev.conf
@@ -103,22 +109,23 @@ chown root /tmp/nginx
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem &>/dev/null
fi fi
mkdir -p /app/frontend/images mkdir -p /app/global /app/frontend/images
cp -r /opt/nginxproxymanager/backend/* /app cp -r backend/* /app
cp -r global/* /app/global
msg_ok "Set up Environment" msg_ok "Set up Environment"
msg_info "Building Frontend" msg_info "Building Frontend"
export NODE_OPTIONS="--max_old_space_size=2048 --openssl-legacy-provider" cd ./frontend
cd /opt/nginxproxymanager/frontend export NODE_OPTIONS="--openssl-legacy-provider"
# Replace node-sass with sass in package.json before installation # Replace node-sass with sass in package.json before installation
sed -E -i 's/"node-sass" *: *"([^"]*)"/"sass": "\1"/g' package.json sed -i 's/"node-sass".*$/"sass": "^1.92.1",/g' package.json
$STD yarn install --network-timeout 600000 $STD yarn install --network-timeout 600000
$STD yarn build $STD yarn build
cp -r /opt/nginxproxymanager/frontend/dist/* /app/frontend cp -r dist/* /app/frontend
cp -r /opt/nginxproxymanager/frontend/public/images/* /app/frontend/images cp -r app-images/* /app/frontend/images
msg_ok "Built Frontend" msg_ok "Built Frontend"
msg_info "Initializing Backend" msg_info "Initializing Backend"
@@ -139,6 +146,7 @@ if [ ! -f /app/config/production.json ]; then
EOF EOF
fi fi
cd /app cd /app
export NODE_OPTIONS="--openssl-legacy-provider"
$STD yarn install --network-timeout 600000 $STD yarn install --network-timeout 600000
msg_ok "Initialized Backend" msg_ok "Initialized Backend"
@@ -162,6 +170,9 @@ WantedBy=multi-user.target
EOF EOF
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh
customize
msg_info "Starting Services" msg_info "Starting Services"
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager
@@ -169,10 +180,8 @@ systemctl enable -q --now openresty
systemctl enable -q --now npm systemctl enable -q --now npm
msg_ok "Started Services" msg_ok "Started Services"
motd_ssh
customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf ../nginx-proxy-manager-*
systemctl restart openresty systemctl restart openresty
$STD apt -y autoremove $STD apt -y autoremove
$STD apt -y autoclean $STD apt -y autoclean

View File

@@ -66,6 +66,7 @@ server/hostname ${IP_ADDR}
server/server_path_prefix /openproject server/server_path_prefix /openproject
server/ssl no server/ssl no
server/variant apache2 server/variant apache2
server/server_path_prefix
repositories/api-key ${API_KEY} repositories/api-key ${API_KEY}
repositories/svn-install skip repositories/svn-install skip
repositories/git-install install repositories/git-install install

View File

@@ -1,7 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck | Co-Author: havardthom | Co-Author: Slaviša Arežina (tremor021) # Author: tteck
# Co-Author: havardthom
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://openwebui.com/ # Source: https://openwebui.com/
@@ -14,10 +15,36 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y ffmpeg $STD apt install -y \
git \
ffmpeg \
libpq-dev
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
USE_UVX="YES" PYTHON_VERSION="3.12" setup_uv msg_info "Setup Python3"
$STD apt install -y --no-install-recommends \
python3 \
python3-pip
msg_ok "Setup Python3"
NODE_VERSION="22" setup_nodejs
msg_info "Installing Open WebUI (Patience)"
$STD git clone https://github.com/open-webui/open-webui.git /opt/open-webui
cd /opt/open-webui/backend
$STD pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
$STD pip3 install -r requirements.txt -U
cd /opt/open-webui
cp .env.example .env
cat <<EOF >/opt/open-webui/.env
ENV=prod
ENABLE_OLLAMA_API=false
OLLAMA_BASE_URL=http://0.0.0.0:11434
EOF
$STD npm install --force
export NODE_OPTIONS="--max-old-space-size=6000"
$STD npm run build
msg_ok "Installed Open WebUI"
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
@@ -42,7 +69,7 @@ RestartSec=3
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now ollama systemctl enable -q --now ollama
echo "ENABLE_OLLAMA_API=true" >/root/.env sed -i 's/ENABLE_OLLAMA_API=false/ENABLE_OLLAMA_API=true/g' /opt/open-webui/.env
msg_ok "Installed Ollama" msg_ok "Installed Ollama"
fi fi
@@ -53,14 +80,10 @@ Description=Open WebUI Service
After=network.target After=network.target
[Service] [Service]
Type=simple Type=exec
EnvironmentFile=-/root/.env WorkingDirectory=/opt/open-webui
Environment=DATA_DIR=/root/.open-webui EnvironmentFile=/opt/open-webui/.env
ExecStart=/usr/local/bin/uvx --python 3.12 open-webui@latest serve ExecStart=/opt/open-webui/backend/start.sh
WorkingDirectory=/root
Restart=on-failure
RestartSec=5
User=root
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@@ -427,12 +427,7 @@ manage_tool_repository() {
suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url/$distro_id") suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url/$distro_id")
# Setup new repository using deb822 format # Setup new repository using deb822 format
setup_deb822_repo \ setup_deb822_repo "mariadb" "$gpg_key_url" "$repo_url/$distro_id" "$suite" "main" "amd64 arm64" || return 1
"mariadb" \
"$gpg_key_url" \
"$repo_url/$distro_id" \
"$suite" \
"main"
return 0 return 0
;; ;;
@@ -455,51 +450,7 @@ manage_tool_repository() {
# Setup repository # Setup repository
local distro_codename local distro_codename
distro_codename=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release) distro_codename=$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)
suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url")
# Suite mapping with fallback for newer releases not yet supported by upstream
if [[ "$distro_id" == "debian" ]]; then
case "$distro_codename" in
trixie | forky | sid)
# Testing/unstable releases fallback to latest stable suite
suite="bookworm"
;;
bookworm)
suite="bookworm"
;;
bullseye)
suite="bullseye"
;;
*)
# Unknown release: fallback to latest stable suite
msg_warn "Unknown Debian release '${distro_codename}', using bookworm"
suite="bookworm"
;;
esac
elif [[ "$distro_id" == "ubuntu" ]]; then
case "$distro_codename" in
oracular | plucky)
# Newer releases fallback to latest LTS
suite="noble"
;;
noble)
suite="noble"
;;
jammy)
suite="jammy"
;;
focal)
suite="focal"
;;
*)
# Unknown release: fallback to latest LTS
msg_warn "Unknown Ubuntu release '${distro_codename}', using noble"
suite="noble"
;;
esac
else
# For other distros, try generic fallback
suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url")
fi
repo_component="main" repo_component="main"
[[ "$distro_id" == "ubuntu" ]] && repo_component="multiverse" [[ "$distro_id" == "ubuntu" ]] && repo_component="multiverse"
@@ -509,7 +460,7 @@ Types: deb
URIs: ${repo_url} URIs: ${repo_url}
Suites: ${suite}/mongodb-org/${version} Suites: ${suite}/mongodb-org/${version}
Components: ${repo_component} Components: ${repo_component}
Architectures: $(dpkg --print-architecture) Architectures: amd64 arm64
Signed-By: /etc/apt/keyrings/mongodb-server-${version}.gpg Signed-By: /etc/apt/keyrings/mongodb-server-${version}.gpg
EOF EOF
return 0 return 0
@@ -541,7 +492,7 @@ Types: deb
URIs: $repo_url URIs: $repo_url
Suites: nodistro Suites: nodistro
Components: main Components: main
Architectures: $(dpkg --print-architecture) Architectures: amd64 arm64
Signed-By: /etc/apt/keyrings/nodesource.gpg Signed-By: /etc/apt/keyrings/nodesource.gpg
EOF EOF
return 0 return 0
@@ -575,7 +526,7 @@ Types: deb
URIs: https://packages.sury.org/php URIs: https://packages.sury.org/php
Suites: $distro_codename Suites: $distro_codename
Components: main Components: main
Architectures: $(dpkg --print-architecture) Architectures: amd64 arm64
Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg
EOF EOF
return 0 return 0
@@ -606,7 +557,7 @@ Types: deb
URIs: http://apt.postgresql.org/pub/repos/apt URIs: http://apt.postgresql.org/pub/repos/apt
Suites: $distro_codename-pgdg Suites: $distro_codename-pgdg
Components: main Components: main
Architectures: $(dpkg --print-architecture) Architectures: amd64 arm64
Signed-By: /etc/apt/keyrings/postgresql.gpg Signed-By: /etc/apt/keyrings/postgresql.gpg
EOF EOF
return 0 return 0
@@ -1207,7 +1158,7 @@ setup_deb822_repo() {
local repo_url="$3" local repo_url="$3"
local suite="$4" local suite="$4"
local component="${5:-main}" local component="${5:-main}"
local architectures="${6:-$(dpkg --print-architecture)}" local architectures="${6:-amd64 arm64}"
# Validate required parameters # Validate required parameters
if [[ -z "$name" || -z "$gpg_url" || -z "$repo_url" || -z "$suite" ]]; then if [[ -z "$name" || -z "$gpg_url" || -z "$repo_url" || -z "$suite" ]]; then
@@ -2785,7 +2736,8 @@ function setup_java() {
"https://packages.adoptium.net/artifactory/api/gpg/key/public" \ "https://packages.adoptium.net/artifactory/api/gpg/key/public" \
"https://packages.adoptium.net/artifactory/deb" \ "https://packages.adoptium.net/artifactory/deb" \
"$SUITE" \ "$SUITE" \
"main" "main" \
"amd64 arm64"
fi fi
# Get currently installed version # Get currently installed version
@@ -3237,12 +3189,12 @@ function setup_mysql() {
return 1 return 1
fi fi
cat >/etc/apt/sources.list.d/mysql.sources <<EOF cat >/etc/apt/sources.list.d/mysql.sources <<'EOF'
Types: deb Types: deb
URIs: https://repo.mysql.com/apt/debian/ URIs: https://repo.mysql.com/apt/debian/
Suites: bookworm Suites: bookworm
Components: mysql-8.4-lts Components: mysql-8.4-lts
Architectures: $(dpkg --print-architecture) Architectures: amd64 arm64
Signed-By: /etc/apt/keyrings/mysql.gpg Signed-By: /etc/apt/keyrings/mysql.gpg
EOF EOF
@@ -3750,7 +3702,8 @@ function setup_postgresql() {
"https://www.postgresql.org/media/keys/ACCC4CF8.asc" \ "https://www.postgresql.org/media/keys/ACCC4CF8.asc" \
"https://apt.postgresql.org/pub/repos/apt" \ "https://apt.postgresql.org/pub/repos/apt" \
"$SUITE" \ "$SUITE" \
"main" "main" \
"amd64 arm64"
if ! $STD apt update; then if ! $STD apt update; then
msg_error "APT update failed for PostgreSQL repository" msg_error "APT update failed for PostgreSQL repository"
@@ -4099,7 +4052,8 @@ function setup_clickhouse() {
"https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" \ "https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" \
"https://packages.clickhouse.com/deb" \ "https://packages.clickhouse.com/deb" \
"stable" \ "stable" \
"main" "main" \
"amd64 arm64"
# Install packages with retry logic # Install packages with retry logic
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive

View File

@@ -48,7 +48,7 @@ install_glances_debian() {
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Setting up Python + uv" msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv" msg_ok "Setup Python + uv"
@@ -118,7 +118,7 @@ install_glances_alpine() {
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Setting up Python + uv" msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv" msg_ok "Setup Python + uv"

View File

@@ -10,7 +10,7 @@ if ! command -v curl >/dev/null 2>&1; then
apt-get update >/dev/null 2>&1 apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1 apt-get install -y curl >/dev/null 2>&1
fi fi
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVE/raw/branch/main/misc/core.func) source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func)
load_functions load_functions
set -euo pipefail set -euo pipefail