mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-19 21:46:23 +01:00
Compare commits
1 Commits
bar-assist
...
MickLesk-p
| Author | SHA1 | Date | |
|---|---|---|---|
| 29d93fc622 |
49
CHANGELOG.md
49
CHANGELOG.md
@ -10,41 +10,6 @@
|
|||||||
> [!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-19
|
|
||||||
|
|
||||||
### ❔ 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
|
### 🚀 Updated Scripts
|
||||||
@ -53,7 +18,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 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))
|
- update github repo for endurain [@johanngrobe](https://github.com/johanngrobe) ([#10074](https://github.com/community-scripts/ProxmoxVE/pull/10074))
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
@ -61,19 +25,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- use setup_hwaccel for robust hardware acceleration [@MickLesk](https://github.com/MickLesk) ([#10054](https://github.com/community-scripts/ProxmoxVE/pull/10054))
|
- 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))
|
- 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
|
||||||
|
|||||||
@ -34,8 +34,6 @@ 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"
|
||||||
|
|||||||
17
ct/immich.sh
17
ct/immich.sh
@ -74,28 +74,23 @@ 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 /tmp
|
cd /root
|
||||||
if [[ -f ~/.intel_version ]]; then
|
if [[ -f ~/.intel_version ]]; then
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(
|
readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}')
|
||||||
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
|
INTEL_RELEASE="$(grep "intel-opencl-icd" ./Dockerfile | awk -F '_' '{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")
|
||||||
@ -108,7 +103,7 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="2.4.0"
|
RELEASE="2.3.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
|
||||||
|
|||||||
@ -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
|
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache ~/.rustup
|
||||||
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}"
|
||||||
|
|||||||
@ -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:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|||||||
@ -23,23 +23,29 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -x /usr/local/bin/wings ]]; then
|
if [[ ! -f /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 check_for_gh_release "wings" "pterodactyl/wings"; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; 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
|
||||||
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
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
|
||||||
|
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,11 +29,16 @@ 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
|
||||||
setup_deb822_repo \
|
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
||||||
"rabbitmq" \
|
## Modern Erlang/OTP releases
|
||||||
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
||||||
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
|
||||||
"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 aspnetcore-runtime-9.0
|
$STD apt install -y dotnet-sdk-9.0
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/rdtc-backup
|
rm -rf /opt/rdtc-backup
|
||||||
|
|
||||||
|
|||||||
@ -33,11 +33,12 @@ function update_script() {
|
|||||||
systemctl stop Reactive-Resume
|
systemctl stop Reactive-Resume
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
cp /opt/Reactive-Resume/.env /opt/rxresume.env
|
cp /opt/"$APP"/.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 Reactive-Resume"
|
msg_info "Updating $APP"
|
||||||
cd /opt/Reactive-Resume
|
cd /opt/"$APP"
|
||||||
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"
|
||||||
@ -45,8 +46,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/Reactive-Resume/.env
|
mv /opt/rxresume.env /opt/"$APP"/.env
|
||||||
msg_ok "Updated Reactive-Resume"
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
msg_info "Updating Minio"
|
msg_info "Updating Minio"
|
||||||
systemctl stop minio
|
systemctl stop minio
|
||||||
|
|||||||
@ -27,10 +27,9 @@ 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 upgrade -y
|
$STD apt -y upgrade
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated $APP LXC"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@ -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,14 +29,16 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(get_latest_github_release "saltstack/salt")
|
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
if check_for_gh_release "salt" "saltstack/salt"; then
|
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
|
||||||
msg_info "Updating Salt"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
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/scanopy"; then
|
if check_for_gh_release "scanopy" "scanopy-io/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" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
|
|||||||
@ -34,7 +34,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Telegraf"
|
msg_info "Updating Telegraf"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y telegraf
|
$STD apt upgrade telegraf -y
|
||||||
msg_ok "Updated Telegraf"
|
msg_ok "Updated Telegraf"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
16
ct/zabbix.sh
16
ct/zabbix.sh
@ -67,18 +67,10 @@ 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"
|
||||||
if [[ "$ZABBIX_VERSION" == "7.0" ]]; then
|
curl -fsSL "$ZABBIX_DEB_URL" -o /tmp/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"
|
$STD dpkg -i zabbix-release_latest+debian13_all.deb
|
||||||
ZABBIX_DEB_FILE="zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
|
rm -rf /tmp/zabbix-release_latest+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
|
||||||
|
|||||||
@ -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/paymenter.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymeter.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": [
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -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": "/etc/pterodactyl/config.yml",
|
"config_path": "",
|
||||||
"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": [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"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": []
|
|
||||||
}
|
|
||||||
@ -1,258 +1,33 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "forgejo/forgejo",
|
"name": "zabbix/zabbix",
|
||||||
"version": "v15.0.0-dev",
|
"version": "7.0.22",
|
||||||
"date": "2025-12-19T11:43:47Z"
|
"date": "2025-12-17T10:10:49Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fccview/jotty",
|
"name": "traefik/traefik",
|
||||||
"version": "1.14.2",
|
"version": "v2.11.33",
|
||||||
"date": "2025-12-19T11:25:29Z"
|
"date": "2025-12-17T10:10:19Z"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "readeck/readeck",
|
|
||||||
"version": "0.21.5",
|
|
||||||
"date": "2025-12-19T11:22:20Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "release-argus/Argus",
|
|
||||||
"version": "0.28.3",
|
|
||||||
"date": "2025-12-19T11:05:10Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wazuh/wazuh",
|
|
||||||
"version": "coverity-w51-4.14.2",
|
|
||||||
"date": "2025-12-15T12:34:36Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "TuroYT/snowshare",
|
|
||||||
"version": "v1.2.5",
|
|
||||||
"date": "2025-12-19T10:47:19Z"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mattermost/mattermost",
|
"name": "mattermost/mattermost",
|
||||||
"version": "v11.1.2",
|
"version": "v11.1.2",
|
||||||
"date": "2025-12-17T09:26:24Z"
|
"date": "2025-12-17T09:26:24Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.3",
|
|
||||||
"date": "2025-09-20T12:12:33Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.24.487",
|
|
||||||
"date": "2025-12-19T05:55:55Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jhuckaby/Cronicle",
|
|
||||||
"version": "v0.9.102",
|
|
||||||
"date": "2025-12-19T03:45:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "BerriAI/litellm",
|
|
||||||
"version": "v1.80.10.rc.5",
|
|
||||||
"date": "2025-12-19T03:38:23Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "javedh-dev/tracktor",
|
|
||||||
"version": "1.0.1",
|
|
||||||
"date": "2025-12-17T23:14:39Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mealie-recipes/mealie",
|
|
||||||
"version": "v3.8.0",
|
|
||||||
"date": "2025-12-19T01:37:16Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jeedom/core",
|
|
||||||
"version": "4.5.1",
|
|
||||||
"date": "2025-12-19T00:27:05Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "steveiliop56/tinyauth",
|
|
||||||
"version": "v4.1.0",
|
|
||||||
"date": "2025-11-23T12:13:34Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "moghtech/komodo",
|
|
||||||
"version": "v1.19.5",
|
|
||||||
"date": "2025-09-27T20:59:46Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "metabase/metabase",
|
|
||||||
"version": "v0.57.x",
|
|
||||||
"date": "2025-12-18T22:02:32Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "chrisbenincasa/tunarr",
|
|
||||||
"version": "v1.0.7",
|
|
||||||
"date": "2025-12-18T21:27:26Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Stirling-Tools/Stirling-PDF",
|
|
||||||
"version": "v2.1.5",
|
|
||||||
"date": "2025-12-18T20:48:01Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "scanopy/scanopy",
|
|
||||||
"version": "v0.12.4",
|
|
||||||
"date": "2025-12-18T19:25:47Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "rcourtman/Pulse",
|
|
||||||
"version": "v4.36.2",
|
|
||||||
"date": "2025-12-03T22:46:29Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "saltstack/salt",
|
|
||||||
"version": "v3007.10",
|
|
||||||
"date": "2025-12-18T18:14:16Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "go-gitea/gitea",
|
|
||||||
"version": "v1.25.3",
|
|
||||||
"date": "2025-12-18T18:11:48Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "karlomikus/bar-assistant",
|
|
||||||
"version": "v5.11.0",
|
|
||||||
"date": "2025-12-18T18:06:05Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "msgbyte/tianji",
|
|
||||||
"version": "v1.30.23",
|
|
||||||
"date": "2025-12-18T16:55:01Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "YunoHost/yunohost",
|
|
||||||
"version": "debian/12.1.37",
|
|
||||||
"date": "2025-12-18T16:43:23Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.13.5",
|
|
||||||
"date": "2025-12-18T16:39:08Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "meilisearch/meilisearch",
|
|
||||||
"version": "latest",
|
|
||||||
"date": "2025-12-18T16:38:45Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.4.7",
|
|
||||||
"date": "2025-12-01T08:14:11Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "paperless-ngx/paperless-ngx",
|
|
||||||
"version": "v2.20.3",
|
|
||||||
"date": "2025-12-18T16:10:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.123.7",
|
|
||||||
"date": "2025-12-17T14:01:25Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "immich-app/immich",
|
|
||||||
"version": "v2.4.0",
|
|
||||||
"date": "2025-12-18T14:51:33Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "docker/compose",
|
|
||||||
"version": "v5.0.1",
|
|
||||||
"date": "2025-12-18T14:22:38Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "coollabsio/coolify",
|
"name": "coollabsio/coolify",
|
||||||
"version": "v4.0.0-beta.458",
|
"version": "v4.0.0-beta.455",
|
||||||
"date": "2025-12-18T12:23:23Z"
|
"date": "2025-12-17T09:24:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "juanfont/headscale",
|
"name": "TuroYT/snowshare",
|
||||||
"version": "v0.27.1",
|
"version": "v1.2.2",
|
||||||
"date": "2025-11-11T19:32:29Z"
|
"date": "2025-12-17T09:07:12Z"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "tailscale/tailscale",
|
|
||||||
"version": "v1.92.4",
|
|
||||||
"date": "2025-12-18T10:32:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Kozea/Radicale",
|
|
||||||
"version": "v3.5.10",
|
|
||||||
"date": "2025-12-18T07:14:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.4.6",
|
|
||||||
"date": "2025-12-18T07:00:26Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "chrisvel/tududi",
|
|
||||||
"version": "v0.88.1",
|
|
||||||
"date": "2025-12-18T05:01:07Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "comfyanonymous/ComfyUI",
|
|
||||||
"version": "v0.5.1",
|
|
||||||
"date": "2025-12-18T03:08:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "openobserve/openobserve",
|
|
||||||
"version": "v0.30.1",
|
|
||||||
"date": "2025-12-18T02:41:34Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "goauthentik/authentik",
|
|
||||||
"version": "version/2025.10.3",
|
|
||||||
"date": "2025-12-16T18:00:53Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "emqx/emqx",
|
|
||||||
"version": "6.1.0-alpha.2",
|
|
||||||
"date": "2025-12-17T20:15:23Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "influxdata/influxdb",
|
|
||||||
"version": "v2.8.0",
|
|
||||||
"date": "2025-12-12T20:25:00Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "HydroshieldMKII/Guardian",
|
|
||||||
"version": "v1.3.2",
|
|
||||||
"date": "2025-12-17T19:31:10Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "coder/code-server",
|
|
||||||
"version": "v4.107.0",
|
|
||||||
"date": "2025-12-17T18:59:21Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "neo4j/neo4j",
|
|
||||||
"version": "5.26.19",
|
|
||||||
"date": "2025-12-17T18:17:55Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "semaphoreui/semaphore",
|
|
||||||
"version": "v2.16.47",
|
|
||||||
"date": "2025-12-17T15:36:28Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "NodeBB/NodeBB",
|
|
||||||
"version": "v4.7.1",
|
|
||||||
"date": "2025-12-17T15:18:55Z"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bunkerity/bunkerweb",
|
"name": "bunkerity/bunkerweb",
|
||||||
"version": "testing",
|
"version": "v1.6.7-rc1",
|
||||||
"date": "2025-12-16T11:13:20Z"
|
"date": "2025-12-17T08:57:07Z"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "traefik/traefik",
|
|
||||||
"version": "v2.11.33",
|
|
||||||
"date": "2025-12-17T10:10:19Z"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zitadel/zitadel",
|
"name": "zitadel/zitadel",
|
||||||
@ -264,6 +39,11 @@
|
|||||||
"version": "v0.105.1",
|
"version": "v0.105.1",
|
||||||
"date": "2025-12-17T08:48:52Z"
|
"date": "2025-12-17T08:48:52Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "comfyanonymous/ComfyUI",
|
||||||
|
"version": "v0.5.0",
|
||||||
|
"date": "2025-12-17T08:46:11Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "passbolt/passbolt_api",
|
"name": "passbolt/passbolt_api",
|
||||||
"version": "v5.8.0-test.3",
|
"version": "v5.8.0-test.3",
|
||||||
@ -279,6 +59,11 @@
|
|||||||
"version": "v11.9.0",
|
"version": "v11.9.0",
|
||||||
"date": "2025-12-17T08:26:50Z"
|
"date": "2025-12-17T08:26:50Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "BerriAI/litellm",
|
||||||
|
"version": "v1.80.10.rc.3",
|
||||||
|
"date": "2025-12-17T07:48:43Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "firefly-iii/firefly-iii",
|
"name": "firefly-iii/firefly-iii",
|
||||||
"version": "v6.4.14",
|
"version": "v6.4.14",
|
||||||
@ -289,16 +74,36 @@
|
|||||||
"version": "v25.4",
|
"version": "v25.4",
|
||||||
"date": "2025-10-09T10:27:01Z"
|
"date": "2025-10-09T10:27:01Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.24.468",
|
||||||
|
"date": "2025-12-17T05:55:30Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "nickheyer/discopanel",
|
"name": "nickheyer/discopanel",
|
||||||
"version": "v1.0.16",
|
"version": "v1.0.16",
|
||||||
"date": "2025-12-17T04:47:13Z"
|
"date": "2025-12-17T04:47:13Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "metabase/metabase",
|
||||||
|
"version": "v0.58.0-beta",
|
||||||
|
"date": "2025-12-17T03:57:33Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "9001/copyparty",
|
"name": "9001/copyparty",
|
||||||
"version": "v1.19.23",
|
"version": "v1.19.23",
|
||||||
"date": "2025-12-17T00:51:11Z"
|
"date": "2025-12-17T00:51:11Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "jeedom/core",
|
||||||
|
"version": "4.5",
|
||||||
|
"date": "2025-12-17T00:27:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "steveiliop56/tinyauth",
|
||||||
|
"version": "v4.1.0",
|
||||||
|
"date": "2025-11-23T12:13:34Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "esphome/esphome",
|
"name": "esphome/esphome",
|
||||||
"version": "2025.12.0",
|
"version": "2025.12.0",
|
||||||
@ -314,6 +119,16 @@
|
|||||||
"version": "1.1.7",
|
"version": "1.1.7",
|
||||||
"date": "2025-12-16T21:44:58Z"
|
"date": "2025-12-16T21:44:58Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "tailscale/tailscale",
|
||||||
|
"version": "v1.92.3",
|
||||||
|
"date": "2025-12-16T21:19:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.4.7",
|
||||||
|
"date": "2025-12-01T08:14:11Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "prometheus-pve/prometheus-pve-exporter",
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
"version": "v3.7.0",
|
"version": "v3.7.0",
|
||||||
@ -324,31 +139,86 @@
|
|||||||
"version": "v4.4.8",
|
"version": "v4.4.8",
|
||||||
"date": "2025-12-09T16:29:50Z"
|
"date": "2025-12-09T16:29:50Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "goauthentik/authentik",
|
||||||
|
"version": "version/2025.10.3",
|
||||||
|
"date": "2025-12-16T18:00:53Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "crafty-controller/crafty-4",
|
"name": "crafty-controller/crafty-4",
|
||||||
"version": "v4.6.2",
|
"version": "v4.6.2",
|
||||||
"date": "2025-12-16T17:54:19Z"
|
"date": "2025-12-16T17:54:19Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "chrisbenincasa/tunarr",
|
||||||
|
"version": "v1.0.4",
|
||||||
|
"date": "2025-12-16T17:31:11Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "fuma-nama/fumadocs",
|
"name": "fuma-nama/fumadocs",
|
||||||
"version": "fumadocs-mdx@14.1.1",
|
"version": "fumadocs-mdx@14.1.1",
|
||||||
"date": "2025-12-16T15:32:59Z"
|
"date": "2025-12-16T15:32:59Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "meilisearch/meilisearch",
|
||||||
|
"version": "prototype-v1.30.0-support-aws-irsa.2",
|
||||||
|
"date": "2025-12-16T14:35:14Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "jenkinsci/jenkins",
|
"name": "jenkinsci/jenkins",
|
||||||
"version": "jenkins-2.542",
|
"version": "jenkins-2.542",
|
||||||
"date": "2025-12-16T13:49:44Z"
|
"date": "2025-12-16T13:49:44Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "release-argus/Argus",
|
||||||
|
"version": "0.28.2",
|
||||||
|
"date": "2025-12-16T12:36:26Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "prometheus/prometheus",
|
"name": "prometheus/prometheus",
|
||||||
"version": "v3.8.1",
|
"version": "v3.8.1",
|
||||||
"date": "2025-12-16T09:59:22Z"
|
"date": "2025-12-16T09:59:22Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "rcourtman/Pulse",
|
||||||
|
"version": "v4.36.2",
|
||||||
|
"date": "2025-12-03T22:46:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.123.6",
|
||||||
|
"date": "2025-12-15T14:22:59Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "sabnzbd/sabnzbd",
|
"name": "sabnzbd/sabnzbd",
|
||||||
"version": "4.5.5",
|
"version": "4.5.5",
|
||||||
"date": "2025-10-24T11:12:22Z"
|
"date": "2025-10-24T11:12:22Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.3",
|
||||||
|
"date": "2025-09-20T12:12:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.13.4-rc2",
|
||||||
|
"date": "2025-12-16T02:57:20Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Stirling-Tools/Stirling-PDF",
|
||||||
|
"version": "v2.1.4",
|
||||||
|
"date": "2025-12-16T00:02:18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "scanopy/scanopy",
|
||||||
|
"version": "v0.12.1",
|
||||||
|
"date": "2025-12-15T22:21:36Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "semaphoreui/semaphore",
|
||||||
|
"version": "v2.16.46",
|
||||||
|
"date": "2025-12-15T22:07:08Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "azukaar/Cosmos-Server",
|
"name": "azukaar/Cosmos-Server",
|
||||||
"version": "v0.19.0",
|
"version": "v0.19.0",
|
||||||
@ -394,6 +264,11 @@
|
|||||||
"version": "v0.16.3",
|
"version": "v0.16.3",
|
||||||
"date": "2025-12-15T12:56:50Z"
|
"date": "2025-12-15T12:56:50Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "wazuh/wazuh",
|
||||||
|
"version": "coverity-w51-4.14.2",
|
||||||
|
"date": "2025-12-15T12:34:36Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "LimeSurvey/LimeSurvey",
|
"name": "LimeSurvey/LimeSurvey",
|
||||||
"version": "6.16.2+251209",
|
"version": "6.16.2+251209",
|
||||||
@ -489,6 +364,11 @@
|
|||||||
"version": "v4.4.0",
|
"version": "v4.4.0",
|
||||||
"date": "2025-12-13T22:49:07Z"
|
"date": "2025-12-13T22:49:07Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "karlomikus/bar-assistant",
|
||||||
|
"version": "v5.10.0",
|
||||||
|
"date": "2025-12-13T20:17:27Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "fosrl/pangolin",
|
"name": "fosrl/pangolin",
|
||||||
"version": "1.13.1",
|
"version": "1.13.1",
|
||||||
@ -524,16 +404,41 @@
|
|||||||
"version": "cli/v0.29.1",
|
"version": "cli/v0.29.1",
|
||||||
"date": "2025-12-13T13:55:51Z"
|
"date": "2025-12-13T13:55:51Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "chrisvel/tududi",
|
||||||
|
"version": "v0.88.0",
|
||||||
|
"date": "2025-12-13T09:36:24Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Dokploy/dokploy",
|
"name": "Dokploy/dokploy",
|
||||||
"version": "v0.26.2",
|
"version": "v0.26.2",
|
||||||
"date": "2025-12-13T07:48:09Z"
|
"date": "2025-12-13T07:48:09Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mealie-recipes/mealie",
|
||||||
|
"version": "v3.7.0",
|
||||||
|
"date": "2025-12-13T01:20:58Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "paperless-ngx/paperless-ngx",
|
||||||
|
"version": "v2.20.2",
|
||||||
|
"date": "2025-12-12T23:47:48Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fccview/jotty",
|
||||||
|
"version": "1.13.1",
|
||||||
|
"date": "2025-12-12T21:34:22Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mongodb/mongo",
|
"name": "mongodb/mongo",
|
||||||
"version": "r7.0.27",
|
"version": "r7.0.27",
|
||||||
"date": "2025-12-12T20:54:32Z"
|
"date": "2025-12-12T20:54:32Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "influxdata/influxdb",
|
||||||
|
"version": "v2.8.0",
|
||||||
|
"date": "2025-12-12T20:25:00Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "homarr-labs/homarr",
|
"name": "homarr-labs/homarr",
|
||||||
"version": "v1.46.0",
|
"version": "v1.46.0",
|
||||||
@ -554,6 +459,11 @@
|
|||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
"date": "2025-12-03T16:12:05Z"
|
"date": "2025-12-03T16:12:05Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "openobserve/openobserve",
|
||||||
|
"version": "v0.30.0",
|
||||||
|
"date": "2025-12-12T14:03:52Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "ventoy/Ventoy",
|
"name": "ventoy/Ventoy",
|
||||||
"version": "v1.1.09",
|
"version": "v1.1.09",
|
||||||
@ -574,6 +484,11 @@
|
|||||||
"version": "v8.3.7",
|
"version": "v8.3.7",
|
||||||
"date": "2025-12-12T09:13:40Z"
|
"date": "2025-12-12T09:13:40Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.106.3",
|
||||||
|
"date": "2025-12-01T22:06:12Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "theonedev/onedev",
|
"name": "theonedev/onedev",
|
||||||
"version": "v13.1.5",
|
"version": "v13.1.5",
|
||||||
@ -589,6 +504,11 @@
|
|||||||
"version": "0.43.1",
|
"version": "0.43.1",
|
||||||
"date": "2025-12-11T22:45:52Z"
|
"date": "2025-12-11T22:45:52Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "msgbyte/tianji",
|
||||||
|
"version": "v1.30.22",
|
||||||
|
"date": "2025-12-11T18:02:06Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "pommee/goaway",
|
"name": "pommee/goaway",
|
||||||
"version": "v0.62.24",
|
"version": "v0.62.24",
|
||||||
@ -599,6 +519,11 @@
|
|||||||
"version": "v2.13.2",
|
"version": "v2.13.2",
|
||||||
"date": "2025-12-11T06:31:24Z"
|
"date": "2025-12-11T06:31:24Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "moghtech/komodo",
|
||||||
|
"version": "v1.19.5",
|
||||||
|
"date": "2025-09-27T20:59:46Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "TwiN/gatus",
|
"name": "TwiN/gatus",
|
||||||
"version": "v5.33.1",
|
"version": "v5.33.1",
|
||||||
@ -659,6 +584,11 @@
|
|||||||
"version": "v1.144.0",
|
"version": "v1.144.0",
|
||||||
"date": "2025-12-09T16:29:00Z"
|
"date": "2025-12-09T16:29:00Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "readeck/readeck",
|
||||||
|
"version": "0.21.4",
|
||||||
|
"date": "2025-12-09T15:25:28Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "gelbphoenix/autocaliweb",
|
"name": "gelbphoenix/autocaliweb",
|
||||||
"version": "v0.11.3",
|
"version": "v0.11.3",
|
||||||
@ -754,6 +684,11 @@
|
|||||||
"version": "v0.28.0",
|
"version": "v0.28.0",
|
||||||
"date": "2025-12-06T13:32:18Z"
|
"date": "2025-12-06T13:32:18Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "YunoHost/yunohost",
|
||||||
|
"version": "debian/13.0.2",
|
||||||
|
"date": "2025-12-06T10:46:12Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "toniebox-reverse-engineering/teddycloud",
|
"name": "toniebox-reverse-engineering/teddycloud",
|
||||||
"version": "tc_v0.6.5",
|
"version": "tc_v0.6.5",
|
||||||
@ -769,6 +704,11 @@
|
|||||||
"version": "v3.3.0",
|
"version": "v3.3.0",
|
||||||
"date": "2025-12-06T06:18:23Z"
|
"date": "2025-12-06T06:18:23Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "HydroshieldMKII/Guardian",
|
||||||
|
"version": "v1.3.1",
|
||||||
|
"date": "2025-12-05T19:12:48Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "community-scripts/ProxmoxVE-Local",
|
"name": "community-scripts/ProxmoxVE-Local",
|
||||||
"version": "v0.5.2",
|
"version": "v0.5.2",
|
||||||
@ -779,6 +719,11 @@
|
|||||||
"version": "flowise@3.0.12",
|
"version": "flowise@3.0.12",
|
||||||
"date": "2025-12-05T15:02:01Z"
|
"date": "2025-12-05T15:02:01Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "emqx/emqx",
|
||||||
|
"version": "e6.1.0-streams.1",
|
||||||
|
"date": "2025-12-05T12:27:36Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "transmission/transmission",
|
"name": "transmission/transmission",
|
||||||
"version": "4.0.1-beta.1",
|
"version": "4.0.1-beta.1",
|
||||||
@ -854,6 +799,16 @@
|
|||||||
"version": "v6.2.4",
|
"version": "v6.2.4",
|
||||||
"date": "2025-12-02T17:47:52Z"
|
"date": "2025-12-02T17:47:52Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "docker/compose",
|
||||||
|
"version": "v5.0.0",
|
||||||
|
"date": "2025-12-02T10:33:31Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "neo4j/neo4j",
|
||||||
|
"version": "5.26.18",
|
||||||
|
"date": "2025-12-02T09:25:19Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "syncthing/syncthing",
|
"name": "syncthing/syncthing",
|
||||||
"version": "v2.0.12",
|
"version": "v2.0.12",
|
||||||
@ -894,6 +849,11 @@
|
|||||||
"version": "v2.4.7",
|
"version": "v2.4.7",
|
||||||
"date": "2025-11-30T20:59:51Z"
|
"date": "2025-11-30T20:59:51Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "juanfont/headscale",
|
||||||
|
"version": "v0.27.1",
|
||||||
|
"date": "2025-11-11T19:32:29Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "hargata/lubelog",
|
"name": "hargata/lubelog",
|
||||||
"version": "v1.5.5",
|
"version": "v1.5.5",
|
||||||
@ -919,6 +879,11 @@
|
|||||||
"version": "v25.9.0",
|
"version": "v25.9.0",
|
||||||
"date": "2025-11-29T16:37:28Z"
|
"date": "2025-11-29T16:37:28Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Kozea/Radicale",
|
||||||
|
"version": "v3.5.9",
|
||||||
|
"date": "2025-11-29T14:35:45Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "authelia/authelia",
|
"name": "authelia/authelia",
|
||||||
"version": "v4.39.15",
|
"version": "v4.39.15",
|
||||||
@ -964,6 +929,16 @@
|
|||||||
"version": "v1.7.8",
|
"version": "v1.7.8",
|
||||||
"date": "2025-11-26T22:35:03Z"
|
"date": "2025-11-26T22:35:03Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "jhuckaby/Cronicle",
|
||||||
|
"version": "v0.9.101",
|
||||||
|
"date": "2025-11-26T17:14:35Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NodeBB/NodeBB",
|
||||||
|
"version": "v4.7.0",
|
||||||
|
"date": "2025-11-26T16:59:45Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "NLnetLabs/unbound",
|
"name": "NLnetLabs/unbound",
|
||||||
"version": "release-1.24.2",
|
"version": "release-1.24.2",
|
||||||
@ -1004,6 +979,11 @@
|
|||||||
"version": "v2.5.0",
|
"version": "v2.5.0",
|
||||||
"date": "2025-11-23T12:49:50Z"
|
"date": "2025-11-23T12:49:50Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "go-gitea/gitea",
|
||||||
|
"version": "v1.25.2",
|
||||||
|
"date": "2025-11-22T19:37:02Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "TechnitiumSoftware/DnsServer",
|
"name": "TechnitiumSoftware/DnsServer",
|
||||||
"version": "v14.2.0",
|
"version": "v14.2.0",
|
||||||
@ -1014,6 +994,11 @@
|
|||||||
"version": "v5.6.1",
|
"version": "v5.6.1",
|
||||||
"date": "2025-11-21T16:51:21Z"
|
"date": "2025-11-21T16:51:21Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "forgejo/forgejo",
|
||||||
|
"version": "v13.0.3",
|
||||||
|
"date": "2025-11-21T12:43:04Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "seriousm4x/UpSnap",
|
"name": "seriousm4x/UpSnap",
|
||||||
"version": "5.2.4",
|
"version": "5.2.4",
|
||||||
@ -1034,6 +1019,11 @@
|
|||||||
"version": "v2.1.11",
|
"version": "v2.1.11",
|
||||||
"date": "2025-11-20T20:14:44Z"
|
"date": "2025-11-20T20:14:44Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "saltstack/salt",
|
||||||
|
"version": "v3007.9",
|
||||||
|
"date": "2025-11-20T17:58:32Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "kimai/kimai",
|
"name": "kimai/kimai",
|
||||||
"version": "2.44.0",
|
"version": "2.44.0",
|
||||||
@ -1049,6 +1039,11 @@
|
|||||||
"version": "5.12.0",
|
"version": "5.12.0",
|
||||||
"date": "2025-11-20T06:18:58Z"
|
"date": "2025-11-20T06:18:58Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "immich-app/immich",
|
||||||
|
"version": "v2.3.1",
|
||||||
|
"date": "2025-11-20T03:10:27Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "nextcloud/nextcloudpi",
|
"name": "nextcloud/nextcloudpi",
|
||||||
"version": "v1.56.0",
|
"version": "v1.56.0",
|
||||||
@ -1184,6 +1179,11 @@
|
|||||||
"version": "v0.9.1",
|
"version": "v0.9.1",
|
||||||
"date": "2025-11-06T02:26:53Z"
|
"date": "2025-11-06T02:26:53Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "javedh-dev/tracktor",
|
||||||
|
"version": "0.5.1",
|
||||||
|
"date": "2025-11-05T16:14:37Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "getumbrel/umbrel",
|
"name": "getumbrel/umbrel",
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
|
|||||||
@ -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.4" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
PHP_VERSION="8.3" 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
|
||||||
|
|||||||
@ -99,15 +99,10 @@ 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 -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-core_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/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-opencl_1.0.17384.11_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/intel-opencl-icd_24.31.30508.7_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" \
|
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-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
|
||||||
@ -296,7 +291,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.4.0" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.3.1" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (patience)"
|
msg_info "Installing ${APPLICATION} (patience)"
|
||||||
|
|
||||||
|
|||||||
@ -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
|
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache ~/.rustup
|
||||||
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"
|
||||||
|
|||||||
@ -21,8 +21,13 @@ $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"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
|
msg_info "Installing Pterodactyl Wings"
|
||||||
|
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,12 +16,13 @@ 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 <<EOF >/etc/qdrant/config.yaml
|
cat >/etc/qdrant/config.yaml <<EOF
|
||||||
log_level: INFO
|
log_level: INFO
|
||||||
|
|
||||||
storage:
|
storage:
|
||||||
@ -37,7 +38,7 @@ EOF
|
|||||||
msg_ok "Created Qdrant Configuration"
|
msg_ok "Created Qdrant Configuration"
|
||||||
|
|
||||||
msg_info "Creating Qdrant Service"
|
msg_info "Creating Qdrant Service"
|
||||||
cat <<EOF >/etc/systemd/system/qdrant.service
|
cat >/etc/systemd/system/qdrant.service <<EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Qdrant Vector Search Engine
|
Description=Qdrant Vector Search Engine
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|||||||
@ -15,34 +15,51 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y apt-transport-https
|
$STD apt install -y \
|
||||||
|
lsb-release \
|
||||||
|
apt-transport-https \
|
||||||
|
make
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_deb822_repo \
|
msg_info "Adding RabbitMQ signing key"
|
||||||
"rabbitmq" \
|
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
|
||||||
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
|
msg_ok "Signing keys added"
|
||||||
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
|
|
||||||
"trixie"
|
|
||||||
|
|
||||||
msg_info "Setting up RabbitMQ"
|
msg_info "Adding RabbitMQ repository"
|
||||||
$STD apt install -y \
|
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
||||||
erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp \
|
## Modern Erlang/OTP releases
|
||||||
erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools \
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl \
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
|
|
||||||
$STD apt install -y --fix-missing rabbitmq-server
|
|
||||||
msg_ok "Setup RabbitMQ "
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
## Provides modern RabbitMQ releases
|
||||||
|
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 "Started Service"
|
msg_ok "RabbitMQ service started"
|
||||||
|
|
||||||
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 "Enabled RabbitMQ Management Plugin"
|
msg_ok "RabbitMQ management plugin enabled"
|
||||||
|
|
||||||
msg_info "Creating User"
|
msg_info "Create 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,21 +13,20 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing ASP.NET Core Runtime"
|
||||||
setup_deb822_repo \
|
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
||||||
"microsoft" \
|
$STD dpkg -i packages-microsoft-prod.deb
|
||||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
$STD apt update
|
||||||
"https://packages.microsoft.com/debian/13/prod/" \
|
$STD apt install -y dotnet-sdk-9.0
|
||||||
"trixie"
|
msg_ok "Installed ASP.NET Core Runtime"
|
||||||
$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 "Setting up rdtclient"
|
msg_info "Configuring 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"
|
||||||
@ -44,7 +43,7 @@ User=root
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now rdtc
|
$STD systemctl enable -q --now rdtc
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -19,19 +19,30 @@ 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
|
||||||
PG_DB_NAME="rxresume" PG_DB_USER="rxresume" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
|
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
msg_info "Setting up Database"
|
||||||
|
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"
|
||||||
@ -39,7 +50,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 "Setup Reactive-Resume"
|
msg_ok "Installed $APPLICATION"
|
||||||
|
|
||||||
msg_info "Installing Browserless (Patience)"
|
msg_info "Installing Browserless (Patience)"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
@ -65,14 +76,13 @@ 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://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${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
|
||||||
@ -100,13 +110,19 @@ 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"
|
||||||
@ -121,15 +137,15 @@ WorkingDirectory=/usr/local/bin
|
|||||||
EnvironmentFile=/opt/minio/.env
|
EnvironmentFile=/opt/minio/.env
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/Reactive-Resume.service
|
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Reactive-Resume Service
|
Description=${APPLICATION} 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/Reactive-Resume
|
WorkingDirectory=/opt/${APPLICATION}
|
||||||
EnvironmentFile=/opt/Reactive-Resume/.env
|
EnvironmentFile=/opt/${APPLICATION}/.env
|
||||||
ExecStart=/usr/bin/pnpm run start
|
ExecStart=/usr/bin/pnpm run start
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
@ -140,7 +156,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 Reactive-Resume.service
|
After=network.target ${APPLICATION}.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/browserless
|
WorkingDirectory=/opt/browserless
|
||||||
@ -152,7 +168,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 Reactive-Resume.service browserless.service
|
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -14,22 +14,25 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y apt-transport-https
|
$STD apt install -y \
|
||||||
|
apt-transport-https \
|
||||||
|
lsb-release
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Redis Repository"
|
msg_info "Installing Redis"
|
||||||
setup_deb822_repo \
|
curl -fsSL "https://packages.redis.io/gpg" | gpg --dearmor >/usr/share/keyrings/redis-archive-keyring.gpg
|
||||||
"redis" \
|
cat <<EOF >/etc/apt/sources.list.d/redis.sources
|
||||||
"https://packages.redis.io/gpg" \
|
Types: deb
|
||||||
"https://packages.redis.io/deb" \
|
URIs: https://packages.redis.io/deb
|
||||||
"trixie"
|
Suites: $(lsb_release -cs)
|
||||||
msg_ok "Setup Redis Repository"
|
Components: main
|
||||||
|
Signed-By: /usr/share/keyrings/redis-archive-keyring.gpg
|
||||||
msg_info "Setting up Redis"
|
EOF
|
||||||
|
$STD apt update
|
||||||
$STD apt install -y redis
|
$STD apt install -y redis
|
||||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
|
||||||
systemctl enable -q --now redis-server
|
systemctl enable -q --now redis-server
|
||||||
msg_ok "Setup Redis"
|
msg_ok "Installed Redis"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@ -23,7 +23,25 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
JAVA_VERSION="24" setup_java
|
JAVA_VERSION="24" setup_java
|
||||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||||
PG_DB_NAME="reitti_db" PG_DB_USER="reitti" setup_postgresql_db
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME="reitti_db"
|
||||||
|
DB_USER="reitti"
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||||
|
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis;"
|
||||||
|
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"
|
||||||
|
{
|
||||||
|
echo "Reitti Credentials"
|
||||||
|
echo "Database Name: $DB_NAME"
|
||||||
|
echo "Database User: $DB_USER"
|
||||||
|
echo "Database Password: $DB_PASS"
|
||||||
|
} >>~/reitti.creds
|
||||||
|
msg_ok "PostgreSQL Setup Completed"
|
||||||
|
|
||||||
msg_info "Configuring RabbitMQ"
|
msg_info "Configuring RabbitMQ"
|
||||||
RABBIT_USER="reitti"
|
RABBIT_USER="reitti"
|
||||||
@ -53,9 +71,9 @@ cat <<EOF >/opt/reitti/application.properties
|
|||||||
reitti.server.advertise-uri=http://127.0.0.1:8080
|
reitti.server.advertise-uri=http://127.0.0.1:8080
|
||||||
|
|
||||||
# PostgreSQL Database Connection
|
# PostgreSQL Database Connection
|
||||||
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$PG_DB_NAME
|
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$DB_NAME
|
||||||
spring.datasource.username=$PG_DB_USER
|
spring.datasource.username=$DB_USER
|
||||||
spring.datasource.password=$PG_DB_PASS
|
spring.datasource.password=$DB_PASS
|
||||||
spring.datasource.driver-class-name=org.postgresql.Driver
|
spring.datasource.driver-class-name=org.postgresql.Driver
|
||||||
|
|
||||||
# Flyway Database Migrations
|
# Flyway Database Migrations
|
||||||
@ -114,7 +132,7 @@ Restart=on-failure
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/photon.service
|
cat <<'EOF' >/etc/systemd/system/photon.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Photon Geocoding Service (Germany, OpenSearch)
|
Description=Photon Geocoding Service (Germany, OpenSearch)
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|||||||
@ -14,13 +14,16 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting up Resilio Sync Repository"
|
msg_info "Setting up Resilio Sync Repository"
|
||||||
setup_deb822_repo \
|
curl -fsSL "https://linux-packages.resilio.com/resilio-sync/key.asc" >/usr/share/keyrings/resilio-sync-archive-keyring.asc
|
||||||
"resilio" \
|
cat <<EOF >/etc/apt/sources.list.d/resilio-sync.sources
|
||||||
"https://linux-packages.resilio.com/resilio-sync/key.asc" \
|
Types: deb
|
||||||
"http://linux-packages.resilio.com/resilio-sync/deb" \
|
URIs: http://linux-packages.resilio.com/resilio-sync/deb
|
||||||
"resilio-sync" \
|
Suites: resilio-sync
|
||||||
"non-free"
|
Components: non-free
|
||||||
msg_ok "Setup Resilio Sync Repository"
|
Signed-By: /usr/share/keyrings/resilio-sync-archive-keyring.asc
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
msg_ok "Resilio Sync Repository Setup"
|
||||||
|
|
||||||
msg_info "Installing Resilio Sync"
|
msg_info "Installing Resilio Sync"
|
||||||
$STD apt install -y resilio-sync
|
$STD apt install -y resilio-sync
|
||||||
|
|||||||
@ -13,16 +13,19 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting up Salt Repo"
|
msg_info "Installing Dependencies"
|
||||||
setup_deb822_repo \
|
$STD apt install -y jq
|
||||||
"salt" \
|
msg_ok "Installed Dependencies"
|
||||||
"https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public" \
|
|
||||||
"https://packages.broadcom.com/artifactory/saltproject-deb" \
|
msg_info "Setup Salt Repo"
|
||||||
"stable"
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
|
||||||
|
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
|
||||||
|
$STD apt update
|
||||||
msg_ok "Setup Salt Repo"
|
msg_ok "Setup Salt Repo"
|
||||||
|
|
||||||
msg_info "Installing Salt"
|
msg_info "Installing Salt"
|
||||||
RELEASE=$(get_latest_github_release "saltstack/salt")
|
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
|
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
|
||||||
Package: salt-*
|
Package: salt-*
|
||||||
Pin: version ${RELEASE}
|
Pin: version ${RELEASE}
|
||||||
|
|||||||
@ -15,15 +15,22 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y git
|
$STD apt install -y git
|
||||||
setup_deb822_repo \
|
|
||||||
"ansible" \
|
|
||||||
"https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" \
|
|
||||||
"http://ppa.launchpad.net/ansible/ansible/ubuntu" \
|
|
||||||
"jammy"
|
|
||||||
$STD apt install -y ansible
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
msg_info "Setting up Ansible"
|
||||||
|
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmor -o /usr/share/keyrings/ansible-archive-keyring.gpg
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/ansible.sources
|
||||||
|
Types: deb
|
||||||
|
URIs: http://ppa.launchpad.net/ansible/ansible/ubuntu
|
||||||
|
Suites: jammy
|
||||||
|
Components: main
|
||||||
|
Signed-By: /usr/share/keyrings/ansible-archive-keyring.gpg
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y ansible
|
||||||
|
msg_ok "Set up Ansible"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||||
|
|
||||||
msg_info "Configuring Semaphore"
|
msg_info "Configuring Semaphore"
|
||||||
mkdir -p /opt/semaphore
|
mkdir -p /opt/semaphore
|
||||||
@ -63,6 +70,7 @@ RestartSec=10s
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl enable -q --now semaphore
|
systemctl enable -q --now semaphore
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
|||||||
@ -71,6 +71,8 @@ SESSION_LIFETIME=120
|
|||||||
|
|
||||||
SPEEDTEST_SCHEDULE="0 */6 * * *"
|
SPEEDTEST_SCHEDULE="0 */6 * * *"
|
||||||
SPEEDTEST_SERVERS=
|
SPEEDTEST_SERVERS=
|
||||||
|
SPEEDTEST_EXTERNAL_IP_URL=https://ipecho.net/plain
|
||||||
|
SPEEDTEST_INTERNET_CHECK_HOSTNAME=1.1.1.1
|
||||||
PRUNE_RESULTS_OLDER_THAN=0
|
PRUNE_RESULTS_OLDER_THAN=0
|
||||||
|
|
||||||
DISPLAY_TIMEZONE=${TIMEZONE}
|
DISPLAY_TIMEZONE=${TIMEZONE}
|
||||||
|
|||||||
@ -13,17 +13,27 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setting up Telegraf repository"
|
msg_info "Adding Telegraf key and repository"
|
||||||
setup_deb822_repo \
|
curl -fsSL -O https://repos.influxdata.com/influxdata-archive.key
|
||||||
"telegraf" \
|
gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2>&1 |
|
||||||
"https://repos.influxdata.com/influxdata-archive.key" \
|
grep -q '^fpr:\+24C975CBA61A024EE1B631787C3D57159FC2F927:$' &&
|
||||||
"https://repos.influxdata.com/debian" \
|
cat influxdata-archive.key |
|
||||||
"stable"
|
gpg --dearmor |
|
||||||
msg_ok "Setup Telegraf Repository"
|
tee /etc/apt/keyrings/influxdata-archive.gpg >/dev/null
|
||||||
|
cat <<EOF | sudo tee /etc/apt/sources.list.d/influxdata.sources >/dev/null
|
||||||
|
Types: deb
|
||||||
|
URIs: https://repos.influxdata.com/debian
|
||||||
|
Suites: stable
|
||||||
|
Components: main
|
||||||
|
Signed-By: /etc/apt/keyrings/influxdata-archive.gpg
|
||||||
|
EOF
|
||||||
|
msg_ok "Added Telegraf Repository"
|
||||||
|
|
||||||
msg_info "Setting up Telegraf"
|
msg_info "Installing Telegraf"
|
||||||
$STD apt install -y telegraf
|
$STD apt update
|
||||||
msg_ok "Setup Telegraf"
|
$STD apt install telegraf -y
|
||||||
|
rm /influxdata-archive.key
|
||||||
|
msg_ok "Installed Telegraf"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@ -31,17 +31,9 @@ esac
|
|||||||
|
|
||||||
msg_info "Installing Zabbix $ZABBIX_VERSION"
|
msg_info "Installing Zabbix $ZABBIX_VERSION"
|
||||||
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"
|
||||||
if [[ "$ZABBIX_VERSION" == "7.0" ]]; then
|
curl -fsSL "$ZABBIX_DEB_URL" -o /tmp/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"
|
$STD dpkg -i /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"
|
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
|
$STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u "$PG_DB_USER" psql "$PG_DB_NAME" &>/dev/null
|
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u "$PG_DB_USER" psql "$PG_DB_NAME" &>/dev/null
|
||||||
@ -112,7 +104,7 @@ fi
|
|||||||
|
|
||||||
systemctl restart zabbix-server apache2
|
systemctl restart zabbix-server apache2
|
||||||
systemctl enable -q --now zabbix-server $AGENT_SERVICE apache2
|
systemctl enable -q --now zabbix-server $AGENT_SERVICE apache2
|
||||||
rm -rf /tmp/zabbix-release_*.deb
|
rm -rf /tmp/zabbix-release_latest+debian13_all.deb
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@ -815,11 +815,8 @@ cleanup_lxc() {
|
|||||||
xargs -0 -n1 truncate -s 0 2>/dev/null || true
|
xargs -0 -n1 truncate -s 0 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Node.js npm - directly remove cache directory
|
# Node.js npm
|
||||||
# npm cache clean/verify can fail with ENOTEMPTY errors, so we skip them
|
if command -v npm &>/dev/null; then $STD npm cache clean --force || true; fi
|
||||||
if command -v npm &>/dev/null; then
|
|
||||||
rm -rf /root/.npm/_cacache /root/.npm/_logs 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
# Node.js yarn
|
# Node.js yarn
|
||||||
if command -v yarn &>/dev/null; then $STD yarn cache clean || true; fi
|
if command -v yarn &>/dev/null; then $STD yarn cache clean || true; fi
|
||||||
# Node.js pnpm
|
# Node.js pnpm
|
||||||
|
|||||||
@ -334,9 +334,9 @@ remove_old_tool_version() {
|
|||||||
$STD apt purge -y nodejs npm >/dev/null 2>&1 || true
|
$STD apt purge -y nodejs npm >/dev/null 2>&1 || true
|
||||||
# Clean up npm global modules
|
# Clean up npm global modules
|
||||||
if command -v npm >/dev/null 2>&1; then
|
if command -v npm >/dev/null 2>&1; then
|
||||||
npm list -g 2>/dev/null | grep -oE '^ \S+' | awk '{print $1}' 2>/dev/null | while read -r module; do
|
npm list -g 2>/dev/null | grep -oE '^ \S+' | awk '{print $1}' | while read -r module; do
|
||||||
npm uninstall -g "$module" >/dev/null 2>&1 || true
|
npm uninstall -g "$module" >/dev/null 2>&1 || true
|
||||||
done || true
|
done
|
||||||
fi
|
fi
|
||||||
cleanup_legacy_install "nodejs"
|
cleanup_legacy_install "nodejs"
|
||||||
cleanup_tool_keyrings "nodesource"
|
cleanup_tool_keyrings "nodesource"
|
||||||
@ -1167,7 +1167,7 @@ cleanup_orphaned_sources() {
|
|||||||
|
|
||||||
# Extract Signed-By path from .sources file
|
# Extract Signed-By path from .sources file
|
||||||
local keyring_path
|
local keyring_path
|
||||||
keyring_path=$(grep -E '^Signed-By:' "$sources_file" 2>/dev/null | awk '{print $2}' 2>/dev/null || true)
|
keyring_path=$(grep -E '^Signed-By:' "$sources_file" 2>/dev/null | awk '{print $2}')
|
||||||
|
|
||||||
# If keyring doesn't exist, remove the .sources file
|
# If keyring doesn't exist, remove the .sources file
|
||||||
if [[ -n "$keyring_path" ]] && [[ ! -f "$keyring_path" ]]; then
|
if [[ -n "$keyring_path" ]] && [[ ! -f "$keyring_path" ]]; then
|
||||||
@ -2073,7 +2073,7 @@ function setup_adminer() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
local VERSION
|
local VERSION
|
||||||
VERSION=$(dpkg -s adminer 2>/dev/null | grep '^Version:' | awk '{print $2}' 2>/dev/null || echo 'unknown')
|
VERSION=$(dpkg -s adminer 2>/dev/null | grep '^Version:' | awk '{print $2}')
|
||||||
cache_installed_version "adminer" "${VERSION:-unknown}"
|
cache_installed_version "adminer" "${VERSION:-unknown}"
|
||||||
msg_ok "Setup Adminer (Debian/Ubuntu)"
|
msg_ok "Setup Adminer (Debian/Ubuntu)"
|
||||||
fi
|
fi
|
||||||
@ -2591,7 +2591,7 @@ function setup_hwaccel() {
|
|||||||
|
|
||||||
# Detect CPU vendor (relevant for AMD APUs)
|
# Detect CPU vendor (relevant for AMD APUs)
|
||||||
local cpu_vendor
|
local cpu_vendor
|
||||||
cpu_vendor=$(lscpu 2>/dev/null | grep -i 'Vendor ID' | awk '{print $3}' 2>/dev/null || echo "")
|
cpu_vendor=$(lscpu 2>/dev/null | grep -i 'Vendor ID' | awk '{print $3}' || echo "")
|
||||||
|
|
||||||
if [[ -z "$gpu_vendor" && -z "$cpu_vendor" ]]; then
|
if [[ -z "$gpu_vendor" && -z "$cpu_vendor" ]]; then
|
||||||
msg_warn "No GPU or CPU vendor detected - skipping hardware acceleration setup"
|
msg_warn "No GPU or CPU vendor detected - skipping hardware acceleration setup"
|
||||||
@ -3699,7 +3699,7 @@ function setup_nodejs() {
|
|||||||
|
|
||||||
# Check if the module is already installed
|
# Check if the module is already installed
|
||||||
if $STD npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep -q "$MODULE_NAME@"; then
|
if $STD npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep -q "$MODULE_NAME@"; then
|
||||||
MODULE_INSTALLED_VERSION="$(npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep "$MODULE_NAME@" | awk -F@ '{print $2}' 2>/dev/null | tr -d '[:space:]' || echo '')"
|
MODULE_INSTALLED_VERSION="$($STD npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep "$MODULE_NAME@" | awk -F@ '{print $2}' | tr -d '[:space:]')"
|
||||||
if [[ "$MODULE_REQ_VERSION" != "latest" && "$MODULE_REQ_VERSION" != "$MODULE_INSTALLED_VERSION" ]]; then
|
if [[ "$MODULE_REQ_VERSION" != "latest" && "$MODULE_REQ_VERSION" != "$MODULE_INSTALLED_VERSION" ]]; then
|
||||||
msg_info "Updating $MODULE_NAME from v$MODULE_INSTALLED_VERSION to v$MODULE_REQ_VERSION"
|
msg_info "Updating $MODULE_NAME from v$MODULE_INSTALLED_VERSION to v$MODULE_REQ_VERSION"
|
||||||
if ! $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then
|
if ! $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then
|
||||||
@ -3818,7 +3818,7 @@ EOF
|
|||||||
|
|
||||||
# Get available PHP version from repository
|
# Get available PHP version from repository
|
||||||
local AVAILABLE_PHP_VERSION=""
|
local AVAILABLE_PHP_VERSION=""
|
||||||
AVAILABLE_PHP_VERSION=$(apt-cache show "php${PHP_VERSION}" 2>/dev/null | grep -m1 "^Version:" | awk '{print $2}' 2>/dev/null | cut -d- -f1 || true)
|
AVAILABLE_PHP_VERSION=$(apt-cache show "php${PHP_VERSION}" 2>/dev/null | grep -m1 "^Version:" | awk '{print $2}' | cut -d- -f1) || true
|
||||||
|
|
||||||
if [[ -z "$AVAILABLE_PHP_VERSION" ]]; then
|
if [[ -z "$AVAILABLE_PHP_VERSION" ]]; then
|
||||||
msg_error "PHP ${PHP_VERSION} not found in configured repositories"
|
msg_error "PHP ${PHP_VERSION} not found in configured repositories"
|
||||||
@ -4620,7 +4620,7 @@ function setup_rust() {
|
|||||||
|
|
||||||
# Check if already installed
|
# Check if already installed
|
||||||
if echo "$CRATE_LIST" | grep -q "^${NAME} "; then
|
if echo "$CRATE_LIST" | grep -q "^${NAME} "; then
|
||||||
INSTALLED_VER=$(echo "$CRATE_LIST" | grep "^${NAME} " | head -1 | awk '{print $2}' 2>/dev/null | tr -d 'v:' || echo '')
|
INSTALLED_VER=$(echo "$CRATE_LIST" | grep "^${NAME} " | head -1 | awk '{print $2}' | tr -d 'v:')
|
||||||
|
|
||||||
if [[ -n "$VER" && "$VER" != "$INSTALLED_VER" ]]; then
|
if [[ -n "$VER" && "$VER" != "$INSTALLED_VER" ]]; then
|
||||||
msg_info "Upgrading $NAME from v$INSTALLED_VER to v$VER"
|
msg_info "Upgrading $NAME from v$INSTALLED_VER to v$VER"
|
||||||
@ -4635,7 +4635,7 @@ function setup_rust() {
|
|||||||
msg_error "Failed to upgrade $NAME"
|
msg_error "Failed to upgrade $NAME"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
local NEW_VER=$(cargo install --list 2>/dev/null | grep "^${NAME} " | head -1 | awk '{print $2}' 2>/dev/null | tr -d 'v:' || echo 'unknown')
|
local NEW_VER=$(cargo install --list 2>/dev/null | grep "^${NAME} " | head -1 | awk '{print $2}' | tr -d 'v:')
|
||||||
msg_ok "Upgraded $NAME to v$NEW_VER"
|
msg_ok "Upgraded $NAME to v$NEW_VER"
|
||||||
else
|
else
|
||||||
msg_ok "$NAME v$INSTALLED_VER already installed"
|
msg_ok "$NAME v$INSTALLED_VER already installed"
|
||||||
@ -4653,7 +4653,7 @@ function setup_rust() {
|
|||||||
msg_error "Failed to install $NAME"
|
msg_error "Failed to install $NAME"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
local NEW_VER=$(cargo install --list 2>/dev/null | grep "^${NAME} " | head -1 | awk '{print $2}' 2>/dev/null | tr -d 'v:' || echo 'unknown')
|
local NEW_VER=$(cargo install --list 2>/dev/null | grep "^${NAME} " | head -1 | awk '{print $2}' | tr -d 'v:')
|
||||||
msg_ok "Installed $NAME v$NEW_VER"
|
msg_ok "Installed $NAME v$NEW_VER"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -4975,7 +4975,7 @@ function setup_docker() {
|
|||||||
# Install or upgrade Docker
|
# Install or upgrade Docker
|
||||||
if [ "$docker_installed" = true ]; then
|
if [ "$docker_installed" = true ]; then
|
||||||
msg_info "Checking for Docker updates"
|
msg_info "Checking for Docker updates"
|
||||||
DOCKER_LATEST_VERSION=$(apt-cache policy docker-ce | grep Candidate | awk '{print $2}' 2>/dev/null | cut -d':' -f2 | cut -d'-' -f1 || echo '')
|
DOCKER_LATEST_VERSION=$(apt-cache policy docker-ce | grep Candidate | awk '{print $2}' | cut -d':' -f2 | cut -d'-' -f1)
|
||||||
|
|
||||||
if [ "$DOCKER_CURRENT_VERSION" != "$DOCKER_LATEST_VERSION" ]; then
|
if [ "$DOCKER_CURRENT_VERSION" != "$DOCKER_LATEST_VERSION" ]; then
|
||||||
msg_info "Updating Docker $DOCKER_CURRENT_VERSION → $DOCKER_LATEST_VERSION"
|
msg_info "Updating Docker $DOCKER_CURRENT_VERSION → $DOCKER_LATEST_VERSION"
|
||||||
|
|||||||
@ -1,241 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: CrazyWolf13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/martabal/qbittorrent-exporter
|
|
||||||
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
|
||||||
|
|
||||||
# Enable error handling
|
|
||||||
set -Eeuo pipefail
|
|
||||||
trap 'error_handler' ERR
|
|
||||||
|
|
||||||
load_functions
|
|
||||||
# ==============================================================================
|
|
||||||
# CONFIGURATION
|
|
||||||
# ==============================================================================
|
|
||||||
VERBOSE=${var_verbose:-no}
|
|
||||||
APP="qbittorrent-exporter"
|
|
||||||
APP_TYPE="tools"
|
|
||||||
INSTALL_PATH="/opt/qbittorrent-exporter"
|
|
||||||
CONFIG_PATH="/opt/qbittorrent-exporter.env"
|
|
||||||
header_info
|
|
||||||
ensure_usr_local_bin_persist
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# OS DETECTION
|
|
||||||
# ==============================================================================
|
|
||||||
if [[ -f "/etc/alpine-release" ]]; then
|
|
||||||
OS="Alpine"
|
|
||||||
SERVICE_PATH="/etc/init.d/qbittorrent-exporter"
|
|
||||||
elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
|
|
||||||
OS="Debian"
|
|
||||||
SERVICE_PATH="/etc/systemd/system/qbittorrent-exporter.service"
|
|
||||||
else
|
|
||||||
echo -e "${CROSS} Unsupported OS detected. Exiting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# UNINSTALL
|
|
||||||
# ==============================================================================
|
|
||||||
function uninstall() {
|
|
||||||
msg_info "Uninstalling qBittorrent-Exporter"
|
|
||||||
if [[ "$OS" == "Alpine" ]]; then
|
|
||||||
rc-service qbittorrent-exporter stop &>/dev/null
|
|
||||||
rc-update del qbittorrent-exporter &>/dev/null
|
|
||||||
rm -f "$SERVICE_PATH"
|
|
||||||
else
|
|
||||||
systemctl disable -q --now qbittorrent-exporter
|
|
||||||
rm -f "$SERVICE_PATH"
|
|
||||||
fi
|
|
||||||
rm -rf "$INSTALL_PATH" "$CONFIG_PATH"
|
|
||||||
rm -f "/usr/local/bin/update_qbittorrent-exporter"
|
|
||||||
rm -f "$HOME/.qbittorrent-exporter"
|
|
||||||
msg_ok "qBittorrent-Exporter has been uninstalled"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# UPDATE
|
|
||||||
# ==============================================================================
|
|
||||||
function update() {
|
|
||||||
if check_for_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter"; then
|
|
||||||
msg_info "Stopping service"
|
|
||||||
if [[ "$OS" == "Alpine" ]]; then
|
|
||||||
rc-service qbittorrent-exporter stop &>/dev/null
|
|
||||||
else
|
|
||||||
systemctl stop qbittorrent-exporter
|
|
||||||
fi
|
|
||||||
msg_ok "Stopped service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
|
|
||||||
setup_go
|
|
||||||
|
|
||||||
msg_info "Building qBittorrent-Exporter"
|
|
||||||
cd /opt/qbittorrent-exporter
|
|
||||||
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
|
|
||||||
msg_ok "Built qBittorrent-Exporter"
|
|
||||||
|
|
||||||
msg_info "Starting service"
|
|
||||||
if [[ "$OS" == "Alpine" ]]; then
|
|
||||||
rc-service qbittorrent-exporter start &>/dev/null
|
|
||||||
else
|
|
||||||
systemctl start qbittorrent-exporter
|
|
||||||
fi
|
|
||||||
msg_ok "Started service"
|
|
||||||
msg_ok "Updated successfully"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# INSTALL
|
|
||||||
# ==============================================================================
|
|
||||||
function install() {
|
|
||||||
read -erp "Enter URL of qBittorrent, example: (http://127.0.0.1:8080): " QBITTORRENT_BASE_URL
|
|
||||||
read -erp "Enter qBittorrent username: " QBITTORRENT_USERNAME
|
|
||||||
read -rsp "Enter qBittorrent password: " QBITTORRENT_PASSWORD
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
|
|
||||||
setup_go
|
|
||||||
msg_info "Building qBittorrent-Exporter on ${OS}"
|
|
||||||
cd /opt/qbittorrent-exporter
|
|
||||||
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
|
|
||||||
msg_ok "Built qBittorrent-Exporter"
|
|
||||||
|
|
||||||
msg_info "Creating configuration"
|
|
||||||
cat <<EOF >"$CONFIG_PATH"
|
|
||||||
# https://github.com/martabal/qbittorrent-exporter?tab=readme-ov-file#parameters
|
|
||||||
QBITTORRENT_BASE_URL="${QBITTORRENT_BASE_URL}"
|
|
||||||
QBITTORRENT_USERNAME="${QBITTORRENT_USERNAME}"
|
|
||||||
QBITTORRENT_PASSWORD="${QBITTORRENT_PASSWORD}"
|
|
||||||
EOF
|
|
||||||
msg_ok "Created configuration"
|
|
||||||
|
|
||||||
msg_info "Creating service"
|
|
||||||
if [[ "$OS" == "Debian" ]]; then
|
|
||||||
cat <<EOF >"$SERVICE_PATH"
|
|
||||||
[Unit]
|
|
||||||
Description=qbittorrent-exporter
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/qbittorrent-exporter
|
|
||||||
EnvironmentFile=$CONFIG_PATH
|
|
||||||
ExecStart=/opt/qbittorrent-exporter/qbittorrent-exporter
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable -q --now qbittorrent-exporter
|
|
||||||
else
|
|
||||||
cat <<EOF >"$SERVICE_PATH"
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
|
|
||||||
name="qbittorrent-exporter"
|
|
||||||
description="qBittorrent Exporter for Prometheus"
|
|
||||||
command="${INSTALL_PATH}/qbittorrent-exporter"
|
|
||||||
command_background=true
|
|
||||||
directory="/opt/qbittorrent-exporter"
|
|
||||||
pidfile="/run/\${RC_SVCNAME}.pid"
|
|
||||||
output_log="/var/log/qbittorrent-exporter.log"
|
|
||||||
error_log="/var/log/qbittorrent-exporter.log"
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
need net
|
|
||||||
after firewall
|
|
||||||
}
|
|
||||||
|
|
||||||
start_pre() {
|
|
||||||
if [ -f "$CONFIG_PATH" ]; then
|
|
||||||
export \$(grep -v '^#' $CONFIG_PATH | xargs)
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
chmod +x "$SERVICE_PATH"
|
|
||||||
$STD rc-update add qbittorrent-exporter default
|
|
||||||
$STD rc-service qbittorrent-exporter start
|
|
||||||
fi
|
|
||||||
msg_ok "Created and started service"
|
|
||||||
|
|
||||||
# Create update script
|
|
||||||
msg_info "Creating update script"
|
|
||||||
ensure_usr_local_bin_persist
|
|
||||||
cat <<'UPDATEEOF' >/usr/local/bin/update_qbittorrent-exporter
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
# qbittorrent-exporter Update Script
|
|
||||||
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/qbittorrent-exporter.sh)"
|
|
||||||
UPDATEEOF
|
|
||||||
chmod +x /usr/local/bin/update_qbittorrent-exporter
|
|
||||||
msg_ok "Created update script (/usr/local/bin/update_qbittorrent-exporter)"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
msg_ok "qBittorrent-Exporter installed successfully"
|
|
||||||
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:8090/metrics${CL}"
|
|
||||||
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# MAIN
|
|
||||||
# ==============================================================================
|
|
||||||
header_info
|
|
||||||
ensure_usr_local_bin_persist
|
|
||||||
import_local_ip
|
|
||||||
|
|
||||||
# Handle type=update (called from update script)
|
|
||||||
if [[ "${type:-}" == "update" ]]; then
|
|
||||||
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
|
|
||||||
update
|
|
||||||
else
|
|
||||||
msg_error "qBittorrent-Exporter is not installed. Nothing to update."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if already installed
|
|
||||||
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
|
|
||||||
msg_warn "qBittorrent-Exporter is already installed."
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -n "${TAB}Uninstall qBittorrent-Exporter? (y/N): "
|
|
||||||
read -r uninstall_prompt
|
|
||||||
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
uninstall
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "${TAB}Update qBittorrent-Exporter? (y/N): "
|
|
||||||
read -r update_prompt
|
|
||||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
update
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_warn "No action selected. Exiting."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fresh installation
|
|
||||||
msg_warn "qBittorrent-Exporter is not installed."
|
|
||||||
echo ""
|
|
||||||
echo -e "${TAB}${INFO} This will install:"
|
|
||||||
echo -e "${TAB} - qBittorrent Exporter (Go binary)"
|
|
||||||
echo -e "${TAB} - Systemd/OpenRC service"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo -n "${TAB}Install qBittorrent-Exporter? (y/N): "
|
|
||||||
read -r install_prompt
|
|
||||||
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
install
|
|
||||||
else
|
|
||||||
msg_warn "Installation cancelled. Exiting."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
@ -50,12 +50,7 @@ function execute_in() {
|
|||||||
container=$1
|
container=$1
|
||||||
name=$(pct exec "$container" hostname)
|
name=$(pct exec "$container" hostname)
|
||||||
echo -e "${BL}[Info]${GN} Execute inside${BL} ${name}${GN} with output: ${CL}"
|
echo -e "${BL}[Info]${GN} Execute inside${BL} ${name}${GN} with output: ${CL}"
|
||||||
if ! pct exec "$container" -- bash -c "command -v ${custom_command} >/dev/null 2>&1"
|
pct exec "$container" -- bash -c "${custom_command}" | tee
|
||||||
then
|
|
||||||
echo -e "${BL}[Info]${GN} Skipping ${name} ${RD}$container has no command: ${custom_command}"
|
|
||||||
else
|
|
||||||
pct exec "$container" -- bash -c "${custom_command}" | tee
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||||
|
|||||||
Reference in New Issue
Block a user