Compare commits

..

1 Commits

Author SHA1 Message Date
Tobias 36b1dabefb reitti: update to v5 2026-07-06 22:30:03 +02:00
23 changed files with 278 additions and 493 deletions
-39
View File
@@ -499,40 +499,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-07-10
### 🆕 New Scripts
- Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673))
- Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674))
## 2026-07-09
### 🚀 Updated Scripts
- fix(pihole): repair Unbound DNS-over-TLS (DoT) forwarding config [@TowyTowy](https://github.com/TowyTowy) ([#15654](https://github.com/community-scripts/ProxmoxVE/pull/15654))
## 2026-07-08
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Opencloud: Bump version to 7.2.1 [@vhsdream](https://github.com/vhsdream) ([#15655](https://github.com/community-scripts/ProxmoxVE/pull/15655))
- BabyBuddy: Harden update script [@MickLesk](https://github.com/MickLesk) ([#15642](https://github.com/community-scripts/ProxmoxVE/pull/15642))
## 2026-07-07
### 🆕 New Scripts
- Forgejo-Runner ([#15046](https://github.com/community-scripts/ProxmoxVE/pull/15046))
## 2026-07-06
### 🚀 Updated Scripts
@@ -542,7 +508,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes
- Wizarr: Build JS and CSS static assets [@vhsdream](https://github.com/vhsdream) ([#15634](https://github.com/community-scripts/ProxmoxVE/pull/15634))
- RustDesk Server: Update URL format in rustdeskserver.sh [@tremor021](https://github.com/tremor021) ([#15626](https://github.com/community-scripts/ProxmoxVE/pull/15626))
- attempt to port docker-vm to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15611](https://github.com/community-scripts/ProxmoxVE/pull/15611))
- fix(plane): don't clobber global app var, breaking /usr/bin/update [@asylumexp](https://github.com/asylumexp) ([#15612](https://github.com/community-scripts/ProxmoxVE/pull/15612))
@@ -551,10 +516,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- cliproxyapi: point setup message at /management.html [@austinpilz](https://github.com/austinpilz) ([#15628](https://github.com/community-scripts/ProxmoxVE/pull/15628))
### 🗑️ Deleted Scripts
- Remove: FlowiseAI [@MickLesk](https://github.com/MickLesk) ([#15624](https://github.com/community-scripts/ProxmoxVE/pull/15624))
## 2026-07-05
### 🆕 New Scripts
+1 -3
View File
@@ -40,8 +40,7 @@ function update_script() {
create_backup /opt/babybuddy/babybuddy/settings/production.py
msg_info "Cleaning old files"
cd /opt/babybuddy || exit
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf -- {} +
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
msg_ok "Cleaned old files"
fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" "tarball"
@@ -52,7 +51,6 @@ function update_script() {
source .venv/bin/activate
$STD uv pip install -r requirements.txt
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
$STD python manage.py makemigrations
$STD python manage.py migrate
msg_ok "Updated ${APP}"
+13 -4
View File
@@ -34,22 +34,31 @@ function update_script() {
systemctl stop endurain
msg_ok "Stopped Service"
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
msg_info "Creating Backup"
cp /opt/endurain/.env /opt/endurain.env
cp /opt/endurain/frontend/dist/env.js /opt/endurain.env.js
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
msg_info "Preparing Update"
cd /opt/endurain
rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
rm -rf \
/opt/endurain/{docs,example.env,screenshot_01.png} \
/opt/endurain/docker* \
/opt/endurain/*.yml
cp /opt/endurain.env /opt/endurain/.env
rm /opt/endurain.env
msg_ok "Prepared Update"
msg_info "Updating Frontend"
cd /opt/endurain/frontend
$STD npm ci
$STD npm run build
cp /opt/endurain.env.js /opt/endurain/frontend/dist/env.js
rm /opt/endurain.env.js
msg_ok "Updated Frontend"
restore_backup
msg_info "Updating Backend"
cd /opt/endurain/backend
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
+7 -14
View File
@@ -35,22 +35,12 @@ function update_script() {
systemctl stop fireshare
msg_ok "Stopped Service"
create_backup /opt/fireshare/fireshare.env
mv /opt/fireshare/fireshare.env /opt
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
restore_backup
mv /opt/fireshare.env /opt/fireshare
rm -f /usr/local/bin/fireshare
if ! grep -q "__FIRESHARE_PORT__" /etc/nginx/nginx.conf; then
cp /opt/fireshare/app/nginx/prod.conf /etc/nginx/nginx.conf
sed -i 's|root /processed/|root /opt/fireshare-processed/|g' /etc/nginx/nginx.conf
sed -i 's/^user[[:space:]]\+nginx;/user root;/' /etc/nginx/nginx.conf
sed -i 's|root[[:space:]]\+/app/build;|root /opt/fireshare/app/client/build;|' /etc/nginx/nginx.conf
sed -i 's/__FIRESHARE_PORT__/80/g' /etc/nginx/nginx.conf
cp /opt/fireshare/app/nginx/error.html /etc/nginx/
cp /opt/fireshare/app/nginx/api_unavailable.html /etc/nginx/
fi
msg_info "Configuring Fireshare"
msg_info "Updating Fireshare"
cd /opt/fireshare
$STD uv venv --clear
$STD .venv/bin/python -m ensurepip --upgrade
@@ -63,10 +53,13 @@ function update_script() {
export VIDEO_DIRECTORY=/opt/fireshare-videos
export PROCESSED_DIRECTORY=/opt/fireshare-processed
$STD uv run flask db upgrade
msg_info "Building Fireshare Client"
cd /opt/fireshare/app/client
$STD npm install
$STD npm run build
msg_ok "Configured Fireshare"
msg_ok "Built Fireshare Client"
msg_ok "Updated Fireshare"
msg_info "Starting Service"
systemctl start fireshare
+54
View File
@@ -0,0 +1,54 @@
#!/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)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://flowiseai.com/ | Github: https://github.com/FlowiseAI/Flowise
APP="FlowiseAI"
var_tags="${var_tags:-low-code}"
var_disk="${var_disk:-10}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
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/systemd/system/flowise.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
msg_info "Updating FlowiseAI (this may take some time)"
systemctl stop flowise
$STD pnpm add -g flowise
if grep -q 'ExecStart=npx flowise start' /etc/systemd/system/flowise.service; then
sed -i 's|ExecStart=npx flowise start|ExecStart=flowise start|' /etc/systemd/system/flowise.service
systemctl daemon-reload
fi
systemctl start flowise
msg_ok "Updated FlowiseAI"
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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
-79
View File
@@ -1,79 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Simon Friedrich (lengschder97)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://forgejo.org/
APP="Forgejo-Runner"
var_tags="${var_tags:-ci}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
var_nesting="${var_nesting:-1}"
var_keyctl="${var_keyctl:-1}"
export var_forgejo_instance="${var_forgejo_instance:-}"
export var_forgejo_runner_token="${var_forgejo_runner_token:-}"
export var_runner_labels="${var_runner_labels:-}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/forgejo-runner ]]; then
msg_error "No ${APP} installation found!"
exit 1
fi
RELEASE=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
if [[ "${RELEASE}" == "$(cat ~/.forgejo-runner 2>/dev/null)" ]]; then
msg_ok "No update required. ${APP} is already at v${RELEASE}"
exit
fi
msg_info "Stopping Services"
systemctl stop forgejo-runner
msg_ok "Stopped Services"
msg_info "Updating Forgejo Runner to v${RELEASE}"
curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RELEASE}/forgejo-runner-${RELEASE}-linux-$(arch_resolve)" -o /usr/local/bin/forgejo-runner
chmod +x /usr/local/bin/forgejo-runner
echo "${RELEASE}" >~/.forgejo-runner
msg_ok "Updated Forgejo Runner"
msg_info "Starting Services"
systemctl start forgejo-runner
msg_ok "Started Services"
msg_ok "Updated successfully!"
exit
}
if [[ -n "${mode:-}" ]]; then
if [[ -z "${var_forgejo_instance:-}" ]]; then
msg_error "var_forgejo_instance is required for unattended installs."
exit 1
fi
if [[ -z "${var_forgejo_runner_token:-}" ]]; then
msg_error "var_forgejo_runner_token is required for unattended installs."
exit 1
fi
fi
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} After first boot, check your Forgejo Instance for the new Runner.${CL}"
+6
View File
@@ -0,0 +1,6 @@
________ _ ___ ____
/ ____/ /___ _ __(_)_______ / | / _/
/ /_ / / __ \ | /| / / / ___/ _ \/ /| | / /
/ __/ / / /_/ / |/ |/ / (__ ) __/ ___ |_/ /
/_/ /_/\____/|__/|__/_/____/\___/_/ |_/___/
-6
View File
@@ -1,6 +0,0 @@
______ _ ____
/ ____/___ _________ ____ (_)___ / __ \__ ______ ____ ___ _____
/ /_ / __ \/ ___/ __ `/ _ \ / / __ \______/ /_/ / / / / __ \/ __ \/ _ \/ ___/
/ __/ / /_/ / / / /_/ / __/ / / /_/ /_____/ _, _/ /_/ / / / / / / / __/ /
/_/ \____/_/ \__, /\___/_/ /\____/ /_/ |_|\__,_/_/ /_/_/ /_/\___/_/
/____/ /___/
-6
View File
@@ -1,6 +0,0 @@
_____ _ __
/ ___/____ ___ __(_)___/ /
\__ \/ __ `/ / / / / __ /
___/ / /_/ / /_/ / / /_/ /
/____/\__, /\__,_/_/\__,_/
/_/
+1 -1
View File
@@ -30,7 +30,7 @@ function update_script() {
exit
fi
RELEASE="v7.2.1"
RELEASE="v7.2.0"
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
msg_info "Stopping services"
systemctl stop opencloud opencloud-wopi
+19 -14
View File
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
APP="Pangolin"
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.20.0}"
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}"
var_tags="${var_tags:-proxy}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
@@ -33,15 +33,6 @@ function update_script() {
ensure_dependencies build-essential python3
if ! command -v psql &>/dev/null; then
msg_error "This installation uses SQLite and cannot be upgraded to Pangolin ${PANGOLIN_VERSION}."
echo -e "${INFO}${YW}Starting with Pangolin 1.20.0, PostgreSQL is required as the database backend.${CL}"
echo -e "${INFO}${YW}An automatic migration of your existing SQLite data is not supported.${CL}"
echo -e "${INFO}${YW}Please create a new LXC with the Pangolin install script, which sets up PostgreSQL automatically.${CL}"
echo -e "${INFO}${YW}Your current data is preserved in this container and can be manually migrated if needed.${CL}"
exit 1
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "pangolin" "fosrl/pangolin" "$PANGOLIN_VERSION" "Pinned to a tested release because Pangolin's schema changes have repeatedly broken unattended updates. To try a newer version at your own risk, run: 'export PANGOLIN_VERSION=<tag>' and re-run update. If it breaks, please open an issue at https://github.com/community-scripts/ProxmoxVE/issues with the error log."; then
@@ -50,7 +41,13 @@ function update_script() {
systemctl stop gerbil
msg_info "Service stopped"
create_backup /opt/pangolin/config
msg_info "Creating backup"
tar -czf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin config
if [[ -f /opt/pangolin/config/db/db.sqlite ]]; then
cp -a /opt/pangolin/config/db/db.sqlite \
"/opt/pangolin/config/db/db.sqlite.pre-${PANGOLIN_VERSION}-$(date +%Y%m%d-%H%M%S).bak"
fi
msg_ok "Created backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
@@ -58,7 +55,7 @@ function update_script() {
msg_info "Updating Pangolin"
cd /opt/pangolin
$STD npm ci
$STD npm run set:pg
$STD npm run set:sqlite
$STD npm run set:oss
rm -rf server/private
$STD npm run db:generate
@@ -71,7 +68,10 @@ function update_script() {
cp server/db/mac_models.json ./dist/mac_models.json
msg_ok "Updated Pangolin"
restore_backup
msg_info "Restoring config"
tar -xzf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin --overwrite
rm -f /opt/pangolin_config_backup.tar.gz
msg_ok "Restored config"
if ! grep -q '^ExecStartPre=/usr/bin/node dist/migrations.mjs' /etc/systemd/system/pangolin.service 2>/dev/null; then
msg_info "Adding migration step to pangolin.service"
@@ -82,8 +82,13 @@ function update_script() {
msg_info "Running database migrations"
cd /opt/pangolin
SQLITE_DB="/opt/pangolin/config/db/db.sqlite"
if [[ -f "$SQLITE_DB" ]]; then
if ! sqlite3 "$SQLITE_DB" ".tables" 2>/dev/null | tr ' ' '\n' | grep -qx "statusHistory"; then
sqlite3 "$SQLITE_DB" "DELETE FROM versionMigrations;" 2>/dev/null || true
fi
fi
ENVIRONMENT=prod $STD node dist/migrations.mjs
msg_ok "Ran database migrations"
msg_info "Updating Badger plugin version"
+77 -7
View File
@@ -106,13 +106,6 @@ spring.servlet.multipart.max-file-size=5GB
spring.servlet.multipart.max-request-size=5GB
server.tomcat.max-part-count=100
# Rqueue configuration
rqueue.web.enable=false
rqueue.job.enabled=false
rqueue.message.durability.in-terminal-state=0
rqueue.key.prefix=\${spring.cache.redis.key-prefix}
rqueue.message.converter.provider.class=com.dedicatedcode.reitti.config.RQueueCustomMessageConverter
# Application-specific settings
reitti.server.advertise-uri=
@@ -168,6 +161,81 @@ PROPEOF
msg_ok "Rewrote application.properties (backup: application.properties.bak)"
fi
# Migrate v4 -> v5: Remove Rqueue configuration (replaced by Quartz Scheduler)
if grep -q "^rqueue\." /opt/reitti/application.properties 2>/dev/null; then
msg_info "Migrating to v5: Removing Rqueue configuration"
sed -i '/^# Rqueue configuration$/d; /^rqueue\./d' /opt/reitti/application.properties
msg_ok "Removed Rqueue configuration"
fi
# Migrate v4 -> v5: Update application.properties and nginx tile cache for v5 compatibility
if grep -q "^reitti\.process-data\.schedule=" /opt/reitti/application.properties 2>/dev/null; then
msg_info "Migrating to v5: Updating application.properties"
sed -i '/^reitti\.process-data\.schedule=/d' /opt/reitti/application.properties
sed -i 's/^reitti\.import\.processing-idle-start-time=.*/reitti.import.grace-time-seconds=30/' /opt/reitti/application.properties
sed -i 's/^spring\.datasource\.hikari\.maximum-pool-size=20$/spring.datasource.hikari.maximum-pool-size=30/' /opt/reitti/application.properties
grep -q "devices" /opt/reitti/application.properties || \
sed -i 's/^spring\.cache\.cache-names=\(.*\)$/spring.cache.cache-names=\1,devices,mapStyles,mapStyleJson/' /opt/reitti/application.properties
grep -q "org.quartz.core.ErrorLogger" /opt/reitti/application.properties || \
sed -i '/^logging\.level\.com\.dedicatedcode\.reitti=/a logging.level.org.quartz.core.ErrorLogger=FATAL' /opt/reitti/application.properties
grep -q "^spring.servlet.multipart.resolve-lazily=" /opt/reitti/application.properties || \
sed -i '/^spring\.servlet\.multipart\.max-request-size=/a spring.servlet.multipart.resolve-lazily=true' /opt/reitti/application.properties
grep -q "^spring.mvc.async.request-timeout=" /opt/reitti/application.properties || \
echo "spring.mvc.async.request-timeout=600000" >>/opt/reitti/application.properties
if ! grep -q "^spring.quartz" /opt/reitti/application.properties; then
cat >>/opt/reitti/application.properties <<'QUARTZEOF'
# Quartz Scheduler configuration
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=never
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.isClustered=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.threadPool.threadCount=5
QUARTZEOF
fi
grep -q "^reitti.import.staging.cleanup.cron=" /opt/reitti/application.properties || \
echo "reitti.import.staging.cleanup.cron=0 0 4 * * *" >>/opt/reitti/application.properties
grep -q "^reitti.batching.max-batch-size=" /opt/reitti/application.properties || \
printf "reitti.batching.max-batch-size=100\nreitti.batching.max-wait-time=5\n" >>/opt/reitti/application.properties
grep -q "^reitti.jobs.cleanup.cron=" /opt/reitti/application.properties || \
printf "reitti.jobs.cleanup.cron=0 0 4 * * ?\nreitti.jobs.cleanup.max-age-hours=24\n" >>/opt/reitti/application.properties
grep -q "^reitti.db-janitor.schedule=" /opt/reitti/application.properties || \
echo "reitti.db-janitor.schedule=0 0 4 * * ?" >>/opt/reitti/application.properties
msg_ok "Updated application.properties for v5"
if [[ -f /etc/nginx/nginx.conf ]]; then
msg_info "Migrating to v5: Updating nginx tile cache configuration"
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.v5
cat >/etc/nginx/nginx.conf <<'NGINXEOF'
user www-data;
events {
worker_connections 1024;
}
http {
resolver 1.1.1.1 8.8.8.8 valid=30s ipv6=off;
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
server {
listen 80;
location /custom/ {
set $upstream_url $http_x_reitti_upstream_url;
proxy_pass $upstream_url;
proxy_set_header Host $proxy_host;
proxy_set_header User-Agent "Reitti/1.0";
proxy_cache tiles;
proxy_cache_key $upstream_url;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}
}
}
NGINXEOF
systemctl reload nginx
msg_ok "Updated nginx tile cache configuration"
fi
fi
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
msg_info "Stopping Service"
systemctl stop reitti
@@ -179,10 +247,12 @@ PROPEOF
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
msg_warn "v5 runs a one-time database migration on first start (GPS points → device table). This may take several minutes on large datasets — do not interrupt the container."
msg_info "Starting Service"
systemctl start reitti
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_warn "Post-upgrade: Verify each API token has a Device assigned in Settings → API Tokens. Tokens without a device cannot ingest location data in v5."
fi
exit
}
-53
View File
@@ -1,53 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: 007hacky007
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.squid-cache.org/
APP="Squid"
var_tags="${var_tags:-proxy}"
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/squid/squid.conf ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Squid"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated Squid"
msg_info "Validating Squid Configuration"
$STD squid -k parse
msg_ok "Validated Squid Configuration"
msg_info "Restarting Squid"
systemctl restart squid
msg_ok "Restarted Squid"
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} Proxy endpoint:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:3128${CL}"
+8 -26
View File
@@ -50,38 +50,20 @@ function update_script() {
$STD /usr/local/bin/uv sync --frozen
$STD /usr/local/bin/uv run --frozen pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD tar -xf "$BACKUP_FILE" --directory=/
if grep -q 'bind' /opt/wizarr/start.sh; then
WIZARR_PORT=$(awk -F: '{print $2}' /opt/wizarr/start.sh | awk -F' ' '{print $1}' | tr -d '[:space:]')
if grep -q 'workers' /opt/wizarr/start.sh; then
sed -i 's/--workers 4//' /opt/wizarr/start.sh
fi
sed -i -E -e 's/[[:space:]]+/ /g' \
-e 's/--workers 4//' \
-e 's/--bind 0.0.0.0:[0-9]+//' /opt/wizarr/start.sh
KEYS=("FLASK" "WORKERS" "HOST" "PORT")
for key in "${KEYS[@]}"; do
if ! grep -q "$key" /opt/wizarr/.env; then
cat <<EOF >/opt/wizarr/.env
APP_URL=http://${LOCAL_IP}
DISABLE_BUILTIN_AUTH=false
if ! grep -qE 'FLASK|WORKERS|VERSION' /opt/wizarr/.env; then
cat <<EOF >/opt/wizarr/.env
FLASK_ENV=production
GUNICORN_WORKERS=4
HOST=0.0.0.0
PORT=${WIZARR_PORT:-5690}
LOG_LEVEL=info
APP_VERSION=$(cat ~/.wizarr)
APP_VERSION=$(sed 's/^20/v&/' ~/.wizarr)
EOF
fi
continue
done
sed -i "s/_VERSION=.*$/_VERSION=$(cat ~/.wizarr)/" /opt/wizarr/.env
if grep -q 'abnormal' /etc/systemd/system/wizarr.service; then
sed -i 's/on-abnormal/always \
RestartSec=10 \
KillMode=mixed \
TimeoutStopSec=10/' /etc/systemd/system/wizarr.service
systemctl daemon-reload
else
sed -i "s/_VERSION=v.*$/_VERSION=v$(cat ~/.wizarr)/" /opt/wizarr/.env
fi
rm -rf "$BACKUP_FILE"
export FLASK_SKIP_SCHEDULER=true
-3
View File
@@ -141,9 +141,6 @@ cp /opt/fireshare/app/nginx/prod.conf /etc/nginx/nginx.conf
sed -i 's|root /processed/|root /opt/fireshare-processed/|g' /etc/nginx/nginx.conf
sed -i 's/^user[[:space:]]\+nginx;/user root;/' /etc/nginx/nginx.conf
sed -i 's|root[[:space:]]\+/app/build;|root /opt/fireshare/app/client/build;|' /etc/nginx/nginx.conf
sed -i 's/__FIRESHARE_PORT__/80/g' /etc/nginx/nginx.conf
cp /opt/fireshare/app/nginx/error.html /etc/nginx/
cp /opt/fireshare/app/nginx/api_unavailable.html /etc/nginx/
systemctl start nginx
cat <<EOF >~/fireshare.creds
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://flowiseai.com/ | Github: https://github.com/FlowiseAI/Flowise
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
pkg-config
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.11" setup_uv
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
msg_info "Installing FlowiseAI (Patience)"
PYTHON_BIN="$(uv python find 3.11)"
export npm_config_python="$PYTHON_BIN"
$STD pnpm add -g flowise
mkdir -p /opt/flowiseai
curl -fsSL "https://raw.githubusercontent.com/FlowiseAI/Flowise/main/packages/server/.env.example" -o "/opt/flowiseai/.env"
msg_ok "Installed FlowiseAI"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/flowise.service
[Unit]
Description=FlowiseAI
After=network.target
[Service]
EnvironmentFile=/opt/flowiseai/.env
ExecStart=flowise start
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now flowise
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
-114
View File
@@ -1,114 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Simon Friedrich (lengschder97)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://forgejo.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_yq
if [[ -z "${var_forgejo_instance:-}" ]]; then
read -r -p "${TAB3}Forgejo Instance URL (e.g. https://codeberg.org): " var_forgejo_instance
var_forgejo_instance="${var_forgejo_instance:-https://codeberg.org}"
fi
if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then
read -r -p "${TAB3}Forgejo Runner UUID: " var_forgejo_runner_uuid
fi
if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then
msg_error "No runner UUID provided. Cannot continue."
exit 1
fi
if [[ -z "${var_forgejo_runner_token:-}" ]]; then
read -r -p "${TAB3}Forgejo Runner Token: " var_forgejo_runner_token
fi
if [[ -z "${var_forgejo_runner_token:-}" ]]; then
msg_error "No runner registration token provided. Cannot continue."
exit 1
fi
DEFAULT_RUNNER_LABELS="linux-amd64:docker://node:22-bookworm"
if [[ -z "${var_runner_labels:-}" ]]; then
read -r -p "${TAB3}Additional runner labels (comma-separated, or leave blank for default only): " var_runner_labels
fi
if [[ -n "${var_runner_labels:-}" ]]; then
RUNNER_LABELS="${DEFAULT_RUNNER_LABELS},${var_runner_labels}"
else
RUNNER_LABELS="${DEFAULT_RUNNER_LABELS}"
fi
export FORGEJO_INSTANCE="$var_forgejo_instance"
export FORGEJO_RUNNER_TOKEN="$var_forgejo_runner_token"
export FORGEJO_RUNNER_UUID="$var_forgejo_runner_uuid"
export RUNNER_LABELS
msg_info "Installing dependencies"
$STD apt install -y \
git \
podman podman-docker
msg_ok "Installed dependencies"
msg_info "Enabling Podman socket"
systemctl enable --now podman.socket
msg_ok "Enabled Podman socket"
msg_info "Installing Forgejo Runner"
RUNNER_VERSION=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq -r .name | sed 's/^v//')
curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-$(arch_resolve)" -o /usr/local/bin/forgejo-runner
chmod +x /usr/local/bin/forgejo-runner
echo "${RUNNER_VERSION}" >~/.forgejo-runner
msg_ok "Installed Forgejo Runner"
msg_info "Registering Forgejo Runner"
export DOCKER_HOST="unix:///run/podman/podman.sock"
msg_info "Generating Forgejo Runner Configuration"
mkdir -p /etc/forgejo-runner
CONFIG_FILE="/etc/forgejo-runner/config.yaml"
forgejo-runner generate-config > $CONFIG_FILE
yq -i '
.container.docker_host = strenv(DOCKER_HOST) |
.server.connections.forgejo.url = strenv(FORGEJO_INSTANCE) |
.server.connections.forgejo.uuid = strenv(FORGEJO_RUNNER_UUID) |
.server.connections.forgejo.token = strenv(FORGEJO_RUNNER_TOKEN) |
.server.connections.forgejo.labels = (strenv(RUNNER_LABELS) | split(",") | map(select(length > 0)))
' $CONFIG_FILE
msg_ok "Generated Forgejo Runner Configuration"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/forgejo-runner.service
[Unit]
Description=Forgejo Runner
Documentation=https://forgejo.org/docs/latest/admin/actions/
After=podman.socket
Requires=podman.socket
[Service]
User=root
WorkingDirectory=/root
Environment=DOCKER_HOST=unix:///run/podman/podman.sock
ExecStart=/usr/local/bin/forgejo-runner daemon -c $CONFIG_FILE
Restart=on-failure
RestartSec=10
TimeoutSec=0
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now forgejo-runner
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -64,7 +64,7 @@ $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPA
echo "$COOLPASS" >~/.coolpass
msg_ok "Installed Collabora Online"
fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v7.2.1" "/usr/bin" "opencloud-*-linux-$(arch_resolve)"
fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v7.2.0" "/usr/bin" "opencloud-*-linux-$(arch_resolve)"
mv /usr/bin/OpenCloud /usr/bin/opencloud
msg_info "Configuring OpenCloud"
+5 -10
View File
@@ -17,13 +17,12 @@ msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
python3 \
sqlite3 \
iptables
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="pangolin" PG_DB_USER="pangolin" setup_postgresql_db
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.20.0}"
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}"
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz"
@@ -37,7 +36,7 @@ BADGER_VERSION=$(get_latest_github_release "fosrl/badger" "false")
cd /opt/pangolin
mkdir -p /opt/pangolin/config/{traefik,db,letsencrypt,logs}
$STD npm ci
$STD npm run set:pg
$STD npm run set:sqlite
$STD npm run set:oss
rm -rf server/private
$STD npm run db:generate
@@ -75,9 +74,6 @@ flags:
require_email_verification: false
disable_signup_without_invite: false
disable_user_create_org: false
postgres:
connection_string: "postgresql://pangolin:${PG_DB_PASS}@localhost:5432/pangolin"
EOF
cat <<EOF >/opt/pangolin/config/traefik/traefik_config.yml
@@ -185,7 +181,7 @@ http:
servers:
- url: "http://$LOCAL_IP:3000"
EOF
$STD ENVIRONMENT=prod node dist/migrations.mjs
$STD npm run db:push
. /etc/os-release
if [ "$VERSION_CODENAME" = "trixie" ]; then
@@ -201,8 +197,7 @@ msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/pangolin.service
[Unit]
Description=Pangolin Service
After=network.target postgresql.service
Wants=postgresql.service
After=network.target
[Service]
Type=simple
+1 -2
View File
@@ -119,8 +119,7 @@ edns-packet-max=1232
EOF
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
cat <<EOF >>/etc/unbound/unbound.conf.d/pi-hole.conf
server:
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt"
forward-zone:
name: "."
+29 -15
View File
@@ -30,27 +30,30 @@ mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
msg_info "Installing Nginx Tile Cache"
mkdir -p /var/cache/nginx/tiles
cat <<EOF >/etc/nginx/nginx.conf
cat <<'NGINXEOF' >/etc/nginx/nginx.conf
user www-data;
events {
worker_connections 1024;
}
http {
resolver 1.1.1.1 8.8.8.8 valid=30s ipv6=off;
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
server {
listen 80;
location / {
proxy_pass https://tile.openstreetmap.org/;
proxy_set_header Host tile.openstreetmap.org;
location /custom/ {
set $upstream_url $http_x_reitti_upstream_url;
proxy_pass $upstream_url;
proxy_set_header Host $proxy_host;
proxy_set_header User-Agent "Reitti/1.0";
proxy_cache tiles;
proxy_cache_key $upstream_url;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}
}
}
EOF
NGINXEOF
chown -R www-data:www-data /var/cache/nginx
chmod -R 750 /var/cache/nginx
systemctl restart nginx
@@ -71,6 +74,7 @@ server.compression.mime-types=text/plain,application/json
logging.level.root=INFO
logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=FATAL
logging.level.com.dedicatedcode.reitti=INFO
logging.level.org.quartz.core.ErrorLogger=FATAL
# Internationalization
spring.messages.basename=messages
@@ -82,7 +86,7 @@ spring.messages.fallback-to-system-locale=false
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$PG_DB_NAME
spring.datasource.username=$PG_DB_USER
spring.datasource.password=$PG_DB_PASS
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.maximum-pool-size=30
# Redis configuration
spring.data.redis.host=127.0.0.1
@@ -92,20 +96,23 @@ spring.data.redis.password=
spring.data.redis.database=0
spring.cache.redis.key-prefix=
spring.cache.cache-names=processed-visits,significant-places,users,magic-links,configurations,transport-mode-configs,avatarThumbnails,avatarData,user-settings
spring.cache.cache-names=processed-visits,significant-places,users,magic-links,configurations,transport-mode-configs,avatarThumbnails,avatarData,user-settings,devices,mapStyles,mapStyleJson
spring.cache.redis.time-to-live=1d
# Upload configuration
spring.servlet.multipart.max-file-size=5GB
spring.servlet.multipart.max-request-size=5GB
spring.servlet.multipart.resolve-lazily=true
server.tomcat.max-part-count=100
spring.mvc.async.request-timeout=600000
# Rqueue configuration
rqueue.web.enable=false
rqueue.job.enabled=false
rqueue.message.durability.in-terminal-state=0
rqueue.key.prefix=\${spring.cache.redis.key-prefix}
rqueue.message.converter.provider.class=com.dedicatedcode.reitti.config.RQueueCustomMessageConverter
# Quartz Scheduler configuration
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=never
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.isClustered=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.threadPool.threadCount=5
# Application-specific settings
reitti.server.advertise-uri=
@@ -117,18 +124,25 @@ reitti.security.oidc.enabled=false
reitti.security.oidc.registration.enabled=false
reitti.import.batch-size=10000
reitti.import.processing-idle-start-time=10
reitti.import.grace-time-seconds=30
reitti.import.staging.cleanup.cron=0 0 4 * * *
reitti.batching.max-batch-size=100
reitti.batching.max-wait-time=5
reitti.geo-point-filter.max-speed-kmh=1000
reitti.geo-point-filter.max-accuracy-meters=100
reitti.geo-point-filter.history-lookback-hours=24
reitti.geo-point-filter.window-size=50
reitti.process-data.schedule=0 */10 * * * *
reitti.process-data.refresh-views.schedule=0 0 4 * * *
reitti.imports.schedule=0 5/10 * * * *
reitti.imports.owntracks-recorder.schedule=\${reitti.imports.schedule}
reitti.jobs.cleanup.cron=0 0 4 * * ?
reitti.jobs.cleanup.max-age-hours=24
reitti.db-janitor.schedule=0 0 4 * * ?
# Geocoding service configuration
reitti.geocoding.max-errors=10
reitti.geocoding.photon.base-url=
-88
View File
@@ -1,88 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: 007hacky007
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.squid-cache.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Configuring Squid"
mkdir -p /etc/squid
cat <<EOF >/etc/squid/squid.conf
acl localnet src 0.0.0.1-0.255.255.255
acl localnet src 10.0.0.0/8
acl localnet src 100.64.0.0/10
acl localnet src 169.254.0.0/16
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\\?) 0 0% 0
refresh_pattern . 0 20% 4320
# Privacy / hardening
httpd_suppress_version_string on
visible_hostname $(hostname)
forwarded_for delete
request_header_access X-Forwarded-For deny all
EOF
msg_ok "Configured Squid"
msg_info "Installing Dependencies"
$STD apt install -y \
squid \
apache2-utils
msg_ok "Installed Dependencies"
msg_info "Configuring Squid Authentication"
touch /etc/squid/passwords
chown proxy:proxy /etc/squid/passwords
chmod 640 /etc/squid/passwords
$STD squid -k parse
msg_ok "Configured Squid Authentication"
msg_info "Starting Service"
systemctl enable -q --now squid
msg_ok "Started Service"
motd_ssh
customize
cleanup_lxc
+4 -8
View File
@@ -27,17 +27,15 @@ cd /opt/wizarr
$STD /usr/local/bin/uv sync --frozen
$STD /usr/local/bin/uv run --frozen pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
cat <<EOF >/opt/wizarr/.env
FLASK_ENV=production
GUNICORN_WORKERS=4
APP_URL=http://${LOCAL_IP}
HOST=0.0.0.0
PORT=5690
DISABLE_BUILTIN_AUTH=false
LOG_LEVEL=INFO
APP_VERSION=$(get_latest_github_release "wizarrrr/wizarr")
APP_VERSION=v$(get_latest_github_release "wizarrrr/wizarr")
EOF
cat <<EOF >/opt/wizarr/start.sh
@@ -46,6 +44,7 @@ cat <<EOF >/opt/wizarr/start.sh
uv run --frozen gunicorn \
--config gunicorn.conf.py \
--preload \
--bind 0.0.0.0:5690 \
--umask 007 \
run:app
EOF
@@ -63,10 +62,7 @@ Type=simple
WorkingDirectory=/opt/wizarr
EnvironmentFile=/opt/wizarr/.env
ExecStart=/opt/wizarr/start.sh
Restart=always
RestartSec=10
KillMode=mixed
TimeoutStopSec=10
Restart=on-abnormal
[Install]
WantedBy=multi-user.target