mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-15 06:52:16 +00:00
Compare commits
14 Commits
add-script
...
fix/reitti
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a9a038610 | ||
|
|
33716c92e5 | ||
|
|
dda2ea811f | ||
|
|
392ff1f575 | ||
|
|
af9bf93707 | ||
|
|
cfe5e7baa7 | ||
|
|
1d609976d3 | ||
|
|
041de06a4d | ||
|
|
f0bfec1b59 | ||
|
|
83ef4a5857 | ||
|
|
0baafa3993 | ||
|
|
e55fe43e2d | ||
|
|
482f579dc0 | ||
|
|
2652ae6c95 |
15
CHANGELOG.md
15
CHANGELOG.md
@@ -446,10 +446,25 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
|
||||
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
|
||||
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
|
||||
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
|
||||
|
||||
## 2026-04-12
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -39,6 +39,9 @@ function update_script() {
|
||||
msg_info "Backing up Configuration and Data"
|
||||
cp /opt/bambuddy/.env /opt/bambuddy.env.bak
|
||||
cp -r /opt/bambuddy/data /opt/bambuddy_data_bak
|
||||
[[ -f /opt/bambuddy/bambuddy.db ]] && cp /opt/bambuddy/bambuddy.db /opt/bambuddy.db.bak
|
||||
[[ -f /opt/bambuddy/bambutrack.db ]] && cp /opt/bambuddy/bambutrack.db /opt/bambutrack.db.bak
|
||||
[[ -d /opt/bambuddy/archive ]] && cp -r /opt/bambuddy/archive /opt/bambuddy_archive_bak
|
||||
msg_ok "Backed up Configuration and Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
||||
@@ -59,8 +62,14 @@ function update_script() {
|
||||
mkdir -p /opt/bambuddy/data
|
||||
cp /opt/bambuddy.env.bak /opt/bambuddy/.env
|
||||
cp -r /opt/bambuddy_data_bak/. /opt/bambuddy/data/
|
||||
rm -f /opt/bambuddy.env.bak
|
||||
rm -rf /opt/bambuddy_data_bak
|
||||
[[ -f /opt/bambuddy.db.bak ]] && cp /opt/bambuddy.db.bak /opt/bambuddy/bambuddy.db
|
||||
[[ -f /opt/bambutrack.db.bak ]] && cp /opt/bambutrack.db.bak /opt/bambuddy/bambutrack.db
|
||||
if [[ -d /opt/bambuddy_archive_bak ]]; then
|
||||
mkdir -p /opt/bambuddy/archive
|
||||
cp -r /opt/bambuddy_archive_bak/. /opt/bambuddy/archive/
|
||||
fi
|
||||
rm -f /opt/bambuddy.env.bak /opt/bambuddy.db.bak /opt/bambutrack.db.bak
|
||||
rm -rf /opt/bambuddy_data_bak /opt/bambuddy_archive_bak
|
||||
msg_ok "Restored Configuration and Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
@@ -29,28 +29,41 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "bytestash" "jordan-dalby/ByteStash"; then
|
||||
read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped
|
||||
if [[ "$backuped" =~ ^[Yy]$ ]]; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop bytestash-backend bytestash-frontend
|
||||
msg_ok "Services Stopped"
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop bytestash-backend bytestash-frontend
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
|
||||
|
||||
msg_info "Configuring ByteStash"
|
||||
cd /opt/bytestash/server
|
||||
$STD npm install
|
||||
cd /opt/bytestash/client
|
||||
$STD npm install
|
||||
msg_ok "Updated ByteStash"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start bytestash-backend bytestash-frontend
|
||||
msg_ok "Started Services"
|
||||
else
|
||||
msg_error "PLEASE MAKE A BACKUP FIRST!"
|
||||
exit
|
||||
msg_info "Backing up data"
|
||||
tmp_dir="/opt/bytestash-data-backup"
|
||||
mkdir -p "$tmp_dir"
|
||||
if [[ -d /opt/bytestash/data ]]; then
|
||||
cp -r /opt/bytestash/data "$tmp_dir"/data
|
||||
elif [[ -d /opt/data ]]; then
|
||||
cp -r /opt/data "$tmp_dir"/data
|
||||
fi
|
||||
msg_ok "Data backed up"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
|
||||
|
||||
msg_info "Restoring data"
|
||||
if [[ -d "$tmp_dir"/data ]]; then
|
||||
mkdir -p /opt/bytestash/data
|
||||
cp -r "$tmp_dir"/data/* /opt/bytestash/data/
|
||||
rm -rf "$tmp_dir"
|
||||
fi
|
||||
msg_ok "Data restored"
|
||||
|
||||
msg_info "Configuring ByteStash"
|
||||
cd /opt/bytestash/server
|
||||
$STD npm install
|
||||
cd /opt/bytestash/client
|
||||
$STD npm install
|
||||
msg_ok "Updated ByteStash"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start bytestash-backend bytestash-frontend
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/actions/runner
|
||||
|
||||
APP="GitHub-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_unprivileged="${var_unprivileged:-1}"
|
||||
var_nesting="${var_nesting:-1}"
|
||||
var_keyctl="${var_keyctl:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/actions-runner/run.sh ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if check_for_gh_release "actions-runner" "actions/runner"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop actions-runner
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up runner configuration"
|
||||
BACKUP_DIR="/opt/actions-runner.backup"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
for f in .runner .credentials .credentials_rsaparams .env .path; do
|
||||
[[ -f /opt/actions-runner/$f ]] && cp -a /opt/actions-runner/$f "$BACKUP_DIR/"
|
||||
done
|
||||
msg_ok "Backed up configuration"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-x64-*.tar.gz"
|
||||
|
||||
msg_info "Restoring runner configuration"
|
||||
for f in .runner .credentials .credentials_rsaparams .env .path; do
|
||||
[[ -f "$BACKUP_DIR/$f" ]] && cp -a "$BACKUP_DIR/$f" /opt/actions-runner/
|
||||
done
|
||||
rm -rf "$BACKUP_DIR"
|
||||
msg_ok "Restored configuration"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start actions-runner
|
||||
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} After first boot, run config.sh with your token and start the service.${CL}"
|
||||
@@ -109,7 +109,7 @@ EOF
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
|
||||
RELEASE="v2.7.4"
|
||||
RELEASE="v2.7.5"
|
||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||
msg_info "Enabling Maintenance Mode"
|
||||
|
||||
@@ -28,7 +28,8 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "mealie" "mealie-recipes/mealie"; then
|
||||
RELEASE="v3.14.0"
|
||||
if check_for_gh_release "mealie" "mealie-recipes/mealie" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
NODE_MODULE="yarn" NODE_VERSION="24" setup_nodejs
|
||||
|
||||
@@ -40,7 +41,7 @@ function update_script() {
|
||||
cp -f /opt/mealie/mealie.env /opt/mealie.env
|
||||
msg_ok "Backup completed"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "${RELEASE}" "/opt/mealie"
|
||||
|
||||
msg_info "Installing Python Dependencies with uv"
|
||||
cd /opt/mealie
|
||||
|
||||
210
ct/reitti.sh
210
ct/reitti.sh
@@ -37,39 +37,136 @@ function update_script() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d /var/cache/nginx/tiles ]; then
|
||||
msg_info "Installing Nginx Tile Cache"
|
||||
mkdir -p /var/cache/nginx/tiles
|
||||
$STD apt install -y nginx
|
||||
cat <<EOF >/etc/nginx/nginx.conf
|
||||
user www-data;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
http {
|
||||
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;
|
||||
proxy_set_header User-Agent "Reitti/1.0";
|
||||
proxy_cache tiles;
|
||||
proxy_cache_valid 200 30d;
|
||||
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
chown -R www-data:www-data /var/cache/nginx
|
||||
chmod -R 750 /var/cache/nginx
|
||||
systemctl restart nginx
|
||||
echo "reitti.ui.tiles.cache.url=http://127.0.0.1" >> /opt/reitti/application.properties
|
||||
systemctl restart reitti
|
||||
msg_info "Installed Nginx Tile Cache"
|
||||
# Migrate v3 -> v4: Remove RabbitMQ (no longer required) / Photon / Spring Settings
|
||||
if systemctl is-enabled --quiet rabbitmq-server 2>/dev/null; then
|
||||
msg_info "Migrating to v4: Removing RabbitMQ"
|
||||
systemctl stop rabbitmq-server
|
||||
systemctl disable rabbitmq-server
|
||||
$STD apt-get purge -y rabbitmq-server erlang-base
|
||||
$STD apt-get autoremove -y
|
||||
msg_ok "Removed RabbitMQ"
|
||||
fi
|
||||
|
||||
|
||||
if systemctl is-enabled --quiet photon 2>/dev/null; then
|
||||
msg_info "Migrating to v4: Removing Photon service"
|
||||
systemctl stop photon
|
||||
systemctl disable photon
|
||||
rm -f /etc/systemd/system/photon.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Removed Photon service"
|
||||
fi
|
||||
|
||||
if grep -q "spring.rabbitmq\|PHOTON_BASE_URL\|PROCESSING_WAIT_TIME\|DANGEROUS_LIFE" /opt/reitti/application.properties 2>/dev/null; then
|
||||
msg_info "Migrating to v4: Rewriting application.properties"
|
||||
local DB_URL DB_USER DB_PASS
|
||||
DB_URL=$(grep '^spring.datasource.url=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
||||
DB_USER=$(grep '^spring.datasource.username=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
||||
DB_PASS=$(grep '^spring.datasource.password=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
||||
cp /opt/reitti/application.properties /opt/reitti/application.properties.bak
|
||||
cat <<PROPEOF >/opt/reitti/application.properties
|
||||
# Server configuration
|
||||
server.port=8080
|
||||
server.servlet.context-path=/
|
||||
server.forward-headers-strategy=framework
|
||||
server.compression.enabled=true
|
||||
server.compression.min-response-size=1024
|
||||
server.compression.mime-types=text/plain,application/json
|
||||
|
||||
# Logging configuration
|
||||
logging.level.root=INFO
|
||||
logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=FATAL
|
||||
logging.level.com.dedicatedcode.reitti=INFO
|
||||
|
||||
# Internationalization
|
||||
spring.messages.basename=messages
|
||||
spring.messages.encoding=UTF-8
|
||||
spring.messages.cache-duration=3600
|
||||
spring.messages.fallback-to-system-locale=false
|
||||
|
||||
# PostgreSQL configuration
|
||||
spring.datasource.url=${DB_URL}
|
||||
spring.datasource.username=${DB_USER}
|
||||
spring.datasource.password=${DB_PASS}
|
||||
spring.datasource.hikari.maximum-pool-size=20
|
||||
|
||||
# Redis configuration
|
||||
spring.data.redis.host=127.0.0.1
|
||||
spring.data.redis.port=6379
|
||||
spring.data.redis.username=
|
||||
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.redis.time-to-live=1d
|
||||
|
||||
# Upload configuration
|
||||
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=
|
||||
|
||||
reitti.security.local-login.disable=false
|
||||
|
||||
# OIDC / Security Settings
|
||||
reitti.security.oidc.enabled=false
|
||||
reitti.security.oidc.registration.enabled=false
|
||||
|
||||
reitti.import.batch-size=10000
|
||||
reitti.import.processing-idle-start-time=10
|
||||
|
||||
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}
|
||||
|
||||
# Geocoding service configuration
|
||||
reitti.geocoding.max-errors=10
|
||||
reitti.geocoding.photon.base-url=
|
||||
|
||||
# Tiles Configuration
|
||||
reitti.ui.tiles.cache.url=http://127.0.0.1
|
||||
reitti.ui.tiles.default.service=https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
||||
reitti.ui.tiles.default.attribution=© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors
|
||||
|
||||
# Data management configuration
|
||||
reitti.data-management.enabled=false
|
||||
reitti.data-management.preview-cleanup.cron=0 0 4 * * *
|
||||
|
||||
reitti.storage.path=data/
|
||||
reitti.storage.cleanup.cron=0 0 4 * * *
|
||||
|
||||
# Location data density normalization
|
||||
reitti.location.density.target-points-per-minute=4
|
||||
|
||||
# Logging buffer
|
||||
reitti.logging.buffer-size=1000
|
||||
reitti.logging.max-buffer-size=10000
|
||||
|
||||
spring.config.import=optional:oidc.properties
|
||||
PROPEOF
|
||||
# Update reitti.service dependencies
|
||||
if [[ -f /etc/systemd/system/reitti.service ]]; then
|
||||
sed -i 's/ rabbitmq-server\.service//g; s/ photon\.service//g' /etc/systemd/system/reitti.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
msg_ok "Rewrote application.properties (backup: application.properties.bak)"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop reitti
|
||||
@@ -83,55 +180,6 @@ EOF
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start reitti
|
||||
chown -R www-data:www-data /var/cache/nginx
|
||||
chmod -R 750 /var/cache/nginx
|
||||
systemctl restart nginx
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "photon" "komoot/photon"; then
|
||||
if [[ -f "$HOME/.photon" ]] && [[ "$(cat "$HOME/.photon")" == 0.7 ]]; then
|
||||
CURRENT_VERSION="$(<"$HOME/.photon")"
|
||||
echo
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "Photon v1 upgrade detected (breaking change)"
|
||||
echo
|
||||
echo "Your current version: $CURRENT_VERSION"
|
||||
echo
|
||||
echo "Photon v1 requires a manual migration before updating."
|
||||
echo
|
||||
echo "You need to:"
|
||||
echo " 1. Remove existing geocoding data (not actual reitti data):"
|
||||
echo " rm -rf /opt/photon_data"
|
||||
echo
|
||||
echo " 2. Follow the inial setup guide again:"
|
||||
echo " https://github.com/community-scripts/ProxmoxVE/discussions/8737"
|
||||
echo
|
||||
echo " 3. Re-download and import Photon data for v1"
|
||||
echo
|
||||
read -rp "Do you want to continue anyway? (y/N): " CONTINUE
|
||||
echo
|
||||
|
||||
if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then
|
||||
msg_info "Migration required. Update cancelled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg_warn "Continuing without migration may break Photon in the future!"
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop photon
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
rm -f /opt/photon/photon.jar
|
||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "photon" "komoot/photon" "singlefile" "latest" "/opt/photon" "photon-*.jar"
|
||||
mv /opt/photon/photon-*.jar /opt/photon/photon.jar
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start photon
|
||||
systemctl restart nginx
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
|
||||
@@ -43,6 +43,7 @@ function update_script() {
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
rm -f "$temp_file"
|
||||
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
||||
echo "${RELEASE}" > ~/.sonarqube
|
||||
msg_ok "Updated SonarQube"
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://docs.github.com/en/actions/hosting-your-own-runners
|
||||
|
||||
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 \
|
||||
git \
|
||||
gh
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
msg_info "Creating runner user (no sudo)"
|
||||
if ! getent passwd runner >/dev/null 2>&1; then
|
||||
useradd -m -s /bin/bash runner
|
||||
fi
|
||||
msg_ok "Runner user ready"
|
||||
|
||||
fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-x64-*.tar.gz"
|
||||
|
||||
msg_info "Setting ownership for runner user"
|
||||
chown -R runner:runner /opt/actions-runner
|
||||
msg_ok "Ownership set"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/actions-runner.service
|
||||
[Unit]
|
||||
Description=GitHub Actions self-hosted runner
|
||||
Documentation=https://docs.github.com/en/actions/hosting-your-own-runners
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=runner
|
||||
WorkingDirectory=/opt/actions-runner
|
||||
ExecStart=/opt/actions-runner/run.sh
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q actions-runner
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -295,7 +295,7 @@ ML_DIR="${APP_DIR}/machine-learning"
|
||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.7.4" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.7.5" "$SRC_DIR"
|
||||
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1] | split("+")[0]' ${SRC_DIR}/package.json)"
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ msg_ok "Installed Dependencies"
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
PG_VERSION="16" setup_postgresql
|
||||
NODE_MODULE="yarn" NODE_VERSION="24" setup_nodejs
|
||||
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "v3.14.0" "/opt/mealie"
|
||||
PG_DB_NAME="mealie_db" PG_DB_USER="mealie_user" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
|
||||
msg_info "Installing Python Dependencies with uv"
|
||||
|
||||
@@ -16,7 +16,6 @@ update_os
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
redis-server \
|
||||
rabbitmq-server \
|
||||
libpq-dev \
|
||||
zstd \
|
||||
nginx
|
||||
@@ -26,26 +25,8 @@ JAVA_VERSION="25" setup_java
|
||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||
PG_DB_NAME="reitti_db" PG_DB_USER="reitti" PG_DB_EXTENSIONS="postgis" setup_postgresql_db
|
||||
|
||||
msg_info "Configuring RabbitMQ"
|
||||
RABBIT_USER="reitti"
|
||||
RABBIT_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||
RABBIT_VHOST="/"
|
||||
$STD rabbitmqctl add_user "$RABBIT_USER" "$RABBIT_PASS"
|
||||
$STD rabbitmqctl add_vhost "$RABBIT_VHOST"
|
||||
$STD rabbitmqctl set_permissions -p "$RABBIT_VHOST" "$RABBIT_USER" ".*" ".*" ".*"
|
||||
$STD rabbitmqctl set_user_tags "$RABBIT_USER" administrator
|
||||
{
|
||||
echo ""
|
||||
echo "Reitti Credentials"
|
||||
echo "RabbitMQ User: $RABBIT_USER"
|
||||
echo "RabbitMQ Password: $RABBIT_PASS"
|
||||
} >>~/reitti.creds
|
||||
msg_ok "Configured RabbitMQ"
|
||||
|
||||
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
|
||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "photon" "komoot/photon" "singlefile" "latest" "/opt/photon" "photon-*.jar"
|
||||
mv /opt/photon/photon-*.jar /opt/photon/photon.jar
|
||||
|
||||
msg_info "Installing Nginx Tile Cache"
|
||||
mkdir -p /var/cache/nginx/tiles
|
||||
@@ -73,57 +54,105 @@ EOF
|
||||
chown -R www-data:www-data /var/cache/nginx
|
||||
chmod -R 750 /var/cache/nginx
|
||||
systemctl restart nginx
|
||||
msg_info "Installed Nginx Tile Cache"
|
||||
msg_ok "Installed Nginx Tile Cache"
|
||||
|
||||
msg_info "Creating Reitti Configuration-File"
|
||||
mkdir -p /opt/reitti/data
|
||||
cat <<EOF >/opt/reitti/application.properties
|
||||
# Reitti Server Base URI
|
||||
reitti.server.advertise-uri=http://127.0.0.1:8080
|
||||
# Server configuration
|
||||
server.port=8080
|
||||
server.servlet.context-path=/
|
||||
server.forward-headers-strategy=framework
|
||||
server.compression.enabled=true
|
||||
server.compression.min-response-size=1024
|
||||
server.compression.mime-types=text/plain,application/json
|
||||
|
||||
# PostgreSQL Database Connection
|
||||
# Logging configuration
|
||||
logging.level.root=INFO
|
||||
logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=FATAL
|
||||
logging.level.com.dedicatedcode.reitti=INFO
|
||||
|
||||
# Internationalization
|
||||
spring.messages.basename=messages
|
||||
spring.messages.encoding=UTF-8
|
||||
spring.messages.cache-duration=3600
|
||||
spring.messages.fallback-to-system-locale=false
|
||||
|
||||
# PostgreSQL configuration
|
||||
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.driver-class-name=org.postgresql.Driver
|
||||
spring.datasource.hikari.maximum-pool-size=20
|
||||
|
||||
# Flyway Database Migrations
|
||||
spring.flyway.enabled=true
|
||||
spring.flyway.locations=classpath:db/migration
|
||||
spring.flyway.baseline-on-migrate=true
|
||||
|
||||
# RabbitMQ (Message Queue)
|
||||
spring.rabbitmq.host=127.0.0.1
|
||||
spring.rabbitmq.port=5672
|
||||
spring.rabbitmq.username=$RABBIT_USER
|
||||
spring.rabbitmq.password=$RABBIT_PASS
|
||||
|
||||
# Redis (Cache)
|
||||
# Redis configuration
|
||||
spring.data.redis.host=127.0.0.1
|
||||
spring.data.redis.port=6379
|
||||
spring.data.redis.username=
|
||||
spring.data.redis.password=
|
||||
spring.data.redis.database=0
|
||||
spring.cache.redis.key-prefix=
|
||||
|
||||
# Server Port
|
||||
server.port=8080
|
||||
spring.cache.cache-names=processed-visits,significant-places,users,magic-links,configurations,transport-mode-configs,avatarThumbnails,avatarData,user-settings
|
||||
spring.cache.redis.time-to-live=1d
|
||||
|
||||
# Optional: Logging & Performance
|
||||
logging.level.root=INFO
|
||||
spring.jpa.hibernate.ddl-auto=none
|
||||
spring.datasource.hikari.maximum-pool-size=10
|
||||
# Upload configuration
|
||||
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=
|
||||
|
||||
reitti.security.local-login.disable=false
|
||||
|
||||
# OIDC / Security Settings
|
||||
reitti.security.oidc.enabled=false
|
||||
reitti.security.oidc.registration.enabled=false
|
||||
|
||||
# Photon (Geocoding)
|
||||
PHOTON_BASE_URL=http://127.0.0.1:2322
|
||||
PROCESSING_WAIT_TIME=15
|
||||
PROCESSING_BATCH_SIZE=1000
|
||||
PROCESSING_WORKERS_PER_QUEUE=4-16
|
||||
reitti.import.batch-size=10000
|
||||
reitti.import.processing-idle-start-time=10
|
||||
|
||||
# Disable potentially dangerous features unless needed
|
||||
DANGEROUS_LIFE=false
|
||||
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
|
||||
|
||||
# Tiles Cache
|
||||
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}
|
||||
|
||||
# Geocoding service configuration
|
||||
reitti.geocoding.max-errors=10
|
||||
reitti.geocoding.photon.base-url=
|
||||
|
||||
# Tiles Configuration
|
||||
reitti.ui.tiles.cache.url=http://127.0.0.1
|
||||
reitti.ui.tiles.default.service=https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
||||
reitti.ui.tiles.default.attribution=© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors
|
||||
|
||||
# Data management configuration
|
||||
reitti.data-management.enabled=false
|
||||
reitti.data-management.preview-cleanup.cron=0 0 4 * * *
|
||||
|
||||
reitti.storage.path=data/
|
||||
reitti.storage.cleanup.cron=0 0 4 * * *
|
||||
|
||||
# Location data density normalization
|
||||
reitti.location.density.target-points-per-minute=4
|
||||
|
||||
# Logging buffer
|
||||
reitti.logging.buffer-size=1000
|
||||
reitti.logging.max-buffer-size=10000
|
||||
|
||||
spring.config.import=optional:oidc.properties
|
||||
EOF
|
||||
msg_ok "Created Configuration-File for Reitti"
|
||||
|
||||
@@ -131,8 +160,8 @@ msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/reitti.service
|
||||
[Unit]
|
||||
Description=Reitti
|
||||
After=network.target postgresql.service redis-server.service rabbitmq-server.service photon.service
|
||||
Wants=postgresql.service redis-server.service rabbitmq-server.service photon.service
|
||||
After=network.target postgresql.service redis-server.service
|
||||
Wants=postgresql.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
@@ -146,26 +175,6 @@ Restart=on-failure
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/photon.service
|
||||
[Unit]
|
||||
Description=Photon Geocoding Service (Germany, OpenSearch)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/photon
|
||||
ExecStart=/usr/bin/java -Xmx4g -jar photon.jar \
|
||||
-data-dir /opt/photon \
|
||||
-listen-port 2322 \
|
||||
-listen-ip 0.0.0.0 \
|
||||
-cors-any
|
||||
Restart=on-failure
|
||||
TimeoutStopSec=20
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now photon
|
||||
systemctl enable -q --now reitti
|
||||
msg_ok "Created Services"
|
||||
|
||||
|
||||
@@ -48,12 +48,15 @@ if [[ ${soularr,,} =~ ^(y|yes)$ ]]; then
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if ps aux | grep "[s]oularr.py" >/dev/null; then
|
||||
echo "Soularr is already running. Exiting..."
|
||||
echo "Soularr is already running. Exiting..." >&2
|
||||
exit 1
|
||||
else
|
||||
source /opt/soularr/venv/bin/activate
|
||||
uv run python3 -u /opt/soularr/soularr.py --config-dir /opt/soularr
|
||||
fi
|
||||
|
||||
# Remove stale lock file from previous ungraceful exit
|
||||
rm -f "/opt/soularr/.soularr.lock"
|
||||
|
||||
source /opt/soularr/venv/bin/activate
|
||||
uv run python3 -u /opt/soularr/soularr.py --config-dir /opt/soularr 2>&1
|
||||
EOF
|
||||
chmod +x /opt/soularr/run.sh
|
||||
deactivate
|
||||
|
||||
@@ -21,6 +21,7 @@ temp_file=$(mktemp)
|
||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
rm -f "$temp_file"
|
||||
mv /opt/sonarqube-* /opt/sonarqube
|
||||
$STD useradd -r -m -U -d /opt/sonarqube -s /bin/bash sonarqube
|
||||
chown -R sonarqube:sonarqube /opt/sonarqube
|
||||
|
||||
@@ -3613,8 +3613,6 @@ build_container() {
|
||||
fi
|
||||
|
||||
# Build PCT_OPTIONS as string for export
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
pushd "$TEMP_DIR" >/dev/null
|
||||
local _func_url
|
||||
if [ "$var_os" == "alpine" ]; then
|
||||
_func_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func"
|
||||
|
||||
@@ -317,7 +317,7 @@ function default_settings() {
|
||||
|
||||
# Determine available network modes based on bridge count
|
||||
local DEFAULT_WAN_BRG
|
||||
DEFAULT_WAN_BRG=$(echo "$AVAILABLE_BRIDGES" | grep -v "^${BRG}$" | head -n1)
|
||||
DEFAULT_WAN_BRG=$(echo "$AVAILABLE_BRIDGES" | grep -v "^${BRG}$" | head -n1 || true)
|
||||
|
||||
if [ "$BRIDGE_COUNT" -ge 2 ]; then
|
||||
# Multiple bridges available - offer dual or single mode
|
||||
@@ -509,7 +509,7 @@ function advanced_settings() {
|
||||
|
||||
# Build WAN bridge selection from available bridges (excluding LAN bridge)
|
||||
local WAN_BRIDGES
|
||||
WAN_BRIDGES=$(get_available_bridges | grep -v "^${BRG}$")
|
||||
WAN_BRIDGES=$(get_available_bridges | grep -v "^${BRG}$" || true)
|
||||
if [ -z "$WAN_BRIDGES" ]; then
|
||||
msg_error "No additional bridge available for WAN. Only '${BRG}' exists."
|
||||
msg_error "Create a second bridge (e.g. vmbr1) in Proxmox network config first."
|
||||
@@ -738,8 +738,8 @@ done
|
||||
msg_info "Creating a OPNsense VM"
|
||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||
pvesm alloc $STORAGE $VMID $DISK0 4M &>/dev/null
|
||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} &>/dev/null
|
||||
qm set $VMID \
|
||||
-efidisk0 ${DISK0_REF}${FORMAT} \
|
||||
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \
|
||||
|
||||
Reference in New Issue
Block a user