mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-23 07:26:24 +01:00
Compare commits
116 Commits
2025-12-16
...
docs/updat
| Author | SHA1 | Date | |
|---|---|---|---|
| 53d505ce89 | |||
| d9425a1169 | |||
| a21066ac74 | |||
| c0231a08c2 | |||
| cfe518adce | |||
| 5ca27931a2 | |||
| 869a9f4ac3 | |||
| 4ddf86b9cd | |||
| 4e57145621 | |||
| ef2a511217 | |||
| 18bb7ae6c7 | |||
| 28d34e9169 | |||
| ddf8843b7b | |||
| 8212a44e5f | |||
| 134e7c1ae1 | |||
| 72f9ca70dc | |||
| 6dab7728df | |||
| abfe97a9c9 | |||
| 174721bc14 | |||
| 8c1f42f6c1 | |||
| 245578a2a3 | |||
| 4c9baeb755 | |||
| b9640c4211 | |||
| b7ef0f8f01 | |||
| 8f3fa0c88a | |||
| 867f3347c7 | |||
| 379515fcbc | |||
| 76dde80497 | |||
| 30625b38df | |||
| 741e4dbe6e | |||
| d7f9fe27c5 | |||
| d5531ad445 | |||
| 3cdf4ed664 | |||
| db2301d056 | |||
| 25afd9224c | |||
| 468f6bddf9 | |||
| 021297b2ce | |||
| 0c76ed793b | |||
| 47e65c71f6 | |||
| 83678f83c8 | |||
| 7dd547bde2 | |||
| ad18ca0ff7 | |||
| cb2d4c0051 | |||
| b9fa152253 | |||
| 2202d34eed | |||
| 2f8fbf1e3f | |||
| e027446b2c | |||
| 8a67635651 | |||
| 94744dadcf | |||
| 0a36329235 | |||
| cf8082c1f5 | |||
| c225692979 | |||
| 0863e2b991 | |||
| 621d4b4d5c | |||
| 00137d4441 | |||
| 159b5ee22e | |||
| 5beb983b7f | |||
| 13c29e5c51 | |||
| 69d17046aa | |||
| 04f4727de3 | |||
| c1445f30bf | |||
| 891caa7c94 | |||
| 17ff4078bb | |||
| 9022ab0e5f | |||
| e646522095 | |||
| 1a567facfa | |||
| 2c2a062b6a | |||
| 8b767ec68a | |||
| f334fda317 | |||
| 510278960b | |||
| 0a276749d7 | |||
| c1ef6d7c51 | |||
| e0e7aa94e8 | |||
| b829dcc849 | |||
| ab4a4709a1 | |||
| 503fc0e6e2 | |||
| bd3a5c98cf | |||
| 0e8d053ba0 | |||
| f0f0a63f6c | |||
| 7d865172ae | |||
| 21e0a8fced | |||
| fdb722fae3 | |||
| d86815d01d | |||
| 84d9a2957b | |||
| 5e3eca2832 | |||
| bc479d7ffe | |||
| 610ec3d157 | |||
| 6d26dc2043 | |||
| 6bdeddee37 | |||
| 25baf6c809 | |||
| f42a7becf5 | |||
| acdb3b5908 | |||
| cb13f5de3c | |||
| c4afe3349b | |||
| dcc4b316a9 | |||
| 7a7c9f9a22 | |||
| c1c223ea45 | |||
| b3629b47da | |||
| 82cdcf7bfe | |||
| a823241d96 | |||
| e64c07e44c | |||
| 21f7914294 | |||
| 30056854c9 | |||
| 15a061f976 | |||
| b279888e96 | |||
| c9dd003445 | |||
| 39821677f0 | |||
| 4b3ebfc8ec | |||
| 4f2c707605 | |||
| 360eff6951 | |||
| 3b80730873 | |||
| f9baa783b0 | |||
| 3a9d03fdb7 | |||
| 8e3da31471 | |||
| d058dc515e | |||
| 03a8071ef4 |
141
CHANGELOG.md
141
CHANGELOG.md
@ -10,8 +10,149 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-12-22
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Kometa: Fix update procedure [@tremor021](https://github.com/tremor021) ([#10217](https://github.com/community-scripts/ProxmoxVE/pull/10217))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Invoice ninja [@DragoQC](https://github.com/DragoQC) ([#10223](https://github.com/community-scripts/ProxmoxVE/pull/10223))
|
||||||
|
|
||||||
|
## 2025-12-21
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Typo fix in Heimdall install script [@Turcid-uwu](https://github.com/Turcid-uwu) ([#10187](https://github.com/community-scripts/ProxmoxVE/pull/10187))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- recyclarr: add default daily cron job for recyclarr sync [@MickLesk](https://github.com/MickLesk) ([#10208](https://github.com/community-scripts/ProxmoxVE/pull/10208))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Optimize Jotty installation with standalone mode [@MickLesk](https://github.com/MickLesk) ([#10207](https://github.com/community-scripts/ProxmoxVE/pull/10207))
|
||||||
|
- unifi: remove mongodb 4.4 support | bump to java 21 [@MickLesk](https://github.com/MickLesk) ([#10206](https://github.com/community-scripts/ProxmoxVE/pull/10206))
|
||||||
|
- Refactor: Backrest [@tremor021](https://github.com/tremor021) ([#10193](https://github.com/community-scripts/ProxmoxVE/pull/10193))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Fix AMD GPU firmware installation by adding non-free repositories [@MickLesk](https://github.com/MickLesk) ([#10205](https://github.com/community-scripts/ProxmoxVE/pull/10205))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- pihole-exporter ([#10091](https://github.com/community-scripts/ProxmoxVE/pull/10091))
|
||||||
|
|
||||||
|
## 2025-12-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Update Technitium DNS and Restart Service [@DrEVILish](https://github.com/DrEVILish) ([#10181](https://github.com/community-scripts/ProxmoxVE/pull/10181))
|
||||||
|
- bump: ersatztv: deb13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10174](https://github.com/community-scripts/ProxmoxVE/pull/10174))
|
||||||
|
|
||||||
|
## 2025-12-19
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Update Reitti to Java 25 for 3.0.0 compatibility [@Copilot](https://github.com/Copilot) ([#10164](https://github.com/community-scripts/ProxmoxVE/pull/10164))
|
||||||
|
- Bump Bar-Assistant to php 8.4 [@MickLesk](https://github.com/MickLesk) ([#10138](https://github.com/community-scripts/ProxmoxVE/pull/10138))
|
||||||
|
- Zabbix: Add version-specific SQL script path for 7.0 LTS [@MickLesk](https://github.com/MickLesk) ([#10142](https://github.com/community-scripts/ProxmoxVE/pull/10142))
|
||||||
|
- InfluxDB: Fix update function [@Liganic](https://github.com/Liganic) ([#10151](https://github.com/community-scripts/ProxmoxVE/pull/10151))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Bump Immich to v2.4.1 [@vhsdream](https://github.com/vhsdream) ([#10154](https://github.com/community-scripts/ProxmoxVE/pull/10154))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Cosmos: + Upgrade to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#10147](https://github.com/community-scripts/ProxmoxVE/pull/10147))
|
||||||
|
- Refactor: Proxmox-Mail-Gateway [@tremor021](https://github.com/tremor021) ([#10070](https://github.com/community-scripts/ProxmoxVE/pull/10070))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: Auto-cleanup after all update_script executions [@MickLesk](https://github.com/MickLesk) ([#10141](https://github.com/community-scripts/ProxmoxVE/pull/10141))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- fix: removed verbose option to avoid unnecessary output [@wolle604](https://github.com/wolle604) ([#10144](https://github.com/community-scripts/ProxmoxVE/pull/10144))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Update paymenter.json(#10133) [@DragoQC](https://github.com/DragoQC) ([#10134](https://github.com/community-scripts/ProxmoxVE/pull/10134))
|
||||||
|
|
||||||
|
## 2025-12-18
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [HOTFIX] Fix Scanopy release check [@vhsdream](https://github.com/vhsdream) ([#10097](https://github.com/community-scripts/ProxmoxVE/pull/10097))
|
||||||
|
- Fix cleanup issues in npm cache and rustup toolchain [@MickLesk](https://github.com/MickLesk) ([#10107](https://github.com/community-scripts/ProxmoxVE/pull/10107))
|
||||||
|
- Fix Zabbix 7.0 repository URL structure [@MickLesk](https://github.com/MickLesk) ([#10106](https://github.com/community-scripts/ProxmoxVE/pull/10106))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- bump pihole to debian 13 [@mschabhuettl](https://github.com/mschabhuettl) ([#10118](https://github.com/community-scripts/ProxmoxVE/pull/10118))
|
||||||
|
- Immich: v2.4.0 [@vhsdream](https://github.com/vhsdream) ([#10095](https://github.com/community-scripts/ProxmoxVE/pull/10095))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- tools.func: hardening/Improve error handling and cleanup in shell functions [@MickLesk](https://github.com/MickLesk) ([#10116](https://github.com/community-scripts/ProxmoxVE/pull/10116))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- qbittorrent-exporter ([#10090](https://github.com/community-scripts/ProxmoxVE/pull/10090))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Improved error handling when a command does not exist [@wolle604](https://github.com/wolle604) ([#10089](https://github.com/community-scripts/ProxmoxVE/pull/10089))
|
||||||
|
|
||||||
## 2025-12-17
|
## 2025-12-17
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Tracktor: updated environment variables for latest release [@javedh-dev](https://github.com/javedh-dev) ([#10067](https://github.com/community-scripts/ProxmoxVE/pull/10067))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Semaphore: Fix release binary package fetching [@tremor021](https://github.com/tremor021) ([#10055](https://github.com/community-scripts/ProxmoxVE/pull/10055))
|
||||||
|
- update github repo for endurain [@johanngrobe](https://github.com/johanngrobe) ([#10074](https://github.com/community-scripts/ProxmoxVE/pull/10074))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- use setup_hwaccel for robust hardware acceleration [@MickLesk](https://github.com/MickLesk) ([#10054](https://github.com/community-scripts/ProxmoxVE/pull/10054))
|
||||||
|
- add hardware acceleration support for 17 additional apps [@MickLesk](https://github.com/MickLesk) ([#10061](https://github.com/community-scripts/ProxmoxVE/pull/10061))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Telegraf: Small refactor [@tremor021](https://github.com/tremor021) ([#10056](https://github.com/community-scripts/ProxmoxVE/pull/10056))
|
||||||
|
- Refactor: Salt [@tremor021](https://github.com/tremor021) ([#10057](https://github.com/community-scripts/ProxmoxVE/pull/10057))
|
||||||
|
- Refactor: Resilio Sync [@tremor021](https://github.com/tremor021) ([#10058](https://github.com/community-scripts/ProxmoxVE/pull/10058))
|
||||||
|
- Refactor: Reitti [@tremor021](https://github.com/tremor021) ([#10059](https://github.com/community-scripts/ProxmoxVE/pull/10059))
|
||||||
|
- Refactor: Redis [@tremor021](https://github.com/tremor021) ([#10060](https://github.com/community-scripts/ProxmoxVE/pull/10060))
|
||||||
|
- Refactor: Reactive-Resume [@tremor021](https://github.com/tremor021) ([#10062](https://github.com/community-scripts/ProxmoxVE/pull/10062))
|
||||||
|
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#10064](https://github.com/community-scripts/ProxmoxVE/pull/10064))
|
||||||
|
- Refactor: RabbitMQ [@tremor021](https://github.com/tremor021) ([#10065](https://github.com/community-scripts/ProxmoxVE/pull/10065))
|
||||||
|
- Qdrant: Code cleanup [@tremor021](https://github.com/tremor021) ([#10066](https://github.com/community-scripts/ProxmoxVE/pull/10066))
|
||||||
|
- Refactor: Pterodactyl Wings [@tremor021](https://github.com/tremor021) ([#10069](https://github.com/community-scripts/ProxmoxVE/pull/10069))
|
||||||
|
|
||||||
## 2025-12-16
|
## 2025-12-16
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -27,28 +27,18 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/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
|
if check_for_gh_release "backrest" "garethgeorge/backrest"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop backrest
|
systemctl stop backrest
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
fetch_and_deploy_gh_release "backrest" "garethgeorge/backrest" "prebuild" "latest" "/opt/backrest/bin" "backrest_Linux_x86_64.tar.gz"
|
||||||
temp_file=$(mktemp)
|
|
||||||
rm -f /opt/backrest/bin/backrest
|
|
||||||
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file"
|
|
||||||
tar xzf $temp_file -C /opt/backrest/bin
|
|
||||||
chmod +x /opt/backrest/bin/backrest
|
|
||||||
rm -f "$temp_file"
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start backrest
|
systemctl start backrest
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,8 @@ function update_script() {
|
|||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
msg_ok "Stopped nginx"
|
msg_ok "Stopped nginx"
|
||||||
|
|
||||||
|
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||||
|
|
||||||
msg_info "Backing up Bar Assistant"
|
msg_info "Backing up Bar Assistant"
|
||||||
mv /opt/bar-assistant /opt/bar-assistant-backup
|
mv /opt/bar-assistant /opt/bar-assistant-backup
|
||||||
msg_ok "Backed up Bar Assistant"
|
msg_ok "Backed up Bar Assistant"
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: jdacode
|
# Author: jdacode
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-25}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-20}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -5,14 +5,15 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://https://cosmos-cloud.io/
|
# Source: https://https://cosmos-cloud.io/
|
||||||
|
|
||||||
APP="cosmos"
|
APP="Cosmos"
|
||||||
var_tags="${var_tags:-os,docker}"
|
var_tags="${var_tags:-cloud;docker}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_fuse="${var_fuse:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@ -88,8 +89,8 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
|
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
|
||||||
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
||||||
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >> /opt/dispatcharr/.env
|
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >>/opt/dispatcharr/.env
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd /opt/dispatcharr
|
cd /opt/dispatcharr
|
||||||
|
|||||||
@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "endurain" "joaovitoriasilva/endurain"; then
|
if check_for_gh_release "endurain" "endurain-project/endurain"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop endurain
|
systemctl stop endurain
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
@ -38,7 +38,7 @@ function update_script() {
|
|||||||
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
||||||
msg_ok "Created Backup"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "endurain" "joaovitoriasilva/endurain" "tarball" "latest" "/opt/endurain"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
msg_info "Preparing Update"
|
msg_info "Preparing Update"
|
||||||
cd /opt/endurain
|
cd /opt/endurain
|
||||||
|
|||||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-5}"
|
var_disk="${var_disk:-5}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
var_gpu="${var_gpu:-yes}"
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
|
______
|
||||||
_________ _________ ___ ____ _____
|
/ ____/___ _________ ___ ____ _____
|
||||||
/ ___/ __ \/ ___/ __ `__ \/ __ \/ ___/
|
/ / / __ \/ ___/ __ `__ \/ __ \/ ___/
|
||||||
/ /__/ /_/ (__ ) / / / / / /_/ (__ )
|
/ /___/ /_/ (__ ) / / / / / /_/ (__ )
|
||||||
\___/\____/____/_/ /_/ /_/\____/____/
|
\____/\____/____/_/ /_/ /_/\____/____/
|
||||||
|
|
||||||
|
|||||||
17
ct/homarr.sh
17
ct/homarr.sh
@ -35,22 +35,11 @@ function update_script() {
|
|||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
||||||
DEBIAN_VERSION=$(cat /etc/debian_version 2>/dev/null | cut -d'.' -f1)
|
|
||||||
if [[ -n "$DEBIAN_VERSION" ]] && [[ "$DEBIAN_VERSION" -lt 13 ]]; then
|
|
||||||
msg_warn "⚠️ COMPATIBILITY WARNING ⚠️"
|
|
||||||
msg_warn "You are running Debian ${DEBIAN_VERSION}. Homarr's requires Debian 13"
|
|
||||||
msg_warn ""
|
|
||||||
msg_warn "Please Upgrade to Debian 13:"
|
|
||||||
msg_warn "See: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
|
||||||
msg_warn ""
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Fixing old structure"
|
msg_info "Fixing old structure"
|
||||||
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
systemctl disable -q --now nginx
|
||||||
$STD apt install -y musl-dev
|
|
||||||
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
|
||||||
cp /opt/homarr/.env /opt/homarr.env
|
cp /opt/homarr/.env /opt/homarr.env
|
||||||
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
||||||
|
sed -i '/^\[Unit\]/a Requires=redis-server.service\nAfter=redis-server.service' /etc/systemd/system/homarr.service
|
||||||
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
||||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
||||||
chown -R redis:redis /appdata/redis
|
chown -R redis:redis /appdata/redis
|
||||||
@ -72,7 +61,7 @@ EOF
|
|||||||
|
|
||||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
setup_nodejs
|
setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Updating Homarr"
|
msg_info "Updating Homarr"
|
||||||
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-2}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
17
ct/immich.sh
17
ct/immich.sh
@ -74,23 +74,28 @@ EOF
|
|||||||
STAGING_DIR=/opt/staging
|
STAGING_DIR=/opt/staging
|
||||||
BASE_DIR=${STAGING_DIR}/base-images
|
BASE_DIR=${STAGING_DIR}/base-images
|
||||||
SOURCE_DIR=${STAGING_DIR}/image-source
|
SOURCE_DIR=${STAGING_DIR}/image-source
|
||||||
cd /root
|
cd /tmp
|
||||||
if [[ -f ~/.intel_version ]]; then
|
if [[ -f ~/.intel_version ]]; then
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}')
|
readarray -t INTEL_URLS < <(
|
||||||
INTEL_RELEASE="$(grep "intel-opencl-icd" ./Dockerfile | awk -F '_' '{print $2}')"
|
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
|
||||||
|
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
||||||
|
)
|
||||||
|
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
|
||||||
if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then
|
if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then
|
||||||
msg_info "Updating Intel iGPU dependencies"
|
msg_info "Updating Intel iGPU dependencies"
|
||||||
for url in "${INTEL_URLS[@]}"; do
|
for url in "${INTEL_URLS[@]}"; do
|
||||||
curl -fsSLO "$url"
|
curl -fsSLO "$url"
|
||||||
done
|
done
|
||||||
$STD apt-mark unhold libigdgmm12
|
$STD apt-mark unhold libigdgmm12
|
||||||
|
$STD apt install -y ./libigdgmm12*.deb
|
||||||
|
rm ./libigdgmm12*.deb
|
||||||
$STD apt install -y ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
rm ./*.deb
|
rm ./*.deb
|
||||||
$STD apt-mark hold libigdgmm12
|
$STD apt-mark hold libigdgmm12
|
||||||
msg_ok "Intel iGPU dependencies updated"
|
msg_ok "Intel iGPU dependencies updated"
|
||||||
fi
|
fi
|
||||||
rm ~/Dockerfile
|
rm ./Dockerfile
|
||||||
fi
|
fi
|
||||||
if [[ -f ~/.immich_library_revisions ]]; then
|
if [[ -f ~/.immich_library_revisions ]]; then
|
||||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||||
@ -103,7 +108,7 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="2.3.1"
|
RELEASE="2.4.1"
|
||||||
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop immich-web
|
systemctl stop immich-web
|
||||||
|
|||||||
@ -23,7 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/influxdata.list ]]; then
|
if [[ ! -f /usr/bin/influxd ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
29
ct/jotty.sh
29
ct/jotty.sh
@ -48,6 +48,17 @@ function update_script() {
|
|||||||
$STD yarn --frozen-lockfile
|
$STD yarn --frozen-lockfile
|
||||||
$STD yarn next telemetry disable
|
$STD yarn next telemetry disable
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
|
|
||||||
|
[ -d "public" ] && cp -r public .next/standalone/
|
||||||
|
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||||
|
mkdir -p .next/standalone/.next
|
||||||
|
cp -r .next/static .next/standalone/.next/
|
||||||
|
|
||||||
|
mv .next/standalone /tmp/jotty_standalone
|
||||||
|
rm -rf * .next .git .gitignore .yarn
|
||||||
|
mv /tmp/jotty_standalone/* .
|
||||||
|
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||||
|
rm -rf /tmp/jotty_standalone
|
||||||
msg_ok "Updated jotty"
|
msg_ok "Updated jotty"
|
||||||
|
|
||||||
msg_info "Restoring configuration & data"
|
msg_info "Restoring configuration & data"
|
||||||
@ -55,6 +66,24 @@ function update_script() {
|
|||||||
$STD tar -xf /opt/data_config.tar
|
$STD tar -xf /opt/data_config.tar
|
||||||
msg_ok "Restored configuration & data"
|
msg_ok "Restored configuration & data"
|
||||||
|
|
||||||
|
msg_info "Updating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/jotty.service
|
||||||
|
[Unit]
|
||||||
|
Description=jotty server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/jotty
|
||||||
|
EnvironmentFile=/opt/jotty/.env
|
||||||
|
ExecStart=/usr/bin/node server.js
|
||||||
|
Restart=on-abnormal
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
msg_ok "Updated Service"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start jotty
|
systemctl start jotty
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@ -41,6 +41,7 @@ function update_script() {
|
|||||||
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
||||||
|
|
||||||
msg_info "Updating Kometa"
|
msg_info "Updating Kometa"
|
||||||
|
cd /opt/kometa
|
||||||
$STD uv pip install -r requirements.txt --system
|
$STD uv pip install -r requirements.txt --system
|
||||||
mkdir -p config/assets
|
mkdir -p config/assets
|
||||||
cp /opt/config.yml config/config.yml
|
cp /opt/config.yml config/config.yml
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-20}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -52,7 +52,7 @@ function update_script() {
|
|||||||
$STD yarn web:build
|
$STD yarn web:build
|
||||||
$STD yarn prisma:deploy
|
$STD yarn prisma:deploy
|
||||||
[ -d /opt/data.bak ] && mv /opt/data.bak /opt/linkwarden/data
|
[ -d /opt/data.bak ] && mv /opt/data.bak /opt/linkwarden/data
|
||||||
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache ~/.rustup
|
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache
|
||||||
rm -rf /root/.cache/yarn
|
rm -rf /root/.cache/yarn
|
||||||
rm -rf /opt/linkwarden/.next/cache
|
rm -rf /opt/linkwarden/.next/cache
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@ -20,17 +21,17 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/systemd/system/motioneye.service ]]; then
|
if [[ ! -f /etc/systemd/system/motioneye.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD pip install motioneye --upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
$STD pip install motioneye --upgrade
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@ -14,6 +14,7 @@ var_disk="${var_disk:-5}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-2}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@ -27,10 +27,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
|
msg_info "Updating Proxmox-Mail-Gateway"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt upgrade -y
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated Proxmox-Mail-Gateway"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,29 +23,23 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /usr/local/bin/wings ]]; then
|
if [[ ! -x /usr/local/bin/wings ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/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
|
if check_for_gh_release "wings" "pterodactyl/wings"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wings
|
systemctl stop wings
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
rm /usr/local/bin/wings
|
rm /usr/local/bin/wings
|
||||||
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
|
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
||||||
chmod u+x /usr/local/bin/wings
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start wings
|
systemctl start wings
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,16 +29,11 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
|
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
|
||||||
rm -f /etc/apt/sources.list.d/rabbitmq.list
|
rm -f /etc/apt/sources.list.d/rabbitmq.list
|
||||||
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
setup_deb822_repo \
|
||||||
## Modern Erlang/OTP releases
|
"rabbitmq" \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
||||||
|
"trixie"
|
||||||
## Provides modern RabbitMQ releases
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
|
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
|
|||||||
@ -41,7 +41,7 @@ function update_script() {
|
|||||||
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||||
$STD apt remove --purge -y dotnet-sdk-8.0
|
$STD apt remove --purge -y dotnet-sdk-8.0
|
||||||
$STD apt install -y dotnet-sdk-9.0
|
$STD apt install -y aspnetcore-runtime-9.0
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/rdtc-backup
|
rm -rf /opt/rdtc-backup
|
||||||
|
|
||||||
|
|||||||
@ -33,12 +33,11 @@ function update_script() {
|
|||||||
systemctl stop Reactive-Resume
|
systemctl stop Reactive-Resume
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
cp /opt/"$APP"/.env /opt/rxresume.env
|
cp /opt/Reactive-Resume/.env /opt/rxresume.env
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating Reactive-Resume"
|
||||||
cd /opt/"$APP"
|
cd /opt/Reactive-Resume
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export CI="true"
|
export CI="true"
|
||||||
@ -46,8 +45,8 @@ function update_script() {
|
|||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm run prisma:generate
|
$STD pnpm run prisma:generate
|
||||||
mv /opt/rxresume.env /opt/"$APP"/.env
|
mv /opt/rxresume.env /opt/Reactive-Resume/.env
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Updating Minio"
|
msg_info "Updating Minio"
|
||||||
systemctl stop minio
|
systemctl stop minio
|
||||||
|
|||||||
@ -27,9 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating $APP LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt upgrade -y
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated $APP LXC"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@ -32,6 +32,8 @@ function update_script() {
|
|||||||
systemctl stop reitti
|
systemctl stop reitti
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
JAVA_VERSION="25" setup_java
|
||||||
|
|
||||||
rm -f /opt/reitti/reitti.jar
|
rm -f /opt/reitti/reitti.jar
|
||||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
|
||||||
mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
|
mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
|
||||||
|
|||||||
@ -20,18 +20,18 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var/lib/resilio-sync ]]; then
|
if [[ ! -d /var/lib/resilio-sync ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating Resilio Sync"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@ -29,16 +29,14 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
RELEASE=$(get_latest_github_release "saltstack/salt")
|
||||||
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
|
if check_for_gh_release "salt" "saltstack/salt"; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating Salt"
|
||||||
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
|
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
echo "${RELEASE}" >/~.salt
|
echo "${RELEASE}" >/~.salt
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "${APP} is already up to date (${RELEASE})"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "scanopy" "scanopy-io/scanopy"; then
|
if check_for_gh_release "scanopy" "scanopy/scanopy"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop scanopy-daemon scanopy-server
|
systemctl stop scanopy-daemon scanopy-server
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|||||||
@ -33,7 +33,7 @@ function update_script() {
|
|||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-ubuntu}"
|
var_os="${var_os:-ubuntu}"
|
||||||
var_version="${var_version:-24.04}"
|
var_version="${var_version:-24.04}"
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -47,6 +47,8 @@ function update_script() {
|
|||||||
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
|
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/
|
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
|
||||||
rm -f /opt/DnsServerPortable.tar.gz
|
rm -f /opt/DnsServerPortable.tar.gz
|
||||||
|
echo "${RELEASE}" >~/.technitium
|
||||||
|
systemctl restart technitium
|
||||||
msg_ok "Updated Technitium DNS"
|
msg_ok "Updated Technitium DNS"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
else
|
||||||
|
|||||||
@ -34,7 +34,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Telegraf"
|
msg_info "Updating Telegraf"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade telegraf -y
|
$STD apt upgrade -y telegraf
|
||||||
msg_ok "Updated Telegraf"
|
msg_ok "Updated Telegraf"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -34,38 +34,39 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Correcting Services"
|
msg_info "Correcting Services"
|
||||||
if [ -f /opt/tracktor/app/backend/.env ]; then
|
|
||||||
mv /opt/tracktor/app/backend/.env /opt/tracktor.env
|
|
||||||
echo 'AUTH_PIN=123456' >>/opt/tracktor.env
|
|
||||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
if [ ! -d "/opt/tracktor-data/uploads" ]; then
|
if [ ! -d "/opt/tracktor-data/uploads" ]; then
|
||||||
mkdir -p /opt/tracktor-data/{uploads,logs}
|
mkdir -p /opt/tracktor-data/{uploads,logs}
|
||||||
EXISTING_AUTH_PIN=$(grep '^AUTH_PIN=' /opt/tracktor.env 2>/dev/null | cut -d'=' -f2)
|
fi
|
||||||
AUTH_PIN=${EXISTING_AUTH_PIN:-123456}
|
if ! grep -qxF 'BODY_SIZE_LIMIT=Infinity' /opt/tracktor.env; then
|
||||||
cat <<EOF >/opt/tracktor.env
|
rm /opt/tracktor.env
|
||||||
|
cat <<EOF >/opt/tracktor.env
|
||||||
|
cat <<EOF >/opt/tracktor.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
# Set this to the path of the database file. Default - ./tracktor.db
|
||||||
DB_PATH=/opt/tracktor-data/tracktor.db
|
DB_PATH=/opt/tracktor-data/tracktor.db
|
||||||
|
# Set this to the path of the uploads directory. Default - ./uploads
|
||||||
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
UPLOADS_DIR="/opt/tracktor-data/uploads"
|
||||||
|
# Set this to the path of the logs directory. Default - ./logs
|
||||||
LOG_DIR="/opt/tracktor-data/logs"
|
LOG_DIR="/opt/tracktor-data/logs"
|
||||||
# If server host is not set by default it will run on all interfaces - 0.0.0.0
|
# Hostname to bind the server to. Default - 0.0.0.0
|
||||||
# SERVER_HOST=""
|
#HOST="0.0.0.0"
|
||||||
SERVER_PORT=3000
|
# Port to bind the server to. Default - 3000
|
||||||
# Set this if you want to secure your endpoints otherwise default will be "*"
|
#PORT=3000
|
||||||
CORS_ORIGINS="*"
|
# Set this to remove upload size limitations. Default - 512 Kb
|
||||||
# Set this if you are using backend and frontend separately.
|
BODY_SIZE_LIMIT=Infinity
|
||||||
# PUBLIC_API_BASE_URL=""
|
# Enable request logging. Default - true
|
||||||
LOG_REQUESTS=true
|
#LOG_REQUESTS=true
|
||||||
LOG_LEVEL="info"
|
# Set the logging level. Options - error, warn, info, verbose, debug, silly. Default - info
|
||||||
AUTH_PIN=${AUTH_PIN}
|
#LOG_LEVEL="info"
|
||||||
# PUBLIC_DEMO_MODE=false
|
# Enable demo mode. Default - false
|
||||||
# FORCE_DATA_SEED=false
|
#TRACKTOR_DEMO_MODE=false
|
||||||
|
# Force reseeding of data on every startup. Default - false
|
||||||
|
#FORCE_DATA_SEED=false
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
msg_ok "Corrected Services"
|
msg_ok "Corrected Services"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
||||||
|
|
||||||
msg_info "Updating tracktor"
|
msg_info "Updating tracktor"
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var_disk="${var_disk:-8}"
|
|||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_gpu="${var_gpu:-yes}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
|
|||||||
@ -28,6 +28,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
$STD apt update --allow-releaseinfo-change
|
$STD apt update --allow-releaseinfo-change
|
||||||
$STD apt install -y unifi
|
$STD apt install -y unifi
|
||||||
|
|||||||
16
ct/zabbix.sh
16
ct/zabbix.sh
@ -67,10 +67,18 @@ function update_script() {
|
|||||||
|
|
||||||
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
||||||
cd /tmp
|
cd /tmp
|
||||||
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb"
|
|
||||||
curl -fsSL "$ZABBIX_DEB_URL" -o /tmp/zabbix-release_latest+debian13_all.deb
|
if [[ "$ZABBIX_VERSION" == "7.0" ]]; then
|
||||||
$STD dpkg -i zabbix-release_latest+debian13_all.deb
|
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/debian/pool/main/z/zabbix-release/zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
|
||||||
rm -rf /tmp/zabbix-release_latest+debian13_all.deb
|
ZABBIX_DEB_FILE="zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
|
||||||
|
else
|
||||||
|
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb"
|
||||||
|
ZABBIX_DEB_FILE="zabbix-release_latest+debian13_all.deb"
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl -fsSL "$ZABBIX_DEB_URL" -o /tmp/"$ZABBIX_DEB_FILE"
|
||||||
|
$STD dpkg -i /tmp/"$ZABBIX_DEB_FILE"
|
||||||
|
rm -rf /tmp/zabbix-release_*.deb
|
||||||
$STD apt update
|
$STD apt update
|
||||||
|
|
||||||
$STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
|
$STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
|
||||||
|
|||||||
690
docs/contribution/HELPER_FUNCTIONS.md
Normal file
690
docs/contribution/HELPER_FUNCTIONS.md
Normal file
@ -0,0 +1,690 @@
|
|||||||
|
# 🛠️ Helper Functions Reference
|
||||||
|
|
||||||
|
**Quick reference for all helper functions available in `tools.func`**
|
||||||
|
|
||||||
|
> These functions are automatically available in install scripts via `$FUNCTIONS_FILE_PATH`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
- [Scripts to Watch](#scripts-to-watch)
|
||||||
|
- [Runtime & Language Setup](#runtime--language-setup)
|
||||||
|
- [Database Setup](#database-setup)
|
||||||
|
- [GitHub Release Helpers](#github-release-helpers)
|
||||||
|
- [Tools & Utilities](#tools--utilities)
|
||||||
|
- [SSL/TLS](#ssltls)
|
||||||
|
- [Utility Functions](#utility-functions)
|
||||||
|
- [Package Management](#package-management)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Scripts to Watch
|
||||||
|
|
||||||
|
**Learn from real, well-implemented scripts. Each app requires TWO files that work together:**
|
||||||
|
|
||||||
|
| File | Location | Purpose |
|
||||||
|
| ------------------ | ---------------------------- | ------------------------------------------------------------------------ |
|
||||||
|
| **CT Script** | `ct/appname.sh` | Runs on **Proxmox host** - creates container, contains `update_script()` |
|
||||||
|
| **Install Script** | `install/appname-install.sh` | Runs **inside container** - installs and configures the app |
|
||||||
|
|
||||||
|
> ⚠️ **Both files are ALWAYS required!** The CT script calls the install script automatically during container creation.
|
||||||
|
|
||||||
|
### Node.js + PostgreSQL
|
||||||
|
|
||||||
|
**Koel** - Music streaming with PHP + Node.js + PostgreSQL
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/koel.sh](../../ct/koel.sh) |
|
||||||
|
| Install | [install/koel-install.sh](../../install/koel-install.sh) |
|
||||||
|
|
||||||
|
**Actual Budget** - Finance app with npm global install
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/actualbudget.sh](../../ct/actualbudget.sh) |
|
||||||
|
| Install | [install/actualbudget-install.sh](../../install/actualbudget-install.sh) |
|
||||||
|
|
||||||
|
### Python + uv
|
||||||
|
|
||||||
|
**MeTube** - YouTube downloader with Python uv + Node.js + Deno
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/metube.sh](../../ct/metube.sh) |
|
||||||
|
| Install | [install/metube-install.sh](../../install/metube-install.sh) |
|
||||||
|
|
||||||
|
**Endurain** - Fitness tracker with Python uv + PostgreSQL/PostGIS
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/endurain.sh](../../ct/endurain.sh) |
|
||||||
|
| Install | [install/endurain-install.sh](../../install/endurain-install.sh) |
|
||||||
|
|
||||||
|
### PHP + MariaDB/MySQL
|
||||||
|
|
||||||
|
**Wallabag** - Read-it-later with PHP + MariaDB + Redis + Nginx
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/wallabag.sh](../../ct/wallabag.sh) |
|
||||||
|
| Install | [install/wallabag-install.sh](../../install/wallabag-install.sh) |
|
||||||
|
|
||||||
|
**InvoiceNinja** - Invoicing with PHP + MariaDB + Supervisor
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/invoiceninja.sh](../../ct/invoiceninja.sh) |
|
||||||
|
| Install | [install/invoiceninja-install.sh](../../install/invoiceninja-install.sh) |
|
||||||
|
|
||||||
|
**BookStack** - Wiki/Docs with PHP + MariaDB + Apache
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/bookstack.sh](../../ct/bookstack.sh) |
|
||||||
|
| Install | [install/bookstack-install.sh](../../install/bookstack-install.sh) |
|
||||||
|
|
||||||
|
### PHP + SQLite (Simple)
|
||||||
|
|
||||||
|
**Speedtest Tracker** - Speedtest with PHP + SQLite + Nginx
|
||||||
|
| File | Link |
|
||||||
|
|------|------|
|
||||||
|
| CT (update logic) | [ct/speedtest-tracker.sh](../../ct/speedtest-tracker.sh) |
|
||||||
|
| Install | [install/speedtest-tracker-install.sh](../../install/speedtest-tracker-install.sh) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Runtime & Language Setup
|
||||||
|
|
||||||
|
### `setup_nodejs`
|
||||||
|
|
||||||
|
Install Node.js from NodeSource repository.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Default (Node.js 22)
|
||||||
|
setup_nodejs
|
||||||
|
|
||||||
|
# Specific version
|
||||||
|
NODE_VERSION="20" setup_nodejs
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_go`
|
||||||
|
|
||||||
|
Install Go programming language (latest stable).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_go
|
||||||
|
|
||||||
|
# Use in script
|
||||||
|
setup_go
|
||||||
|
cd /opt/myapp
|
||||||
|
$STD go build -o myapp .
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_rust`
|
||||||
|
|
||||||
|
Install Rust via rustup.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_rust
|
||||||
|
|
||||||
|
# Use in script
|
||||||
|
setup_rust
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
|
$STD cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_uv`
|
||||||
|
|
||||||
|
Install Python uv package manager (fast pip/venv replacement).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_uv
|
||||||
|
|
||||||
|
# Use in script
|
||||||
|
setup_uv
|
||||||
|
cd /opt/myapp
|
||||||
|
$STD uv sync --locked
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_ruby`
|
||||||
|
|
||||||
|
Install Ruby from official repositories.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_ruby
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_php`
|
||||||
|
|
||||||
|
Install PHP with configurable modules and FPM/Apache support.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Basic PHP
|
||||||
|
setup_php
|
||||||
|
|
||||||
|
# Full configuration
|
||||||
|
PHP_VERSION="8.3" \
|
||||||
|
PHP_MODULE="mysqli,gd,curl,mbstring,xml,zip,ldap" \
|
||||||
|
PHP_FPM="YES" \
|
||||||
|
PHP_APACHE="YES" \
|
||||||
|
setup_php
|
||||||
|
```
|
||||||
|
|
||||||
|
**Environment Variables:**
|
||||||
|
| Variable | Default | Description |
|
||||||
|
|----------|---------|-------------|
|
||||||
|
| `PHP_VERSION` | `8.3` | PHP version to install |
|
||||||
|
| `PHP_MODULE` | `""` | Comma-separated list of modules |
|
||||||
|
| `PHP_FPM` | `NO` | Install PHP-FPM |
|
||||||
|
| `PHP_APACHE` | `NO` | Install Apache module |
|
||||||
|
|
||||||
|
### `setup_composer`
|
||||||
|
|
||||||
|
Install PHP Composer package manager.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
|
# Use in script
|
||||||
|
$STD composer install --no-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_java`
|
||||||
|
|
||||||
|
Install Java (OpenJDK).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Default (Java 21)
|
||||||
|
setup_java
|
||||||
|
|
||||||
|
# Specific version
|
||||||
|
JAVA_VERSION="17" setup_java
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Database Setup
|
||||||
|
|
||||||
|
### `setup_mariadb`
|
||||||
|
|
||||||
|
Install MariaDB server.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_mariadb
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_mariadb_db`
|
||||||
|
|
||||||
|
Create a MariaDB database and user. Sets `$MARIADB_DB_PASS` with the generated password.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_mariadb
|
||||||
|
MARIADB_DB_NAME="myapp_db" MARIADB_DB_USER="myapp_user" setup_mariadb_db
|
||||||
|
|
||||||
|
# After calling, these variables are available:
|
||||||
|
# $MARIADB_DB_NAME - Database name
|
||||||
|
# $MARIADB_DB_USER - Database user
|
||||||
|
# $MARIADB_DB_PASS - Generated password (saved to ~/[appname].creds)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_mysql`
|
||||||
|
|
||||||
|
Install MySQL server.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_postgresql`
|
||||||
|
|
||||||
|
Install PostgreSQL server.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Default (PostgreSQL 17)
|
||||||
|
setup_postgresql
|
||||||
|
|
||||||
|
# Specific version
|
||||||
|
PG_VERSION="16" setup_postgresql
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_postgresql_db`
|
||||||
|
|
||||||
|
Create a PostgreSQL database and user. Sets `$PG_DB_PASS` with the generated password.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PG_DB_NAME="myapp_db" PG_DB_USER="myapp_user" setup_postgresql_db
|
||||||
|
|
||||||
|
# After calling, these variables are available:
|
||||||
|
# $PG_DB_NAME - Database name
|
||||||
|
# $PG_DB_USER - Database user
|
||||||
|
# $PG_DB_PASS - Generated password (saved to ~/[appname].creds)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_mongodb`
|
||||||
|
|
||||||
|
Install MongoDB server.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_mongodb
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_clickhouse`
|
||||||
|
|
||||||
|
Install ClickHouse analytics database.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_clickhouse
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## GitHub Release Helpers
|
||||||
|
|
||||||
|
> **Note**: `fetch_and_deploy_gh_release` is the **preferred method** for downloading GitHub releases. It handles version tracking automatically. Only use `get_latest_github_release` if you need the version number separately.
|
||||||
|
|
||||||
|
### `fetch_and_deploy_gh_release`
|
||||||
|
|
||||||
|
**Primary method** for downloading and extracting GitHub releases. Handles version tracking automatically.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Basic usage - downloads tarball to /opt/appname
|
||||||
|
fetch_and_deploy_gh_release "appname" "owner/repo"
|
||||||
|
|
||||||
|
# With explicit parameters
|
||||||
|
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||||
|
|
||||||
|
# Pre-built release with specific asset pattern
|
||||||
|
fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
|
||||||
|
|
||||||
|
# Clean install (removes old directory first) - used in update_script
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
| Parameter | Default | Description |
|
||||||
|
|-----------|---------|-------------|
|
||||||
|
| `name` | required | App name (for version tracking) |
|
||||||
|
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||||
|
| `type` | `tarball` | Release type: `tarball`, `zipball`, `prebuild`, `binary` |
|
||||||
|
| `version` | `latest` | Version tag or `latest` |
|
||||||
|
| `dest` | `/opt/[name]` | Destination directory |
|
||||||
|
| `asset_pattern` | `""` | For `prebuild`: glob pattern to match asset (e.g. `app-*.tar.gz`) |
|
||||||
|
|
||||||
|
**Environment Variables:**
|
||||||
|
| Variable | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| `CLEAN_INSTALL=1` | Remove destination directory before extracting (for updates) |
|
||||||
|
|
||||||
|
### `check_for_gh_release`
|
||||||
|
|
||||||
|
Check if a newer version is available. Returns 0 if update needed, 1 if already at latest. **Use in `update_script()` function.**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# In update_script() function in ct/appname.sh
|
||||||
|
if check_for_gh_release "appname" "owner/repo"; then
|
||||||
|
msg_info "Updating..."
|
||||||
|
# Stop services, backup, update, restore, start
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo"
|
||||||
|
msg_ok "Updated successfully"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### `get_latest_github_release`
|
||||||
|
|
||||||
|
Get the latest release version from a GitHub repository. **Only use if you need the version number separately** (e.g., for manual download or display).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
RELEASE=$(get_latest_github_release "owner/repo")
|
||||||
|
echo "Latest version: $RELEASE"
|
||||||
|
```
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
|
||||||
|
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/myapp"
|
||||||
|
|
||||||
|
````
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
| Parameter | Default | Description |
|
||||||
|
|-----------|---------|-------------|
|
||||||
|
| `name` | required | App name (for version tracking) |
|
||||||
|
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||||
|
| `type` | `tarball` | Release type: `tarball`, `zipball`, `binary` |
|
||||||
|
| `version` | `latest` | Version tag or `latest` |
|
||||||
|
| `dest` | `/opt/[name]` | Destination directory |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tools & Utilities
|
||||||
|
|
||||||
|
### `setup_yq`
|
||||||
|
|
||||||
|
Install yq YAML processor.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_yq
|
||||||
|
|
||||||
|
# Use in script
|
||||||
|
yq '.server.port = 8080' -i config.yaml
|
||||||
|
````
|
||||||
|
|
||||||
|
### `setup_ffmpeg`
|
||||||
|
|
||||||
|
Install FFmpeg with common codecs.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_ffmpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_hwaccel`
|
||||||
|
|
||||||
|
Setup GPU hardware acceleration (Intel/AMD/NVIDIA).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Only runs if GPU passthrough is detected (/dev/dri, /dev/nvidia0, /dev/kfd)
|
||||||
|
setup_hwaccel
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_imagemagick`
|
||||||
|
|
||||||
|
Install ImageMagick 7 from source.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_imagemagick
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_docker`
|
||||||
|
|
||||||
|
Install Docker Engine.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### `setup_adminer`
|
||||||
|
|
||||||
|
Install Adminer for database management.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup_mariadb
|
||||||
|
setup_adminer
|
||||||
|
|
||||||
|
# Access at http://IP/adminer
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SSL/TLS
|
||||||
|
|
||||||
|
### `create_self_signed_cert`
|
||||||
|
|
||||||
|
Create a self-signed SSL certificate.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
create_self_signed_cert
|
||||||
|
|
||||||
|
# Creates files at:
|
||||||
|
# /etc/ssl/[appname]/[appname].key
|
||||||
|
# /etc/ssl/[appname]/[appname].crt
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Utility Functions
|
||||||
|
|
||||||
|
### `import_local_ip`
|
||||||
|
|
||||||
|
Set the `$LOCAL_IP` variable with the container's IP address.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import_local_ip
|
||||||
|
echo "Container IP: $LOCAL_IP"
|
||||||
|
|
||||||
|
# Use in config files
|
||||||
|
sed -i "s/localhost/$LOCAL_IP/g" /opt/myapp/config.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ensure_dependencies`
|
||||||
|
|
||||||
|
Ensure packages are installed (installs if missing).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ensure_dependencies "jq" "unzip" "curl"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `msg_info` / `msg_ok` / `msg_error` / `msg_warn`
|
||||||
|
|
||||||
|
Display formatted messages.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msg_info "Installing application..."
|
||||||
|
# ... do work ...
|
||||||
|
msg_ok "Installation complete"
|
||||||
|
|
||||||
|
msg_warn "Optional feature not available"
|
||||||
|
msg_error "Installation failed"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Package Management
|
||||||
|
|
||||||
|
### `cleanup_lxc`
|
||||||
|
|
||||||
|
Final cleanup function - call at end of install script.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# At the end of your install script
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc # Handles autoremove, autoclean, cache cleanup
|
||||||
|
```
|
||||||
|
|
||||||
|
### `install_packages_with_retry`
|
||||||
|
|
||||||
|
Install packages with automatic retry on failure.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
install_packages_with_retry "package1" "package2" "package3"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `prepare_repository_setup`
|
||||||
|
|
||||||
|
Prepare system for adding new repositories (cleanup old repos, keyrings).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
prepare_repository_setup "mariadb" "mysql"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Complete Examples
|
||||||
|
|
||||||
|
### Example 1: Node.js App with PostgreSQL (install script)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: YourUsername
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/example/myapp
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y nginx
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
# Setup runtimes and databases FIRST
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||||
|
import_local_ip
|
||||||
|
|
||||||
|
# Download app using fetch_and_deploy (handles version tracking)
|
||||||
|
fetch_and_deploy_gh_release "myapp" "example/myapp" "tarball" "latest" "/opt/myapp"
|
||||||
|
|
||||||
|
msg_info "Setting up MyApp"
|
||||||
|
cd /opt/myapp
|
||||||
|
$STD npm ci --production
|
||||||
|
msg_ok "Setup MyApp"
|
||||||
|
|
||||||
|
msg_info "Configuring MyApp"
|
||||||
|
cat <<EOF >/opt/myapp/.env
|
||||||
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}
|
||||||
|
HOST=${LOCAL_IP}
|
||||||
|
PORT=3000
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured MyApp"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/myapp.service
|
||||||
|
[Unit]
|
||||||
|
Description=MyApp
|
||||||
|
After=network.target postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/myapp
|
||||||
|
ExecStart=/usr/bin/node /opt/myapp/server.js
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now myapp
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: Matching Container Script (ct script)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/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: YourUsername
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/example/myapp
|
||||||
|
|
||||||
|
APP="MyApp"
|
||||||
|
var_tags="${var_tags:-webapp}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-6}"
|
||||||
|
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/myapp ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check_for_gh_release returns true if update available
|
||||||
|
if check_for_gh_release "myapp" "example/myapp"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop myapp
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
cp /opt/myapp/.env /tmp/myapp_env.bak
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
# CLEAN_INSTALL=1 removes old dir before extracting
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "myapp" "example/myapp" "tarball" "latest" "/opt/myapp"
|
||||||
|
|
||||||
|
msg_info "Restoring Config & Rebuilding"
|
||||||
|
cp /tmp/myapp_env.bak /opt/myapp/.env
|
||||||
|
rm /tmp/myapp_env.bak
|
||||||
|
cd /opt/myapp
|
||||||
|
$STD npm ci --production
|
||||||
|
msg_ok "Restored Config & Rebuilt"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start myapp
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 3: PHP App with MariaDB (install script)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y nginx
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
# PHP with FPM and common modules
|
||||||
|
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||||
|
setup_composer
|
||||||
|
setup_mariadb
|
||||||
|
MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||||
|
import_local_ip
|
||||||
|
|
||||||
|
# Download pre-built release (with asset pattern)
|
||||||
|
fetch_and_deploy_gh_release "myapp" "example/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring MyApp"
|
||||||
|
cd /opt/myapp
|
||||||
|
cp .env.example .env
|
||||||
|
sed -i "s|APP_URL=.*|APP_URL=http://${LOCAL_IP}|" .env
|
||||||
|
sed -i "s|DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" .env
|
||||||
|
sed -i "s|DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" .env
|
||||||
|
sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" .env
|
||||||
|
$STD composer install --no-dev --no-interaction
|
||||||
|
$STD php artisan key:generate --force
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
chown -R www-data:www-data /opt/myapp
|
||||||
|
msg_ok "Configured MyApp"
|
||||||
|
|
||||||
|
# ... nginx config, service creation ...
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
|
```
|
||||||
@ -65,6 +65,7 @@ bash docs/contribution/setup-fork.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
This will:
|
This will:
|
||||||
|
|
||||||
- Auto-detect your GitHub username
|
- Auto-detect your GitHub username
|
||||||
- Update all documentation links to point to your fork
|
- Update all documentation links to point to your fork
|
||||||
- Create `.git-setup-info` with recommended git workflows
|
- Create `.git-setup-info` with recommended git workflows
|
||||||
@ -97,6 +98,8 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
|
|
||||||
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
||||||
- **[CODE_AUDIT.md](CODE_AUDIT.md)** - Code review checklist and audit procedures
|
- **[CODE_AUDIT.md](CODE_AUDIT.md)** - Code review checklist and audit procedures
|
||||||
|
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
||||||
|
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||||
- **Container Scripts** - `/ct/` templates and guidelines
|
- **Container Scripts** - `/ct/` templates and guidelines
|
||||||
- **Install Scripts** - `/install/` templates and guidelines
|
- **Install Scripts** - `/install/` templates and guidelines
|
||||||
- **JSON Configurations** - `/json/` structure and format
|
- **JSON Configurations** - `/json/` structure and format
|
||||||
@ -121,6 +124,7 @@ Before submitting a pull request, ensure your code passes our audit:
|
|||||||
**See**: [CODE_AUDIT.md](CODE_AUDIT.md) for complete audit checklist
|
**See**: [CODE_AUDIT.md](CODE_AUDIT.md) for complete audit checklist
|
||||||
|
|
||||||
Key points:
|
Key points:
|
||||||
|
|
||||||
- Code consistency with existing scripts
|
- Code consistency with existing scripts
|
||||||
- Proper error handling
|
- Proper error handling
|
||||||
- Correct variable naming
|
- Correct variable naming
|
||||||
@ -145,6 +149,7 @@ Key points:
|
|||||||
### Community Guides
|
### Community Guides
|
||||||
|
|
||||||
See [USER_SUBMITTED_GUIDES.md](USER_SUBMITTED_GUIDES.md) for excellent community-written guides:
|
See [USER_SUBMITTED_GUIDES.md](USER_SUBMITTED_GUIDES.md) for excellent community-written guides:
|
||||||
|
|
||||||
- Home Assistant installation and configuration
|
- Home Assistant installation and configuration
|
||||||
- Frigate setup on Proxmox
|
- Frigate setup on Proxmox
|
||||||
- Docker and Portainer installation
|
- Docker and Portainer installation
|
||||||
@ -156,16 +161,24 @@ See [USER_SUBMITTED_GUIDES.md](USER_SUBMITTED_GUIDES.md) for excellent community
|
|||||||
Use these templates when creating new scripts:
|
Use these templates when creating new scripts:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Container script
|
# Container script template
|
||||||
cp ct/example.sh ct/my-app.sh
|
cp docs/contribution/templates_ct/AppName.sh ct/my-app.sh
|
||||||
|
|
||||||
# Installation script
|
# Installation script template
|
||||||
cp install/example-install.sh install/my-app-install.sh
|
cp docs/contribution/templates_install/AppName-install.sh install/my-app-install.sh
|
||||||
|
|
||||||
# JSON configuration (if needed)
|
# JSON configuration template
|
||||||
cp json/example.json json/my-app.json
|
cp docs/contribution/templates_json/AppName.json frontend/public/json/my-app.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Template Features:**
|
||||||
|
|
||||||
|
- Updated to match current codebase patterns
|
||||||
|
- Includes all available helper functions from `tools.func`
|
||||||
|
- Examples for Node.js, Python, PHP, Go applications
|
||||||
|
- Database setup examples (MariaDB, PostgreSQL)
|
||||||
|
- Proper service creation and cleanup
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔄 Git Workflow
|
## 🔄 Git Workflow
|
||||||
@ -202,18 +215,21 @@ git push origin feature/my-feature
|
|||||||
### Before Submitting PR
|
### Before Submitting PR
|
||||||
|
|
||||||
1. **Sync with upstream**
|
1. **Sync with upstream**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git fetch upstream
|
git fetch upstream
|
||||||
git rebase upstream/main
|
git rebase upstream/main
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Test your changes**
|
2. **Test your changes**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash ct/my-app.sh
|
bash ct/my-app.sh
|
||||||
# Follow prompts and test the container
|
# Follow prompts and test the container
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Check code standards**
|
3. **Check code standards**
|
||||||
|
|
||||||
- [ ] Follows template structure
|
- [ ] Follows template structure
|
||||||
- [ ] Proper error handling
|
- [ ] Proper error handling
|
||||||
- [ ] Documentation updated (if needed)
|
- [ ] Documentation updated (if needed)
|
||||||
|
|||||||
@ -1,27 +1,31 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: [YourUserName]
|
# Author: [YourGitHubUsername]
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: [SOURCE_URL]
|
# Source: [SOURCE_URL e.g. https://github.com/example/app]
|
||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="[APP_NAME]"
|
APP="[AppName]"
|
||||||
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
|
var_tags="${var_tags:-[category]}"
|
||||||
var_tags="[TAGS]"
|
var_cpu="${var_cpu:-2}"
|
||||||
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
|
var_ram="${var_ram:-2048}"
|
||||||
var_cpu="[CPU]"
|
var_disk="${var_disk:-4}"
|
||||||
# Number of cores (1-X) (e.g. 4) - default are 2
|
var_os="${var_os:-debian}"
|
||||||
var_ram="[RAM]"
|
var_version="${var_version:-12}"
|
||||||
# Amount of used RAM in MB (e.g. 2048 or 4096)
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
var_disk="[DISK]"
|
|
||||||
# Amount of used disk space in GB (e.g. 4 or 10)
|
# =============================================================================
|
||||||
var_os="[OS]"
|
# CONFIGURATION GUIDE
|
||||||
# Default OS (e.g. debian, ubuntu, alpine)
|
# =============================================================================
|
||||||
var_version="[VERSION]"
|
# APP - Display name, title case (e.g. "Koel", "Wallabag", "Actual Budget")
|
||||||
# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine)
|
# var_tags - Max 2 tags, semicolon separated (e.g. "music;streaming", "finance")
|
||||||
var_unprivileged="[UNPRIVILEGED]"
|
# var_cpu - CPU cores: 1-4 typical
|
||||||
# 1 = unprivileged container, 0 = privileged container
|
# var_ram - RAM in MB: 512, 1024, 2048, 4096 typical
|
||||||
|
# var_disk - Disk in GB: 4, 6, 8, 10, 20 typical
|
||||||
|
# var_os - OS: debian, ubuntu, alpine
|
||||||
|
# var_version - OS version: 12/13 (debian), 22.04/24.04 (ubuntu), 3.20/3.21 (alpine)
|
||||||
|
# var_unprivileged - 1 = unprivileged (secure, default), 0 = privileged (for docker etc.)
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@ -29,51 +33,55 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
# Check if installation is present | -f for file, -d for folder
|
# Check if installation exists
|
||||||
if [[ ! -f [INSTALLATION_CHECK_PATH] ]]; then
|
if [[ ! -d /opt/[appname] ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Crawling the new version and checking whether an update is required
|
|
||||||
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
# Stopping Services
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop [SERVICE_NAME]
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
# Creating Backup
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" [IMPORTANT_PATHS]
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
# Execute Update
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
[UPDATE_COMMANDS]
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
# Starting Services
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start [SERVICE_NAME]
|
|
||||||
msg_ok "Started $APP"
|
|
||||||
|
|
||||||
# Cleaning up
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf [TEMP_FILES]
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
# Last Action
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check_for_gh_release returns 0 (true) if update available, 1 (false) if not
|
||||||
|
if check_for_gh_release "[appname]" "[owner/repo]"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop [appname]
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
# Optional: Backup important data before update
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mkdir -p /tmp/[appname]_backup
|
||||||
|
cp /opt/[appname]/.env /tmp/[appname]_backup/ 2>/dev/null || true
|
||||||
|
cp -r /opt/[appname]/data /tmp/[appname]_backup/ 2>/dev/null || true
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
# CLEAN_INSTALL=1 removes old directory before extracting new version
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "[appname]" "[owner/repo]" "tarball" "latest" "/opt/[appname]"
|
||||||
|
|
||||||
|
# Restore configuration and data
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
cp /tmp/[appname]_backup/.env /opt/[appname]/ 2>/dev/null || true
|
||||||
|
cp -r /tmp/[appname]_backup/data/* /opt/[appname]/data/ 2>/dev/null || true
|
||||||
|
rm -rf /tmp/[appname]_backup
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
# Optional: Run any post-update commands
|
||||||
|
msg_info "Running Post-Update Tasks"
|
||||||
|
cd /opt/[appname]
|
||||||
|
# Examples:
|
||||||
|
# $STD npm ci --production
|
||||||
|
# $STD php artisan migrate --force
|
||||||
|
# $STD composer install --no-dev
|
||||||
|
msg_ok "Ran Post-Update Tasks"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start [appname]
|
||||||
|
msg_ok "Started Services"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: [YourUserName]
|
# Author: [YourGitHubUsername]
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: [SOURCE_URL]
|
# Source: [SOURCE_URL e.g. https://github.com/example/app]
|
||||||
|
|
||||||
# Import Functions und Setup
|
# Import Functions and Setup
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
verb_ip6
|
verb_ip6
|
||||||
@ -14,70 +14,177 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
|
# =============================================================================
|
||||||
|
# DEPENDENCIES
|
||||||
|
# =============================================================================
|
||||||
|
# Only install what's actually needed - curl/sudo/mc are already in the base image
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt install -y \
|
||||||
curl \
|
nginx \
|
||||||
sudo \
|
build-essential
|
||||||
mc \
|
|
||||||
[PACKAGE_1] \
|
|
||||||
[PACKAGE_2] \
|
|
||||||
[PACKAGE_3]
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
# Template: MySQL Database
|
# =============================================================================
|
||||||
msg_info "Setting up Database"
|
# HELPER FUNCTIONS FROM tools.func
|
||||||
DB_NAME=[DB_NAME]
|
# =============================================================================
|
||||||
DB_USER=[DB_USER]
|
# These functions are available via $FUNCTIONS_FILE_PATH (tools.func)
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
# Call them with optional environment variables for configuration
|
||||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
|
||||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
|
||||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
|
||||||
{
|
|
||||||
echo "${APPLICATION} Credentials"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
} >>~/$APP_NAME.creds
|
|
||||||
msg_ok "Set up Database"
|
|
||||||
|
|
||||||
# Temp
|
|
||||||
|
|
||||||
# Setup App
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
curl -fsSL "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip"
|
|
||||||
unzip -q ${RELEASE}.zip
|
|
||||||
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
|
|
||||||
#
|
#
|
||||||
|
# --- Runtime & Language Setup ---
|
||||||
|
# NODE_VERSION="22" setup_nodejs # Install Node.js (22, 24)
|
||||||
|
# NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs # With pnpm
|
||||||
|
# PYTHON_VERSION="3.13" setup_uv # Python with uv package manager
|
||||||
|
# setup_go # Install Go (latest)
|
||||||
|
# setup_rust # Install Rust via rustup
|
||||||
|
# setup_ruby # Install Ruby
|
||||||
|
# PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="mysqli,gd" setup_php
|
||||||
|
# PHP_VERSION="8.3" PHP_FPM="YES" PHP_APACHE="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||||
|
# setup_composer # Install PHP Composer
|
||||||
|
# JAVA_VERSION="21" setup_java # Install Java (17, 21)
|
||||||
#
|
#
|
||||||
|
# --- Database Setup ---
|
||||||
|
# setup_mariadb # Install MariaDB server
|
||||||
|
# MARIADB_DB_NAME="mydb" MARIADB_DB_USER="myuser" setup_mariadb_db
|
||||||
|
# setup_mysql # Install MySQL server
|
||||||
|
# PG_VERSION="17" setup_postgresql # Install PostgreSQL (16, 17)
|
||||||
|
# PG_VERSION="17" PG_MODULES="postgis" setup_postgresql # With extensions
|
||||||
|
# PG_DB_NAME="mydb" PG_DB_USER="myuser" setup_postgresql_db
|
||||||
|
# setup_mongodb # Install MongoDB
|
||||||
#
|
#
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
# --- GitHub Release (PREFERRED METHOD) ---
|
||||||
msg_ok "Setup ${APPLICATION}"
|
# fetch_and_deploy_gh_release "appname" "owner/repo" # Downloads, extracts, tracks version
|
||||||
|
# fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
||||||
|
# fetch_and_deploy_gh_release "appname" "owner/repo" "prebuild" "latest" "/opt/appname" "app-*.tar.gz"
|
||||||
|
#
|
||||||
|
# --- Tools & Utilities ---
|
||||||
|
# import_local_ip # Sets $LOCAL_IP variable (call early!)
|
||||||
|
# setup_ffmpeg # Install FFmpeg with codecs
|
||||||
|
# setup_hwaccel # Setup GPU hardware acceleration
|
||||||
|
# setup_imagemagick # Install ImageMagick 7
|
||||||
|
# setup_docker # Install Docker Engine
|
||||||
|
# setup_adminer # Install Adminer for DB management
|
||||||
|
# create_self_signed_cert # Creates cert in /etc/ssl/[appname]/
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# EXAMPLE 1: Node.js Application with PostgreSQL
|
||||||
|
# =============================================================================
|
||||||
|
# NODE_VERSION="22" setup_nodejs
|
||||||
|
# PG_VERSION="17" setup_postgresql
|
||||||
|
# PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||||
|
# import_local_ip
|
||||||
|
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||||
|
#
|
||||||
|
# msg_info "Configuring MyApp"
|
||||||
|
# cd /opt/myapp
|
||||||
|
# $STD npm ci
|
||||||
|
# cat <<EOF >/opt/myapp/.env
|
||||||
|
# DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}
|
||||||
|
# HOST=${LOCAL_IP}
|
||||||
|
# PORT=3000
|
||||||
|
# EOF
|
||||||
|
# msg_ok "Configured MyApp"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# EXAMPLE 2: Python Application with uv
|
||||||
|
# =============================================================================
|
||||||
|
# PYTHON_VERSION="3.13" setup_uv
|
||||||
|
# import_local_ip
|
||||||
|
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||||
|
#
|
||||||
|
# msg_info "Setting up MyApp"
|
||||||
|
# cd /opt/myapp
|
||||||
|
# $STD uv sync
|
||||||
|
# cat <<EOF >/opt/myapp/.env
|
||||||
|
# HOST=${LOCAL_IP}
|
||||||
|
# PORT=8000
|
||||||
|
# EOF
|
||||||
|
# msg_ok "Setup MyApp"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# EXAMPLE 3: PHP Application with MariaDB + Nginx
|
||||||
|
# =============================================================================
|
||||||
|
# PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,xml,zip" setup_php
|
||||||
|
# setup_composer
|
||||||
|
# setup_mariadb
|
||||||
|
# MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||||
|
# import_local_ip
|
||||||
|
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||||
|
#
|
||||||
|
# msg_info "Configuring MyApp"
|
||||||
|
# cd /opt/myapp
|
||||||
|
# cp .env.example .env
|
||||||
|
# sed -i "s|APP_URL=.*|APP_URL=http://${LOCAL_IP}|" .env
|
||||||
|
# sed -i "s|DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" .env
|
||||||
|
# sed -i "s|DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" .env
|
||||||
|
# sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" .env
|
||||||
|
# $STD composer install --no-dev --no-interaction
|
||||||
|
# chown -R www-data:www-data /opt/myapp
|
||||||
|
# msg_ok "Configured MyApp"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# YOUR APPLICATION INSTALLATION
|
||||||
|
# =============================================================================
|
||||||
|
# 1. Setup runtimes and databases FIRST
|
||||||
|
# 2. Call import_local_ip if you need the container IP
|
||||||
|
# 3. Use fetch_and_deploy_gh_release to download the app (handles version tracking)
|
||||||
|
# 4. Configure the application
|
||||||
|
# 5. Create systemd service
|
||||||
|
# 6. Finalize with motd_ssh, customize, cleanup_lxc
|
||||||
|
|
||||||
|
# --- Setup runtimes/databases ---
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
import_local_ip
|
||||||
|
|
||||||
|
# --- Download and install app ---
|
||||||
|
fetch_and_deploy_gh_release "[appname]" "[owner/repo]" "tarball" "latest" "/opt/[appname]"
|
||||||
|
|
||||||
|
msg_info "Setting up [AppName]"
|
||||||
|
cd /opt/[appname]
|
||||||
|
$STD npm ci
|
||||||
|
msg_ok "Setup [AppName]"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# CONFIGURATION
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
msg_info "Configuring [AppName]"
|
||||||
|
cat <<EOF >/opt/[appname]/.env
|
||||||
|
HOST=${LOCAL_IP}
|
||||||
|
PORT=8080
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured [AppName]"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# SERVICE CREATION
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
# Creating Service (if needed)
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
cat <<EOF >/etc/systemd/system/[appname].service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=[AppName] Service
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=[START_COMMAND]
|
Type=simple
|
||||||
Restart=always
|
User=root
|
||||||
|
WorkingDirectory=/opt/[appname]
|
||||||
|
ExecStart=/usr/bin/node /opt/[appname]/server.js
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now ${APPLICATION}.service
|
systemctl enable -q --now [appname]
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# CLEANUP & FINALIZATION
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
# Cleanup
|
# cleanup_lxc handles: apt autoremove, autoclean, temp files, bash history
|
||||||
msg_info "Cleaning up"
|
cleanup_lxc
|
||||||
rm -f ${RELEASE}.zip
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|||||||
64
docs/contribution/templates_json/AppName.json
generated
64
docs/contribution/templates_json/AppName.json
generated
@ -1,34 +1,34 @@
|
|||||||
{
|
{
|
||||||
"name": "AppName",
|
"name": "AppName",
|
||||||
"slug": "appname",
|
"slug": "appname",
|
||||||
"categories": [
|
"categories": [
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"date_created": "DATE CREATED",
|
"date_created": "DATE CREATED",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": DEFAULT-PORT,
|
"interface_port": "DEFAULT-PORT",
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "LINK TO WEBSITE",
|
"website": "LINK TO WEBSITE",
|
||||||
"logo": "LINK TO LOGO",
|
"logo": "LINK TO LOGO",
|
||||||
"description": "Description of the app",
|
"description": "Description of the app",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/AppName.sh",
|
"script": "ct/AppName.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -36,6 +36,10 @@
|
|||||||
{
|
{
|
||||||
"type": "info",
|
"type": "info",
|
||||||
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
|
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "warning",
|
||||||
|
"text": "Requires FUSE support for mergerfs functionality. FUSE is enabled by default during installation."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 5,
|
"hdd": 5,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"name": "InvoiceNinja",
|
"name": "InvoiceNinja",
|
||||||
"slug": "invoiceninja",
|
"slug": "invoiceninja",
|
||||||
"categories": [
|
"categories": [
|
||||||
3
|
25
|
||||||
],
|
],
|
||||||
"date_created": "2025-12-12",
|
"date_created": "2025-12-12",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": "https://paymenter.org/docs",
|
"documentation": "https://paymenter.org/docs",
|
||||||
"website": "https://paymenter.org/",
|
"website": "https://paymenter.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymeter.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymenter.webp",
|
||||||
"config_path": "/opt/paymenter/.env",
|
"config_path": "/opt/paymenter/.env",
|
||||||
"description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.",
|
"description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
|
|||||||
46
frontend/public/json/pihole-exporter.json
Normal file
46
frontend/public/json/pihole-exporter.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "Pi-Hole Exporter",
|
||||||
|
"slug": "pihole-exporter",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-21",
|
||||||
|
"type": "addon",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9617,
|
||||||
|
"documentation": "https://github.com/eko/pihole-exporter",
|
||||||
|
"website": "https://github.com/eko/pihole-exporter",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pi-hole.webp",
|
||||||
|
"config_path": "/opt/pihole-exporter.env",
|
||||||
|
"description": "A Prometheus exporter for PI-Hole's Raspberry PI ad blocker",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/addon/pihole-exporter.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "tools/addon/pihole-exporter.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://pterodactyl.io/wings/1.0/installing.html",
|
"documentation": "https://pterodactyl.io/wings/1.0/installing.html",
|
||||||
"website": "https://pterodactyl.io",
|
"website": "https://pterodactyl.io",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pterodactyl.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pterodactyl.webp",
|
||||||
"config_path": "",
|
"config_path": "/etc/pterodactyl/config.yml",
|
||||||
"description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.",
|
"description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
46
frontend/public/json/qbittorrent-exporter.json
Normal file
46
frontend/public/json/qbittorrent-exporter.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "qbittorrent Exporter",
|
||||||
|
"slug": "qbittorrent-exporter",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-18",
|
||||||
|
"type": "addon",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8090,
|
||||||
|
"documentation": "https://github.com/martabal/qbittorrent-exporter",
|
||||||
|
"website": "https://github.com/martabal/qbittorrent-exporter",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qbittorrent.webp",
|
||||||
|
"config_path": "/opt/qbittorrent-exporter.env",
|
||||||
|
"description": "A fast and lightweight prometheus exporter for qBittorrent ",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/addon/qbittorrent-exporter.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "tools/addon/qbittorrent-exporter.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@ -31,5 +31,14 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"type": "warning",
|
||||||
|
"content": "Configure your Radarr/Sonarr instances in `/root/.config/recyclarr/recyclarr.yml` before the first sync."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "info",
|
||||||
|
"content": "Automatic daily sync is configured via `/etc/cron.d/recyclarr`. Sync logs are saved to `/root/.config/recyclarr/sync.log`."
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
|||||||
@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Backrest"
|
fetch_and_deploy_gh_release "backrest" "garethgeorge/backrest" "prebuild" "latest" "/opt/backrest/bin" "backrest_Linux_x86_64.tar.gz"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
mkdir -p /opt/backrest/{bin,config,data}
|
|
||||||
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file"
|
|
||||||
tar xzf $temp_file -C /opt/backrest/bin
|
|
||||||
chmod +x /opt/backrest/bin/backrest
|
|
||||||
rm -f "$temp_file"
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed Backrest"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/backrest.service
|
cat <<EOF >/etc/systemd/system/backrest.service
|
||||||
@ -32,7 +23,6 @@ After=network.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
|
||||||
ExecStart=/opt/backrest/bin/backrest
|
ExecStart=/opt/backrest/bin/backrest
|
||||||
Environment="BACKREST_PORT=9898"
|
Environment="BACKREST_PORT=9898"
|
||||||
Environment="BACKREST_CONFIG=/opt/backrest/config/config.json"
|
Environment="BACKREST_CONFIG=/opt/backrest/config/config.json"
|
||||||
@ -48,4 +38,3 @@ msg_ok "Created Service"
|
|||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
cleanup_lxc
|
cleanup_lxc
|
||||||
|
|
||||||
|
|||||||
@ -17,14 +17,14 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
redis-server \
|
redis-server \
|
||||||
nginx \
|
nginx \
|
||||||
lsb-release \
|
lsb-release \
|
||||||
libvips
|
libvips
|
||||||
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
|
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||||
@ -41,14 +41,14 @@ msg_info "Configure MeiliSearch"
|
|||||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||||
MASTER_KEY=$(openssl rand -base64 12)
|
MASTER_KEY=$(openssl rand -base64 12)
|
||||||
sed -i \
|
sed -i \
|
||||||
-e 's|^env =.*|env = "production"|' \
|
-e 's|^env =.*|env = "production"|' \
|
||||||
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||||
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||||
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||||
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||||
-e 's|^# no_analytics = true|no_analytics = true|' \
|
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||||
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
|
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
|
||||||
/etc/meilisearch.toml
|
/etc/meilisearch.toml
|
||||||
msg_ok "Configured MeiliSearch"
|
msg_ok "Configured MeiliSearch"
|
||||||
|
|
||||||
msg_info "Creating MeiliSearch service"
|
msg_info "Creating MeiliSearch service"
|
||||||
@ -77,11 +77,11 @@ MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorizat
|
|||||||
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
|
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
|
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
|
||||||
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
|
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
|
||||||
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
||||||
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
|
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
|
||||||
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
|
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
|
||||||
/opt/bar-assistant/.env
|
/opt/bar-assistant/.env
|
||||||
$STD composer install --no-interaction
|
$STD composer install --no-interaction
|
||||||
$STD php artisan key:generate
|
$STD php artisan key:generate
|
||||||
touch storage/bar-assistant/database.ba3.sqlite
|
touch storage/bar-assistant/database.ba3.sqlite
|
||||||
|
|||||||
@ -29,19 +29,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
setup_hwaccel
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
|
||||||
$STD apt-get -y install \
|
|
||||||
va-driver-all \
|
|
||||||
ocl-icd-libopencl1 \
|
|
||||||
intel-opencl-icd
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing Channels DVR Server (Patience)"
|
msg_info "Installing Channels DVR Server (Patience)"
|
||||||
cd /opt
|
cd /opt
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "${TAB3}Choose the GPU type for ComfyUI:"
|
echo "${TAB3}Choose the GPU type for ComfyUI:"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
setup_imagemagick
|
setup_imagemagick
|
||||||
|
|
||||||
|
|||||||
@ -14,38 +14,23 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt install -y \
|
||||||
|
ca-certificates \
|
||||||
|
openssl \
|
||||||
snapraid \
|
snapraid \
|
||||||
avahi-daemon \
|
avahi-daemon \
|
||||||
fdisk
|
fdisk \
|
||||||
|
mergerfs \
|
||||||
|
unzip
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Install mergerfs"
|
setup_docker
|
||||||
MERGERFS_VERSION="2.40.2"
|
fetch_and_deploy_gh_release "cosmos" "azukaar/Cosmos-Server" "prebuild" "latest" "/opt/cosmos" "cosmos-cloud-*-amd64.zip"
|
||||||
curl -fsSL "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" -o "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
|
||||||
$STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y
|
|
||||||
rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
|
||||||
msg_ok "Installed mergerfs"
|
|
||||||
|
|
||||||
msg_info "Install Docker"
|
msg_info "Setting up Cosmos"
|
||||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
|
||||||
$STD sh get-docker.sh
|
|
||||||
rm get-docker.sh
|
|
||||||
msg_ok "Installed Docker"
|
|
||||||
|
|
||||||
msg_info "Install Cosmos"
|
|
||||||
mkdir -p /opt/cosmos
|
|
||||||
LATEST_RELEASE=$(curl -fsSL https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4)
|
|
||||||
ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
|
||||||
curl -fsSL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}"
|
|
||||||
cd /opt/cosmos
|
cd /opt/cosmos
|
||||||
$STD unzip -o -q "${ZIP_FILE}"
|
|
||||||
LATEST_RELEASE_NO_V=${LATEST_RELEASE#v}
|
|
||||||
mv /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}/* /opt/cosmos/
|
|
||||||
rmdir /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}
|
|
||||||
chmod +x /opt/cosmos/cosmos
|
chmod +x /opt/cosmos/cosmos
|
||||||
rm -f "/opt/cosmos/cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
msg_ok "Set up Cosmos"
|
||||||
msg_ok "Installed Cosmos"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/cosmos.service
|
cat <<EOF >/etc/systemd/system/cosmos.service
|
||||||
|
|||||||
@ -12,17 +12,18 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
build-essential \
|
build-essential \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
nginx \
|
nginx \
|
||||||
redis-server \
|
redis-server \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
procps \
|
procps \
|
||||||
streamlink
|
streamlink
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
@ -39,11 +40,11 @@ $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 default_transaction_isolation TO 'read committed';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||||
{
|
{
|
||||||
echo "Dispatcharr Credentials"
|
echo "Dispatcharr Credentials"
|
||||||
echo "Database Name: $DB_NAME"
|
echo "Database Name: $DB_NAME"
|
||||||
echo "Database User: $DB_USER"
|
echo "Database User: $DB_USER"
|
||||||
echo "Database Password: $DB_PASS"
|
echo "Database Password: $DB_PASS"
|
||||||
echo ""
|
echo ""
|
||||||
} >>~/dispatcharr.creds
|
} >>~/dispatcharr.creds
|
||||||
msg_ok "Created PostgreSQL Database"
|
msg_ok "Created PostgreSQL Database"
|
||||||
|
|
||||||
@ -58,9 +59,9 @@ msg_ok "Installed Python Dependencies"
|
|||||||
|
|
||||||
msg_info "Configuring Dispatcharr"
|
msg_info "Configuring Dispatcharr"
|
||||||
install -d -m 755 \
|
install -d -m 755 \
|
||||||
/data/{logos,recordings,plugins,db} \
|
/data/{logos,recordings,plugins,db} \
|
||||||
/data/uploads/{m3us,epgs} \
|
/data/uploads/{m3us,epgs} \
|
||||||
/data/{m3us,epgs}
|
/data/{m3us,epgs}
|
||||||
chown -R root:root /data
|
chown -R root:root /data
|
||||||
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
||||||
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||||
|
|||||||
@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ NODE_VERSION="24" setup_nodejs
|
|||||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||||
PG_DB_NAME="enduraindb" PG_DB_USER="endurain" setup_postgresql_db
|
PG_DB_NAME="enduraindb" PG_DB_USER="endurain" setup_postgresql_db
|
||||||
import_local_ip
|
import_local_ip
|
||||||
fetch_and_deploy_gh_release "endurain" "joaovitoriasilva/endurain" "tarball" "latest" "/opt/endurain"
|
fetch_and_deploy_gh_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||||
|
|
||||||
msg_info "Setting up Endurain"
|
msg_info "Setting up Endurain"
|
||||||
cd /opt/endurain
|
cd /opt/endurain
|
||||||
|
|||||||
@ -13,39 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
|
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
EOF
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
else
|
|
||||||
msg_info "Installing Intel Hardware Acceleration"
|
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
fi
|
|
||||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||||
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|
||||||
|
|||||||
@ -21,27 +21,7 @@ $STD apt-get install -y \
|
|||||||
imagemagick
|
imagemagick
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
|
setup_hwaccel
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
|
||||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
|
||||||
|
|
||||||
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
|
||||||
EOF
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
else
|
|
||||||
msg_info "Installing Intel Hardware Acceleration"
|
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
fi
|
|
||||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing ASP.NET Core Runtime"
|
||||||
curl -fsSL https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
curl -fsSL https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
||||||
|
|||||||
@ -33,14 +33,7 @@ chmod +x go2rtc
|
|||||||
$STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc
|
$STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc
|
||||||
msg_ok "Installed go2rtc"
|
msg_ok "Installed go2rtc"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
||||||
cd ~
|
cd ~
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ ExecStart=/usr/bin/php artisan serve --port 7990 --host 0.0.0.0
|
|||||||
TimeoutStopSec=30
|
TimeoutStopSec=30
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target"
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now heimdall
|
systemctl enable -q --now heimdall
|
||||||
cd /opt/Heimdall
|
cd /opt/Heimdall
|
||||||
|
|||||||
@ -18,17 +18,14 @@ $STD apt install -y \
|
|||||||
redis-server \
|
redis-server \
|
||||||
nginx \
|
nginx \
|
||||||
gettext \
|
gettext \
|
||||||
openssl \
|
openssl
|
||||||
musl-dev
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
setup_nodejs
|
setup_nodejs
|
||||||
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-amd64.tar.gz"
|
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Installing Homarr"
|
msg_info "Installing Homarr"
|
||||||
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
|
||||||
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
|
||||||
mkdir -p /opt/homarr_db
|
mkdir -p /opt/homarr_db
|
||||||
touch /opt/homarr_db/db.sqlite
|
touch /opt/homarr_db/db.sqlite
|
||||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
||||||
@ -65,6 +62,8 @@ ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis -
|
|||||||
EOF
|
EOF
|
||||||
cat <<EOF >/etc/systemd/system/homarr.service
|
cat <<EOF >/etc/systemd/system/homarr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
|
Requires=redis-server.service
|
||||||
|
After=redis-server.service
|
||||||
Description=Homarr Service
|
Description=Homarr Service
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
@ -79,8 +78,9 @@ WantedBy=multi-user.target
|
|||||||
EOF
|
EOF
|
||||||
chmod +x /opt/homarr/run.sh
|
chmod +x /opt/homarr/run.sh
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable -q --now redis-server && sleep 5
|
systemctl enable -q --now redis-server
|
||||||
systemctl enable -q --now homarr
|
systemctl enable -q --now homarr
|
||||||
|
systemctl disable -q --now nginx
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing HyperHDR"
|
msg_info "Installing HyperHDR"
|
||||||
setup_deb822_repo \
|
setup_deb822_repo \
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Setting up Hyperion repository"
|
msg_info "Setting up Hyperion repository"
|
||||||
setup_deb822_repo \
|
setup_deb822_repo \
|
||||||
|
|||||||
@ -75,12 +75,13 @@ $STD apt install -y jellyfin-ffmpeg7
|
|||||||
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
||||||
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
||||||
|
|
||||||
|
# Set permissions for /dev/dri (only in privileged containers and if /dev/dri exists)
|
||||||
if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
|
if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
|
||||||
chgrp video /dev/dri
|
chgrp video /dev/dri 2>/dev/null || true
|
||||||
chmod 755 /dev/dri
|
chmod 755 /dev/dri 2>/dev/null || true
|
||||||
chmod 660 /dev/dri/*
|
chmod 660 /dev/dri/* 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" video
|
$STD adduser "$(id -u -n)" video 2>/dev/null || true
|
||||||
$STD adduser "$(id -u -n)" render
|
$STD adduser "$(id -u -n)" render 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
msg_ok "Dependencies Installed"
|
msg_ok "Dependencies Installed"
|
||||||
|
|
||||||
@ -98,10 +99,15 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|||||||
$STD apt install -y --no-install-recommends patchelf
|
$STD apt install -y --no-install-recommends patchelf
|
||||||
tmp_dir=$(mktemp -d)
|
tmp_dir=$(mktemp -d)
|
||||||
$STD pushd "$tmp_dir"
|
$STD pushd "$tmp_dir"
|
||||||
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb
|
curl -fsSLZ -O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-core_1.0.17537.24_amd64.deb" \
|
||||||
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-opencl_1.0.17384.11_amd64.deb
|
-O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-opencl_1.0.17537.24_amd64.deb" \
|
||||||
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb
|
-O "https://github.com/intel/compute-runtime/releases/download/24.35.30872.36/intel-opencl-icd-legacy1_24.35.30872.36_amd64.deb" \
|
||||||
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb
|
-O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-core-2_2.22.2+20121_amd64.deb" \
|
||||||
|
-O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-opencl-2_2.22.2+20121_amd64.deb" \
|
||||||
|
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/intel-opencl-icd_25.44.36015.5-0_amd64.deb" \
|
||||||
|
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/libigdgmm12_22.8.2_amd64.deb"
|
||||||
|
$STD apt install -y ./libigdgmm12*.deb
|
||||||
|
rm ./libigdgmm12*.deb
|
||||||
$STD apt install -y ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
$STD apt-mark hold libigdgmm12
|
$STD apt-mark hold libigdgmm12
|
||||||
$STD popd
|
$STD popd
|
||||||
@ -290,7 +296,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
|
|||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.3.1" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.4.1" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (patience)"
|
msg_info "Installing ${APPLICATION} (patience)"
|
||||||
|
|
||||||
|
|||||||
@ -13,25 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
|
||||||
else
|
|
||||||
$STD apt -y install intel-opencl-icd
|
|
||||||
fi
|
|
||||||
|
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Jellyfin"
|
msg_info "Installing Jellyfin"
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||||
|
|||||||
@ -21,6 +21,18 @@ cd /opt/jotty
|
|||||||
$STD yarn --frozen-lockfile
|
$STD yarn --frozen-lockfile
|
||||||
$STD yarn next telemetry disable
|
$STD yarn next telemetry disable
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
|
|
||||||
|
[ -d "public" ] && cp -r public .next/standalone/
|
||||||
|
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||||
|
mkdir -p .next/standalone/.next
|
||||||
|
cp -r .next/static .next/standalone/.next/
|
||||||
|
|
||||||
|
mv .next/standalone /tmp/jotty_standalone
|
||||||
|
rm -rf * .next .git .gitignore .yarn
|
||||||
|
mv /tmp/jotty_standalone/* .
|
||||||
|
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||||
|
rm -rf /tmp/jotty_standalone
|
||||||
|
|
||||||
mkdir -p data/{users,checklists,notes}
|
mkdir -p data/{users,checklists,notes}
|
||||||
|
|
||||||
cat <<EOF >/opt/jotty/.env
|
cat <<EOF >/opt/jotty/.env
|
||||||
@ -55,7 +67,7 @@ After=network.target
|
|||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/jotty
|
WorkingDirectory=/opt/jotty
|
||||||
EnvironmentFile=/opt/jotty/.env
|
EnvironmentFile=/opt/jotty/.env
|
||||||
ExecStart=yarn start
|
ExecStart=/usr/bin/node server.js
|
||||||
Restart=on-abnormal
|
Restart=on-abnormal
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing dependencies"
|
msg_info "Installing dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
|||||||
@ -62,7 +62,7 @@ EOF
|
|||||||
$STD yarn prisma:generate
|
$STD yarn prisma:generate
|
||||||
$STD yarn web:build
|
$STD yarn web:build
|
||||||
$STD yarn prisma:deploy
|
$STD yarn prisma:deploy
|
||||||
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache ~/.rustup
|
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache
|
||||||
rm -rf /root/.cache/yarn
|
rm -rf /root/.cache/yarn
|
||||||
rm -rf /opt/linkwarden/.next/cache
|
rm -rf /opt/linkwarden/.next/cache
|
||||||
msg_ok "Installed Linkwarden"
|
msg_ok "Installed Linkwarden"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y ffmpeg
|
$STD apt install -y ffmpeg
|
||||||
|
|||||||
@ -13,6 +13,8 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y git
|
$STD apt install -y git
|
||||||
$STD apt install -y cifs-utils
|
$STD apt install -y cifs-utils
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
|||||||
@ -41,16 +41,11 @@ EOF
|
|||||||
$STD apt update
|
$STD apt update
|
||||||
msg_ok "Set up Intel® Repositories"
|
msg_ok "Set up Intel® Repositories"
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools,intel-level-zero-gpu,level-zero,level-zero-dev}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
msg_info "Installing Intel® Level Zero"
|
||||||
chgrp video /dev/dri
|
$STD apt -y install intel-level-zero-gpu level-zero level-zero-dev 2>/dev/null || true
|
||||||
chmod 755 /dev/dri
|
msg_ok "Installed Intel® Level Zero"
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
||||||
$STD apt install -y --no-install-recommends intel-basekit-2024.1
|
$STD apt install -y --no-install-recommends intel-basekit-2024.1
|
||||||
|
|||||||
@ -17,6 +17,8 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y ffmpeg
|
$STD apt install -y ffmpeg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
msg_info "Installing Open WebUI"
|
msg_info "Installing Open WebUI"
|
||||||
@ -25,6 +27,36 @@ msg_ok "Installed Open WebUI"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Setting up Intel® Repositories"
|
||||||
|
mkdir -p /usr/share/keyrings
|
||||||
|
curl -fsSL https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpg 2>/dev/null || true
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/intel-gpu.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: https://repositories.intel.com/gpu/ubuntu
|
||||||
|
Suites: jammy
|
||||||
|
Components: client
|
||||||
|
Architectures: amd64 i386
|
||||||
|
Signed-By: /usr/share/keyrings/intel-graphics.gpg
|
||||||
|
EOF
|
||||||
|
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor -o /usr/share/keyrings/oneapi-archive-keyring.gpg 2>/dev/null || true
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/oneAPI.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: https://apt.repos.intel.com/oneapi
|
||||||
|
Suites: all
|
||||||
|
Components: main
|
||||||
|
Signed-By: /usr/share/keyrings/oneapi-archive-keyring.gpg
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
msg_ok "Set up Intel® Repositories"
|
||||||
|
|
||||||
|
msg_info "Installing Intel® Level Zero"
|
||||||
|
$STD apt -y install intel-level-zero-gpu level-zero level-zero-dev 2>/dev/null || true
|
||||||
|
msg_ok "Installed Intel® Level Zero"
|
||||||
|
|
||||||
|
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
||||||
|
$STD apt install -y --no-install-recommends intel-basekit-2024.1 2>/dev/null || true
|
||||||
|
msg_ok "Installed Intel® oneAPI Base Toolkit"
|
||||||
|
|
||||||
msg_info "Installing Ollama"
|
msg_info "Installing Ollama"
|
||||||
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
|
|||||||
@ -13,6 +13,8 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt install -y ffmpeg
|
$STD apt install -y ffmpeg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ catch_errors
|
|||||||
setting_up_container
|
setting_up_container
|
||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
|||||||
@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
setup_hwaccel
|
||||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
|
||||||
chgrp video /dev/dri
|
|
||||||
chmod 755 /dev/dri
|
|
||||||
chmod 660 /dev/dri/*
|
|
||||||
$STD adduser $(id -u -n) video
|
|
||||||
$STD adduser $(id -u -n) render
|
|
||||||
fi
|
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
|
||||||
|
|
||||||
msg_info "Setting Up Plex Media Server Repository"
|
msg_info "Setting Up Plex Media Server Repository"
|
||||||
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
curl -fsSL https://downloads.plex.tv/plex-keys/PlexSign.key | tee /usr/share/keyrings/PlexSign.asc >/dev/null
|
||||||
|
|||||||
@ -14,16 +14,13 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Proxmox Mail Gateway"
|
msg_info "Installing Proxmox Mail Gateway"
|
||||||
curl -fsSL "https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg" -o "/usr/share/keyrings/proxmox-release-trixie.gpg"
|
setup_deb822_repo \
|
||||||
cat <<EOF >/etc/apt/sources.list.d/pmg.sources
|
"pmg" \
|
||||||
Types: deb
|
"https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg" \
|
||||||
URIs: http://download.proxmox.com/debian/pmg
|
"http://download.proxmox.com/debian/pmg" \
|
||||||
Suites: trixie
|
"trixie" \
|
||||||
Components: pmg-no-subscription
|
"pmg-no-subscription"
|
||||||
Signed-By: /usr/share/keyrings/proxmox-release-trixie.gpg
|
$STD apt install -y proxmox-mailgateway-container
|
||||||
EOF
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y install proxmox-mailgateway-container
|
|
||||||
msg_ok "Installed Proxmox Mail Gateway"
|
msg_ok "Installed Proxmox Mail Gateway"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -21,13 +21,8 @@ $STD sh <(curl -fsSL https://get.docker.com)
|
|||||||
systemctl enable -q --now docker
|
systemctl enable -q --now docker
|
||||||
msg_ok "Installed Docker"
|
msg_ok "Installed Docker"
|
||||||
|
|
||||||
msg_info "Installing Pterodactyl Wings"
|
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
|
|
||||||
chmod u+x /usr/local/bin/wings
|
|
||||||
mkdir -p /etc/pterodactyl
|
mkdir -p /etc/pterodactyl
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed Pterodactyl Wings"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/wings.service
|
cat <<EOF >/etc/systemd/system/wings.service
|
||||||
|
|||||||
@ -16,13 +16,12 @@ update_os
|
|||||||
fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant"
|
fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant"
|
||||||
|
|
||||||
msg_info "Creating Qdrant Configuration"
|
msg_info "Creating Qdrant Configuration"
|
||||||
mkdir -p /var/lib/qdrant/storage
|
|
||||||
mkdir -p /var/lib/qdrant/snapshots
|
|
||||||
mkdir -p /etc/qdrant
|
mkdir -p /etc/qdrant
|
||||||
|
mkdir -p /var/lib/qdrant/{storage,snapshots}
|
||||||
chown -R root:root /var/lib/qdrant
|
chown -R root:root /var/lib/qdrant
|
||||||
chmod -R 755 /var/lib/qdrant
|
chmod -R 755 /var/lib/qdrant
|
||||||
|
|
||||||
cat >/etc/qdrant/config.yaml <<EOF
|
cat <<EOF >/etc/qdrant/config.yaml
|
||||||
log_level: INFO
|
log_level: INFO
|
||||||
|
|
||||||
storage:
|
storage:
|
||||||
@ -38,7 +37,7 @@ EOF
|
|||||||
msg_ok "Created Qdrant Configuration"
|
msg_ok "Created Qdrant Configuration"
|
||||||
|
|
||||||
msg_info "Creating Qdrant Service"
|
msg_info "Creating Qdrant Service"
|
||||||
cat >/etc/systemd/system/qdrant.service <<EOF
|
cat <<EOF >/etc/systemd/system/qdrant.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Qdrant Vector Search Engine
|
Description=Qdrant Vector Search Engine
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|||||||
@ -15,51 +15,34 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y apt-transport-https
|
||||||
lsb-release \
|
|
||||||
apt-transport-https \
|
|
||||||
make
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Adding RabbitMQ signing key"
|
setup_deb822_repo \
|
||||||
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
|
"rabbitmq" \
|
||||||
msg_ok "Signing keys added"
|
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
||||||
|
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
||||||
|
"trixie"
|
||||||
|
|
||||||
msg_info "Adding RabbitMQ repository"
|
msg_info "Setting up RabbitMQ"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
$STD apt install -y \
|
||||||
## Modern Erlang/OTP releases
|
erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools \
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl \
|
||||||
|
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
|
||||||
|
$STD apt install -y --fix-missing rabbitmq-server
|
||||||
|
msg_ok "Setup RabbitMQ "
|
||||||
|
|
||||||
## Provides modern RabbitMQ releases
|
msg_info "Starting Service"
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
|
||||||
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
|
||||||
EOF
|
|
||||||
msg_ok "RabbitMQ repository added"
|
|
||||||
|
|
||||||
msg_info "Updating package list"
|
|
||||||
$STD apt update -y
|
|
||||||
msg_ok "Package list updated"
|
|
||||||
|
|
||||||
msg_info "Installing Erlang & RabbitMQ server"
|
|
||||||
$STD apt install -y erlang-base \
|
|
||||||
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
|
|
||||||
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
|
|
||||||
erlang-runtime-tools erlang-snmp erlang-ssl \
|
|
||||||
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl \
|
|
||||||
rabbitmq-server
|
|
||||||
msg_ok "RabbitMQ server installed"
|
|
||||||
|
|
||||||
msg_info "Starting RabbitMQ service"
|
|
||||||
systemctl enable -q --now rabbitmq-server
|
systemctl enable -q --now rabbitmq-server
|
||||||
msg_ok "RabbitMQ service started"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Enabling RabbitMQ management plugin"
|
msg_info "Enabling RabbitMQ Management Plugin"
|
||||||
$STD rabbitmq-plugins enable rabbitmq_management
|
$STD rabbitmq-plugins enable rabbitmq_management
|
||||||
$STD rabbitmqctl enable_feature_flag all
|
$STD rabbitmqctl enable_feature_flag all
|
||||||
msg_ok "RabbitMQ management plugin enabled"
|
msg_ok "Enabled RabbitMQ Management Plugin"
|
||||||
|
|
||||||
msg_info "Create User"
|
msg_info "Creating User"
|
||||||
$STD rabbitmqctl add_user proxmox proxmox
|
$STD rabbitmqctl add_user proxmox proxmox
|
||||||
$STD rabbitmqctl set_user_tags proxmox administrator
|
$STD rabbitmqctl set_user_tags proxmox administrator
|
||||||
$STD rabbitmqctl set_permissions -p / proxmox ".*" ".*" ".*"
|
$STD rabbitmqctl set_permissions -p / proxmox ".*" ".*" ".*"
|
||||||
|
|||||||
@ -13,20 +13,21 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing Dependencies"
|
||||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
setup_deb822_repo \
|
||||||
$STD dpkg -i packages-microsoft-prod.deb
|
"microsoft" \
|
||||||
$STD apt update
|
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||||
$STD apt install -y dotnet-sdk-9.0
|
"https://packages.microsoft.com/debian/13/prod/" \
|
||||||
msg_ok "Installed ASP.NET Core Runtime"
|
"trixie"
|
||||||
|
$STD apt install -y aspnetcore-runtime-9.0
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
|
|
||||||
msg_info "Configuring rdtclient"
|
msg_info "Setting up rdtclient"
|
||||||
cd /opt/rdtc
|
cd /opt/rdtc
|
||||||
mkdir -p data/{db,downloads}
|
mkdir -p data/{db,downloads}
|
||||||
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
||||||
rm -f ~/packages-microsoft-prod.deb
|
|
||||||
msg_ok "Configured rdtclient"
|
msg_ok "Configured rdtclient"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@ -43,7 +44,7 @@ User=root
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
$STD systemctl enable -q --now rdtc
|
systemctl enable -q --now rdtc
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -19,30 +19,19 @@ curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio
|
|||||||
$STD dpkg -i minio.deb
|
$STD dpkg -i minio.deb
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
import_local_ip
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
PG_DB_NAME="rxresume" PG_DB_USER="rxresume" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||||
|
NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
msg_info "Setting up Database"
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
||||||
DB_USER="rxresume"
|
|
||||||
DB_NAME="rxresume"
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED 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 "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|
||||||
msg_ok "Set up Database"
|
|
||||||
|
|
||||||
|
msg_info "Setting up Reactive-Resume"
|
||||||
MINIO_PASS=$(openssl rand -base64 48)
|
MINIO_PASS=$(openssl rand -base64 48)
|
||||||
ACCESS_TOKEN=$(openssl rand -base64 48)
|
ACCESS_TOKEN=$(openssl rand -base64 48)
|
||||||
REFRESH_TOKEN=$(openssl rand -base64 48)
|
REFRESH_TOKEN=$(openssl rand -base64 48)
|
||||||
CHROME_TOKEN=$(openssl rand -hex 32)
|
CHROME_TOKEN=$(openssl rand -hex 32)
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
cd /opt/Reactive-Resume
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
|
||||||
|
|
||||||
msg_info "Installing $APPLICATION"
|
|
||||||
cd /opt/"$APPLICATION"
|
|
||||||
export CI="true"
|
export CI="true"
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NODE_ENV="production"
|
export NODE_ENV="production"
|
||||||
@ -50,7 +39,7 @@ export NEXT_TELEMETRY_DISABLED=1
|
|||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm run prisma:generate
|
$STD pnpm run prisma:generate
|
||||||
msg_ok "Installed $APPLICATION"
|
msg_ok "Setup Reactive-Resume"
|
||||||
|
|
||||||
msg_info "Installing Browserless (Patience)"
|
msg_info "Installing Browserless (Patience)"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
@ -76,13 +65,14 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}"
|
|||||||
MINIO_VOLUMES=/opt/minio
|
MINIO_VOLUMES=/opt/minio
|
||||||
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
||||||
EOF
|
EOF
|
||||||
cat <<EOF >/opt/"$APPLICATION"/.env
|
|
||||||
|
cat <<EOF >/opt/Reactive-Resume/.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
PORT=3000
|
PORT=3000
|
||||||
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
||||||
PUBLIC_URL=http://${LOCAL_IP}:3000
|
PUBLIC_URL=http://${LOCAL_IP}:3000
|
||||||
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
||||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
|
||||||
ACCESS_TOKEN_SECRET=${ACCESS_TOKEN}
|
ACCESS_TOKEN_SECRET=${ACCESS_TOKEN}
|
||||||
REFRESH_TOKEN_SECRET=${REFRESH_TOKEN}
|
REFRESH_TOKEN_SECRET=${REFRESH_TOKEN}
|
||||||
CHROME_PORT=8080
|
CHROME_PORT=8080
|
||||||
@ -110,19 +100,13 @@ STORAGE_SKIP_BUCKET_CHECK=false
|
|||||||
# GOOGLE_CLIENT_SECRET=
|
# GOOGLE_CLIENT_SECRET=
|
||||||
# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback
|
# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/opt/browserless/.env
|
cat <<EOF >/opt/browserless/.env
|
||||||
DEBUG=browserless*,-**:verbose
|
DEBUG=browserless*,-**:verbose
|
||||||
HOST=localhost
|
HOST=localhost
|
||||||
PORT=8080
|
PORT=8080
|
||||||
TOKEN=${CHROME_TOKEN}
|
TOKEN=${CHROME_TOKEN}
|
||||||
EOF
|
EOF
|
||||||
{
|
|
||||||
echo "${APPLICATION} Credentials"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "Minio Root Password: ${MINIO_PASS}"
|
|
||||||
} >>~/"$APPLICATION".creds
|
|
||||||
rm -f /tmp/v"$TAG".zip
|
rm -f /tmp/v"$TAG".zip
|
||||||
rm -f /tmp/minio.deb
|
rm -f /tmp/minio.deb
|
||||||
msg_ok "Configured applications"
|
msg_ok "Configured applications"
|
||||||
@ -137,15 +121,15 @@ WorkingDirectory=/usr/local/bin
|
|||||||
EnvironmentFile=/opt/minio/.env
|
EnvironmentFile=/opt/minio/.env
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
|
cat <<EOF >/etc/systemd/system/Reactive-Resume.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=Reactive-Resume Service
|
||||||
After=network.target postgresql.service minio.service
|
After=network.target postgresql.service minio.service
|
||||||
Wants=postgresql.service minio.service
|
Wants=postgresql.service minio.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/${APPLICATION}
|
WorkingDirectory=/opt/Reactive-Resume
|
||||||
EnvironmentFile=/opt/${APPLICATION}/.env
|
EnvironmentFile=/opt/Reactive-Resume/.env
|
||||||
ExecStart=/usr/bin/pnpm run start
|
ExecStart=/usr/bin/pnpm run start
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
@ -156,7 +140,7 @@ EOF
|
|||||||
cat <<EOF >/etc/systemd/system/browserless.service
|
cat <<EOF >/etc/systemd/system/browserless.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Browserless service
|
Description=Browserless service
|
||||||
After=network.target ${APPLICATION}.service
|
After=network.target Reactive-Resume.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/browserless
|
WorkingDirectory=/opt/browserless
|
||||||
@ -168,7 +152,7 @@ Restart=unless-stopped
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
|
systemctl enable -q --now minio.service Reactive-Resume.service browserless.service
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user