Compare commits

..

2 Commits

Author SHA1 Message Date
6f223d191e Update 2025-12-23 19:45:16 +01:00
db36d2f9e6 Add note for superuser account creation
Added a note for creating a superuser account.
2025-12-23 13:45:20 +01:00
37 changed files with 481 additions and 391 deletions

View File

@ -10,76 +10,8 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-25
## 2025-12-24
### 🚀 Updated Scripts
- recyclarr: increase cron path [@Uncloak2](https://github.com/Uncloak2) ([#10272](https://github.com/community-scripts/ProxmoxVE/pull/10272))
- #### 🐞 Bug Fixes
- fix: technitium: service migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10300](https://github.com/community-scripts/ProxmoxVE/pull/10300))
- #### 🔧 Refactor
- Overseerr: Update dependencies [@tremor021](https://github.com/tremor021) ([#10275](https://github.com/community-scripts/ProxmoxVE/pull/10275))
- Refactor: Paperless-GPT [@tremor021](https://github.com/tremor021) ([#10274](https://github.com/community-scripts/ProxmoxVE/pull/10274))
- Refactor: Outline [@tremor021](https://github.com/tremor021) ([#10276](https://github.com/community-scripts/ProxmoxVE/pull/10276))
- Refactor: OTS [@tremor021](https://github.com/tremor021) ([#10277](https://github.com/community-scripts/ProxmoxVE/pull/10277))
- Refactor: OpenProject [@tremor021](https://github.com/tremor021) ([#10278](https://github.com/community-scripts/ProxmoxVE/pull/10278))
- Refactor: Open Archiver [@tremor021](https://github.com/tremor021) ([#10280](https://github.com/community-scripts/ProxmoxVE/pull/10280))
- Refactor: Tautulli [@tremor021](https://github.com/tremor021) ([#10241](https://github.com/community-scripts/ProxmoxVE/pull/10241))
- Refactor: PrivateBin [@tremor021](https://github.com/tremor021) ([#10256](https://github.com/community-scripts/ProxmoxVE/pull/10256))
- Refactor: Podman-Home Assistant [@tremor021](https://github.com/tremor021) ([#10258](https://github.com/community-scripts/ProxmoxVE/pull/10258))
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#10259](https://github.com/community-scripts/ProxmoxVE/pull/10259))
- Refactor: PatchMon [@tremor021](https://github.com/tremor021) ([#10260](https://github.com/community-scripts/ProxmoxVE/pull/10260))
- Refactor: Part-DB [@tremor021](https://github.com/tremor021) ([#10262](https://github.com/community-scripts/ProxmoxVE/pull/10262))
### 💾 Core
- #### 🐞 Bug Fixes
- core: correct local template discovery regex pattern [@MickLesk](https://github.com/MickLesk) ([#10282](https://github.com/community-scripts/ProxmoxVE/pull/10282))
### 🧰 Tools
- #### 🐞 Bug Fixes
- pihole-exporter fix: unbound var [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10307](https://github.com/community-scripts/ProxmoxVE/pull/10307))
### ❔ Uncategorized
- Pocketbase: Add note for superuser account creation [@tremor021](https://github.com/tremor021) ([#10245](https://github.com/community-scripts/ProxmoxVE/pull/10245))
## 2025-12-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Technitium DNS: Migrate service [@tremor021](https://github.com/tremor021) ([#10240](https://github.com/community-scripts/ProxmoxVE/pull/10240))
- Update forgejo to debian13 and fix env var [@burgerga](https://github.com/burgerga) ([#10242](https://github.com/community-scripts/ProxmoxVE/pull/10242))
- #### 🔧 Refactor
- Passbolt: Small fixes [@tremor021](https://github.com/tremor021) ([#10261](https://github.com/community-scripts/ProxmoxVE/pull/10261))
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#10255](https://github.com/community-scripts/ProxmoxVE/pull/10255))
- Prometheus Paperless NGX Exporter: Small fix [@tremor021](https://github.com/tremor021) ([#10254](https://github.com/community-scripts/ProxmoxVE/pull/10254))
- Podman: Fixes [@tremor021](https://github.com/tremor021) ([#10257](https://github.com/community-scripts/ProxmoxVE/pull/10257))
- Refactor: Beszel [@tremor021](https://github.com/tremor021) ([#10195](https://github.com/community-scripts/ProxmoxVE/pull/10195))
### 🧰 Tools
- #### 🐞 Bug Fixes
- fix: pihole-exporter: unknown function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10249](https://github.com/community-scripts/ProxmoxVE/pull/10249))
### ❔ Uncategorized
- Fix Recyclarr page TypeError: schema mismatch in notes field [@Copilot](https://github.com/Copilot) ([#10253](https://github.com/community-scripts/ProxmoxVE/pull/10253))
## 2025-12-22
### 🚀 Updated Scripts

View File

@ -27,22 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
if check_for_gh_release "beszel" "henrygd/beszel"; then
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Updating Beszel"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated Beszel"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
exit
}

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@ -44,14 +44,6 @@ function update_script() {
rm -rf forgejo-$RELEASE-linux-amd64
msg_ok "Cleaned"
# Fix env var from older version of community script
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
msg_info "Updating Service File"
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
systemctl daemon-reload
msg_ok "Updated Service File"
fi
msg_info "Starting Service"
systemctl start forgejo
msg_ok "Started Service"

View File

@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Services"
cp /opt/openarchiver/.env /opt/openarchiver.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball" "latest" "/opt/openarchiver"
mv /opt/openarchiver.env /opt/openarchiver/.env
msg_info "Updating Open Archiver"

View File

@ -27,19 +27,18 @@ function update_script() {
msg_error "No Paperless-GPT installation found!"
exit
fi
if check_for_gh_release "paperless-gpt" "icereed/paperless-gpt"; then
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop paperless-gpt
msg_ok "Service Stopped"
if should_update_tool "node" "24"; then
NODE_VERSION="24" setup_nodejs
fi
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
msg_info "Updating Paperless-GPT"
msg_info "Updating Paperless-GPT to ${RELEASE}"
temp_file=$(mktemp)
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
rm -rf /opt/paperless-gpt
mv paperless-gpt-${RELEASE} /opt/paperless-gpt
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
@ -48,12 +47,16 @@ function update_script() {
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
msg_ok "Updated Paperless-GPT"
rm -f $temp_file
echo "${RELEASE}" >"/opt/paperless-gpt_version.txt"
msg_ok "Updated Paperless-GPT to ${RELEASE}"
msg_info "Starting Service"
systemctl start paperless-gpt
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@ -27,9 +27,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
if check_for_gh_release "partdb" "Part-DB/Part-DB-server"; then
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop apache2
msg_ok "Stopped Service"
@ -37,7 +36,7 @@ function update_script() {
msg_info "Updating $APP to v${RELEASE}"
cd /opt
mv /opt/partdb/ /opt/partdb-backup
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip")
$STD unzip "v${RELEASE}.zip"
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
@ -55,13 +54,15 @@ function update_script() {
chown -R www-data:www-data /opt/partdb
rm -r "/opt/v${RELEASE}.zip"
rm -r /opt/partdb-backup
echo "${RELEASE}" >~/.partdb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}

View File

@ -37,7 +37,7 @@ function update_script() {
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt upgrade -y
$STD apt -y upgrade
msg_ok "Updated successfully!"
msg_info "Updating All Containers\n"
@ -65,7 +65,7 @@ function update_script() {
exit
fi
if [ "$UPD" == "3" ]; then
import_local_ip
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing FileBrowser"
$STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
$STD filebrowser config init -a '0.0.0.0'
@ -74,25 +74,23 @@ function update_script() {
msg_ok "Installed FileBrowser"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/filebrowser.service
[Unit]
Description=Filebrowser
After=network-online.target
service_path="/etc/systemd/system/filebrowser.service"
echo "[Unit]
Description=Filebrowser
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target" >$service_path
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target
EOF
systemctl enable -q --now filebrowser
$STD systemctl enable --now filebrowser
msg_ok "Created Service"
msg_ok "Completed Successfully!\n"
echo -e "FileBrowser should be reachable by going to the following URL.
${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n"
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
exit
fi
if [ "$UPD" == "4" ]; then
@ -101,6 +99,7 @@ EOF
msg_ok "Removed ALL Unused Images"
exit
fi
}
start

View File

@ -29,7 +29,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt upgrade -y
$STD apt -y upgrade
msg_ok "Updated successfully!"
exit
}

View File

@ -48,6 +48,7 @@ function update_script() {
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"

View File

@ -27,11 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /etc/systemd/system/dns.service ]]; then
mv /etc/systemd/system/dns.service /etc/systemd/system/technitium.service
systemctl daemon-reload
systemctl enable -q --now technitium
fi
if is_package_installed "aspnetcore-runtime-8.0"; then
$STD apt remove -y aspnetcore-runtime-8.0
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
@ -46,7 +42,7 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium)" ]]; then
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
msg_info "Updating Technitium DNS"
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/

View File

@ -23,7 +23,7 @@
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "13"
"version": "12"
}
},
{

View File

@ -34,11 +34,11 @@
"notes": [
{
"type": "warning",
"text": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
"content": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
},
{
"type": "info",
"text": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
"content": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
}
]
}

View File

@ -12,7 +12,7 @@
"documentation": "https://github.com/Tautulli/Tautulli/wiki",
"website": "https://tautulli.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tautulli.webp",
"config_path": "/opt/Tautulli/config.ini",
"config_path": "",
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
"install_methods": [
{
@ -23,7 +23,7 @@
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "13"
"version": "12"
}
}
],

View File

@ -1,169 +1,4 @@
[
{
"name": "fosrl/pangolin",
"version": "1.14.1",
"date": "2025-12-24T21:33:56Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.16.0",
"date": "2025-12-24T19:57:11Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.28.0",
"date": "2025-12-24T19:27:21Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.7.2",
"date": "2025-12-24T18:38:32Z"
},
{
"name": "rcourtman/Pulse",
"version": "v5.0.2",
"date": "2025-12-24T18:18:13Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2025-12-24T16:39:27Z"
},
{
"name": "TuroYT/snowshare",
"version": "v1.2.6",
"date": "2025-12-24T14:05:56Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.4",
"date": "2025-12-24T12:26:24Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.12",
"date": "2025-12-24T12:19:42Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@16.4.0",
"date": "2025-12-24T10:16:33Z"
},
{
"name": "emqx/emqx",
"version": "6.1.0-rc.1",
"date": "2025-12-24T09:46:02Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.521",
"date": "2025-12-24T05:52:23Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.40.0-rc1",
"date": "2025-12-24T03:37:37Z"
},
{
"name": "comfyanonymous/ComfyUI",
"version": "v0.6.0",
"date": "2025-12-24T03:32:16Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-24T00:27:08Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.32.1",
"date": "2025-12-23T23:28:06Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.1.4",
"date": "2025-12-23T20:53:07Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.12.6",
"date": "2025-12-23T19:24:15Z"
},
{
"name": "prometheus-pve/prometheus-pve-exporter",
"version": "v3.8.0",
"date": "2025-12-23T18:20:46Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.9",
"date": "2025-12-23T17:03:22Z"
},
{
"name": "mongodb/mongo",
"version": "r6.0.27",
"date": "2025-12-23T16:21:51Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.2",
"date": "2025-12-23T16:17:04Z"
},
{
"name": "SonarSource/sonarqube",
"version": "25.12.0.117093",
"date": "2025-12-23T15:00:10Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.7",
"date": "2025-12-23T14:53:51Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.459",
"date": "2025-12-23T14:40:52Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.8.1",
"date": "2025-12-16T09:59:22Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.543",
"date": "2025-12-23T12:39:16Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.16.4",
"date": "2025-12-23T12:08:24Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v1.6.11",
@ -184,6 +19,21 @@
"version": "v2.0.12",
"date": "2025-12-02T08:11:24Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.543",
"date": "2025-12-23T06:40:41Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.512",
"date": "2025-12-23T06:02:59Z"
},
{
"name": "fosrl/pangolin",
"version": "1.14.0",
"date": "2025-12-23T03:21:32Z"
},
{
"name": "theonedev/onedev",
"version": "v13.1.6",
@ -194,6 +44,21 @@
"version": "v2.13.3",
"date": "2025-12-23T01:18:58Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-23T00:27:04Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "Dispatcharr/Dispatcharr",
"version": "v0.15.1",
@ -214,11 +79,21 @@
"version": "v1.1.0-stable",
"date": "2025-12-22T20:30:40Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.17",
"date": "2025-12-22T20:23:56Z"
},
{
"name": "maxdorninger/MediaManager",
"version": "v1.11.1",
"date": "2025-12-22T18:15:40Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2025-12-22T17:38:26Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.11.rc.1",
@ -239,6 +114,11 @@
"version": "v1.0.9",
"date": "2025-12-22T15:55:49Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.1.2",
"date": "2025-12-22T14:58:39Z"
},
{
"name": "openhab/openhab-core",
"version": "5.1.0",
@ -249,6 +129,11 @@
"version": "v0.88.2",
"date": "2025-12-22T14:36:59Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.4",
"date": "2025-10-09T10:27:01Z"
},
{
"name": "passbolt/passbolt_api",
"version": "v5.8.0",
@ -269,6 +154,21 @@
"version": "v6.4.14",
"date": "2025-12-16T05:42:34Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.32.0",
"date": "2025-12-21T22:27:29Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.12.5",
"date": "2025-12-21T19:24:42Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.7.1",
@ -289,6 +189,11 @@
"version": "v0.35.0",
"date": "2025-12-21T07:44:15Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@16.3.2",
"date": "2025-12-21T05:23:55Z"
},
{
"name": "dedicatedcode/reitti",
"version": "v3.0.1",
@ -344,11 +249,26 @@
"version": "v1.0.0-beta21",
"date": "2025-12-19T23:04:27Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.3-alpha.1",
"date": "2025-12-19T21:08:48Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.47.0",
"date": "2025-12-19T19:42:50Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.15.0",
"date": "2025-12-19T18:57:42Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.37",
@ -364,11 +284,21 @@
"version": "v1.16.3",
"date": "2025-12-19T17:45:42Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.1",
"date": "2025-12-19T15:53:08Z"
},
{
"name": "immich-app/immich",
"version": "v2.4.1",
"date": "2025-12-19T15:50:12Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.30.2",
"date": "2025-12-19T15:18:53Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.19.0",
@ -376,8 +306,8 @@
},
{
"name": "wazuh/wazuh",
"version": "coverity-w52-4.14.2",
"date": "2025-12-19T13:31:21Z"
"version": "coverity-w51-4.14.2",
"date": "2025-12-15T12:34:36Z"
},
{
"name": "fccview/jotty",
@ -399,6 +329,11 @@
"version": "0.28.3",
"date": "2025-12-19T11:05:10Z"
},
{
"name": "TuroYT/snowshare",
"version": "v1.2.5",
"date": "2025-12-19T10:47:19Z"
},
{
"name": "mattermost/mattermost",
"version": "v11.1.2",
@ -417,7 +352,7 @@
{
"name": "mealie-recipes/mealie",
"version": "v3.8.0",
"date": "2025-12-19T01:37:16Z"
"date": "2025-12-19T01:37:04Z"
},
{
"name": "moghtech/komodo",
@ -429,6 +364,11 @@
"version": "v2.1.5",
"date": "2025-12-18T20:48:01Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.36.2",
"date": "2025-12-03T22:46:29Z"
},
{
"name": "saltstack/salt",
"version": "v3007.10",
@ -464,6 +404,11 @@
"version": "v5.0.1",
"date": "2025-12-18T14:22:38Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.458",
"date": "2025-12-18T12:23:23Z"
},
{
"name": "juanfont/headscale",
"version": "v0.27.1",
@ -484,6 +429,11 @@
"version": "7.4.6",
"date": "2025-12-18T07:00:26Z"
},
{
"name": "comfyanonymous/ComfyUI",
"version": "v0.5.1",
"date": "2025-12-18T03:08:43Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.10.3",
@ -509,6 +459,11 @@
"version": "v2.16.47",
"date": "2025-12-17T15:36:28Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.7.1",
"date": "2025-12-17T15:18:55Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "testing",
@ -554,11 +509,26 @@
"version": "1.1.7",
"date": "2025-12-16T21:44:58Z"
},
{
"name": "prometheus-pve/prometheus-pve-exporter",
"version": "v3.7.0",
"date": "2025-12-16T19:01:35Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.8",
"date": "2025-12-09T16:29:50Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.6.2",
"date": "2025-12-16T17:54:19Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.8.1",
"date": "2025-12-16T09:59:22Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.19.0",
@ -589,11 +559,21 @@
"version": "v0.30.0",
"date": "2025-12-15T17:23:59Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.6",
"date": "2025-12-15T14:40:53Z"
},
{
"name": "librenms/librenms",
"version": "25.12.0",
"date": "2025-12-15T14:06:00Z"
},
{
"name": "endurain-project/endurain",
"version": "v0.16.3",
"date": "2025-12-15T12:56:50Z"
},
{
"name": "LimeSurvey/LimeSurvey",
"version": "6.16.2+251209",
@ -759,6 +739,11 @@
"version": "2.2.15",
"date": "2025-12-10T01:52:14Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.11.6",
"date": "2025-12-09T21:08:17Z"
},
{
"name": "valkey-io/valkey",
"version": "9.0.1",
@ -1044,6 +1029,11 @@
"version": "release-1.24.2",
"date": "2025-11-26T11:22:30Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.3",
"date": "2025-11-25T17:25:41Z"
},
{
"name": "usememos/memos",
"version": "v0.25.3",
@ -1229,6 +1219,11 @@
"version": "1.5.0",
"date": "2025-11-05T11:10:20Z"
},
{
"name": "SonarSource/sonarqube",
"version": "25.11.0.114957",
"date": "2025-11-05T10:26:59Z"
},
{
"name": "nicolargo/glances",
"version": "v4.4.1",
@ -1369,6 +1364,11 @@
"version": "v0.10.1",
"date": "2025-09-28T08:55:44Z"
},
{
"name": "FreshRSS/FreshRSS",
"version": "1.27.1",
"date": "2025-09-27T13:07:26Z"
},
{
"name": "Threadfin/Threadfin",
"version": "1.2.39",

View File

@ -13,7 +13,11 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "beszel" "henrygd/beszel" "prebuild" "latest" "/opt/beszel" "beszel_linux_amd64.tar.gz"
msg_info "Installing Beszel"
mkdir -p /opt/beszel
curl -fsSL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null
chmod +x /opt/beszel/beszel
msg_ok "Installed Beszel"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/beszel-hub.service

View File

@ -50,7 +50,7 @@ Group=git
WorkingDirectory=/var/lib/forgejo/
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
Restart=always
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo
[Install]
WantedBy=multi-user.target
EOF

View File

@ -19,12 +19,28 @@ msg_ok "Installed dependendencies"
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="openarchiver_db" PG_DB_USER="openarchiver" setup_postgresql_db
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
JWT_KEY="$(openssl rand -hex 32)"
SECRET_KEY="$(openssl rand -hex 32)"
import_local_ip
IP_ADDR=$(hostname -I | awk '{print $1}')
msg_info "Setting up PostgreSQL"
DB_NAME="openarchiver_db"
DB_USER="openarchiver"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-18)"
$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 "Open Archiver DB Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/openarchiver.creds
msg_ok "Set up PostgreSQL"
msg_info "Configuring MeiliSearch"
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
@ -60,10 +76,10 @@ mkdir -p /opt/openarchiver-data
cd /opt/openarchiver
cp .env.example .env
sed -i "s|^NODE_ENV=.*|NODE_ENV=production|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_DB=.*|POSTGRES_DB=$PG_DB_NAME|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_USER=.*|POSTGRES_USER=$PG_DB_USER|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$PG_DB_PASS|g" /opt/openarchiver/.env
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=\"postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME\"|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_DB=.*|POSTGRES_DB=openarchiver_db|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_USER=.*|POSTGRES_USER=openarchiver|g" /opt/openarchiver/.env
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$DB_PASS|g" /opt/openarchiver/.env
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=\"postgresql://openarchiver:$DB_PASS@localhost:5432/openarchiver_db\"|g" /opt/openarchiver/.env
sed -i "s|^MEILI_HOST=.*|MEILI_HOST=http://localhost:7700|g" /opt/openarchiver/.env
sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$MASTER_KEY|g" /opt/openarchiver/.env
sed -i "s|^REDIS_HOST=.*|REDIS_HOST=localhost|g" /opt/openarchiver/.env
@ -72,7 +88,7 @@ sed -i "s|^STORAGE_LOCAL_ROOT_PATH=.*|STORAGE_LOCAL_ROOT_PATH=/opt/openarchiver-
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$JWT_KEY|g" /opt/openarchiver/.env
sed -i "s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$SECRET_KEY|g" /opt/openarchiver/.env
sed -i "s|^TIKA_URL=.*|TIKA_URL=|g" /opt/openarchiver/.env
sed -i "s|^ORIGIN=.*|ORIGIN=http://$LOCAL_IP:3000|g" /opt/openarchiver/.env
sed -i "s|^ORIGIN=.*|ORIGIN=http://$IP_ADDR:3000|g" /opt/openarchiver/.env
$STD pnpm install --shamefully-hoist --frozen-lockfile --prod=false
$STD pnpm run build:oss
$STD pnpm db:migrate

View File

@ -14,14 +14,28 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y apt-transport-https
$STD apt install -y \
apt-transport-https \
ca-certificates
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
PG_DB_NAME="openproject" PG_DB_USER="openproject" setup_postgresql_db
msg_info "Setting up PostgreSQL"
DB_NAME=openproject
DB_USER=openproject
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
API_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
echo "OpenProject API Key: $API_KEY" >>~/openproject.creds
import_local_ip
$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 TEMPLATE template0;"
{
echo "OpenProject-Credentials"
echo -e "OpenProject Database User: $DB_USER"
echo -e "OpenProject Database Password: $DB_PASS"
echo -e "OpenProject Database Name: $DB_NAME"
echo -e "OpenProject API Key: $API_KEY"
} >>~/openproject.creds
msg_ok "Set up PostgreSQL"
msg_info "Setting up OpenProject Repository"
curl -fsSL "https://dl.packager.io/srv/opf/openproject/key" | gpg --dearmor >/etc/apt/trusted.gpg.d/packager-io.gpg
@ -34,6 +48,7 @@ $STD apt install -y openproject
msg_ok "Installed OpenProject"
msg_info "Configuring OpenProject"
IP_ADDR=$(hostname -I | cut -d' ' -f1)
cat <<EOF >/etc/openproject/installer.dat
openproject/edition default
@ -41,13 +56,13 @@ postgres/retry retry
postgres/autoinstall reuse
postgres/db_host 127.0.0.1
postgres/db_port 5432
postgres/db_username ${PG_DB_USER}
postgres/db_password ${PG_DB_PASS}
postgres/db_name ${PG_DB_NAME}
postgres/db_username ${DB_USER}
postgres/db_password ${DB_PASS}
postgres/db_name ${DB_NAME}
server/autoinstall install
server/variant apache2
server/hostname ${LOCAL_IP}
server/hostname ${IP_ADDR}
server/server_path_prefix /openproject
server/ssl no
server/variant apache2
@ -60,6 +75,7 @@ memcached/autoinstall install
openproject/admin_email admin@example.net
openproject/default_language en
EOF
$STD sudo openproject configure
msg_ok "Configured OpenProject"

View File

@ -16,11 +16,11 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
redis-server \
nginx
nginx \
openssl
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_amd64.tgz"
create_self_signed_cert
msg_info "Setup OTS"
cat <<EOF >/opt/ots/.env
@ -31,6 +31,14 @@ STORAGE_TYPE=redis
EOF
msg_ok "Setup OTS"
msg_info "Generating Universal SSL Certificate"
mkdir -p /etc/ssl/ots
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/ots/key.pem \
-out /etc/ssl/ots/cert.pem \
-subj "/CN=ots"
msg_ok "Certificate Generated"
msg_info "Setting up nginx"
cat <<EOF >/etc/nginx/sites-available/ots.conf
server {
@ -44,8 +52,8 @@ server {
listen [::]:443 ssl;
server_name ots;
ssl_certificate /etc/ssl/ots/ots.crt;
ssl_certificate_key /etc/ssl/ots/ots.key;
ssl_certificate /etc/ssl/ots/cert.pem;
ssl_certificate_key /etc/ssl/ots/key.pem;
location / {
add_header X-Robots-Tag noindex;

View File

@ -22,12 +22,29 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql
PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db
msg_info "Set up PostgreSQL Database"
DB_NAME="outline"
DB_USER="outline"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$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 "Outline-Credentials"
echo "Outline Database User: $DB_USER"
echo "Outline Database Password: $DB_PASS"
echo "Outline Database Name: $DB_NAME"
} >>~/outline.creds
msg_ok "Set up PostgreSQL Database"
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
import_local_ip
msg_info "Configuring Outline (Patience)"
SECRET_KEY="$(openssl rand -hex 32)"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cd /opt/outline
cp .env.sample .env
export NODE_ENV=development

View File

@ -13,6 +13,10 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y ca-certificates
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"

View File

@ -16,17 +16,22 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
gcc \
ca-certificates \
musl-dev \
mupdf \
libc6-dev \
musl-tools
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
NODE_VERSION="22" setup_nodejs
setup_go
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
msg_info "Setup Paperless-GPT"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file"
mv paperless-gpt-"${RELEASE}" /opt/paperless-gpt
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
@ -35,19 +40,21 @@ go mod download
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
rm -f "$temp_file"
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Setup Paperless-GPT"
mkdir -p /opt/paperless-gpt-data
read -rp "${TAB3}Do you want to enter the Paperless local URL now? (y/n) " input_url
if [[ $input_url =~ ^[Yy]$ ]]; then
read -rp "${TAB3}Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
read -p "${TAB3}Do you want to enter the Paperless local URL now? (y/n) " input_url
if [[ "$input_url" =~ ^[Yy]$ ]]; then
read -p "${TAB3}Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
else
PAPERLESS_BASE_URL="http://your_paperless_ngx_url"
fi
read -rp "${TAB3}Do you want to enter the Paperless API token now? (y/n) " input_token
if [[ $input_token =~ ^[Yy]$ ]]; then
read -rp "${TAB3}Enter your Paperless API token: " PAPERLESS_API_TOKEN
read -p "${TAB3}Do you want to enter the Paperless API token now? (y/n) " input_token
if [[ "$input_token" =~ ^[Yy]$ ]]; then
read -p "${TAB3}Enter your Paperless API token: " PAPERLESS_API_TOKEN
else
PAPERLESS_API_TOKEN="your_paperless_api_token"
fi

View File

@ -15,20 +15,39 @@ update_os
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql
PG_DB_NAME="partdb" PG_DB_USER="partdb" setup_postgresql_db
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="xsl,pgsql" PHP_POST_MAX_SIZE="100M" PHP_UPLOAD_MAX_FILESIZE="100M" setup_php
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="xsl,pgsql" setup_php
setup_composer
msg_info "Setting up PHP"
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
sed -i "s@post_max_size = 8M@post_max_size = 100M@g" /etc/php/${PHPVER}/apache2/php.ini
sed -i "s@upload_max_filesize = 2M@upload_max_filesize = 100M@g" /etc/php/${PHPVER}/apache2/php.ini
msg_ok "Setting up PHP"
msg_info "Setting up PostgreSQL"
DB_NAME=partdb
DB_USER=partdb
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$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 TEMPLATE template0;"
{
echo "Part-DB Credentials"
echo "Part-DB Database User: $DB_USER"
echo "Part-DB Database Password: $DB_PASS"
echo "Part-DB Database Name: $DB_NAME"
} >>~/partdb.creds
msg_ok "Set up PostgreSQL"
msg_info "Installing Part-DB (Patience)"
cd /opt
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
cd /opt/partdb/
cp .env .env.local
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev -o --no-interaction
@ -45,7 +64,7 @@ ADMIN_PASS=$(grep -oP 'The initial password for the "admin" user is: \K\w+' ~/da
} >>~/partdb.creds
rm -rf ~/database-migration-output
rm -rf "/opt/v${RELEASE}.zip"
echo "${RELEASE}" >~/.partdb
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Part-DB"
msg_info "Creating Service"

View File

@ -21,18 +21,18 @@ $STD apt install -y \
msg_ok "Installed dependencies"
setup_mariadb
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" setup_mariadb_db
create_self_signed_cert
import_local_ip
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" MARIADB_DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)" setup_mariadb_db
setup_deb822_repo \
"passbolt" \
"https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x3D1A0346C8E1802F774AEF21DE8B853FC155581D" \
"https://download.passbolt.com/ce/debian" \
"buster" \
"stable"
create_self_signed_cert "passbolt"
msg_info "Setting up Passbolt (Patience)"
export DEBIAN_FRONTEND=noninteractive
IP_ADDR=$(hostname -I | awk '{print $1}')
echo passbolt-ce-server passbolt/mysql-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-username string $MARIADB_DB_USER | debconf-set-selections
echo passbolt-ce-server passbolt/mysql-passbolt-password password $MARIADB_DB_PASS | debconf-set-selections
@ -40,7 +40,7 @@ echo passbolt-ce-server passbolt/mysql-passbolt-password-repeat password $MARIAD
echo passbolt-ce-server passbolt/mysql-passbolt-dbname string $MARIADB_DB_NAME | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration boolean true | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-configuration-three-choices select manual | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-domain string $LOCAL_IP | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-domain string $IP_ADDR | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-file string /etc/ssl/passbolt/passbolt.crt | debconf-set-selections
echo passbolt-ce-server passbolt/nginx-certificate-key-file string /etc/ssl/passbolt/passbolt.key | debconf-set-selections
$STD apt install -y --no-install-recommends passbolt-ce-server

View File

@ -22,9 +22,24 @@ msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="patchmon_db" PG_DB_USER="patchmon_usr" setup_postgresql_db
msg_info "Setup PostgreSQL Database"
DB_NAME=patchmon_db
DB_USER=patchmon_usr
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$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 "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
{
echo "PatchMon Credentials"
echo "PatchMon Database Name: $DB_NAME"
echo "PatchMon Database User: $DB_USER"
echo "PatchMon Database Password: $DB_PASS"
} >>~/patchmon.creds
msg_ok "Setup PostgreSQL Database"
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
import_local_ip
msg_info "Configuring PatchMon"
cd /opt/patchmon
@ -35,10 +50,12 @@ $STD npm install --no-audit --no-fund --no-save --ignore-scripts
cd /opt/patchmon/frontend
$STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
$STD npm run build
JWT_SECRET="$(openssl rand -base64 64 | tr -d "=+/" | cut -c1-50)"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
cat <<EOF >/opt/patchmon/backend/.env
# Database Configuration
DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME"
DATABASE_URL="postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME"
PY_THRESHOLD=3M_DB_CONN_MAX_ATTEMPTS=30
PM_DB_CONN_WAIT_INTERVAL=2
@ -255,6 +272,7 @@ async function updateSettings() {
updateSettings();
EOF
cd /opt/patchmon/backend
$STD node update-settings.js
msg_ok "Settings updated successfully"

View File

@ -20,8 +20,24 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
setup_mariadb
MARIADB_DB_NAME="plantit" MARIADB_DB_USER="plantit_usr" setup_mariadb_db
JAVA_VERSION="21" setup_java
msg_info "Setting up MariaDB"
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
DB_NAME=plantit
DB_USER=plantit_usr
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Plant-it Credentials"
echo "Plant-it Database User: $DB_USER"
echo "Plant-it Database Password: $DB_PASS"
echo "Plant-it Database Name: $DB_NAME"
} >>~/plant-it.creds
msg_ok "Set up MariaDB"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "0.10.0" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "0.10.0" "/opt/plant-it/frontend" "client.tar.gz"
@ -30,10 +46,10 @@ mkdir -p /opt/plant-it-data
cat <<EOF >/opt/plant-it/backend/server.env
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=$MARIADB_DB_USER
MYSQL_PSW=$MARIADB_DB_PASS
MYSQL_DATABASE=$MARIADB_DB_NAME
MYSQL_ROOT_PASSWORD=$MARIADB_DB_PASS
MYSQL_USERNAME=$DB_USER
MYSQL_PSW=$DB_PASS
MYSQL_DATABASE=$DB_NAME
MYSQL_ROOT_PASSWORD=$DB_PASS
JWT_SECRET=$JWT_SECRET
JWT_EXP=1
@ -70,7 +86,7 @@ Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now plant-it
systemctl enable --now -q plant-it
cat <<EOF >/etc/nginx/nginx.conf
events {

View File

@ -13,8 +13,12 @@ setting_up_container
network_check
update_os
PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
if $STD mount | grep 'on / type zfs' >null && echo "ZFS"; then
msg_info "Enabling ZFS support."
@ -40,8 +44,8 @@ EOF
fi
msg_info "Installing Podman"
$STD apt install -y podman
systemctl enable -q --now podman.socket
$STD apt -y install podman
$STD systemctl enable --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman"
@ -93,7 +97,7 @@ $STD podman run -d \
podman generate systemd \
--new --name homeassistant \
>/etc/systemd/system/homeassistant.service
systemctl enable -q --now homeassistant
$STD systemctl enable --now homeassistant
msg_ok "Installed Home Assistant"
motd_ssh

View File

@ -13,8 +13,12 @@ setting_up_container
network_check
update_os
PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
if $STD mount | grep 'on / type zfs' >null && echo "ZFS"; then
msg_info "Enabling ZFS support."
@ -40,8 +44,8 @@ EOF
fi
msg_info "Installing Podman"
$STD apt install -y podman
systemctl enable -q --now podman.socket
$STD apt -y install podman
$STD systemctl enable --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman"

View File

@ -20,9 +20,16 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_MODULE="common,fpm" setup_php
create_self_signed_cert
fetch_and_deploy_gh_release "privatebin" "PrivateBin/PrivateBin" "tarball"
msg_info "Generating Universal SSL Certificate"
mkdir -p /etc/ssl/privatebin
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/privatebin/key.pem \
-out /etc/ssl/privatebin/cert.pem \
-subj "/CN=PrivateBin"
msg_ok "Certificate Generated"
msg_info "Configuring Environment"
mkdir -p /opt/privatebin/data
cp /opt/privatebin/cfg/conf.sample.php /opt/privatebin/cfg/conf.php
@ -48,8 +55,8 @@ server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/privatebin/privatebin.crt;
ssl_certificate_key /etc/ssl/privatebin/privatebin.key;
ssl_certificate /etc/ssl/privatebin/cert.pem;
ssl_certificate_key /etc/ssl/privatebin/key.pem;
root /opt/privatebin;
index index.php;

View File

@ -15,17 +15,31 @@ update_os
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="pdo,mysql,gettext,fileinfo" setup_php
setup_mariadb
MARIADB_DB_NAME="projectsend" MARIADB_DB_USER="projectsend" setup_mariadb_db
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
msg_info "Setting up MariaDB"
DB_NAME=projectsend
DB_USER=projectsend
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "projectsend-Credentials"
echo "projectsend Database User: $DB_USER"
echo "projectsend Database Password: $DB_PASS"
echo "projectsend Database Name: $DB_NAME"
} >>~/projectsend.creds
msg_ok "Set up MariaDB"
msg_info "Installing ProjectSend"
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend
chmod 644 /opt/projectsend/includes/sys.config.php
sed -i -e "s/\(define('DB_NAME', \).*/\1'$MARIADB_DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$MARIADB_DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$MARIADB_DB_PASS');/" \
sed -i -e "s/\(define('DB_NAME', \).*/\1'$DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$DB_PASS');/" \
/opt/projectsend/includes/sys.config.php
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
-e "s/^\(post_max_size = \).*/\1 256M/" \

View File

@ -17,7 +17,9 @@ fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-ex
msg_info "Configuring Prometheus Paperless NGX Exporter"
mkdir -p /etc/prometheus-paperless-ngx-exporter
echo "SECRET_AUTH_TOKEN" >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
SECRET_AUTH_TOKEN
EOF
msg_ok "Configured Prometheus Paperless NGX Exporter"
msg_info "Creating Service"

View File

@ -27,7 +27,7 @@ msg_ok "Configured Recyclarr"
msg_info "Setting up Daily Sync Cron"
cat <<EOF >/etc/cron.d/recyclarr
# Run recyclarr sync daily
@daily root /usr/local/bin/recyclarr sync >> /root/.config/recyclarr/sync.log 2>&1
@daily root recyclarr sync >> /root/.config/recyclarr/sync.log 2>&1
EOF
chmod 644 /etc/cron.d/recyclarr
msg_ok "Setup Daily Sync Cron"

View File

@ -14,17 +14,20 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y git
$STD apt install -y \
git \
pip \
python3 \
python3-dev \
python3-pip
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
msg_info "Installing Tautulli"
cd /opt/Tautulli
uv venv -q
uv pip install -q -r requirements.txt
uv pip install -q pyopenssl
cd /opt
$STD git clone https://github.com/Tautulli/Tautulli.git
$STD pip install -q -r /opt/Tautulli/requirements.txt
$STD pip install pyopenssl
msg_ok "Installed Tautulli"
msg_info "Creating Service"
@ -38,7 +41,7 @@ WorkingDirectory=/opt/Tautulli/
Restart=on-failure
RestartSec=5
Type=simple
ExecStart=/opt/Tautulli/.venv/bin/python3 /opt/Tautulli/Tautulli.py
ExecStart=/usr/bin/python3 /opt/Tautulli/Tautulli.py
KillSignal=SIGINT
TimeoutStopSec=20
SyslogIdentifier=tautulli

View File

@ -3743,9 +3743,12 @@ create_lxc_container() {
msg_info "Searching for template '$TEMPLATE_SEARCH'"
# Build regex patterns outside awk/grep for clarity
SEARCH_PATTERN="^${TEMPLATE_SEARCH}"
mapfile -t LOCAL_TEMPLATES < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v search="${TEMPLATE_SEARCH}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
awk -v search="${SEARCH_PATTERN}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
sed 's|.*/||' | sort -t - -k 2 -V
)
@ -3754,7 +3757,7 @@ create_lxc_container() {
msg_ok "Template search completed"
set +u
mapfile -t ONLINE_TEMPLATES < <(pveam available -section system 2>/dev/null | grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' | awk '{print $2}' | grep -E "^${TEMPLATE_SEARCH}.*${TEMPLATE_PATTERN}" | sort -t - -k 2 -V 2>/dev/null || true)
mapfile -t ONLINE_TEMPLATES < <(pveam available -section system 2>/dev/null | grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' | awk '{print $2}' | grep -E "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" | sort -t - -k 2 -V 2>/dev/null || true)
set -u
ONLINE_TEMPLATE=""
@ -3803,12 +3806,13 @@ create_lxc_container() {
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
PCT_OSVERSION="${AVAILABLE_VERSIONS[$((choice - 1))]}"
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION}"
SEARCH_PATTERN="^${TEMPLATE_SEARCH}-"
mapfile -t ONLINE_TEMPLATES < <(
pveam available -section system 2>/dev/null |
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
awk '{print $2}' |
grep -E "^${TEMPLATE_SEARCH}-.*${TEMPLATE_PATTERN}" |
awk -F'\t' '{print $1}' |
grep -E "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" |
sort -t - -k 2 -V 2>/dev/null || true
)
@ -3869,17 +3873,18 @@ create_lxc_container() {
# Retry template search with new version
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
SEARCH_PATTERN="^${TEMPLATE_SEARCH}-"
mapfile -t LOCAL_TEMPLATES < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v search="${TEMPLATE_SEARCH}-" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
awk -v search="${SEARCH_PATTERN}" -v pattern="${TEMPLATE_PATTERN}" '$1 ~ search && $1 ~ pattern {print $1}' |
sed 's|.*/||' | sort -t - -k 2 -V
)
mapfile -t ONLINE_TEMPLATES < <(
pveam available -section system 2>/dev/null |
grep -E '\.(tar\.zst|tar\.xz|tar\.gz)$' |
awk '{print $2}' |
grep -E "^${TEMPLATE_SEARCH}-.*${TEMPLATE_PATTERN}" |
awk -F'\t' '{print $1}' |
grep -E "${SEARCH_PATTERN}.*${TEMPLATE_PATTERN}" |
sort -t - -k 2 -V 2>/dev/null || true
)
ONLINE_TEMPLATE=""

View File

@ -12,8 +12,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
load_functions
load_functions
# ==============================================================================
# CONFIGURATION
# ==============================================================================
@ -22,6 +22,9 @@ APP="pihole-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/pihole-exporter"
CONFIG_PATH="/opt/pihole-exporter.env"
header_info
ensure_usr_local_bin_persist
get_current_ip &>/dev/null
# ==============================================================================
# OS DETECTION
@ -183,7 +186,7 @@ UPDATEEOF
echo ""
msg_ok "Pihole-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:9617/metrics${CL}"
msg_ok "Metrics: ${BL}http://${CURRENT_IP}:9617/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
@ -192,7 +195,7 @@ UPDATEEOF
# ==============================================================================
header_info
ensure_usr_local_bin_persist
import_local_ip
get_current_ip &>/dev/null
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then

View File

@ -12,8 +12,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
load_functions
load_functions
# ==============================================================================
# CONFIGURATION
# ==============================================================================
@ -22,6 +22,8 @@ APP="qbittorrent-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/qbittorrent-exporter"
CONFIG_PATH="/opt/qbittorrent-exporter.env"
header_info
ensure_usr_local_bin_persist
# ==============================================================================
# OS DETECTION