Compare commits

..

17 Commits

Author SHA1 Message Date
MickLesk
87c26b56bd fix(reactive-resume): update for v5.1.4 compatibility
- Replace obsolete PRINTER_ENDPOINT with ENCRYPTION_SECRET in .env
  (PDF generation moved client-side in v5.1.0; AI providers require
  ENCRYPTION_SECRET since v5.1.4)
- Add commented REDIS_URL for the new AI Agent workspace (optional)
- Inject ENCRYPTION_SECRET into existing installs on update if missing
2026-05-19 10:21:22 +02:00
MickLesk
81737f733f fix(reactive-resume): use pnpm deploy instead of cp -rL for runtime externals
cp -rL follows pnpm's circular symlink chains (sharp, @aws-sdk both have
pkg/node_modules/pkg loops in the virtual store) causing infinite path
recursion and 'File name too long' errors.

Use pnpm deploy --legacy which is exactly what the upstream Dockerfile does:
it creates a flat, real-file node_modules with no symlinks. cp -r (no -L)
then copies it cleanly into apps/web/node_modules/.
2026-05-19 10:08:26 +02:00
MickLesk
6181e5aad4 fix(reactive-resume): drop @aws-sdk/client-s3 from cp -rL step
@aws-sdk/client-s3 has a pathologically deep pnpm virtual store symlink
tree; cp -rL follows the chain into thousands of nested client-s3 dirs
causing 'File name too long' errors. S3 is an optional storage backend
so skip it. bcrypt, sharp, linkedom and ioredis are unaffected.
2026-05-19 10:04:17 +02:00
MickLesk
0938891e77 fix(reactive-resume): copy runtime externals with cp -rL instead of symlinks
pnpm symlink chains (our link -> packages/runtime-externals/node_modules/
-> pnpm virtual store) are not reliably followed by Node.js ESM resolution.
The upstream Dockerfile uses pnpm deploy which produces real files.
Replicate that by using cp -rL to dereference all symlinks and copy the
actual package files into apps/web/node_modules/.
2026-05-19 09:58:36 +02:00
MickLesk
f52b055350 fix(reactive-resume): use shamefully-hoist to expose pnpm externals
Replace the broken npm-install workaround with a simpler approach:
write shamefully-hoist=true to .npmrc before pnpm install. This causes
pnpm to hoist all packages to root node_modules/, including bcrypt, sharp,
linkedom etc. (deps of @reactive-resume/runtime-externals), making them
resolvable by the Nitro server at runtime.

The upstream repo has no .npmrc, so git reset --hard leaves this file
untouched on updates. The file is written before each pnpm install in
both install and update scripts to ensure it is always in place.
2026-05-19 09:46:37 +02:00
MickLesk
5a322a4593 fix(reactive-resume): install Nitro runtime externals after build
bcrypt, sharp, and linkedom are marked as Rolldown externals in
apps/web/vite.config.ts and belong to the @reactive-resume/runtime-externals
workspace package, but apps/web does not declare that package as a direct
dependency. With pnpm strict node_modules, this means the packages are never
symlinked into apps/web/node_modules/, causing ERR_MODULE_NOT_FOUND at
runtime when the Nitro server tries to import them.

Fix: after pnpm run build, use npm to install the three required packages
directly into apps/web/node_modules/ without modifying package.json.

