Compare commits

...

29 Commits

Author SHA1 Message Date
github-actions[bot] 118be59ae7 Update CHANGELOG.md 2026-08-14 20:13:01 +00:00
community-scripts-pr-app[bot] a04bcaf832 Update CHANGELOG.md (#16510)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:12:42 +00:00
push-app-to-main[bot] cf6e9abfd0 RSS-Bridge (#16471) 2026-08-14 22:12:35 +02:00
CanbiZ (MickLesk) a1c38b514a powerdns: move poweradmin database outside the web root (#16476) 2026-08-14 22:12:12 +02:00
community-scripts-pr-app[bot] 6372ba3a65 Update CHANGELOG.md (#16509)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:11:59 +00:00
CanbiZ (MickLesk) f096c8b91f projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) (#16477) 2026-08-14 22:11:45 +02:00
community-scripts-pr-app[bot] 7779722cba Update CHANGELOG.md (#16508)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:11:36 +00:00
community-scripts-pr-app[bot] 1f77a9ea7e Update CHANGELOG.md (#16507)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:11:23 +00:00
community-scripts-pr-app[bot] 621060584b Update CHANGELOG.md (#16506)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:11:05 +00:00
CanbiZ (MickLesk) 70dfd66dff paperless-ngx: run services with uv --no-sync to avoid startup network dependency (#16479) 2026-08-14 22:10:54 +02:00
community-scripts-pr-app[bot] 21ed75c9e9 Update CHANGELOG.md (#16505)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:10:51 +00:00
CanbiZ (MickLesk) 7317baddc1 calibre-web: install as package for 0.6.27's src-layout restructure (#16480) 2026-08-14 22:10:34 +02:00
community-scripts-pr-app[bot] 2cfba7771c Update CHANGELOG.md (#16504)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:10:24 +00:00
community-scripts-pr-app[bot] 1ccd3c0dde Update CHANGELOG.md (#16503)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:10:15 +00:00
Johann Grobe ade7cadf9b Wanderer: Refactor of Services / Installation / Paths (#16487) 2026-08-14 22:09:54 +02:00
community-scripts-pr-app[bot] 8a78cd1a7b Update CHANGELOG.md (#16502)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:09:51 +00:00
CanbiZ (MickLesk) ca1f0181b2 pelican-panel: set APP_URL to container IP (#16488) 2026-08-14 22:09:22 +02:00
community-scripts-pr-app[bot] b2ec867104 Update CHANGELOG.md (#16501)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 20:08:48 +00:00
Chris b2997c15ed Homepage v2.0 (#16500) 2026-08-14 22:08:21 +02:00
community-scripts-pr-app[bot] d247079e89 Update CHANGELOG.md (#16494)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 14:07:52 +00:00
community-scripts-pr-app[bot] bd4f8fd8ae Update CHANGELOG.md (#16493)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 14:07:34 +00:00
push-app-to-main[bot] c9413b0ccf GoDoxy (#16470)
* Add godoxy (ct)

* Refactor fetch_and_deploy_gh_release call

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-08-14 16:07:15 +02:00
push-app-to-main[bot] 97c773a435 Mumble (#16474)
* Add mumble (ct)

* Update mumble.sh to source new build function

Removed local core checkout instructions and added new source for build.func.

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-08-14 16:07:03 +02:00
community-scripts-pr-app[bot] 50c5e9c386 Update CHANGELOG.md (#16492)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 14:03:59 +00:00
push-app-to-main[bot] dd30b01b82 Fleet (#16472)
* Add fleet (ct)

* Clean up comments and source fallback in fleet.sh

Removed local core checkout comments and fallback source.

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-08-14 16:03:28 +02:00
community-scripts-pr-app[bot] 04ec69b582 Update CHANGELOG.md (#16491)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 13:57:57 +00:00
push-app-to-main[bot] ab9fb6279f Newt (#16473)
* Add newt (ct)

* Modify build function source and var_arm64 default

Updated source for build function and changed default value for var_arm64.

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-08-14 15:57:31 +02:00
community-scripts-pr-app[bot] 3e687478d9 Update CHANGELOG.md (#16490)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-14 13:21:51 +00:00
Brian Rodriguez 1c7d875d85 fix(ampache): update to PHP 8.5 asset, auto-upgrade PHP on update (#16484)
Ampache 8.0.0 dropped the php8.4 prebuilt zip in favor of php8.5, so
new installs and updates could no longer find a matching release
asset. Install script now provisions PHP 8.5; update script detects
existing PHP 8.4 containers and upgrades them to 8.5 before fetching
the new release.

Closes #16482
2026-08-14 15:21:26 +02:00
32 changed files with 1012 additions and 118 deletions
+29
View File
@@ -521,6 +521,35 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-08-14
### 🆕 New Scripts
- RSS-Bridge ([#16471](https://github.com/community-scripts/ProxmoxVE/pull/16471))
- GoDoxy ([#16470](https://github.com/community-scripts/ProxmoxVE/pull/16470))
- Mumble ([#16474](https://github.com/community-scripts/ProxmoxVE/pull/16474))
- Fleet ([#16472](https://github.com/community-scripts/ProxmoxVE/pull/16472))
- Newt ([#16473](https://github.com/community-scripts/ProxmoxVE/pull/16473))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- calibre-web: install as package for 0.6.27's src-layout restructure [@MickLesk](https://github.com/MickLesk) ([#16480](https://github.com/community-scripts/ProxmoxVE/pull/16480))
- Wanderer: Refactor of Services / Installation / Paths [@johanngrobe](https://github.com/johanngrobe) ([#16487](https://github.com/community-scripts/ProxmoxVE/pull/16487))
- pelican-panel: set APP_URL to container IP [@MickLesk](https://github.com/MickLesk) ([#16488](https://github.com/community-scripts/ProxmoxVE/pull/16488))
- fix(ampache): update to PHP 8.5 asset, auto-upgrade PHP on update [@CervezaStallone](https://github.com/CervezaStallone) ([#16484](https://github.com/community-scripts/ProxmoxVE/pull/16484))
- #### ✨ New Features
- projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) [@MickLesk](https://github.com/MickLesk) ([#16477](https://github.com/community-scripts/ProxmoxVE/pull/16477))
- Homepage v2.0 [@vhsdream](https://github.com/vhsdream) ([#16500](https://github.com/community-scripts/ProxmoxVE/pull/16500))
- #### 🔧 Refactor
- Refactor: PowerDNS move poweradmin database outside the web root [@MickLesk](https://github.com/MickLesk) ([#16476](https://github.com/community-scripts/ProxmoxVE/pull/16476))
- paperless-ngx: run services with uv --no-sync to avoid startup network dependency [@MickLesk](https://github.com/MickLesk) ([#16479](https://github.com/community-scripts/ProxmoxVE/pull/16479))
## 2026-08-13
### 🆕 New Scripts
+9 -1
View File
@@ -39,7 +39,15 @@ function update_script() {
/opt/ampache/public/play/.htaccess \
/opt/ampache/advanced-config
fetch_and_deploy_gh_release "Ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.4.zip"
if ! dpkg -l 2>/dev/null | grep -q "libapache2-mod-php8.5"; then
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
sed -i -e 's/upload_max_filesize = .*/upload_max_filesize = 100M/' \
-e 's/post_max_size = .*/post_max_size = 100M/' \
-e 's/max_execution_time = .*/max_execution_time = 600/' \
-e 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.5/apache2/php.ini
fi
fetch_and_deploy_gh_release "Ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.5.zip"
restore_backup
chmod 664 /opt/ampache/public/rest/.htaccess /opt/ampache/public/play/.htaccess
+4 -1
View File
@@ -45,9 +45,12 @@ function update_script() {
cd /opt/calibre-web
$STD uv venv --clear /opt/calibre-web/.venv
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir .
msg_ok "Installed Dependencies"
sed -i 's|^ExecStart=.*|ExecStart=/opt/calibre-web/.venv/bin/cps|' /etc/systemd/system/calibre-web.service
$STD systemctl daemon-reload
restore_backup
msg_info "Starting Service"
+63
View File
@@ -0,0 +1,63 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fleetdm/fleet
APP="Fleet"
var_tags="${var_tags:-monitoring;device-management;security}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}"
#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/fleet/fleet ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "fleet" "fleetdm/fleet"; then
msg_info "Stopping Service"
systemctl stop fleet
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "fleet" "fleetdm/fleet" "prebuild" "latest" "/opt/fleet" "fleet_v*_linux.tar.gz"
chmod +x /opt/fleet/fleet
msg_info "Running Database Migrations"
set -a && source /opt/fleet/.env && set +a
$STD /opt/fleet/fleet prepare db --no-prompt
msg_ok "Ran Database Migrations"
msg_info "Starting Service"
systemctl start fleet
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}:8080${CL}"
echo -e "${INFO}${YW} Admin Email:${CL} ${BGN}admin@fleet.local${CL}"
echo -e "${INFO}${YW} Admin Password:${CL} ${BGN}Check inside the container: cat /opt/fleet/.env${CL}"
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ) | Co-Authors: yusing
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/yusing/godoxy
APP="GoDoxy"
var_tags="${var_tags:-reverse-proxy;webserver;network}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/godoxy/godoxy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "godoxy" "yusing/godoxy"; then
msg_info "Stopping Service"
systemctl stop godoxy
msg_ok "Stopped Service"
create_backup \
/opt/godoxy/config \
/opt/godoxy/data \
/opt/godoxy/error_pages \
/etc/godoxy.env \
/etc/ssl/godoxy
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "godoxy" "yusing/godoxy" "singlefile" "latest" "/opt/godoxy" "godoxy-linux-$(arch_resolve)"
restore_backup
msg_info "Starting Service"
systemctl start godoxy
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}https://${IP}${CL}"
echo -e "${INFO}${YW}Login as admin; the generated password is stored in /etc/godoxy.env.${CL}"
+6
View File
@@ -0,0 +1,6 @@
________ __
/ ____/ /__ ___ / /_
/ /_ / / _ \/ _ \/ __/
/ __/ / / __/ __/ /_
/_/ /_/\___/\___/\__/
+6
View File
@@ -0,0 +1,6 @@
______ ____
/ ____/___ / __ \____ _ ____ __
/ / __/ __ \/ / / / __ \| |/_/ / / /
/ /_/ / /_/ / /_/ / /_/ /> </ /_/ /
\____/\____/_____/\____/_/|_|\__, /
/____/
+6
View File
@@ -0,0 +1,6 @@
__ ___ __ __
/ |/ /_ ______ ___ / /_ / /__
/ /|_/ / / / / __ `__ \/ __ \/ / _ \
/ / / / /_/ / / / / / / /_/ / / __/
/_/ /_/\__,_/_/ /_/ /_/_.___/_/\___/
+6
View File
@@ -0,0 +1,6 @@
_ __ __
/ | / /__ _ __/ /_
/ |/ / _ \ | /| / / __/
/ /| / __/ |/ |/ / /_
/_/ |_/\___/|__/|__/\__/
+6
View File
@@ -0,0 +1,6 @@
____ __________ ____ _ __
/ __ \/ ___/ ___/ / __ )_____(_)___/ /___ ____
/ /_/ /\__ \\__ \______/ __ / ___/ / __ / __ `/ _ \
/ _, _/___/ /__/ /_____/ /_/ / / / / /_/ / /_/ / __/
/_/ |_|/____/____/ /_____/_/ /_/\__,_/\__, /\___/
/____/
+24 -3
View File
@@ -39,15 +39,15 @@ function update_script() {
create_backup /opt/homepage/.env /opt/homepage/config
BACKUP_DIR=/opt/homepage-assets.backup create_backup /opt/homepage/public/images /opt/homepage/public/icons
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homepage" "gethomepage/homepage" "tarball"
restore_backup
msg_info "Updating Homepage (Patience)"
RELEASE=$(get_latest_github_release "gethomepage/homepage")
cd /opt/homepage
echo 'onlyBuiltDependencies=*' >> .npmrc
echo 'onlyBuiltDependencies=*' >>.npmrc
$STD pnpm install
$STD pnpm update --no-save caniuse-lite
export NEXT_PUBLIC_VERSION="v$RELEASE"
@@ -56,6 +56,27 @@ function update_script() {
export NEXT_TELEMETRY_DISABLED=1
$STD pnpm build
BACKUP_DIR=/opt/homepage-assets.backup restore_backup
if ! grep -q 'AUTH' /opt/homepage/.env; then
msg_info "Updating .env"
cp /opt/homepage/.env /opt/homepage/env.bak
cat <<EOF >>/opt/homepage/.env
## Optional Authentication
# HOMEPAGE_AUTH_ENABLED=true
# HOMEPAGE_AUTH_SECRET="$(openssl rand -base64 32)"
# HOMEPAGE_EXTERNAL_URL=<your-external-url>
## Uncomment below and use strong, unique password for password login
# HOMEPAGE_AUTH_PASSWORD=
## Uncomment and fill in below for OIDC login
# HOMEPAGE_OIDC_ISSUER=
# HOMEPAGE_OIDC_CLIENT_ID=
# HOMEPAGE_OIDC_CLIENT_SECRET=
# HOMEPAGE_OIDC_SCOPE=openid email profile
# HOMEPAGE_OIDC_NAME=
EOF
msg_ok "Updated .env"
rm /opt/homepage/env.bak
chmod 600 /opt/homepage/.env
fi
msg_ok "Updated Homepage"
msg_info "Starting service"
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.mumble.info/
APP="Mumble"
var_tags="${var_tags:-voice;chat;gaming}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/mumble/mumble-server.ini ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "mumble" "mumble-voip/mumble"; then
msg_info "Stopping Service"
systemctl stop mumble-server
msg_ok "Stopped Service"
create_backup /etc/mumble/mumble-server.ini /var/lib/mumble-server/mumble-server.sqlite
msg_info "Updating Mumble"
$STD apt update
$STD apt install -y mumble-server
cat <<EOF >~/.mumble
$(get_latest_github_release "mumble-voip/mumble")
EOF
msg_ok "Updated Mumble"
restore_backup
msg_info "Starting Service"
systemctl start mumble-server
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Connect using:${CL}"
echo -e "${GATEWAY}${BGN}${IP}:64738${CL}"
+53
View File
@@ -0,0 +1,53 @@
#!/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: Arubinu
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fosrl/newt
APP="Newt"
var_tags="${var_tags:-network;tunnel}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/newt/newt.env ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "newt" "fosrl/newt"; then
msg_info "Stopping Service"
systemctl stop newt
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "newt" "fosrl/newt" "singlefile" "latest" "/opt/newt" "newt_linux_$(arch_resolve)"
ln -sf /opt/newt/newt /usr/local/bin/newt
msg_info "Starting Service"
systemctl start newt
msg_ok "Started Service"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${INFO}${YW} Check the site status in your Pangolin dashboard.${CL}"
+5 -5
View File
@@ -165,7 +165,7 @@ function update_script() {
msg_info "Updating Paperless-ngx"
if ((BRIDGE_UPDATE == 0)); then
sed -i 's|^ExecStart=.*|ExecStart=uv run -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"|' /etc/systemd/system/paperless-webserver.service
sed -i 's|^ExecStart=.*|ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"|' /etc/systemd/system/paperless-webserver.service
grep -q "document_index reindex" /etc/systemd/system/paperless-webserver.service ||
sed -i '/^ExecStart=/i ExecStartPre=uv run -- python manage.py document_index reindex --if-needed --no-progress-bar' /etc/systemd/system/paperless-webserver.service
$STD systemctl daemon-reload
@@ -207,10 +207,10 @@ function update_script() {
msg_ok "Backup completed to $BACKUP_DIR"
declare -A PATCHES=(
["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
["paperless-consumer.service"]="ExecStart=uv run --no-sync -- python manage.py document_consumer"
["paperless-scheduler.service"]="ExecStart=uv run --no-sync -- celery --app paperless beat --loglevel INFO"
["paperless-task-queue.service"]="ExecStart=uv run --no-sync -- celery --app paperless worker --loglevel INFO"
["paperless-webserver.service"]="ExecStart=uv run --no-sync -- granian --interface asgi --ws \"paperless.asgi:application\""
)
for svc in "${!PATCHES[@]}"; do
+1
View File
@@ -60,6 +60,7 @@ function update_script() {
msg_info "Updating Pelican Panel"
cp -a /opt/backup/.env /opt/pelican-panel/
grep -q "^APP_URL=http://panel.test$" /opt/pelican-panel/.env && sed -i "s|^APP_URL=.*|APP_URL=http://${LOCAL_IP}|" /opt/pelican-panel/.env
$SQLITE_INSTALL && mv /opt/backup/*.sqlite /opt/pelican-panel/database/
cp -a /opt/backup/storage/app/public /opt/pelican-panel/storage/app/
+14 -3
View File
@@ -30,13 +30,26 @@ function update_script() {
exit
fi
if [[ -f /opt/poweradmin/powerdns.db ]]; then
msg_info "Moving PowerDNS database out of the web root"
systemctl stop pdns apache2
mkdir -p /var/lib/powerdns
mv /opt/poweradmin/powerdns.db /var/lib/powerdns/powerdns.db
sed -i 's#/opt/poweradmin/powerdns.db#/var/lib/powerdns/powerdns.db#' \
/etc/powerdns/pdns.d/gsqlite3.conf /opt/poweradmin/config/settings.php
chown pdns:pdns /var/lib/powerdns/powerdns.db
chmod 664 /var/lib/powerdns/powerdns.db
systemctl start pdns apache2
msg_ok "Moved PowerDNS database out of the web root"
fi
msg_info "Updating PowerDNS"
$STD apt update
$STD apt install -y --only-upgrade pdns-server pdns-backend-sqlite3
msg_ok "Updated PowerDNS"
if check_for_gh_release "poweradmin" "poweradmin/poweradmin"; then
create_backup /opt/poweradmin/config/settings.php /opt/poweradmin/powerdns.db
create_backup /opt/poweradmin/config/settings.php
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
@@ -46,8 +59,6 @@ function update_script() {
rm -rf /opt/poweradmin/install
chown -R www-data:pdns /opt/poweradmin
chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
msg_ok "Updated Poweradmin"
msg_info "Restarting Services"
+27 -16
View File
@@ -28,27 +28,37 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
setup_mariadb
if [[ -f /opt/projectsend/includes/sys.config.php ]]; then
msg_error "This container runs ProjectSend Legacy (pre-2.0)."
msg_error "2.0 is a new application, not an update - there is no in-place upgrade."
msg_error "Set up a fresh ProjectSend container and use projectsend/v1-migration-tool to bring your data across."
exit
fi
if check_for_gh_release "projectsend" "projectsend/projectsend"; then
msg_info "Stopping Service"
systemctl stop apache2
msg_ok "Stopped Service"
msg_info "Stopping Services"
systemctl stop nginx projectsend-worker
msg_ok "Stopped Services"
php_ver=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_ver == "8.4"* ]]; then
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
fi
create_backup /opt/projectsend/.env /opt/projectsend/storage/app/files
mv /opt/projectsend/includes/sys.config.php /opt/sys.config.php
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
mv /opt/sys.config.php /opt/projectsend/includes/sys.config.php
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend"
restore_backup
msg_info "Updating ProjectSend"
cd /opt/projectsend
chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend
chmod -R 775 /opt/projectsend/storage /opt/projectsend/bootstrap/cache
$STD sudo -u www-data php artisan migrate --force
$STD sudo -u www-data php artisan projectsend:ensure-roles
$STD sudo -u www-data php artisan optimize:clear
msg_ok "Updated ProjectSend"
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_info "Starting Services"
systemctl start nginx projectsend-worker
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi
exit
@@ -61,4 +71,5 @@ 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}http://${IP}/install for the initial setup${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${INFO}${YW}Admin credentials saved to ~/projectsend.creds${CL}"
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://rss-bridge.org/
APP="RSS-Bridge"
var_tags="${var_tags:-rss;feed;bridge}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/rss-bridge ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "rss-bridge" "RSS-Bridge/rss-bridge"; then
create_backup /opt/rss-bridge/config.ini.php
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rss-bridge" "RSS-Bridge/rss-bridge" "tarball"
restore_backup
msg_info "Updating Application"
cd /opt/rss-bridge
$STD composer install --no-dev --optimize-autoloader
chown -R www-data:www-data /opt/rss-bridge
systemctl restart caddy
msg_ok "Updated Application"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
+37 -14
View File
@@ -25,7 +25,7 @@ function update_script() {
check_container_storage
check_container_resources
if [[ ! -d /opt/wanderer/source ]]; then
if [[ ! -d /opt/wanderer/source && ! -d /opt/wanderer/db ]]; then
msg_error "No wanderer Installation Found!"
exit
fi
@@ -35,11 +35,15 @@ function update_script() {
systemctl stop wanderer-web
rm -rf /opt/wanderer/source/search
mkdir -p /opt/wanderer_data
[[ -d /opt/wanderer/data/meili_data ]] && cp -r /opt/wanderer/data/meili_data /opt/wanderer_data/
mkdir -p /opt/wanderer_data/meili_data
rm -rf /opt/wanderer/data/meili_data
MEILI_MASTER_KEY_VAL=$(grep -oP '^MEILI_MASTER_KEY=\K.*' /opt/wanderer/.env)
cat <<EOF >/etc/meilisearch.toml
env = "production"
master_key = "$MEILI_MASTER_KEY_VAL"
db_path = "/opt/wanderer/data/meili_data"
db_path = "/opt/wanderer_data/meili_data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"
no_analytics = true
@@ -72,11 +76,30 @@ EOF
setup_meilisearch
if [[ -f /opt/wanderer/start.sh ]]; then
if [[ -f /opt/wanderer/start.sh || -d /opt/wanderer/source ]]; then
msg_info "Migrating wanderer services"
systemctl stop wanderer-web
rm -f /opt/wanderer/start.sh
rm -rf /opt/wanderer/source/search
mkdir -p /opt/wanderer_data
[[ -d /opt/wanderer/data/pb_data ]] && cp -r /opt/wanderer/data/pb_data /opt/wanderer_data/
[[ -d /opt/wanderer/data/plugins ]] && cp -r /opt/wanderer/data/plugins /opt/wanderer_data/
mkdir -p /opt/wanderer_data/{pb_data,plugins}
rm -rf /opt/wanderer/data
[[ -d /opt/wanderer/source ]] && cp -r /opt/wanderer/source/. /opt/wanderer/
rm -rf /opt/wanderer/source
if [[ -d /opt/wanderer/db/data ]]; then
[[ -e /opt/wanderer/db/data/plugins ]] || ln -sfn /opt/wanderer_data/plugins /opt/wanderer/db/data/plugins
fi
sed -i \
-e "s|^PB_DB_LOCATION=.*|PB_DB_LOCATION=/opt/wanderer_data/pb_data|" \
-e "s|^MEILI_DB_PATH=.*|MEILI_DB_PATH=/opt/wanderer_data/meili_data|" \
/opt/wanderer/.env
sed -i "s|^db_path =.*|db_path = \"/opt/wanderer_data/meili_data\"|" /etc/meilisearch.toml
rm -f /usr/local/bin/wanderer-pb
cat <<EOF >/etc/systemd/system/wanderer-pocketbase.service
[Unit]
@@ -89,9 +112,9 @@ StartLimitBurst=5
[Service]
Type=simple
WorkingDirectory=/opt/wanderer/source/db
WorkingDirectory=/opt/wanderer/db
EnvironmentFile=/opt/wanderer/.env
ExecStart=/opt/wanderer/source/db/pocketbase serve --http=\${PB_URL} --dir=\${PB_DB_LOCATION}
ExecStart=/opt/wanderer/db/pocketbase serve --http=\${PB_URL} --dir=\${PB_DB_LOCATION}
Restart=always
RestartSec=1
@@ -109,7 +132,7 @@ StartLimitBurst=5
[Service]
Type=simple
WorkingDirectory=/opt/wanderer/source/web
WorkingDirectory=/opt/wanderer/web
EnvironmentFile=/opt/wanderer/.env
ExecStart=/usr/bin/node build
Restart=always
@@ -129,22 +152,22 @@ EOF
systemctl stop wanderer-web
msg_ok "Stopped service"
create_backup /opt/wanderer/source
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest" "/opt/wanderer/source"
create_backup /opt/wanderer/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest"
restore_backup
msg_info "Updating wanderer"
cd /opt/wanderer/source/db
cd /opt/wanderer/db
$STD go mod tidy
$STD go build
cd /opt/wanderer/source/web
cd /opt/wanderer/web
$STD npm ci
$STD npm run build
mkdir -p /opt/wanderer/data/plugins /opt/wanderer/source/db/data
[[ -e /opt/wanderer/source/db/data/plugins ]] || ln -sfn /opt/wanderer/data/plugins /opt/wanderer/source/db/data/plugins
mkdir -p /opt/wanderer_data/plugins /opt/wanderer/db/data
[[ -e /opt/wanderer/db/data/plugins ]] || ln -sfn /opt/wanderer_data/plugins /opt/wanderer/db/data/plugins
msg_info "Installing wanderer plugins"
for plugin in hammerhead komoot strava; do
fetch_and_deploy_gh_release "wanderer-plugin-${plugin}" "open-wanderer/wanderer" "prebuild" "${CHECK_UPDATE_RELEASE:-latest}" "/opt/wanderer/data/plugins" "wanderer-plugin-${plugin}.tar.gz" || msg_warn "Failed to install wanderer plugin: ${plugin}"
fetch_and_deploy_gh_release "wanderer-plugin-${plugin}" "open-wanderer/wanderer" "prebuild" "${CHECK_UPDATE_RELEASE:-latest}" "/opt/wanderer_data/plugins" "wanderer-plugin-${plugin}.tar.gz" || msg_warn "Failed to install wanderer plugin: ${plugin}"
done
msg_ok "Installed wanderer plugins"
msg_ok "Updated wanderer"
+3 -3
View File
@@ -27,11 +27,11 @@ $STD apt install -y \
libvpx-dev
msg_ok "Installed dependencies"
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
setup_mariadb
MARIADB_DB_USER="ampache" MARIADB_DB_NAME="ampache" setup_mariadb_db
fetch_and_deploy_gh_release "ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.4.zip"
fetch_and_deploy_gh_release "ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.5.zip"
msg_info "Setting up Ampache"
rm -rf /var/www/html
@@ -58,7 +58,7 @@ msg_info "Configuring PHP"
sed -i -e 's/upload_max_filesize = .*/upload_max_filesize = 100M/' \
-e 's/post_max_size = .*/post_max_size = 100M/' \
-e 's/max_execution_time = .*/max_execution_time = 600/' \
-e 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.4/apache2/php.ini
-e 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.5/apache2/php.ini
$STD a2enmod rewrite
$STD systemctl restart apache2
msg_ok "Configured PHP"
+2 -2
View File
@@ -39,7 +39,7 @@ msg_info "Installing Python Dependencies"
cd /opt/calibre-web
$STD uv venv
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir .
msg_ok "Installed Python Dependencies"
msg_info "Creating Service"
@@ -54,7 +54,7 @@ Type=simple
User=root
Environment="QTWEBENGINE_CHROMIUM_FLAGS=--no-sandbox"
WorkingDirectory=/opt/calibre-web
ExecStart=/opt/calibre-web/.venv/bin/python /opt/calibre-web/cps.py
ExecStart=/opt/calibre-web/.venv/bin/cps
Restart=on-failure
RestartSec=5
+93
View File
@@ -0,0 +1,93 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fleetdm/fleet
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 redis-server mysql-server
msg_ok "Installed Dependencies"
MYSQL_DB_NAME="fleet" MYSQL_DB_USER="fleet" setup_mysql_db
fetch_and_deploy_gh_release "fleet" "fleetdm/fleet" "prebuild" "latest" "/opt/fleet" "fleet_v*_linux.tar.gz"
msg_info "Configuring Application"
chmod +x /opt/fleet/fleet
PRIVATE_KEY=$(openssl rand -hex 32)
cat <<EOF >/opt/fleet/.env
FLEET_MYSQL_ADDRESS=127.0.0.1:3306
FLEET_MYSQL_DATABASE=fleet
FLEET_MYSQL_USERNAME=fleet
FLEET_MYSQL_PASSWORD=${MYSQL_DB_PASS}
FLEET_SERVER_ADDRESS=0.0.0.0:8080
FLEET_SERVER_TLS=false
FLEET_SERVER_PRIVATE_KEY=${PRIVATE_KEY}
FLEET_REDIS_ADDRESS=127.0.0.1:6379
FLEET_LOGGING_JSON=true
EOF
msg_ok "Configured Application"
msg_info "Running Database Migrations"
set -a && source /opt/fleet/.env && set +a
$STD /opt/fleet/fleet prepare db --no-prompt
msg_ok "Ran Database Migrations"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/fleet.service
[Unit]
Description=Fleet
After=network.target mysql.service redis-server.service
Requires=mysql.service redis-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/fleet
EnvironmentFile=/opt/fleet/.env
ExecStart=/opt/fleet/fleet serve
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now fleet redis-server
msg_ok "Created Service"
msg_info "Initializing Fleet"
FLEET_ADMIN_EMAIL="admin@fleet.local"
FLEET_ADMIN_PASS="$(openssl rand -hex 8)1!"
ELAPSED=0
until curl -sf "http://127.0.0.1:8080/healthz" >/dev/null 2>&1; do
sleep 2
ELAPSED=$((ELAPSED + 2))
[[ $ELAPSED -ge 60 ]] && break
done
SETUP_RESPONSE=$(curl -s -X POST "http://127.0.0.1:8080/api/v1/setup" \
-H "Content-Type: application/json" \
-d "{\"admin\":{\"admin\":true,\"email\":\"${FLEET_ADMIN_EMAIL}\",\"name\":\"Admin\",\"password\":\"${FLEET_ADMIN_PASS}\"},\"org_info\":{\"org_name\":\"Fleet\",\"org_logo_url\":\"\"},\"server_url\":\"http://127.0.0.1:8080\"}")
FLEET_TOKEN=$(echo "${SETUP_RESPONSE}" | grep -o '"token":"[^"]*"' | cut -d'"' -f4) || true
if [[ -n "${FLEET_TOKEN}" ]]; then
curl -s -X PATCH "http://127.0.0.1:8080/api/latest/fleet/config" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${FLEET_TOKEN}" \
-d "{\"server_settings\":{\"server_url\":\"http://${LOCAL_IP}:8080\"}}" >/dev/null
fi
cat <<EOF >>/opt/fleet/.env
FLEET_ADMIN_EMAIL=${FLEET_ADMIN_EMAIL}
FLEET_ADMIN_PASSWORD=${FLEET_ADMIN_PASS}
EOF
msg_ok "Initialized Fleet"
motd_ssh
customize
cleanup_lxc
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# Co-Authors: yusing
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/yusing/godoxy
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "godoxy" "yusing/godoxy" "singlefile" "latest" "/opt/godoxy" "godoxy-linux-$(arch_resolve)"
msg_info "Generating Self-Signed Certificate"
create_self_signed_cert "godoxy"
msg_ok "Generated Self-Signed Certificate"
msg_info "Configuring GoDoxy"
mkdir -p \
/opt/godoxy/config/middlewares \
/opt/godoxy/data \
/opt/godoxy/error_pages
cat <<EOF >/opt/godoxy/config/config.yml
autocert:
provider: local
cert_path: /etc/ssl/godoxy/godoxy.crt
key_path: /etc/ssl/godoxy/godoxy.key
providers:
include:
- routes.yml
webui:
aliases:
- "${LOCAL_IP}"
EOF
cat <<'EOF' >/opt/godoxy/config/routes.yml
{}
EOF
cat <<EOF >/etc/godoxy.env
GODOXY_API_USER="admin"
GODOXY_API_PASSWORD="$(openssl rand -hex 16)"
GODOXY_API_JWT_SECRET="$(openssl rand -base64 32)"
EOF
chmod 600 /etc/godoxy.env
msg_ok "Configured GoDoxy"
msg_info "Creating Service"
cat <<'EOF' >/etc/systemd/system/godoxy.service
[Unit]
Description=GoDoxy Reverse Proxy
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/godoxy
EnvironmentFile=/etc/godoxy.env
ExecStart=/opt/godoxy/godoxy
Restart=on-failure
RestartSec=5
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
ReadWritePaths=/opt/godoxy /etc/ssl/godoxy
UMask=0077
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now godoxy
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+17 -2
View File
@@ -25,14 +25,29 @@ msg_info "Installing Homepage (Patience)"
mkdir -p /opt/homepage/config
cd /opt/homepage
cp /opt/homepage/src/skeleton/* /opt/homepage/config
echo 'onlyBuiltDependencies=*' >> .npmrc
echo 'onlyBuiltDependencies=*' >>.npmrc
$STD pnpm install
export NEXT_PUBLIC_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source"
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
export NEXT_TELEMETRY_DISABLED=1
$STD pnpm build
echo "HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000" >/opt/homepage/.env
cat <<EOF >/opt/homepage/.env
HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000
## Optional Authentication
# HOMEPAGE_AUTH_ENABLED=true
# HOMEPAGE_AUTH_SECRET="$(openssl rand -base64 32)"
# HOMEPAGE_EXTERNAL_URL=<your-external-url>
## Uncomment below and use strong, unique password for password login
# HOMEPAGE_AUTH_PASSWORD=
## Uncomment and fill in below for OIDC login
# HOMEPAGE_OIDC_ISSUER=
# HOMEPAGE_OIDC_CLIENT_ID=
# HOMEPAGE_OIDC_CLIENT_SECRET=
# HOMEPAGE_OIDC_SCOPE=openid email profile
# HOMEPAGE_OIDC_NAME=
EOF
chmod 600 /opt/homepage/.env
msg_ok "Installed Homepage"
msg_info "Creating Service"
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.mumble.info/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Mumble"
$STD apt install -y mumble-server
cat <<EOF >~/.mumble
$(get_latest_github_release "mumble-voip/mumble")
EOF
msg_ok "Installed Mumble"
msg_info "Configuring Mumble"
mkdir -p /var/lib/mumble-server
cat <<EOF >/etc/mumble/mumble-server.ini
database=/var/lib/mumble-server/mumble-server.sqlite
sqlite_wal=2
port=64738
users=100
bandwidth=558000
allowping=true
obfuscate=true
ice="tcp -h 127.0.0.1 -p 6502"
icesecretwrite=$(tr -d '-' </proc/sys/kernel/random/uuid)
EOF
chown -R mumble-server:mumble-server /var/lib/mumble-server
chown root:mumble-server /etc/mumble/mumble-server.ini
chmod 640 /etc/mumble/mumble-server.ini
msg_ok "Configured Mumble"
msg_info "Setting SuperUser Password"
MUMBLE_PASSWORD=$(tr -d '-' </proc/sys/kernel/random/uuid)
mumble-server -ini /etc/mumble/mumble-server.ini -supw "$MUMBLE_PASSWORD"
chown -R mumble-server:mumble-server /var/lib/mumble-server
msg_ok "Set SuperUser password: ${MUMBLE_PASSWORD}"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/mumble-server.service
[Unit]
Description=Mumble Server
After=network.target
[Service]
Type=simple
User=mumble-server
Group=mumble-server
ExecStart=/usr/bin/mumble-server -ini /etc/mumble/mumble-server.ini -fg
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now mumble-server
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Arubinu
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fosrl/newt
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "newt" "fosrl/newt" "singlefile" "latest" "/opt/newt" "newt_linux_$(arch_resolve)"
ln -sf /opt/newt/newt /usr/local/bin/newt
if [[ -z "${NEWT_ID:-}" ]]; then
read -rp "Newt ID (from your Pangolin dashboard): " NEWT_ID
fi
if [[ -z "${NEWT_SECRET:-}" ]]; then
read -rsp "Newt Secret: " NEWT_SECRET
echo
fi
if [[ -z "${PANGOLIN_ENDPOINT:-}" ]]; then
read -rp "Pangolin endpoint (e.g. https://pangolin.example.com): " PANGOLIN_ENDPOINT
fi
if [[ -z "$NEWT_ID" || -z "$NEWT_SECRET" || -z "$PANGOLIN_ENDPOINT" ]]; then
msg_error "Newt ID, Secret and Endpoint are all required. Aborting."
exit 1
fi
msg_info "Configuring Newt"
mkdir -p /etc/newt
cat <<EOF >/etc/newt/newt.env
NEWT_ID=${NEWT_ID}
NEWT_SECRET=${NEWT_SECRET}
PANGOLIN_ENDPOINT=${PANGOLIN_ENDPOINT}
EOF
chmod 600 /etc/newt/newt.env
msg_ok "Configured Newt"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/newt.service
[Unit]
Description=Newt (Pangolin tunnel client)
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/newt/newt.env
ExecStart=/usr/local/bin/newt
Restart=always
RestartSec=2
UMask=0077
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now newt
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+4 -4
View File
@@ -108,7 +108,7 @@ Requires=redis.service
[Service]
WorkingDirectory=/opt/paperless/src
ExecStart=uv run -- celery --app paperless beat --loglevel INFO
ExecStart=uv run --no-sync -- celery --app paperless beat --loglevel INFO
[Install]
WantedBy=multi-user.target
@@ -122,7 +122,7 @@ After=postgresql.service
[Service]
WorkingDirectory=/opt/paperless/src
ExecStart=uv run -- celery --app paperless worker --loglevel INFO
ExecStart=uv run --no-sync -- celery --app paperless worker --loglevel INFO
[Install]
WantedBy=multi-user.target
@@ -136,7 +136,7 @@ Requires=redis.service
[Service]
WorkingDirectory=/opt/paperless/src
ExecStartPre=/bin/sleep 2
ExecStart=uv run -- python manage.py document_consumer
ExecStart=uv run --no-sync -- python manage.py document_consumer
[Install]
WantedBy=multi-user.target
@@ -152,7 +152,7 @@ Requires=redis.service
[Service]
WorkingDirectory=/opt/paperless/src
#ExecStartPre=uv run -- python manage.py document_index reindex --if-needed --no-progress-bar
ExecStart=uv run -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"
ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"
Environment=GRANIAN_HOST=::
Environment=GRANIAN_PORT=8000
Environment=GRANIAN_WORKERS=1
+1
View File
@@ -27,6 +27,7 @@ msg_info "Installing Pelican Panel"
cd /opt/pelican-panel
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan p:environment:setup
sed -i "s|^APP_URL=.*|APP_URL=http://${LOCAL_IP}|" /opt/pelican-panel/.env
echo "yes" | $STD php artisan p:environment:database --driver mariadb --host localhost --port 3306 --database "$MARIADB_DB_NAME" --username "$MARIADB_DB_USER" --password "$MARIADB_DB_PASS"
$STD php artisan p:environment:queue-service --no-interaction
echo "* * * * * php /opt/pelican-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
+8 -7
View File
@@ -40,24 +40,25 @@ $STD apt install -y \
pdns-backend-sqlite3
sed -i 's/^launch=$/# launch=/' /etc/powerdns/pdns.conf
rm -f /etc/powerdns/pdns.d/bind.conf
mkdir -p /var/lib/powerdns
cat <<EOF >/etc/powerdns/pdns.d/gsqlite3.conf
launch=gsqlite3
gsqlite3-database=/opt/poweradmin/powerdns.db
gsqlite3-database=/var/lib/powerdns/powerdns.db
EOF
msg_ok "Setup PowerDNS"
fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
msg_info "Setting up Poweradmin"
sqlite3 /opt/poweradmin/powerdns.db </opt/poweradmin/sql/poweradmin-sqlite-db-structure.sql
sqlite3 /opt/poweradmin/powerdns.db </opt/poweradmin/sql/pdns/49/schema.sqlite3.sql
sqlite3 /var/lib/powerdns/powerdns.db </opt/poweradmin/sql/poweradmin-sqlite-db-structure.sql
sqlite3 /var/lib/powerdns/powerdns.db </opt/poweradmin/sql/pdns/49/schema.sqlite3.sql
PA_ADMIN_USERNAME="admin"
PA_ADMIN_EMAIL="admin@example.com"
PA_ADMIN_FULLNAME="Administrator"
PA_ADMIN_PASSWORD=$(openssl rand -base64 16 | tr -d "=+/" | cut -c1-16)
PA_SESSION_KEY=$(openssl rand -base64 75 | tr -dc 'A-Za-z0-9^@#!(){}[]%_\-+=~' | head -c 50)
PASSWORD_HASH=$(php -r "echo password_hash(\$argv[1], PASSWORD_DEFAULT);" -- "${PA_ADMIN_PASSWORD}" 2>/dev/null)
sqlite3 /opt/poweradmin/powerdns.db "INSERT INTO users (username, password, fullname, email, description, perm_templ, active, use_ldap) \
sqlite3 /var/lib/powerdns/powerdns.db "INSERT INTO users (username, password, fullname, email, description, perm_templ, active, use_ldap) \
VALUES ('$(escape_sql "${PA_ADMIN_USERNAME}")', '$(escape_sql "${PASSWORD_HASH}")', '$(escape_sql "${PA_ADMIN_FULLNAME}")', \
'$(escape_sql "${PA_ADMIN_EMAIL}")', 'System Administrator', 1, 1, 0);"
@@ -81,7 +82,7 @@ return [
*/
'database' => [
'type' => 'sqlite',
'file' => '/opt/poweradmin/powerdns.db',
'file' => '/var/lib/powerdns/powerdns.db',
],
/**
@@ -133,8 +134,8 @@ EOF
$STD a2enmod rewrite headers
chown -R www-data:pdns /opt/poweradmin
chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
chown pdns:pdns /var/lib/powerdns/powerdns.db
chmod 664 /var/lib/powerdns/powerdns.db
usermod -aG pdns www-data
$STD systemctl restart pdns apache2
msg_ok "Created Service"
+94 -34
View File
@@ -13,46 +13,106 @@ setting_up_container
network_check
update_os
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
setup_mariadb
MARIADB_DB_NAME="projectsend" MARIADB_DB_USER="projectsend" setup_mariadb_db
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
msg_info "Installing Dependencies"
$STD apt install -y nginx
msg_ok "Installed Dependencies"
msg_info "Installing ProjectSend"
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="ldap,pcntl" setup_php
setup_mariadb
MARIADB_DB_NAME="projectsend"
MARIADB_DB_USER="projectsend"
setup_mariadb_db
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-*.zip"
msg_info "Configuring ProjectSend"
cd /opt/projectsend
cp .env.example .env
ADMIN_EMAIL="admin@example.com"
ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
sed -i \
-e "s|^APP_ENV=.*|APP_ENV=production|" \
-e "s|^APP_DEBUG=.*|APP_DEBUG=false|" \
-e "s|^APP_URL=.*|APP_URL=http://${LOCAL_IP}|" \
-e "s|^DB_HOST=.*|DB_HOST=localhost|" \
-e "s|^DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" \
-e "s|^DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" \
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" \
-e "s|^SESSION_DRIVER=.*|SESSION_DRIVER=database|" \
-e "s|^CACHE_STORE=.*|CACHE_STORE=database|" \
-e "s|^QUEUE_CONNECTION=.*|QUEUE_CONNECTION=database|" \
.env
chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend
chmod 644 /opt/projectsend/includes/sys.config.php
sed -i -e "s/\(define('DB_NAME', \).*/\1'$MARIADB_DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$MARIADB_DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$MARIADB_DB_PASS');/" \
/opt/projectsend/includes/sys.config.php
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
-e "s/^\(post_max_size = \).*/\1 256M/" \
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \
-e "s/^\(max_execution_time = \).*/\1 300/" \
/etc/php/8.4/apache2/php.ini
msg_ok "Installed projectsend"
chmod -R 775 /opt/projectsend/storage /opt/projectsend/bootstrap/cache
$STD sudo -u www-data php artisan key:generate --force --no-interaction
$STD sudo -u www-data php artisan migrate --force
$STD sudo -u www-data php artisan storage:link --force
$STD sudo -u www-data php artisan projectsend:ensure-roles
$STD sudo -u www-data php artisan projectsend:admin --if-none \
--name="Administrator" \
--email="${ADMIN_EMAIL}" \
--password="${ADMIN_PASSWORD}"
cat <<EOF >~/projectsend.creds
ProjectSend Credentials
Admin Email: ${ADMIN_EMAIL}
Admin Password: ${ADMIN_PASSWORD}
EOF
msg_ok "Configured ProjectSend"
msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/projectsend.conf
<VirtualHost *:80>
ServerName projectsend
DocumentRoot /opt/projectsend
<Directory /opt/projectsend>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
PHP_SOCK=$(get_php_fpm_socket)
cat <<EOF >/etc/nginx/sites-available/projectsend.conf
server {
listen 80 default_server;
server_name _;
root /opt/projectsend/public;
index index.php;
ErrorLog /var/log/apache2/projectsend_error.log
CustomLog /var/log/apache2/projectsend_access.log combined
</VirtualHost>
client_max_body_size 100m;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location /protected-files/ {
internal;
alias /opt/projectsend/storage/app/files/;
}
location ~ \.php\$ {
try_files \$uri =404;
fastcgi_pass unix:${PHP_SOCK};
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
}
location ~ /\.(?!well-known) {
deny all;
}
}
EOF
$STD a2ensite projectsend
$STD a2enmod rewrite
$STD a2dissite 000-default.conf
$STD systemctl reload apache2
nginx_enable_site projectsend.conf
cat <<EOF >/etc/systemd/system/projectsend-worker.service
[Unit]
Description=ProjectSend queue worker
After=network.target mariadb.service
[Service]
User=www-data
Group=www-data
Restart=always
WorkingDirectory=/opt/projectsend
ExecStart=/usr/bin/php artisan queue:work --tries=3 --backoff=3
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now projectsend-worker
echo "* * * * * cd /opt/projectsend && php artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
msg_ok "Created Service"
motd_ssh
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://rss-bridge.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y caddy patchelf
msg_ok "Installed Dependencies"
PHP_VERSION="8.4" PHP_FPM="YES" setup_php
setup_composer
fetch_and_deploy_gh_release "curl-impersonate" "lexiforest/curl-impersonate" "prebuild" "latest" "/usr/local/lib/curl-impersonate" "libcurl-impersonate-v*.$(arch_resolve x86_64-linux-gnu aarch64-linux-gnu).tar.gz"
fetch_and_deploy_gh_release "rss-bridge" "RSS-Bridge/rss-bridge" "tarball"
msg_info "Setting up RSS-Bridge"
cd /opt/rss-bridge
$STD composer install --no-dev --optimize-autoloader
cp config.default.ini.php config.ini.php
chown -R www-data:www-data /opt/rss-bridge
msg_ok "Set up RSS-Bridge"
msg_info "Configuring Caddy"
PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')
cat <<EOF >/etc/caddy/Caddyfile
:80 {
root * /opt/rss-bridge
php_fastcgi unix//run/php/php${PHP_VER}-fpm.sock
file_server
encode gzip
}
EOF
usermod -aG www-data caddy
msg_ok "Configured Caddy"
if [[ -f /usr/local/lib/curl-impersonate/libcurl-impersonate.so ]]; then
msg_info "Enabling curl-impersonate for PHP-FPM"
patchelf --set-soname libcurl.so.4 /usr/local/lib/curl-impersonate/libcurl-impersonate.so
mkdir -p /etc/systemd/system/php${PHP_VER}-fpm.service.d
cat <<EOF >/etc/systemd/system/php${PHP_VER}-fpm.service.d/curl-impersonate.conf
[Service]
Environment=LD_PRELOAD=/usr/local/lib/curl-impersonate/libcurl-impersonate.so
EOF
cat <<EOF >>/etc/php/${PHP_VER}/fpm/pool.d/www.conf
env[CURL_IMPERSONATE] = chrome142
EOF
$STD systemctl daemon-reload
safe_service_restart php${PHP_VER}-fpm
msg_ok "Enabled curl-impersonate for PHP-FPM"
fi
systemctl enable -q --now php${PHP_VER}-fpm
systemctl restart caddy
motd_ssh
customize
cleanup_lxc
+13 -23
View File
@@ -15,24 +15,24 @@ update_os
setup_go
NODE_VERSION="22" setup_nodejs
mkdir -p /opt/wanderer/{source,data/pb_data,data/meili_data,data/plugins}
MEILISEARCH_DB_PATH="/opt/wanderer/data/meili_data" setup_meilisearch
fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest" "/opt/wanderer/source"
mkdir -p /opt/wanderer/source/db/data
[[ -e /opt/wanderer/source/db/data/plugins ]] || ln -sfn /opt/wanderer/data/plugins /opt/wanderer/source/db/data/plugins
mkdir -p /opt/{wanderer,wanderer_data/pb_data,wanderer_data/meili_data,wanderer_data/plugins}
MEILISEARCH_DB_PATH="/opt/wanderer_data/meili_data" setup_meilisearch
fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest"
mkdir -p /opt/wanderer/db/data
[[ -e /opt/wanderer/db/data/plugins ]] || ln -sfn /opt/wanderer_data/plugins /opt/wanderer/db/data/plugins
msg_info "Installing wanderer (patience)"
cd /opt/wanderer/source/db
cd /opt/wanderer/db
$STD go mod tidy
$STD go build
cd /opt/wanderer/source/web
cd /opt/wanderer/web
$STD npm ci
$STD npm run build
msg_ok "Installed wanderer"
msg_info "Installing wanderer plugins"
for plugin in hammerhead komoot strava; do
fetch_and_deploy_gh_release "wanderer-plugin-${plugin}" "open-wanderer/wanderer" "prebuild" "latest" "/opt/wanderer/data/plugins" "wanderer-plugin-${plugin}.tar.gz" || msg_warn "Failed to install wanderer plugin: ${plugin}"
fetch_and_deploy_gh_release "wanderer-plugin-${plugin}" "open-wanderer/wanderer" "prebuild" "latest" "/opt/wanderer_data/plugins" "wanderer-plugin-${plugin}.tar.gz" || msg_warn "Failed to install wanderer plugin: ${plugin}"
done
msg_ok "Installed wanderer plugins"
@@ -48,20 +48,10 @@ PB_URL=${LOCAL_IP}:8090
PUBLIC_POCKETBASE_URL=http://${LOCAL_IP}:8090
PUBLIC_VALHALLA_URL=https://valhalla1.openstreetmap.de
POCKETBASE_ENCRYPTION_KEY=${POCKETBASE_KEY}
PB_DB_LOCATION=/opt/wanderer/data/pb_data
MEILI_DB_PATH=/opt/wanderer/data/meili_data
PB_DB_LOCATION=/opt/wanderer_data/pb_data
MEILI_DB_PATH=/opt/wanderer_data/meili_data
EOF
cat <<'EOF' >/usr/local/bin/wanderer-pb
#!/usr/bin/env bash
set -a
source /opt/wanderer/.env
set +a
cd /opt/wanderer/source/db
exec ./pocketbase "$@" --dir="$PB_DB_LOCATION"
EOF
chmod +x /usr/local/bin/wanderer-pb
cat <<EOF >/etc/systemd/system/wanderer-pocketbase.service
[Unit]
Description=wanderer PocketBase
@@ -73,9 +63,9 @@ StartLimitBurst=5
[Service]
Type=simple
WorkingDirectory=/opt/wanderer/source/db
WorkingDirectory=/opt/wanderer/db
EnvironmentFile=/opt/wanderer/.env
ExecStart=/opt/wanderer/source/db/pocketbase serve --http=\${PB_URL} --dir=\${PB_DB_LOCATION}
ExecStart=/opt/wanderer/db/pocketbase serve --http=\${PB_URL} --dir=\${PB_DB_LOCATION}
Restart=always
RestartSec=1
@@ -93,7 +83,7 @@ StartLimitBurst=5
[Service]
Type=simple
WorkingDirectory=/opt/wanderer/source/web
WorkingDirectory=/opt/wanderer/web
EnvironmentFile=/opt/wanderer/.env
ExecStart=/usr/bin/node build
Restart=always