Compare commits

..

22 Commits

Author SHA1 Message Date
github-actions[bot] 95652801b4 Update CHANGELOG.md 2026-08-20 12:33:05 +00:00
community-scripts-pr-app[bot] d03e139208 Update CHANGELOG.md (#16644)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:32:46 +00:00
Tobias 888cc8b09f update: various script to debian 13 (#16525) 2026-08-20 14:32:42 +02:00
CanbiZ (MickLesk) 78d29a6de1 storyteller: fix build paths for upstream applications/web/ monorepo restructure (#16627) 2026-08-20 14:32:23 +02:00
community-scripts-pr-app[bot] 82777dd291 Update CHANGELOG.md (#16643)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:32:21 +00:00
Tobias 58e2fa46a6 tubearchivist: add bgutil POT provider and update yt-dlp to nightly (#16622) 2026-08-20 14:32:09 +02:00
CanbiZ (MickLesk) 8276f41ec9 networkoptimizer: preseed iperf3 debconf question to prevent hang install (#16626) 2026-08-20 14:31:54 +02:00
community-scripts-pr-app[bot] c4dd32b447 Update CHANGELOG.md (#16642)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:28:58 +00:00
community-scripts-pr-app[bot] bd55f178e6 Update CHANGELOG.md (#16641)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:28:47 +00:00
community-scripts-pr-app[bot] 653a63c315 Update CHANGELOG.md (#16640)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:28:31 +00:00
CanbiZ (MickLesk) 1bfcef0c80 scanopy: limit cargo build parallelism to prevent OOM kill (#16623) 2026-08-20 14:28:22 +02:00
community-scripts-pr-app[bot] f1fdc7644e Update CHANGELOG.md (#16639)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:28:15 +00:00
CanbiZ (MickLesk) b685312cb8 copyparty: use fetch_and_deploy_gh_release for version tracking (#16624) 2026-08-20 14:28:01 +02:00
community-scripts-pr-app[bot] 293e63426f Update CHANGELOG.md (#16638)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-20 12:27:50 +00:00
CanbiZ (MickLesk) 7c1e07123a baikal: fall back to composer update when lock doesn't match (#16625) 2026-08-20 14:27:41 +02:00
push-app-to-main[bot] b93c3b9dae Umbraco (#16621)
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-08-20 14:27:23 +02:00
community-scripts-pr-app[bot] 041de686e6 Update CHANGELOG.md (#16620)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-19 19:42:58 +00:00
Brad Schroth e6ade07071 fix: clean yarn cache after mealie frontend build to prevent disk growth (#16609) 2026-08-19 21:42:34 +02:00
community-scripts-pr-app[bot] a1fb54dcec Update CHANGELOG.md (#16619)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-19 19:42:09 +00:00
Tim Moore decda83256 VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored (#16607)
The release-tag resolution used raw unauthenticated curl calls, which
ignore GITHUB_TOKEN and fail with curl exit 22 on the shared 60/hr
unauthenticated rate limit - after the container is already created.
Resolve via the existing github_api_call helper (auth + retries +
rate-limit diagnosis), matching proxmox-backup-server-install.sh.
Also collapses the two identical VictoriaLogs /releases/latest calls
into one.

Fixes community-scripts/ProxmoxVE#16606

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 21:41:41 +02:00
community-scripts-pr-app[bot] b2584b47ec Update CHANGELOG.md (#16618)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-19 19:40:29 +00:00
rmpratt1 2c516aa413 Increase default RAM allocation for Gatus (#16601)
Gatus install was failing with the existing memory defaults (512M) due to thrashing from memory pressure while compiling the package. Bumped to 2048M as the same issue occurred when using 1024M. 

Gatus LXC is hovering around 150M post install so this could be bumped down after the install completed but there is no installation time only setting as far as I am aware.
2026-08-19 21:40:02 +02:00
22 changed files with 394 additions and 49 deletions
+36
View File
@@ -524,6 +524,42 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-08-20
### 🆕 New Scripts
- Umbraco ([#16621](https://github.com/community-scripts/ProxmoxVE/pull/16621))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- storyteller: fix build paths for upstream applications/web/ monorepo restructure [@MickLesk](https://github.com/MickLesk) ([#16627](https://github.com/community-scripts/ProxmoxVE/pull/16627))
- tubearchivist: add bgutil POT provider and update yt-dlp to nightly [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16622](https://github.com/community-scripts/ProxmoxVE/pull/16622))
- networkoptimizer: preseed iperf3 debconf question to prevent hang install [@MickLesk](https://github.com/MickLesk) ([#16626](https://github.com/community-scripts/ProxmoxVE/pull/16626))
- scanopy: limit cargo build parallelism to prevent OOM kill [@MickLesk](https://github.com/MickLesk) ([#16623](https://github.com/community-scripts/ProxmoxVE/pull/16623))
- baikal: fall back to composer update when lock doesn't match [@MickLesk](https://github.com/MickLesk) ([#16625](https://github.com/community-scripts/ProxmoxVE/pull/16625))
- #### 💥 Breaking Changes
- update: various script to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16525](https://github.com/community-scripts/ProxmoxVE/pull/16525))
### 🧰 Tools
- #### 🔧 Refactor
- copyparty: use fetch_and_deploy_gh_release for version tracking [@MickLesk](https://github.com/MickLesk) ([#16624](https://github.com/community-scripts/ProxmoxVE/pull/16624))
## 2026-08-19
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix: clean yarn cache after mealie frontend build to prevent disk growth [@bferd](https://github.com/bferd) ([#16609](https://github.com/community-scripts/ProxmoxVE/pull/16609))
- VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored [@angusmaul](https://github.com/angusmaul) ([#16607](https://github.com/community-scripts/ProxmoxVE/pull/16607))
- Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601))
## 2026-08-18
### 🚀 Updated Scripts
+1 -1
View File
@@ -46,7 +46,7 @@ function update_script() {
msg_info "Configuring Baikal"
cd /opt/baikal
$STD composer install
$STD composer install || { msg_warn "composer.lock doesn't match composer.json (known upstream packaging issue) - regenerating"; $STD composer update; }
msg_ok "Configured Baikal"
msg_info "Starting Service"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# Author: tteck (tteckster) | Co-Author: CrazyWolf13, MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://changedetection.io/ | Github: https://github.com/dgtlmoon/changedetection.io
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
+2 -2
View File
@@ -19,11 +19,11 @@ if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then
fi
if [[ "${var_os:-}" == "alpine" ]]; then
var_ram="${var_ram:-512}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-3}"
var_version="${var_version:-3.24}"
else
var_ram="${var_ram:-512}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_version="${var_version:-13}"
fi
+6
View File
@@ -0,0 +1,6 @@
__ __ __
/ / / /___ ___ / /_ _________ __________
/ / / / __ `__ \/ __ \/ ___/ __ `/ ___/ __ \
/ /_/ / / / / / / /_/ / / / /_/ / /__/ /_/ /
\____/_/ /_/ /_/_.___/_/ \__,_/\___/\____/
+1 -1
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
+1
View File
@@ -75,6 +75,7 @@ STARTEOF
cd /opt/mealie/frontend
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
$STD yarn cache clean
msg_ok "Built Frontend"
msg_info "Copying Built Frontend"
+1 -1
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-yes}"
+1 -1
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
+1 -1
View File
@@ -53,7 +53,7 @@ function update_script() {
msg_info "Building Scanopy Server (patience)"
cd /opt/scanopy/backend
$STD cargo build --release --bin server --bin generate-fixtures
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
mv ./target/release/server /usr/bin/scanopy-server
msg_ok "Built Scanopy Server"
+37 -2
View File
@@ -30,9 +30,35 @@ function update_script() {
exit
fi
if [[ ! -f /etc/systemd/system/bgutil-provider.service ]]; then
msg_info "Adding BgUtil POT Provider"
ensure_dependencies ffmpeg libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev pkg-config
fetch_and_deploy_gh_release "bgutil-ytdlp-pot-provider" "Brainicism/bgutil-ytdlp-pot-provider" "tarball"
cd /opt/bgutil-ytdlp-pot-provider/server
$STD npm ci
$STD npx tsc
cat <<EOF >/etc/systemd/system/bgutil-provider.service
[Unit]
Description=BgUtil YT-DLP POT Provider
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/bgutil-ytdlp-pot-provider/server
ExecStart=/usr/bin/node build/main.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now bgutil-provider
msg_ok "Added BgUtil POT Provider"
fi
if check_for_gh_release "tubearchivist" "tubearchivist/tubearchivist"; then
msg_info "Stopping Services"
systemctl stop tubearchivist tubearchivist-celery tubearchivist-beat
systemctl stop bgutil-provider tubearchivist tubearchivist-celery tubearchivist-beat
msg_ok "Stopped Services"
create_backup \
@@ -58,8 +84,17 @@ function update_script() {
mkdir -p /opt/yt_plugins/bgutil
$STD uv pip install --python /opt/tubearchivist/.venv/bin/python --target /opt/yt_plugins/bgutil -r /opt/tubearchivist/backend/requirements.plugins.txt
fi
$STD uv pip install --python /opt/tubearchivist/.venv/bin/python -U --prerelease allow "yt-dlp[default]"
msg_ok "Rebuilt Tube Archivist"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bgutil-ytdlp-pot-provider" "Brainicism/bgutil-ytdlp-pot-provider" "tarball"
msg_info "Rebuilding BgUtil POT Provider"
cd /opt/bgutil-ytdlp-pot-provider/server
$STD npm ci
$STD npx tsc
msg_ok "Rebuilt BgUtil POT Provider"
msg_info "Restoring Configuration"
sed -i 's|^TA_APP_DIR=/opt/tubearchivist$|TA_APP_DIR=/opt/tubearchivist/backend|' /opt/tubearchivist/.env
sed -i 's|^TA_CACHE_DIR=/opt/tubearchivist/cache$|TA_CACHE_DIR=/cache|' /opt/tubearchivist/.env
@@ -76,7 +111,7 @@ function update_script() {
msg_ok "Restored Configuration"
msg_info "Starting Services"
systemctl start tubearchivist tubearchivist-celery tubearchivist-beat
systemctl start bgutil-provider tubearchivist tubearchivist-celery tubearchivist-beat
systemctl reload nginx
msg_ok "Started Services"
msg_ok "Updated successfully!"
+48
View File
@@ -0,0 +1,48 @@
#!/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: Joost van den Berg (montagneId)
# License: MIT | https://github.com/montagneid/ProxmoxVED/raw/main/LICENSE
# Source: https://github.com/umbraco/Umbraco-CMS
APP="Umbraco"
var_tags="${var_tags:-website}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var/www ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating LXC"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated LXC"
msg_info "Updating Umbraco Templates"
$STD dotnet new update
msg_ok "Updated Umbraco Templates"
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 "${GATEWAY}${BGN}https://${IP}"
+1 -1
View File
@@ -25,7 +25,7 @@ PG_DB_NAME="baikal_db" PG_DB_USER="baikal_user" PG_DB_PASS="$(openssl rand -base
msg_info "Configuring Baikal"
cd /opt/baikal
$STD composer install
$STD composer install || { msg_warn "composer.lock doesn't match composer.json (known upstream packaging issue) - regenerating"; $STD composer update; }
cat <<EOF >/opt/baikal/config/baikal.yaml
database:
backend: pgsql
+3 -5
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# Author: tteck (tteckster) | Co-Author: CrazyWolf13, MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://changedetection.io/ | Github: https://github.com/dgtlmoon/changedetection.io
@@ -18,7 +18,6 @@ $STD apt-get install -y \
git \
build-essential \
dumb-init \
gconf-service \
libjpeg-dev \
libatk-bridge2.0-0 \
libasound2 \
@@ -29,8 +28,7 @@ $STD apt-get install -y \
libexpat1 \
libgbm-dev \
libgbm1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libgdk-pixbuf-2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
@@ -80,7 +78,7 @@ $STD apt-get install -y \
fonts-freefont-ttf \
fonts-gfs-neohellenic \
fonts-indic fonts-ipafont-gothic \
fonts-kacst fonts-liberation \
fonts-kacst-one fonts-liberation \
fonts-noto-cjk \
fonts-noto-color-emoji \
fonts-roboto \
+1
View File
@@ -48,6 +48,7 @@ $STD sed -i "s|value: data.buildId,|value: \"v${MEALIE_VERSION}\",|g" "$SITE_SET
$STD sed -i "s|value: data.production ? i18n.t(\"about.production\") : i18n.t(\"about.development\"),|value: \"bare-metal\",|g" "$SITE_SETTINGS"
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
$STD yarn cache clean
msg_ok "Built Frontend"
msg_info "Copying Built Frontend"
+2 -1
View File
@@ -14,7 +14,8 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
echo "iperf3 iperf3/start_daemon boolean false" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive $STD apt install -y \
git \
sshpass \
iperf3
+1 -1
View File
@@ -29,7 +29,7 @@ RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
msg_info "Building Scanopy Server (patience)"
cd /opt/scanopy/backend
$STD cargo build --release --bin server --bin generate-fixtures
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
mv ./target/release/server /usr/bin/scanopy-server
msg_ok "Built Scanopy Server"
+12 -12
View File
@@ -34,7 +34,7 @@ msg_info "Setting up Storyteller"
cd /opt/storyteller
$STD corepack yarn install --network-timeout 600000
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
$STD gcc -g -fPIC -rdynamic -shared applications/web/sqlite/uuid.c -o applications/web/sqlite/uuid.c.so
STORYTELLER_SECRET_KEY=$(openssl rand -base64 32)
cat <<EOF >/opt/storyteller/.env
STORYTELLER_SECRET_KEY=${STORYTELLER_SECRET_KEY}
@@ -60,17 +60,17 @@ export NODE_ENV=production
export NEXT_TELEMETRY_DISABLED=1
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
$STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
if [[ -d /opt/storyteller/web/public ]]; then
mkdir -p /opt/storyteller/web/.next/standalone/web/public
cp -rT /opt/storyteller/web/public /opt/storyteller/web/.next/standalone/web/public
mkdir -p /opt/storyteller/applications/web/.next/standalone/applications/web/.next/static
cp -rT /opt/storyteller/applications/web/.next/static /opt/storyteller/applications/web/.next/standalone/applications/web/.next/static
if [[ -d /opt/storyteller/applications/web/public ]]; then
mkdir -p /opt/storyteller/applications/web/.next/standalone/applications/web/public
cp -rT /opt/storyteller/applications/web/public /opt/storyteller/applications/web/.next/standalone/applications/web/public
fi
mkdir -p /opt/storyteller/web/.next/standalone/web/migrations
cp -rT /opt/storyteller/web/migrations /opt/storyteller/web/.next/standalone/web/migrations
mkdir -p /opt/storyteller/web/.next/standalone/web/sqlite
cp -rT /opt/storyteller/web/sqlite /opt/storyteller/web/.next/standalone/web/sqlite
ln -sf /opt/storyteller/.env /opt/storyteller/web/.next/standalone/web/.env
mkdir -p /opt/storyteller/applications/web/.next/standalone/applications/web/migrations
cp -rT /opt/storyteller/applications/web/migrations /opt/storyteller/applications/web/.next/standalone/applications/web/migrations
mkdir -p /opt/storyteller/applications/web/.next/standalone/applications/web/sqlite
cp -rT /opt/storyteller/applications/web/sqlite /opt/storyteller/applications/web/.next/standalone/applications/web/sqlite
ln -sf /opt/storyteller/.env /opt/storyteller/applications/web/.next/standalone/applications/web/.env
msg_ok "Built Storyteller"
msg_info "Creating Service"
@@ -82,7 +82,7 @@ After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/storyteller/web/.next/standalone/web
WorkingDirectory=/opt/storyteller/applications/web/.next/standalone/applications/web
EnvironmentFile=/opt/storyteller/.env
ExecStart=/usr/bin/node --enable-source-maps server.js
Restart=on-failure
+36 -3
View File
@@ -25,13 +25,26 @@ $STD apt install -y \
libsasl2-dev \
libssl-dev \
sqlite3 \
ffmpeg
ffmpeg \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
pkg-config
msg_ok "Installed Dependencies"
UV_PYTHON="3.13" setup_uv
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.zip"
fetch_and_deploy_gh_release "bgutil-ytdlp-pot-provider" "Brainicism/bgutil-ytdlp-pot-provider" "tarball"
msg_info "Building BgUtil POT Provider Server"
cd /opt/bgutil-ytdlp-pot-provider/server
$STD npm ci
$STD npx tsc
msg_ok "Built BgUtil POT Provider Server"
msg_info "Installing ElasticSearch"
setup_deb822_repo \
@@ -116,6 +129,10 @@ EOF
systemctl enable -q --now redis-server
msg_ok "Set up Tube Archivist"
msg_info "Installing yt-dlp Nightly"
$STD uv pip install --python /opt/tubearchivist/.venv/bin/python -U --prerelease allow "yt-dlp[default]"
msg_ok "Installed yt-dlp Nightly"
msg_info "Configuring Nginx"
sed -i 's/^user www-data;$/user root;/' /etc/nginx/nginx.conf
cat <<'EOF' >/etc/nginx/sites-available/default
@@ -230,10 +247,26 @@ exec $PYTHON backend_start.py
RUNEOF
chmod +x /opt/tubearchivist/backend/run.sh
ln -sf /opt/tubearchivist/.env /opt/tubearchivist/backend/.env
cat <<EOF >/etc/systemd/system/bgutil-provider.service
[Unit]
Description=BgUtil YT-DLP POT Provider
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/bgutil-ytdlp-pot-provider/server
ExecStart=/usr/bin/node build/main.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/tubearchivist.service
[Unit]
Description=Tube Archivist Backend
After=network.target elasticsearch.service redis-server.service
After=network.target elasticsearch.service redis-server.service bgutil-provider.service
[Service]
Type=simple
@@ -286,7 +319,7 @@ RuntimeMaxSec=3600
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now tubearchivist tubearchivist-celery tubearchivist-beat
systemctl enable -q --now bgutil-provider tubearchivist tubearchivist-celery tubearchivist-beat
msg_ok "Created Services"
motd_ssh
+190
View File
@@ -0,0 +1,190 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Joost van den Berg (montagneId)
# License: MIT | https://github.com/montagneid/ProxmoxVED/raw/main/LICENSE
# Source: https://github.com/umbraco/Umbraco-CMS
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
var_project_name="cms"
msg_info "Installing Dependencies"
$STD apt install -y \
ca-certificates \
uuid-runtime \
nginx \
vsftpd
msg_ok "Installed Dependencies"
msg_info "Installing .NET SDK 10.0"
setup_deb822_repo \
"microsoft" \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie"
$STD apt install -y dotnet-sdk-10.0
msg_ok "Installed .NET SDK 10.0"
msg_info "Installing dotnet Umbraco templates and create project (Patience)"
cd /var/www/html
$STD dotnet new install Umbraco.Templates
$STD dotnet new umbraco --force -n "$var_project_name"
msg_ok "Umbraco templates installed and project created"
msg_info "Configuring database connection and unattended setup"
cd /var/www/html/$var_project_name
UMBRACO_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
jq --arg umbracopass "$UMBRACO_PASS" '. + {
"ConnectionStrings": {
"umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Shared;Foreign Keys=True;Pooling=True",
"umbracoDbDSN_ProviderName": "Microsoft.Data.Sqlite"
},
"Umbraco": {
"CMS": {
"_Comment": "Remove the Unattended section after first run",
"Unattended": {
"InstallUnattended": true,
"UnattendedUserName": "admin",
"UnattendedUserEmail": "admin@umbraco.local",
"UnattendedUserPassword": $umbracopass
}
}
}
}' /var/www/html/$var_project_name/appsettings.json > /tmp/appsettings.tmp && mv /tmp/appsettings.tmp /var/www/html/$var_project_name/appsettings.json
ln -sf /var/www/html/$var_project_name/appsettings.json ~/umbraco.creds
msg_ok "Database connection and unattended setup configured"
msg_info "Setting up Nginx Server"
rm -f /var/www/html/index.nginx-debian.html
cat <<EOF >/etc/nginx/sites-available/default
map \$http_connection \$connection_upgrade {
"~*Upgrade" \$http_connection;
default keep-alive;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/umbraco/umbraco.crt;
ssl_certificate_key /etc/ssl/umbraco/umbraco.key;
location / {
proxy_pass https://127.0.0.1:7000/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection \$connection_upgrade;
proxy_set_header Host \$host;
proxy_cache_bypass \$http_upgrade;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
}
}
EOF
$STD sed -i -E '/^[[:space:]]*worker_cpu_affinity/d' /etc/nginx/nginx.conf
$STD sed -i -E 's/^[[:space:]]*worker_processes[[:space:]].*/worker_processes auto;/' /etc/nginx/nginx.conf
create_self_signed_cert
systemctl reload nginx
msg_ok "Nginx Server created"
msg_info "Creating Kestrel Umbraco Service"
cat <<EOF >/usr/local/bin/umbraco-start.sh
#!/usr/bin/env bash
exec /usr/bin/dotnet /var/www/html/$var_project_name-publish/$var_project_name.dll --urls "https://0.0.0.0:7000"
EOF
chmod +x /usr/local/bin/umbraco-start.sh
cat <<EOF >/etc/systemd/system/umbraco-kestrel.service
[Unit]
Description=Umbraco CMS running on Linux
[Service]
WorkingDirectory=/var/www/html/$var_project_name-publish
ExecStart=/usr/local/bin/umbraco-start.sh
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=umbraco
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_NOLOGO=true
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now umbraco-kestrel
msg_ok "Umbraco Kestrel Service created"
msg_info "Creating dotnet publish script"
cat <<EOF >/var/www/html/$var_project_name/publish.sh
#!/usr/bin/env bash
cd /var/www/html/$var_project_name
systemctl stop umbraco-kestrel.service
dotnet publish -c Release -o /var/www/html/$var_project_name-publish
systemctl start umbraco-kestrel.service
EOF
chmod +x /var/www/html/$var_project_name/publish.sh
msg_ok "Dotnet publish script created"
msg_info "Building and publishing project (Patience)"
$STD /var/www/html/$var_project_name/publish.sh
msg_ok "Umbraco published successfully to /var/www/html/$var_project_name-publish"
msg_info "Setting up FTP Server"
useradd ftpuser
FTP_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
usermod --password $(echo ${FTP_PASS} | openssl passwd -1 -stdin) ftpuser
mkdir -p /var/www/html
usermod -d /var/www/html ftp
usermod -d /var/www/html ftpuser
chown -R ftpuser:ftpuser /var/www/html
sed -i "s|#write_enable=YES|write_enable=YES|g" /etc/vsftpd.conf
sed -i "s|#chroot_local_user=YES|chroot_local_user=NO|g" /etc/vsftpd.conf
systemctl restart -q vsftpd.service
{
echo "FTP Credentials"
echo "Username: ftpuser"
echo "Password: $FTP_PASS"
} >>~/ftp.creds
msg_ok "FTP server setup completed"
msg_info "Creating Visual Studio FTP Publish Profile"
PROJECT_GUID=$(uuidgen | tr '[:upper:]' '[:lower:]')
CONTAINER_IP=$(hostname -I | awk '{print $1}')
PUBLISH_PROFILE_DIR="/var/www/html/${var_project_name}/Properties/PublishProfiles"
mkdir -p "$PUBLISH_PROFILE_DIR"
cat >"$PUBLISH_PROFILE_DIR/FTPProfile.pubxml" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<WebPublishMethod>FTP</WebPublishMethod>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://${CONTAINER_IP}</SiteUrlToLaunchAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>${PROJECT_GUID}</ProjectGuid>
<publishUrl>${CONTAINER_IP}</publishUrl>
<DeleteExistingFiles>false</DeleteExistingFiles>
<FtpPassiveMode>true</FtpPassiveMode>
<FtpSitePath>${var_project_name}-publish</FtpSitePath>
<UserName>ftpuser</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>FTP</_TargetId>
</PropertyGroup>
</Project>
EOF
msg_ok "Publish Profile created"
motd_ssh
customize
cleanup_lxc
+9 -6
View File
@@ -15,9 +15,11 @@ update_os
msg_info "Getting latest version of VictoriaMetrics"
victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" |
jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' |
vm_releases_json="$(mktemp)"
github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" "$vm_releases_json"
victoriametrics_release=$(jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' "$vm_releases_json" |
head -n 1)
rm -f "$vm_releases_json"
victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz"
vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz"
msg_ok "Got version $victoriametrics_release of VictoriaMetrics"
@@ -28,12 +30,13 @@ fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuil
read -r -p "${TAB3}Would you like to add VictoriaLogs? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" |
jq -r '.assets[].name' |
vl_release_json="$(mktemp)"
github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" "$vl_release_json"
vmlogs_filename=$(jq -r '.assets[].name' "$vl_release_json" |
grep -E "^victoria-logs-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$")
vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" |
jq -r '.assets[].name' |
vlutils_filename=$(jq -r '.assets[].name' "$vl_release_json" |
grep -E "^vlutils-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$")
rm -f "$vl_release_json"
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename"
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename"
fi
+2 -9
View File
@@ -38,7 +38,6 @@ LOG_PATH="/var/log/copyparty"
DATA_PATH="/var/lib/copyparty"
SVC_USER="copyparty"
SVC_GROUP="copyparty"
SRC_URL="https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py"
DEFAULT_PORT=3923
# ==============================================================================
@@ -115,11 +114,8 @@ function update() {
fi
msg_ok "Stopped service"
msg_info "Updating ${APP}"
curl -fsSL "$SRC_URL" -o "$BIN_PATH"
chmod +x "$BIN_PATH"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "copyparty-sfx.py" "9001/copyparty" "singlefile" "latest" "/usr/local/bin" "copyparty-sfx.py"
chown "$SVC_USER:$SVC_GROUP" "$BIN_PATH"
msg_ok "Updated ${APP}"
msg_info "Starting service"
if [[ "$OS" == "Alpine" ]]; then
@@ -186,11 +182,8 @@ function install() {
chown "$SVC_USER:$SVC_GROUP" "$DATA_PATH"
fi
msg_info "Downloading ${APP}"
curl -fsSL "$SRC_URL" -o "$BIN_PATH"
chmod +x "$BIN_PATH"
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "copyparty-sfx.py" "9001/copyparty" "singlefile" "latest" "/usr/local/bin" "copyparty-sfx.py"
chown "$SVC_USER:$SVC_GROUP" "$BIN_PATH"
msg_ok "Downloaded to ${BIN_PATH}"
msg_info "Creating configuration"
cat <<EOF >"$CONF_PATH"