Compare commits

...

39 Commits

Author SHA1 Message Date
ea1c5b4561 Update CHANGELOG.md (#7209)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 00:13:12 +00:00
957eea7a0f Update versions.json (#7208)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 02:12:53 +02:00
476fcedfe0 Update CHANGELOG.md (#7206)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 20:55:19 +00:00
d590e91597 Update CHANGELOG.md (#7205)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 20:50:00 +00:00
8c796a0870 Immich: bump to v1.139.4 (#7138) 2025-08-25 22:49:38 +02:00
b57efdb78a Update CHANGELOG.md (#7204)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 19:22:24 +00:00
2cc3ce1ea1 Update komodo.sh (#7202) 2025-08-25 21:21:59 +02:00
468defcd97 Update CHANGELOG.md (#7203)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 19:08:52 +00:00
78398309c0 Fix website and docs URL (#7199) 2025-08-25 21:08:25 +02:00
08d1d7be62 Update CHANGELOG.md (#7200)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 18:03:00 +00:00
05a4fcd471 Fix update (#7198) 2025-08-25 20:02:37 +02:00
36acf4aaae Update CHANGELOG.md (#7197)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 17:14:25 +00:00
4182815b4c FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) (#7174)
* FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect)

**What**
Safer updater for FileBrowser Quantum addon:
- Download to temp file, then atomic `mv` into INSTALL_PATH
- Stop/start service around the swap
- CPU arch autodetect (amd64/arm64/armv7/armv6)
- Proper error handling & version verification before printing success

**Why**
Current update streams `curl` directly to `/usr/local/bin/filebrowser` and prints success even if `curl` fails.
I hit:

* fix(filebrowser-quantum): add missing `fi` before install section

Closes the conditional started with `if [[ -f "$INSTALL_PATH" ]]` so the script doesn’t hit a bash syntax error when reaching the install path.

* refactor(update): minimal fix - temp file + atomic mv; amd64 only

* style(update): remove comments/blank lines; drop restart (alpine-safe)
2025-08-25 19:14:01 +02:00
73a0910239 Update CHANGELOG.md (#7196)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 17:11:00 +00:00
bd6626e919 Komodo: Generate admin users password (#7193)
* Fix admin login

* fix json

* Add credentials to creds file
2025-08-25 19:10:41 +02:00
3ad6cdf85a Update .app files (#7195)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-25 19:10:37 +02:00
732bb75e9b Update CHANGELOG.md (#7194)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 17:06:29 +00:00
d372b45a95 Add Alpine-RustDesk Server script (#7191)
* Add RustDesk server

* VED>VE
2025-08-25 19:06:04 +02:00
df564ace13 Merge branch 'main' of https://github.com/community-scripts/ProxmoxVE 2025-08-25 14:23:27 +02:00
d2b28413eb Update CHANGELOG.md (#7187)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:22:00 +00:00
b93a30ffb0 Update CHANGELOG.md (#7186)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:21:40 +00:00
a4044b1cfd Update CHANGELOG.md (#7185)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:21:30 +00:00
83eb2da451 [core]: uv uses now "update-shell" command (#7172)
* [core]: uv uses now "update-shell" command

* Improve uv shell integration setup process

Refactor uv shell integration setup with improved error handling.
2025-08-25 14:21:18 +02:00
9fda9f34c5 Update CHANGELOG.md (#7183)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:21:12 +00:00
3715ea5946 Update date in json (#7184)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:21:09 +00:00
de2d8d0e75 Update CHANGELOG.md (#7182)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:20:51 +00:00
9f6abbe572 'Add new script' (#7178)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-08-25 14:20:48 +02:00
d90a071d88 healthchecks (#7177)
* 'Add new script'

* add missing source

* Update documentation URL in healthchecks.

* Update source URL in healthchecks-install.sh

* Update healthchecks.json with additional notes

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-08-25 14:20:38 +02:00
69dd06b107 [core]: tools.func - better verbose for postgresql (#7173) 2025-08-25 14:20:30 +02:00
2be054a004 Merge branch 'main' of https://github.com/community-scripts/ProxmoxVE 2025-08-25 14:20:07 +02:00
a2fcd3992e Update create_lxc.sh 2025-08-25 14:19:58 +02:00
9a92df420e Update CHANGELOG.md (#7181)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:11:45 +00:00
c6864c74bc Update n8n.sh (#7176) 2025-08-25 14:11:26 +02:00
941457b392 Update CHANGELOG.md (#7180)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 12:11:17 +00:00
e84ea56a8f Update php config to 8.3 (#7171) 2025-08-25 14:10:52 +02:00
0d36d64454 Update versions.json (#7179)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 14:06:41 +02:00
74b2407c53 alpine: add source for tools 2025-08-25 14:05:55 +02:00
b97331282f Update CHANGELOG.md (#7170)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-25 04:59:26 +00:00
fed5ebd9c8 Lidarr: Fix RELEASE variable fetching (#7162) 2025-08-25 06:59:01 +02:00
28 changed files with 930 additions and 203 deletions

View File

@ -10,8 +10,40 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-08-26
## 2025-08-25
### 🆕 New Scripts
- Alpine-RustDesk Server [@tremor021](https://github.com/tremor021) ([#7191](https://github.com/community-scripts/ProxmoxVE/pull/7191))
- Alpine-Redlib ([#7178](https://github.com/community-scripts/ProxmoxVE/pull/7178))
- healthchecks ([#7177](https://github.com/community-scripts/ProxmoxVE/pull/7177))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) [@CommanderPaladin](https://github.com/CommanderPaladin) ([#7174](https://github.com/community-scripts/ProxmoxVE/pull/7174))
- Immich: bump to v1.139.4 [@vhsdream](https://github.com/vhsdream) ([#7138](https://github.com/community-scripts/ProxmoxVE/pull/7138))
- Komodo: Fix compose.env path [@tremor021](https://github.com/tremor021) ([#7202](https://github.com/community-scripts/ProxmoxVE/pull/7202))
- Komodo: Fix update procedure and missing env var [@tremor021](https://github.com/tremor021) ([#7198](https://github.com/community-scripts/ProxmoxVE/pull/7198))
- SnipeIT: Update nginx config to v8.3 [@tremor021](https://github.com/tremor021) ([#7171](https://github.com/community-scripts/ProxmoxVE/pull/7171))
- Lidarr: Fix RELEASE variable fetching [@tremor021](https://github.com/tremor021) ([#7162](https://github.com/community-scripts/ProxmoxVE/pull/7162))
- #### ✨ New Features
- Komodo: Generate admin users password [@tremor021](https://github.com/tremor021) ([#7193](https://github.com/community-scripts/ProxmoxVE/pull/7193))
- [core]: uv uses now "update-shell" command [@MickLesk](https://github.com/MickLesk) ([#7172](https://github.com/community-scripts/ProxmoxVE/pull/7172))
- [core]: tools.func - better verbose for postgresql [@MickLesk](https://github.com/MickLesk) ([#7173](https://github.com/community-scripts/ProxmoxVE/pull/7173))
- n8n: Force update to NodeJS v22 [@tremor021](https://github.com/tremor021) ([#7176](https://github.com/community-scripts/ProxmoxVE/pull/7176))
### 🌐 Website
- #### 📝 Script Information
- 2FAuth: Fix website and docs URLs [@tremor021](https://github.com/tremor021) ([#7199](https://github.com/community-scripts/ProxmoxVE/pull/7199))
## 2025-08-24
### 🚀 Updated Scripts

56
ct/alpine-redlib.sh Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: andrej-kocijan (Andrej Kocijan)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/redlib-org/redlib
APP="Alpine-Redlib"
var_tags="${var_tags:-alpine;frontend}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_resources
if [[ ! -d /opt/redlib ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Stopping ${APP} Service"
$STD rc-service redlib stop
msg_ok "Stopped ${APP} Service"
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
msg_info "Starting ${APP} Service"
$STD rc-service redlib start
msg_ok "Started ${APP} Service"
msg_ok "Update Successful"
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}:5252${CL}"

View File

@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rustdesk/rustdesk-server
APP="Alpine-RustDeskServer"
var_tags="${var_tags:-alpine;monitoring}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-3}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /opt/rustdesk-server ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
msg_info "Updating RustDesk Server to v${RELEASE}"
$STD apk -U upgrade
$STD service rustdesk-server-hbbs stop
$STD service rustdesk-server-hbbr stop
temp_file1=$(mktemp)
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
$STD unzip "$temp_file1"
cp -r amd64/* /opt/rustdesk-server/
echo "${RELEASE}" >~/.rustdesk-server
$STD service rustdesk-server-hbbs start
$STD service rustdesk-server-hbbr start
rm -rf amd64
rm -f $temp_file1
msg_ok "Updated RustDesk Server successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then
msg_info "Updating RustDesk API to v${APIRELEASE}"
$STD service rustdesk-api stop
temp_file2=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
$STD tar zxvf "$temp_file2"
cp -r release/* /opt/rustdesk-api
echo "${APIRELEASE}" >~/.rustdesk-api
$STD service rustdesk-api start
rm -rf release
rm -f $temp_file2
msg_ok "Updated RustDesk API"
else
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
fi
exit 0
}
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 IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:21114${CL}"

6
ct/headers/alpine-redlib Normal file
View File

@ -0,0 +1,6 @@
___ __ _ ____ _____ __
/ | / /___ (_)___ ___ / __ \___ ____/ / (_) /_
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / / __ \
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / / / /_/ /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/_/_.___/
/_/

View File

@ -0,0 +1,6 @@
___ __ _ ____ __ ____ __ _____
/ | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/
/_/

6
ct/headers/healthchecks Normal file
View File

@ -0,0 +1,6 @@
__ ____ __ __ __
/ /_ ___ ____ _/ / /_/ /_ _____/ /_ ___ _____/ /_______
/ __ \/ _ \/ __ `/ / __/ __ \/ ___/ __ \/ _ \/ ___/ //_/ ___/
/ / / / __/ /_/ / / /_/ / / / /__/ / / / __/ /__/ ,< (__ )
/_/ /_/\___/\__,_/_/\__/_/ /_/\___/_/ /_/\___/\___/_/|_/____/

70
ct/healthchecks.sh Normal file
View File

@ -0,0 +1,70 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://healthchecks.io/
APP="healthchecks"
var_tags="${var_tags:-monitoring}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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/healthchecks ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/healthchecks/healthchecks/releases/latest | jq '.tag_name' | sed 's/^"v//;s/"$//')
if [[ "${RELEASE}" != "$(cat ~/.healthchecks 2>/dev/null)" ]] || [[ ! -f ~/.healthchecks ]]; then
msg_info "Stopping $APP"
systemctl stop healthchecks
msg_ok "Stopped $APP"
setup_uv
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Updating $APP to v${RELEASE}"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start healthchecks
systemctl restart caddy
msg_ok "Started $APP"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}https://${IP}${CL}"

View File

@ -61,7 +61,7 @@ function update_script() {
done
msg_ok "Image-processing libraries up to date"
fi
RELEASE="1.139.2"
RELEASE="1.139.4"
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
msg_ok "No update required. ${APP} is already at v${RELEASE}"
@ -138,14 +138,16 @@ EOF
corepack enable
# server build
export SHARP_IGNORE_GLOBAL_LIBVIPS=true
$STD pnpm --filter immich --frozen-lockfile build
unset SHARP_IGNORE_GLOBAL_LIBVIPS
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
cp "$APP_DIR"/package.json "$APP_DIR"/bin
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
# openapi & web build
cd "$SRC_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
$STD pnpm --filter @immich/sdk --filter immich-web build
cp -a web/build "$APP_DIR"/www

View File

@ -56,6 +56,9 @@ function update_script() {
mv "$BACKUP_FILE" "$COMPOSE_FILE"
exit 1
fi
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
fi
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Updated ${APP}"
exit

View File

@ -28,6 +28,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if ! command -v jq &>/dev/null; then
$STD apt-get update
$STD apt-get install -y jq
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then

View File

@ -27,13 +27,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
$STD apt-get install -y npm
echo "Installed NPM..."
fi
fi
if [ ! -f /opt/n8n.env ]; then
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
HOST_IP=$(hostname -I | awk '{print $1}')
@ -45,6 +38,7 @@ N8N_PROTOCOL=http
N8N_HOST=$HOST_IP
EOF
fi
NODE_VERSION="22" setup_nodejs
msg_info "Updating ${APP} LXC"
$STD npm update -g n8n

View File

@ -40,6 +40,7 @@ function update_script() {
fetch_and_deploy_gh_release "snipe-it" "snipe/snipe-it" "tarball"
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
setup_composer
msg_info "Updating ${APP} to v${RELEASE}"

View File

@ -9,8 +9,8 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"website": "https://docs.2fauth.app/",
"documentation": "https://docs.2fauth.app/",
"website": "https://2fauth.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
"config_path": "cat /opt/2fauth/.env",
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",

View File

@ -0,0 +1,44 @@
{
"name": "Healthchecks",
"slug": "healthchecks",
"categories": [
9
],
"date_created": "2025-08-25",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/healthchecks/hc/local_settings.py",
"interface_port": 3000,
"documentation": "https://healthchecks.io/docs/",
"website": "https://healthchecks.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/healthchecks.webp",
"description": "Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages (\"pings\") from your cron jobs and scheduled tasks (\"checks\"). When a ping does not arrive on time, Healthchecks sends out alerts. Healthchecks comes with a web dashboard, API, 25+ integrations for delivering notifications, monthly email reports, WebAuthn 2FA support, team management features: projects, team members, read-only access.",
"install_methods": [
{
"type": "default",
"script": "ct/healthchecks.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "if you change your LXC-IP, you need to update /etc/caddy/Caddyfile & /opt/healthchecks/hc/local_settings.py",
"type": "info"
},
{
"text": "Show credentials: `cat ~/healthchecks.creds`",
"type": "info"
}
]
}

View File

@ -44,7 +44,7 @@
},
"notes": [
{
"text": "After the initial installation: Enter your desired admin user and password and then click on Sign Up",
"text": "For admin username and password type `cat ~/komodo.creds` inside LXC.",
"type": "info"
}
]

View File

@ -0,0 +1,35 @@
{
"name": "Redlib",
"slug": "redlib",
"categories": [
10
],
"date_created": "2025-08-25",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5252,
"documentation": "https://github.com/redlib-org/redlib/blob/main/README.md",
"website": "https://github.com/redlib-org/redlib",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redlib.webp",
"config_path": "/opt/redlib/redlib.conf",
"description": "An alternative private front-end to Reddit. Redlib hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-redlib.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 1,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -25,6 +25,17 @@
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-rustdeskserver.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {

View File

@ -1,13 +1,143 @@
[
{
"name": "coder/code-server",
"version": "v4.103.2",
"date": "2025-08-25T23:30:54Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.29.0",
"date": "2025-08-25T22:43:20Z"
},
{
"name": "booklore-app/booklore",
"version": "v0.38.2",
"date": "2025-08-25T22:41:41Z"
},
{
"name": "esphome/esphome",
"version": "2025.8.1",
"date": "2025-08-25T20:48:19Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.13.0",
"date": "2025-08-25T19:19:51Z"
},
{
"name": "immich-app/immich",
"version": "v1.139.4",
"date": "2025-08-25T18:31:13Z"
},
{
"name": "ollama/ollama",
"version": "v0.11.7",
"date": "2025-08-25T18:04:05Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.1.2",
"date": "2025-08-25T18:00:52Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.11.8",
"date": "2025-08-25T16:27:12Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.7.6",
"date": "2025-08-23T22:49:00Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p36",
"date": "2025-08-25T15:32:14Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.107.4",
"date": "2025-08-20T12:23:06Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.3",
"date": "2025-08-25T13:59:56Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.2",
"date": "2025-08-25T12:38:14Z"
},
{
"name": "gotson/komga",
"version": "1.23.2",
"date": "2025-08-25T09:39:42Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-08-25T09:14:19Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.1-beta.2",
"date": "2025-08-25T08:51:40Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2343",
"date": "2025-08-25T05:50:39Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.3.2",
"date": "2025-08-19T04:08:36Z"
},
{
"name": "FlareSolverr/FlareSolverr",
"version": "v3.4.0",
"date": "2025-08-25T03:22:00Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "8.2.10",
"date": "2025-08-25T01:26:55Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-25T00:27:05Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.2-beta",
"date": "2025-08-25T00:26:03Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.1",
"date": "2025-08-24T23:58:52Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.2-beta",
"date": "2025-08-24T22:58:03Z"
"name": "documenso/documenso",
"version": "v1.12.2-rc.5",
"date": "2025-08-24T23:48:04Z"
},
{
"name": "Ombi-app/Ombi",
@ -25,20 +155,15 @@
"date": "2025-08-24T20:16:32Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.3.2",
"date": "2025-08-19T04:08:36Z"
"name": "runtipi/runtipi",
"version": "v4.3.0",
"date": "2025-07-05T12:14:52Z"
},
{
"name": "wavelog/wavelog",
"version": "2.1",
"date": "2025-08-24T15:42:19Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.7.6",
"date": "2025-08-23T22:49:00Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.26.2.10099",
@ -54,6 +179,11 @@
"version": "fumadocs-openapi@9.2.3",
"date": "2025-08-24T12:48:14Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.3",
"date": "2025-08-20T10:12:51Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.12.4.4658",
@ -69,31 +199,6 @@
"version": "0.6.25",
"date": "2025-08-24T08:51:55Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2329",
"date": "2025-08-24T05:53:12Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "8.2.9",
"date": "2025-08-24T04:51:15Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-24T00:27:11Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.15.1",
@ -104,16 +209,6 @@
"version": "v0.21.0",
"date": "2025-08-23T18:33:53Z"
},
{
"name": "immich-app/immich",
"version": "v1.139.3",
"date": "2025-08-23T16:37:46Z"
},
{
"name": "booklore-app/booklore",
"version": "v0.38.0",
"date": "2025-08-23T14:36:32Z"
},
{
"name": "prometheus/prometheus",
"version": "v0.306.0-rc.0",
@ -139,21 +234,11 @@
"version": "v2.18.2",
"date": "2025-08-22T23:56:41Z"
},
{
"name": "ollama/ollama",
"version": "v0.11.7-rc0",
"date": "2025-08-22T23:26:48Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.34.0",
"date": "2025-08-22T19:16:24Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.3",
"date": "2025-08-20T10:12:51Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.86.5",
@ -164,11 +249,6 @@
"version": "v1.71.0",
"date": "2025-08-22T16:41:23Z"
},
{
"name": "emqx/emqx",
"version": "e5.9.2-beta.2",
"date": "2025-08-22T15:34:17Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.8.1",
@ -189,11 +269,6 @@
"version": "v4.10.3",
"date": "2025-08-19T18:51:00Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.7",
@ -244,11 +319,6 @@
"version": "v0.36.0",
"date": "2025-07-14T18:59:57Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-08-21T19:17:27Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.39.0",
@ -299,21 +369,11 @@
"version": "jenkins-2.516.2",
"date": "2025-08-20T17:15:26Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p10",
"date": "2025-08-20T14:05:06Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.65",
"date": "2025-08-20T14:02:28Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.107.4",
"date": "2025-08-20T12:23:06Z"
},
{
"name": "cockpit-project/cockpit",
"version": "345",
@ -334,11 +394,6 @@
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
"date": "2025-08-20T08:15:46Z"
},
{
"name": "esphome/esphome",
"version": "2025.8.0",
"date": "2025-08-20T07:58:12Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.2.3",
@ -349,11 +404,6 @@
"version": "v5.23.2",
"date": "2025-08-19T21:24:45Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.1.1",
"date": "2025-08-19T20:23:43Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.2",
@ -374,11 +424,6 @@
"version": "v5.8.0",
"date": "2025-08-19T16:46:00Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.2",
"date": "2025-07-09T19:08:28Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-dns-cache-manager",
@ -389,11 +434,6 @@
"version": "v1.136.0",
"date": "2025-08-12T14:26:27Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.12",
"date": "2025-08-19T11:16:17Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.80",
@ -429,11 +469,6 @@
"version": "v25.2",
"date": "2025-07-04T08:21:42Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-arroy-becomes-hannoy-with-sharding-0",
"date": "2025-08-18T14:48:37Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.124.0",
@ -484,16 +519,6 @@
"version": "v1.2.10",
"date": "2025-08-16T11:45:23Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.4",
"date": "2025-08-16T09:16:29Z"
},
{
"name": "coder/code-server",
"version": "v4.103.1",
"date": "2025-08-16T01:59:28Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.0",
@ -519,11 +544,6 @@
"version": "v1.7.2",
"date": "2025-08-14T19:07:57Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.11.7",
"date": "2025-08-14T17:14:33Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
@ -569,11 +589,6 @@
"version": "v2.5.308",
"date": "2025-08-13T07:09:29Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.12.0",
"date": "2025-08-12T15:09:35Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.14.0",
@ -614,11 +629,6 @@
"version": "0.23.2",
"date": "2025-08-10T23:35:07Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.28.0",
"date": "2025-08-10T23:09:55Z"
},
{
"name": "ioBroker/ioBroker",
"version": "1012-08-09",
@ -814,11 +824,6 @@
"version": "2025.07.1",
"date": "2025-08-01T14:40:28Z"
},
{
"name": "gotson/komga",
"version": "1.23.1",
"date": "2025-08-01T04:30:24Z"
},
{
"name": "Suwayomi/Suwayomi-Server",
"version": "v2.1.1867",
@ -1084,11 +1089,6 @@
"version": "v2.0.0.4645",
"date": "2017-03-07T18:56:06Z"
},
{
"name": "FlareSolverr/FlareSolverr",
"version": "v3.3.25",
"date": "2025-06-14T02:52:44Z"
},
{
"name": "OctoPrint/OctoPrint",
"version": "1.11.2",

View File

@ -0,0 +1,98 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: andrej-kocijan (Andrej Kocijan)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/redlib-org/redlib
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
msg_info "Configuring Redlib"
cat <<EOF >/opt/redlib/redlib.conf
############################################
# Redlib Instance Configuration File
# Uncomment and edit values as needed
############################################
## Instance settings
ADDRESS=0.0.0.0
PORT=5252 # Integer (0-65535) - Internal port
#REDLIB_SFW_ONLY=off # ["on", "off"] - Filter all NSFW content
#REDLIB_BANNER= # String - Displayed on instance info page
#REDLIB_ROBOTS_DISABLE_INDEXING=off # ["on", "off"] - Disable search engine indexing
#REDLIB_PUSHSHIFT_FRONTEND=undelete.pullpush.io # Pushshift frontend for removed links
#REDLIB_ENABLE_RSS=off # ["on", "off"] - Enable RSS feed generation
#REDLIB_FULL_URL= # String - Needed for proper RSS URLs
## Default user settings
#REDLIB_DEFAULT_THEME=system # Theme (system, light, dark, black, dracula, nord, laserwave, violet, gold, rosebox, gruvboxdark, gruvboxlight, tokyoNight, icebergDark, doomone, libredditBlack, libredditDark, libredditLight)
#REDLIB_DEFAULT_FRONT_PAGE=default # ["default", "popular", "all"]
#REDLIB_DEFAULT_LAYOUT=card # ["card", "clean", "compact"]
#REDLIB_DEFAULT_WIDE=off # ["on", "off"]
#REDLIB_DEFAULT_POST_SORT=hot # ["hot", "new", "top", "rising", "controversial"]
#REDLIB_DEFAULT_COMMENT_SORT=confidence # ["confidence", "top", "new", "controversial", "old"]
#REDLIB_DEFAULT_BLUR_SPOILER=off # ["on", "off"]
#REDLIB_DEFAULT_SHOW_NSFW=off # ["on", "off"]
#REDLIB_DEFAULT_BLUR_NSFW=off # ["on", "off"]
#REDLIB_DEFAULT_USE_HLS=off # ["on", "off"]
#REDLIB_DEFAULT_HIDE_HLS_NOTIFICATION=off # ["on", "off"]
#REDLIB_DEFAULT_AUTOPLAY_VIDEOS=off # ["on", "off"]
#REDLIB_DEFAULT_SUBSCRIPTIONS= # Example: sub1+sub2+sub3
#REDLIB_DEFAULT_HIDE_AWARDS=off # ["on", "off"]
#REDLIB_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION=off # ["on", "off"]
#REDLIB_DEFAULT_HIDE_SCORE=off # ["on", "off"]
#REDLIB_DEFAULT_HIDE_SIDEBAR_AND_SUMMARY=off # ["on", "off"]
#REDLIB_DEFAULT_FIXED_NAVBAR=on # ["on", "off"]
#REDLIB_DEFAULT_REMOVE_DEFAULT_FEEDS=off # ["on", "off"]
EOF
msg_ok "Configured Redlib"
msg_info "Creating Redlib Service"
cat <<EOF >/etc/init.d/redlib
#!/sbin/openrc-run
name="Redlib"
description="Redlib Service"
command="/opt/redlib/redlib"
pidfile="/run/redlib.pid"
supervisor="supervise-daemon"
command_background="yes"
depend() {
need net
}
start_pre() {
set -a
. /opt/redlib/redlib.conf
set +a
: ${ADDRESS:=0.0.0.0}
: ${PORT:=5252}
command_args="-a ${ADDRESS} -p ${PORT}"
}
EOF
$STD chmod +x /etc/init.d/redlib
$STD rc-update add redlib default
msg_ok "Created Redlib Service"
msg_info "Starting Redlib Service"
$STD rc-service redlib start
msg_ok "Started Redlib Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apk cache clean
msg_ok "Cleaned"

View File

@ -0,0 +1,122 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rustdesk/rustdesk-server
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Installing RustDesk Server v${RELEASE}"
temp_file1=$(mktemp)
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
$STD unzip "$temp_file1"
mv amd64 /opt/rustdesk-server
mkdir -p /root/.config/rustdesk
cd /opt/rustdesk-server
./rustdesk-utils genkeypair > /tmp/rustdesk_keys.txt
grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' > /root/.config/rustdesk/id_ed25519.pub
grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' > /root/.config/rustdesk/id_ed25519
chmod 600 /root/.config/rustdesk/id_ed25519
chmod 644 /root/.config/rustdesk/id_ed25519.pub
rm /tmp/rustdesk_keys.txt
echo "${RELEASE}" >~/.rustdesk-server
msg_ok "Installed RustDesk Server v${RELEASE}"
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing RustDesk API v${APIRELEASE}"
temp_file2=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
$STD tar zxvf "$temp_file2"
mv release /opt/rustdesk-api
cd /opt/rustdesk-api
ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16)
$STD ./apimain reset-admin-pwd "$ADMINPASS"
{
echo "RustDesk WebUI"
echo ""
echo "Username: admin"
echo "Password: $ADMINPASS"
} >>~/rustdesk.creds
echo "${APIRELEASE}" >~/.rustdesk-api
msg_ok "Installed RustDesk API v${APIRELEASE}"
msg_info "Enabling RustDesk Server Services"
cat <<EOF >/etc/init.d/rustdesk-server-hbbs
#!/sbin/openrc-run
description="RustDesk HBBS Service"
directory="/opt/rustdesk-server"
command="/opt/rustdesk-server/hbbs"
command_args=""
command_background="true"
command_user="root"
pidfile="/var/run/rustdesk-server-hbbs.pid"
output_log="/var/log/rustdesk-hbbs.log"
error_log="/var/log/rustdesk-hbbs.err"
depend() {
use net
}
EOF
cat <<EOF >/etc/init.d/rustdesk-server-hbbr
#!/sbin/openrc-run
description="RustDesk HBBR Service"
directory="/opt/rustdesk-server"
command="/opt/rustdesk-server/hbbr"
command_args=""
command_background="true"
command_user="root"
pidfile="/var/run/rustdesk-server-hbbr.pid"
output_log="/var/log/rustdesk-hbbr.log"
error_log="/var/log/rustdesk-hbbr.err"
depend() {
use net
}
EOF
cat <<EOF >/etc/init.d/rustdesk-api
#!/sbin/openrc-run
description="RustDesk API Service"
directory="/opt/rustdesk-api"
command="/opt/rustdesk-api/apimain"
command_args=""
command_background="true"
command_user="root"
pidfile="/var/run/rustdesk-api.pid"
output_log="/var/log/rustdesk-api.log"
error_log="/var/log/rustdesk-api.err"
depend() {
use net
}
EOF
chmod +x /etc/init.d/rustdesk-server-hbbs
chmod +x /etc/init.d/rustdesk-server-hbbr
chmod +x /etc/init.d/rustdesk-api
$STD rc-update add rustdesk-server-hbbs default
$STD rc-update add rustdesk-server-hbbr default
$STD rc-update add rustdesk-api default
msg_ok "Enabled RustDesk Server Services"
msg_info "Starting RustDesk Server"
$STD service rustdesk-server-hbbs start
$STD service rustdesk-server-hbbr start
$STD service rustdesk-api start
msg_ok "Started RustDesk Server"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file1" "$temp_file2"
$STD apk cache clean
msg_ok "Cleaned"

View File

@ -0,0 +1,136 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://healthchecks.io/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
gcc \
libpq-dev \
libcurl4-openssl-dev \
libssl-dev \
caddy
msg_ok "Installed Dependencies"
setup_uv
PG_VERSION=16 setup_postgresql
msg_info "Setup Database"
DB_NAME=healthchecks_db
DB_USER=hc_user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
ADMIN_EMAIL="admin@helper-scripts.local"
ADMIN_PASSWORD="$DB_PASS"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
{
echo "healthchecks-Credentials"
echo "healthchecks Database User: $DB_USER"
echo "healthchecks Database Password: $DB_PASS"
echo "healthchecks Database Name: $DB_NAME"
echo "healthchecks Admin Email: $ADMIN_EMAIL"
echo "healthchecks Admin Password: $ADMIN_PASSWORD"
} >>~/healthchecks.creds
msg_ok "Set up Database"
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Setup healthchecks"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
LOCAL_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/healthchecks/hc/local_settings.py
DEBUG = False
ALLOWED_HOSTS = ["${LOCAL_IP}", "127.0.0.1", "localhost"]
CSRF_TRUSTED_ORIGINS = ["http://${LOCAL_IP}", "https://${LOCAL_IP}"]
SECRET_KEY = "${SECRET_KEY}"
SITE_ROOT = "http://${LOCAL_IP}:8000"
SITE_NAME = "MyChecks"
DEFAULT_FROM_EMAIL = "healthchecks@${LOCAL_IP}"
STATIC_ROOT = "/opt/healthchecks/static-collected"
COMPRESS_OFFLINE = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '${DB_NAME}',
'USER': '${DB_USER}',
'PASSWORD': '${DB_PASS}',
'HOST': '127.0.0.1',
'PORT': '5432',
'TEST': {'CHARSET': 'UTF8'}
}
}
EOF
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
cat <<EOF | $STD uv run -- python manage.py shell
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(email="${ADMIN_EMAIL}").exists():
User.objects.create_superuser("${ADMIN_EMAIL}", "${ADMIN_EMAIL}", "${ADMIN_PASSWORD}")
EOF
msg_ok "Installed healthchecks"
msg_info "Configuring Caddy"
cat <<EOF >/etc/caddy/Caddyfile
{
email admin@example.com
}
${LOCAL_IP} {
reverse_proxy 127.0.0.1:8000
}
EOF
msg_ok "Configured Caddy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/healthchecks.service
[Unit]
Description=Healthchecks Service
After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/healthchecks/
ExecStart=/usr/local/bin/uv run -- gunicorn hc.wsgi:application --bind 127.0.0.1:8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now healthchecks caddy
systemctl reload caddy
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -280,7 +280,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.139.2" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.139.4" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (more patience please)"
@ -290,14 +290,16 @@ export CI=1
corepack enable
# server build
export SHARP_IGNORE_GLOBAL_LIBVIPS=true
$STD pnpm --filter immich --frozen-lockfile build
unset SHARP_IGNORE_GLOBAL_LIBVIPS
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
cp "$APP_DIR"/package.json "$APP_DIR"/bin
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
# openapi & web build
cd "$SRC_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
$STD pnpm --filter @immich/sdk --filter immich-web build
cp -a web/build "$APP_DIR"/www

View File

@ -62,15 +62,23 @@ curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_C
msg_info "Setup Komodo Environment"
curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env"
DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
ADMIN_PASSWORD=$(openssl rand -base64 8 | tr -d '/+=')
PASSKEY=$(openssl rand -base64 24 | tr -d '/+=')
WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env
sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_INIT_ADMIN_PASSWORD=changeme/KOMODO_INIT_ADMIN_PASSWORD=${ADMIN_PASSWORD}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env
{
echo "Komodo Credentials"
echo ""
echo "Admin User : admin"
echo "Admin Password: $ADMIN_PASSWORD"
} >>~/komodo.creds
msg_ok "Setup Komodo Environment"
msg_info "Initialize Komodo"

View File

@ -71,7 +71,7 @@ server {
location ~ \.php\$ {
include fastcgi.conf;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)\$;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;

View File

@ -82,6 +82,7 @@ network_check() {
update_os() {
msg_info "Updating Container OS"
$STD apk -U upgrade
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func)
msg_ok "Updated Container OS"
}

View File

@ -210,7 +210,7 @@ if ! check_storage_support "vztmpl"; then
exit 1
fi
msg_info "Checking template storage"
#msg_info "Checking template storage"
while true; do
if select_storage template; then
TEMPLATE_STORAGE="$STORAGE_RESULT"

View File

@ -161,19 +161,19 @@ function setup_postgresql() {
if [[ "$CURRENT_PG_VERSION" == "$PG_VERSION" ]]; then
: # PostgreSQL is already at the desired version no action needed
else
msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
$STD msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
NEED_PG_INSTALL=true
fi
else
msg_info "Setup PostgreSQL $PG_VERSION"
NEED_PG_INSTALL=true
fi
if [[ "$NEED_PG_INSTALL" == true ]]; then
if [[ -n "$CURRENT_PG_VERSION" ]]; then
msg_info "Dumping PostgreSQL $CURRENT_PG_VERSION data"
$STD msg_info "Dumping PostgreSQL $CURRENT_PG_VERSION data"
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
msg_ok "Data dump completed"
$STD msg_ok "Data dump completed"
systemctl stop postgresql
fi
@ -186,29 +186,30 @@ function setup_postgresql() {
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
>/etc/apt/sources.list.d/pgdg.list
$STD msg_ok "Repository added"
$STD apt-get update
$STD msg_ok "Repository added"
msg_info "Setup PostgreSQL $PG_VERSION"
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
msg_ok "Setup PostgreSQL $PG_VERSION"
if [[ -n "$CURRENT_PG_VERSION" ]]; then
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
fi
$STD msg_info "Starting PostgreSQL $PG_VERSION"
systemctl enable -q --now postgresql
$STD msg_ok "PostgreSQL $PG_VERSION started"
if [[ -n "$CURRENT_PG_VERSION" ]]; then
msg_info "Restoring dumped data"
$STD msg_info "Restoring dumped data"
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
msg_ok "Data restored"
$STD msg_ok "Data restored"
fi
msg_ok "PostgreSQL $PG_VERSION installed"
$STD msg_ok "PostgreSQL $PG_VERSION installed"
fi
# Install optional PostgreSQL modules
@ -216,13 +217,13 @@ function setup_postgresql() {
IFS=',' read -ra MODULES <<<"$PG_MODULES"
for module in "${MODULES[@]}"; do
local pkg="postgresql-${PG_VERSION}-${module}"
msg_info "Setup PostgreSQL module/s: $pkg"
$STD msg_info "Setup PostgreSQL module/s: $pkg"
$STD apt-get install -y "$pkg" || {
msg_error "Failed to install $pkg"
continue
}
done
msg_ok "Setup PostgreSQL modules"
$STD msg_ok "Setup PostgreSQL modules"
fi
}
@ -1328,8 +1329,13 @@ function setup_uv() {
return 1
}
rm -rf "$TMP_DIR"
if [[ ":$PATH:" != *":/usr/local/bin:"* ]]; then
export PATH="/usr/local/bin:$PATH"
fi
ensure_usr_local_bin_persist
if ! $STD uv python update-shell; then
msg_error "uv shell integration failed continuing anyway"
fi
msg_ok "Setup uv $LATEST_VERSION"
# Optional: install specific Python version

View File

@ -120,8 +120,18 @@ if [[ -f "$INSTALL_PATH" ]]; then
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Updating ${APP}"
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH"
chmod +x "$INSTALL_PATH"
tmp="${INSTALL_PATH}.tmp.$$"
if ! curl -fSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$tmp"; then
msg_error "Download failed"
rm -f "$tmp"
exit 1
fi
chmod 0755 "$tmp"
if ! mv -f "$tmp" "$INSTALL_PATH"; then
msg_error "Install failed (cannot move into $INSTALL_PATH)"
rm -f "$tmp"
exit 1
fi
msg_ok "Updated ${APP}"
exit 0
else