Applies to both fresh install and update scripts.
2026-05-19 09:42:45 +02:00
community-scripts-pr-app[bot]
2944aa9100 Update CHANGELOG.md (#14588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:51:09 +00:00
push-app-to-main[bot]
afa59595f0 Add lobehub (ct) (#14441)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-05-19 08:50:45 +02:00
community-scripts-pr-app[bot]
ff4a9d423b Update CHANGELOG.md (#14587)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:50:23 +00:00
CanbiZ (MickLesk)
59d4ab70c3 ReactiveResume: set correct WorkingDirectory for systemd service (#14579)
* fix(reactive-resume): set correct WorkingDirectory for systemd service

* fix(reactive-resume): update WorkingDirectory in service for existing installs
2026-05-19 08:49:54 +02:00
community-scripts-pr-app[bot]
7ecb1eb305 Update CHANGELOG.md (#14586)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:35:17 +00:00
CanbiZ (MickLesk)
7076d03ab3 Sparkyfitness: add missing nginx template variable substitutions (#14578)
* fix(sparkyfitness): add missing nginx template variable substitutions

* fix(sparkyfitness): regenerate nginx config during updates for existing installs
2026-05-19 08:34:52 +02:00
CanbiZ (MickLesk)
c874324f06 Wanderer: include dev dependencies during build (#14577)
* fix(wanderer): include dev dependencies during build

* fix(wanderer): remove --omit=dev from update script to allow npm run build
2026-05-19 08:34:28 +02:00
community-scripts-pr-app[bot]
0cab1f7f89 Update CHANGELOG.md (#14585)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:24:57 +00:00
Michel Roegl-Brunner
f7432990cf Update nodejs Versions (#14582)
* Move fumadocs to node 24 per there package.json requirements

* Move papra to node 26 per there .nvmrc file

* Move zipline to node 24 as per there Dockerfile
2026-05-19 08:24:28 +02:00
community-scripts-pr-app[bot]
39e67bc874 Update CHANGELOG.md (#14583)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:21:31 +00:00
CanbiZ (MickLesk)
4ffa551202 fix(whisparr): switch from nightly to stable GitHub release (#14581) 2026-05-19 08:21:07 +02:00
11 changed files with 246 additions and 7 deletions

View File

@@ -464,6 +464,23 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-05-19
### 🆕 New Scripts
- LobeHub ([#14441](https://github.com/community-scripts/ProxmoxVE/pull/14441))
### 🚀 Updated Scripts
- Update nodejs Versions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14582](https://github.com/community-scripts/ProxmoxVE/pull/14582))
- #### 🐞 Bug Fixes
- ReactiveResume: set correct WorkingDirectory for systemd service [@MickLesk](https://github.com/MickLesk) ([#14579](https://github.com/community-scripts/ProxmoxVE/pull/14579))
- Sparkyfitness: add missing nginx template variable substitutions [@MickLesk](https://github.com/MickLesk) ([#14578](https://github.com/community-scripts/ProxmoxVE/pull/14578))
- Wanderer: include dev dependencies during build [@MickLesk](https://github.com/MickLesk) ([#14577](https://github.com/community-scripts/ProxmoxVE/pull/14577))
- Whisparr: switch from nightly to stable GitHub release [@MickLesk](https://github.com/MickLesk) ([#14581](https://github.com/community-scripts/ProxmoxVE/pull/14581))
## 2026-05-18
### 🆕 New Scripts

6
ct/headers/lobehub Normal file
View File

@@ -0,0 +1,6 @@
__ __ __ __ __
/ / ____ / /_ ___ / / / /_ __/ /_
/ / / __ \/ __ \/ _ \/ /_/ / / / / __ \
/ /___/ /_/ / /_/ / __/ __ / /_/ / /_/ /
/_____/\____/_.___/\___/_/ /_/\__,_/_.___/

77
ct/lobehub.sh Normal file
View File

@@ -0,0 +1,77 @@
#!/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/lobehub/lobehub
APP="LobeHub"
var_tags="${var_tags:-ai;chat}"
var_cpu="${var_cpu:-6}"
var_ram="${var_ram:-10240}"
var_disk="${var_disk:-15}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/lobehub ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "lobehub" "lobehub/lobehub"; then
msg_info "Stopping Services"
systemctl stop lobehub
msg_ok "Stopped Services"
msg_info "Backing up Data"
cp /opt/lobehub/.env /opt/lobehub.env.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball"
msg_info "Restoring Configuration"
cp /opt/lobehub.env.bak /opt/lobehub/.env
rm -f /opt/lobehub.env.bak
msg_ok "Restored Configuration"
msg_info "Building Application"
cd /opt/lobehub
export NODE_OPTIONS="--max-old-space-size=8192"
$STD pnpm install
$STD pnpm run build:docker
unset NODE_OPTIONS
msg_ok "Built Application"
msg_info "Running Database Migrations"
cd /opt/lobehub
set -a && source /opt/lobehub/.env && set +a
$STD node /opt/lobehub/.next/standalone/docker.cjs
msg_ok "Ran Database Migrations"
msg_info "Starting Services"
systemctl start lobehub
msg_ok "Started Services"
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 "${TAB}${GATEWAY}${BGN}http://${IP}:3210${CL}"

View File

@@ -48,9 +48,24 @@ function update_script() {
export NODE_ENV="production"
$STD pnpm install --frozen-lockfile
$STD pnpm run build
msg_info "Deploying Nitro Runtime Externals"
$STD pnpm --filter=@reactive-resume/runtime-externals deploy --prod --legacy /tmp/rr-runtime
cp -r /tmp/rr-runtime/node_modules/. /opt/reactive-resume/apps/web/node_modules/
rm -rf /tmp/rr-runtime
msg_ok "Deployed Nitro Runtime Externals"
mv /opt/reactive-resume.env.bak /opt/reactive-resume/.env
# Inject ENCRYPTION_SECRET if missing (required for AI providers since v5.1.4)
if ! grep -q '^ENCRYPTION_SECRET=' /opt/reactive-resume/.env; then
ENCRYPTION_SECRET=$(openssl rand -hex 32)
echo "ENCRYPTION_SECRET=${ENCRYPTION_SECRET}" >> /opt/reactive-resume/.env
fi
msg_ok "Updated Reactive Resume"
msg_info "Updating Service"
sed -i 's|WorkingDirectory=/opt/reactive-resume$|WorkingDirectory=/opt/reactive-resume/apps/web|' /etc/systemd/system/reactive-resume.service
systemctl daemon-reload
msg_ok "Updated Service"
msg_info "Restarting services"
systemctl start chromium-printer reactive-resume
msg_ok "Restarted services"

View File

@@ -62,6 +62,18 @@ function update_script() {
cp -a /opt/sparkyfitness/SparkyFitnessFrontend/dist/. /var/www/sparkyfitness/
msg_ok "Updated Sparky Fitness Frontend"
msg_info "Refreshing Nginx Config"
sed \
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
-e 's|${NGINX_LISTEN_PORT}|80|g' \
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
-e 's|server_name localhost;|server_name _;|g' \
"/opt/sparkyfitness/docker/nginx.conf" >/etc/nginx/sites-available/sparkyfitness
msg_ok "Refreshed Nginx Config"
msg_info "Refreshing SparkyFitness Service"
cat <<EOF >/etc/systemd/system/sparkyfitness-server.service
[Unit]

View File

@@ -41,7 +41,7 @@ function update_script() {
$STD go mod tidy
$STD go build
cd /opt/wanderer/source/web
$STD npm ci --omit=dev
$STD npm ci
$STD npm run build
msg_ok "Updated wanderer"

101
install/lobehub-install.sh Normal file
View File

@@ -0,0 +1,101 @@
#!/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/lobehub/lobehub
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
msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
CODENAME=$(. /etc/os-release && echo "${VERSION_CODENAME:-bookworm}")
fetch_and_deploy_gh_release "paradedb" "paradedb/paradedb" "binary" "latest" "" "postgresql-17-pg-search_*-1PARADEDB-${CODENAME}_$(dpkg --print-architecture).deb"
msg_info "Configuring pg_search preload library"
if ! grep -q "shared_preload_libraries.*pg_search" /etc/postgresql/17/main/postgresql.conf; then
echo "shared_preload_libraries = 'pg_search'" >>/etc/postgresql/17/main/postgresql.conf
fi
systemctl restart postgresql
msg_ok "Configured pg_search preload library"
PG_DB_NAME="lobehub" PG_DB_USER="lobehub" PG_DB_EXTENSIONS="vector,pg_search" setup_postgresql_db
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball"
msg_info "Building Application"
cd /opt/lobehub
export DATABASE_URL="postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
export DATABASE_DRIVER="node"
export KEY_VAULTS_SECRET="$(openssl rand -base64 32)"
export AUTH_SECRET="$(openssl rand -base64 32)"
export APP_URL="http://localhost:3210"
$STD pnpm install
$STD pnpm run build:docker
msg_ok "Built Application"
msg_info "Configuring Application"
KEY_VAULTS_SECRET=$(openssl rand -base64 32)
AUTH_SECRET=$(openssl rand -base64 32)
cat <<EOF >/opt/lobehub/.env
DATABASE_URL=postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
DATABASE_DRIVER=node
KEY_VAULTS_SECRET=${KEY_VAULTS_SECRET}
AUTH_SECRET=${AUTH_SECRET}
APP_URL=http://${LOCAL_IP}:3210
HOSTNAME=0.0.0.0
PORT=3210
NODE_ENV=production
EOF
msg_ok "Configured Application"
msg_info "Setting Up Standalone"
cp -r /opt/lobehub/.next/static /opt/lobehub/.next/standalone/.next/static
cp -r /opt/lobehub/public /opt/lobehub/.next/standalone/public
cp -r /opt/lobehub/scripts/migrateServerDB/* /opt/lobehub/.next/standalone/
cp -r /opt/lobehub/packages/database/migrations /opt/lobehub/.next/standalone/migrations
msg_ok "Set Up Standalone"
msg_info "Running Database Migrations"
cd /opt/lobehub/.next/standalone
set -a && source /opt/lobehub/.env && set +a
$STD node /opt/lobehub/.next/standalone/docker.cjs
msg_ok "Ran Database Migrations"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/lobehub.service
[Unit]
Description=LobeHub
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/lobehub/.next/standalone
EnvironmentFile=/opt/lobehub/.env
ExecStart=/usr/bin/node /opt/lobehub/.next/standalone/server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now lobehub
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -34,11 +34,17 @@ export NODE_ENV="production"
export CI="true"
$STD pnpm install --frozen-lockfile
$STD pnpm run build
msg_info "Deploying Nitro Runtime Externals"
$STD pnpm --filter=@reactive-resume/runtime-externals deploy --prod --legacy /tmp/rr-runtime
cp -r /tmp/rr-runtime/node_modules/. /opt/reactive-resume/apps/web/node_modules/
rm -rf /tmp/rr-runtime
msg_ok "Deployed Nitro Runtime Externals"
mkdir -p /opt/reactive-resume/data
msg_ok "Built Reactive Resume"
msg_info "Configuring Reactive Resume"
AUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_SECRET=$(openssl rand -hex 32)
cat <<EOF >/opt/reactive-resume/.env
# Reactive Resume v5 Configuration
@@ -54,8 +60,8 @@ DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAM
# Authentication Secret (do not change after initial setup)
AUTH_SECRET=${AUTH_SECRET}
# Printer (headless Chromium for PDF generation)
PRINTER_ENDPOINT=http://127.0.0.1:9222
# Encryption Secret (required for saved AI providers, do not change after initial setup)
ENCRYPTION_SECRET=${ENCRYPTION_SECRET}
# Storage: uses local filesystem (/opt/reactive-resume/data) when S3 is not configured
# S3_ACCESS_KEY_ID=
@@ -78,6 +84,9 @@ PRINTER_ENDPOINT=http://127.0.0.1:9222
# GOOGLE_CLIENT_ID=
# GOOGLE_CLIENT_SECRET=
# AI Agent (optional, required for the Agent workspace feature)
# REDIS_URL=redis://localhost:6379
# Feature Flags
# FLAG_DISABLE_SIGNUPS=false
# FLAG_DISABLE_EMAIL_AUTH=false
@@ -107,7 +116,7 @@ After=network.target postgresql.service chromium-printer.service
Wants=postgresql.service chromium-printer.service
[Service]
WorkingDirectory=/opt/reactive-resume
WorkingDirectory=/opt/reactive-resume/apps/web
EnvironmentFile=/opt/reactive-resume/.env
ExecStart=/usr/bin/node .output/server/index.mjs
Restart=always

View File

@@ -84,6 +84,9 @@ msg_info "Configuring Nginx"
sed \
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
-e 's|${NGINX_LISTEN_PORT}|80|g' \
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
-e 's|server_name localhost;|server_name _;|g' \
"/opt/sparkyfitness/docker/nginx.conf" >/etc/nginx/sites-available/sparkyfitness

View File

@@ -24,8 +24,7 @@ cd /opt/wanderer/source/db
$STD go mod tidy
$STD go build
cd /opt/wanderer/source/web
$STD npm ci -s vitest
$STD npm ci --omit=dev
$STD npm ci
$STD npm run build
msg_ok "Installed wanderer"

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y sqlite3
msg_ok "Installed Dependencies"
fetch_and_deploy_from_url "https://whisparr.servarr.com/v1/update/nightly/updatefile?os=linux&runtime=netcore&arch=x64" /opt/Whisparr
fetch_and_deploy_gh_release "Whisparr" "Whisparr/Whisparr" "prebuild" "latest" "/opt/Whisparr" "Whisparr.*.linux-x64.tar.gz"
msg_info "Configuring Whisparr"
mkdir -p /var/lib/whisparr/