mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-16 20:23:32 +01:00
Compare commits
41 Commits
2025-12-14
...
fix/2fauth
| Author | SHA1 | Date | |
|---|---|---|---|
| e1825a25e6 | |||
| a379c663d9 | |||
| cc7eb7fd35 | |||
| b605e463d1 | |||
| 71c2f4e7f8 | |||
| 648ca5e4d0 | |||
| 0917921225 | |||
| c269dc3b13 | |||
| d0a09ccd5d | |||
| 494ab1cee3 | |||
| 568bbb7f32 | |||
| 3026a405c8 | |||
| 7d98f80eb7 | |||
| f4c1b68881 | |||
| a949a1cc97 | |||
| 1e6b9a7001 | |||
| 8672aa075a | |||
| aaa20f7845 | |||
| 6da27a7112 | |||
| 8e07685aab | |||
| 5ba55d1f5a | |||
| 126b0c339a | |||
| c2034039e8 | |||
| 9374e5d183 | |||
| 6311584fef | |||
| 5bbf0861e9 | |||
| 7cb02a0cc3 | |||
| 010e8d5f27 | |||
| 2b322bf182 | |||
| d12215dea8 | |||
| f258ab7ae5 | |||
| 33f167f278 | |||
| 3568cf52f9 | |||
| 5f5144c661 | |||
| 09134d94dd | |||
| 33103ad256 | |||
| fd75da89c4 | |||
| ee49576f3a | |||
| e651c14f76 | |||
| 1fc5c031cc | |||
| 35793051a1 |
42
CHANGELOG.md
42
CHANGELOG.md
@ -10,8 +10,50 @@
|
|||||||
> [!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-16
|
||||||
|
|
||||||
## 2025-12-15
|
## 2025-12-15
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Koel ([#9972](https://github.com/community-scripts/ProxmoxVE/pull/9972))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix DiscoPanel build [@PouletteMC](https://github.com/PouletteMC) ([#10009](https://github.com/community-scripts/ProxmoxVE/pull/10009))
|
||||||
|
- fix:ct/openwebui.sh adding progressbar and minimize service downtime [@jobben-2025](https://github.com/jobben-2025) ([#9894](https://github.com/community-scripts/ProxmoxVE/pull/9894))
|
||||||
|
- homarr: add: temp note aboute deb13 requirement [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9992](https://github.com/community-scripts/ProxmoxVE/pull/9992))
|
||||||
|
- paperless-ai: backup data and recreate venv during update [@MickLesk](https://github.com/MickLesk) ([#9987](https://github.com/community-scripts/ProxmoxVE/pull/9987))
|
||||||
|
- fix(booklore): add setup_yq to update script [@MickLesk](https://github.com/MickLesk) ([#9989](https://github.com/community-scripts/ProxmoxVE/pull/9989))
|
||||||
|
- fix(pangolin-install): add network-online dependency [@worried-networking](https://github.com/worried-networking) ([#9984](https://github.com/community-scripts/ProxmoxVE/pull/9984))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- OPNsense: dynamic crawl latest stable FreeBSD [@austindsmith](https://github.com/austindsmith) ([#9831](https://github.com/community-scripts/ProxmoxVE/pull/9831))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Heimdall Dashboard [@tremor021](https://github.com/tremor021) ([#9959](https://github.com/community-scripts/ProxmoxVE/pull/9959))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools: prevent awk errors in setup_rust on restricted containers [@MickLesk](https://github.com/MickLesk) ([#9985](https://github.com/community-scripts/ProxmoxVE/pull/9985))
|
||||||
|
- core: App Defaults force mode and prevent unbound variables [@MickLesk](https://github.com/MickLesk) ([#9971](https://github.com/community-scripts/ProxmoxVE/pull/9971))
|
||||||
|
- core: load app defaults before applying base_settings / fix composer cleanup after install/update [@MickLesk](https://github.com/MickLesk) ([#9965](https://github.com/community-scripts/ProxmoxVE/pull/9965))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: handle flat repositories in setup_deb822_repo [@MickLesk](https://github.com/MickLesk) ([#9994](https://github.com/community-scripts/ProxmoxVE/pull/9994))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- (github) remove old files and assets [@MickLesk](https://github.com/MickLesk) ([#9991](https://github.com/community-scripts/ProxmoxVE/pull/9991))
|
||||||
|
- README; add project statistics / formatting [@MickLesk](https://github.com/MickLesk) ([#9967](https://github.com/community-scripts/ProxmoxVE/pull/9967))
|
||||||
|
|
||||||
## 2025-12-14
|
## 2025-12-14
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
33
README.md
33
README.md
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
> **Simplify your Proxmox VE setup with community-driven automation scripts**
|
**Simplify your Proxmox VE setup with community-driven automation scripts**
|
||||||
> Originally created by tteck, now maintained and expanded by the community
|
Originally created by tteck, now maintained and expanded by the community
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -239,17 +239,34 @@ This project is maintained by volunteers in memory of tteck. Your support helps
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📈 Project Growth
|
## 📈 Project Statistics
|
||||||
|
<p align="center">
|
||||||
|
<img
|
||||||
|
src="https://repobeats.axiom.co/api/embed/57edde03e00f88d739bdb5b844ff7d07dd079375.svg"
|
||||||
|
alt="Repobeats analytics"
|
||||||
|
width="650"
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
|
|
||||||
<div align="center">
|
<p align="center">
|
||||||
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||||
<picture>
|
<picture>
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
<source
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
media="(prefers-color-scheme: dark)"
|
||||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark"
|
||||||
|
/>
|
||||||
|
<source
|
||||||
|
media="(prefers-color-scheme: light)"
|
||||||
|
srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
alt="Star History Chart"
|
||||||
|
src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
|
||||||
|
width="650"
|
||||||
|
/>
|
||||||
</picture>
|
</picture>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,7 @@ function update_script() {
|
|||||||
msg_ok "Built Frontend"
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
JAVA_VERSION="21" setup_java
|
JAVA_VERSION="21" setup_java
|
||||||
|
setup_yq
|
||||||
|
|
||||||
msg_info "Building Backend"
|
msg_info "Building Backend"
|
||||||
cd /opt/booklore/booklore-api
|
cd /opt/booklore/booklore-api
|
||||||
|
|||||||
@ -1,138 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster) | Co-Author: remz1337
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/janeczku/calibre-web
|
|
||||||
|
|
||||||
APP="Calibre-Web"
|
|
||||||
var_tags="${var_tags:-eBook}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/systemd/system/cps.service ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop cps
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
cd /opt/kepubify
|
|
||||||
rm -rf kepubify-linux-64bit
|
|
||||||
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
|
|
||||||
chmod +x kepubify-linux-64bit
|
|
||||||
menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF
|
|
||||||
"2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF
|
|
||||||
"3" "Enables displaying of additional author infos on the authors page" OFF
|
|
||||||
"4" "Enables login via LDAP server" OFF
|
|
||||||
"5" "Enables login via google or github oauth" OFF
|
|
||||||
"6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF
|
|
||||||
"7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF
|
|
||||||
"8" "Enables syncing with your kobo reader" OFF)
|
|
||||||
if [ -f "/opt/calibre-web/options.txt" ]; then
|
|
||||||
cps_options="$(cat /opt/calibre-web/options.txt)"
|
|
||||||
IFS=',' read -ra ADDR <<<"$cps_options"
|
|
||||||
for i in "${ADDR[@]}"; do
|
|
||||||
if [ $i == "gdrive" ]; then
|
|
||||||
line=0
|
|
||||||
elif [ $i == "gmail" ]; then
|
|
||||||
line=1
|
|
||||||
elif [ $i == "goodreads" ]; then
|
|
||||||
line=2
|
|
||||||
elif [ $i == "ldap" ]; then
|
|
||||||
line=3
|
|
||||||
elif [ $i == "oauth" ]; then
|
|
||||||
line=4
|
|
||||||
elif [ $i == "metadata" ]; then
|
|
||||||
line=5
|
|
||||||
elif [ $i == "comics" ]; then
|
|
||||||
line=6
|
|
||||||
elif [ $i == "kobo" ]; then
|
|
||||||
line=7
|
|
||||||
fi
|
|
||||||
array_index=$((3 * line + 2))
|
|
||||||
menu_array[$array_index]=ON
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
CHOICES=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CALIBRE-WEB OPTIONS" --separate-output --checklist "Choose Additional Options" 15 125 8 "${menu_array[@]}" 3>&1 1>&2 2>&3)
|
|
||||||
spinner &
|
|
||||||
SPINNER_PID=$!
|
|
||||||
options=()
|
|
||||||
if [ ! -z "$CHOICES" ]; then
|
|
||||||
for CHOICE in $CHOICES; do
|
|
||||||
case "$CHOICE" in
|
|
||||||
"1")
|
|
||||||
options+=(gdrive)
|
|
||||||
;;
|
|
||||||
"2")
|
|
||||||
options+=(gmail)
|
|
||||||
;;
|
|
||||||
"3")
|
|
||||||
options+=(goodreads)
|
|
||||||
;;
|
|
||||||
"4")
|
|
||||||
options+=(ldap)
|
|
||||||
apt-get install -qqy libldap2-dev libsasl2-dev
|
|
||||||
;;
|
|
||||||
"5")
|
|
||||||
options+=(oauth)
|
|
||||||
;;
|
|
||||||
"6")
|
|
||||||
options+=(metadata)
|
|
||||||
;;
|
|
||||||
"7")
|
|
||||||
options+=(comics)
|
|
||||||
;;
|
|
||||||
"8")
|
|
||||||
options+=(kobo)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unsupported item $CHOICE!" >&2
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ ${#options[@]} -gt 0 ]; then
|
|
||||||
cps_options=$(
|
|
||||||
IFS=,
|
|
||||||
echo "${options[*]}"
|
|
||||||
)
|
|
||||||
echo $cps_options >/opt/calibre-web/options.txt
|
|
||||||
$STD pip install --upgrade calibreweb[$cps_options]
|
|
||||||
else
|
|
||||||
rm -rf /opt/calibre-web/options.txt
|
|
||||||
$STD pip install --upgrade calibreweb
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start cps
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
|
|
||||||
@ -49,6 +49,8 @@ function update_script() {
|
|||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
||||||
|
|
||||||
msg_info "Setting up DiscoPanel"
|
msg_info "Setting up DiscoPanel"
|
||||||
|
cd /opt/discopanel
|
||||||
|
$STD make gen
|
||||||
cd /opt/discopanel/web/discopanel
|
cd /opt/discopanel/web/discopanel
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
______ ___ __ _ __ __
|
|
||||||
/ ____/___ _/ (_) /_ ________ | | / /__ / /_
|
|
||||||
/ / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \
|
|
||||||
/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ /
|
|
||||||
\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/
|
|
||||||
|
|
||||||
6
ct/headers/koel
Normal file
6
ct/headers/koel
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ //_/___ ___ / /
|
||||||
|
/ ,< / __ \/ _ \/ /
|
||||||
|
/ /| / /_/ / __/ /
|
||||||
|
/_/ |_\____/\___/_/
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
|||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@ -27,45 +27,45 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if check_for_gh_release "Heimdall" "linuxserver/Heimdall"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop heimdall
|
systemctl stop heimdall
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
msg_info "Backing up Data"
|
||||||
cp -R /opt/Heimdall/database database-backup
|
cp -R /opt/Heimdall/database database-backup
|
||||||
cp -R /opt/Heimdall/public public-backup
|
cp -R /opt/Heimdall/public public-backup
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
msg_info "Updating Heimdall Dashboard to ${RELEASE}"
|
|
||||||
curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o $(basename "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz")
|
setup_composer
|
||||||
tar xzf "${RELEASE}".tar.gz
|
fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
|
||||||
VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
cp -R Heimdall-"${VER}"/* /opt/Heimdall
|
msg_info "Updating Heimdall-Dashboard"
|
||||||
cd /opt/Heimdall
|
cd /opt/Heimdall
|
||||||
$STD apt-get install -y composer
|
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
$STD composer dump-autoload
|
$STD composer dump-autoload
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
msg_ok "Updated Heimdall-Dashboard"
|
||||||
msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cd ~
|
cd ~
|
||||||
cp -R database-backup/* /opt/Heimdall/database
|
cp -R database-backup/* /opt/Heimdall/database
|
||||||
cp -R public-backup/* /opt/Heimdall/public
|
cp -R public-backup/* /opt/Heimdall/public
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
msg_info "Cleanup"
|
|
||||||
rm -rf {"${RELEASE}".tar.gz,Heimdall-"${VER}",public-backup,database-backup,Heimdall}
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf {public-backup,database-backup}
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned Up"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start heimdall.service
|
systemctl start heimdall.service
|
||||||
sleep 2
|
sleep 2
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
40
ct/homarr.sh
40
ct/homarr.sh
@ -35,24 +35,34 @@ function update_script() {
|
|||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
if ! { grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr/.env 2>/dev/null || grep -q '^REDIS_IS_EXTERNAL=' /opt/homarr.env 2>/dev/null; }; then
|
||||||
msg_info "Fixing old structure"
|
DEBIAN_VERSION=$(cat /etc/debian_version 2>/dev/null | cut -d'.' -f1)
|
||||||
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
if [[ -n "$DEBIAN_VERSION" ]] && [[ "$DEBIAN_VERSION" -lt 13 ]]; then
|
||||||
$STD apt install -y musl-dev
|
msg_warn "⚠️ COMPATIBILITY WARNING ⚠️"
|
||||||
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
msg_warn "You are running Debian ${DEBIAN_VERSION}. Homarr's requires Debian 13"
|
||||||
cp /opt/homarr/.env /opt/homarr.env
|
msg_warn ""
|
||||||
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
msg_warn "Please Upgrade to Debian 13:"
|
||||||
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
msg_warn "See: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
msg_warn ""
|
||||||
chown -R redis:redis /appdata/redis
|
exit
|
||||||
chmod 744 /appdata/redis
|
fi
|
||||||
mkdir -p /etc/systemd/system/redis-server.service.d/
|
msg_info "Fixing old structure"
|
||||||
cat <<EOF >/etc/systemd/system/redis-server.service.d/override.conf
|
# fix musl issues because homarr compiles on alpine not debian soure: https://github.com/alexander-akhmetov/python-telegram/issues/3
|
||||||
|
$STD apt install -y musl-dev
|
||||||
|
ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1
|
||||||
|
cp /opt/homarr/.env /opt/homarr.env
|
||||||
|
echo "REDIS_IS_EXTERNAL='true'" >> /opt/homarr.env
|
||||||
|
sed -i 's|^ExecStart=.*|ExecStart=/opt/homarr/run.sh|' /etc/systemd/system/homarr.service
|
||||||
|
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=-/opt/homarr.env|' /etc/systemd/system/homarr.service
|
||||||
|
chown -R redis:redis /appdata/redis
|
||||||
|
chmod 744 /appdata/redis
|
||||||
|
mkdir -p /etc/systemd/system/redis-server.service.d/
|
||||||
|
cat <<EOF >/etc/systemd/system/redis-server.service.d/override.conf
|
||||||
[Service]
|
[Service]
|
||||||
ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis -/etc/redis
|
ReadWritePaths=-/appdata/redis -/var/lib/redis -/var/log/redis -/var/run/redis -/etc/redis
|
||||||
EOF
|
EOF
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
rm /opt/run_homarr.sh
|
rm /opt/run_homarr.sh
|
||||||
msg_ok "Fixed old structure"
|
msg_ok "Fixed old structure"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Nodejs"
|
msg_info "Updating Nodejs"
|
||||||
|
|||||||
81
ct/koel.sh
Normal file
81
ct/koel.sh
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://koel.dev/
|
||||||
|
|
||||||
|
APP="Koel"
|
||||||
|
var_tags="${var_tags:-music;streaming}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/koel ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "koel" "koel/koel"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop nginx php8.4-fpm
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mkdir -p /tmp/koel_backup
|
||||||
|
cp /opt/koel/.env /tmp/koel_backup/
|
||||||
|
cp -r /opt/koel/storage /tmp/koel_backup/ 2>/dev/null || true
|
||||||
|
cp -r /opt/koel/public/img /tmp/koel_backup/ 2>/dev/null || true
|
||||||
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
cp /tmp/koel_backup/.env /opt/koel/
|
||||||
|
cp -r /tmp/koel_backup/storage/* /opt/koel/storage/ 2>/dev/null || true
|
||||||
|
cp -r /tmp/koel_backup/img/* /opt/koel/public/img/ 2>/dev/null || true
|
||||||
|
rm -rf /tmp/koel_backup
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Running Migrations"
|
||||||
|
cd /opt/koel
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer install --no-interaction --no-dev --optimize-autoloader
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan config:clear
|
||||||
|
$STD php artisan cache:clear
|
||||||
|
$STD php artisan view:clear
|
||||||
|
$STD php artisan koel:init --no-assets --no-interaction
|
||||||
|
chown -R www-data:www-data /opt/koel
|
||||||
|
chmod -R 775 /opt/koel/storage
|
||||||
|
msg_ok "Ran Migrations"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start php8.4-fpm nginx
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
@ -88,22 +88,36 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -x "/usr/bin/ollama" ]; then
|
if [ -x "/usr/bin/ollama" ]; then
|
||||||
msg_info "Updating Ollama"
|
msg_info "Checking for Ollama Update"
|
||||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
||||||
systemctl stop ollama
|
msg_info "Downloading Ollama v$RELEASE \n"
|
||||||
msg_ok "Stopped Service"
|
curl -fS#LO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
msg_ok "Download Complete"
|
||||||
rm -rf /usr/lib/ollama
|
|
||||||
rm -rf /usr/bin/ollama
|
if [ -f "ollama-linux-amd64.tgz" ]; then
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
|
||||||
rm -rf ollama-linux-amd64.tgz
|
msg_info "Stopping Ollama Service"
|
||||||
msg_info "Starting Service"
|
systemctl stop ollama
|
||||||
systemctl start ollama
|
msg_ok "Stopped Service"
|
||||||
msg_info "Started Service"
|
|
||||||
msg_ok "Ollama updated to version $RELEASE"
|
msg_info "Installing Ollama"
|
||||||
|
rm -rf /usr/lib/ollama
|
||||||
|
rm -rf /usr/bin/ollama
|
||||||
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
|
rm -rf ollama-linux-amd64.tgz
|
||||||
|
msg_ok "Installed Ollama"
|
||||||
|
|
||||||
|
msg_info "Starting Ollama Service"
|
||||||
|
systemctl start ollama
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_ok "Ollama updated to version $RELEASE"
|
||||||
|
else
|
||||||
|
msg_error "Ollama download failed. Aborting update."
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
msg_ok "Ollama is already up to date."
|
msg_ok "Ollama is already up to date."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -33,10 +33,23 @@ function update_script() {
|
|||||||
systemctl stop paperless-ai paperless-rag
|
systemctl stop paperless-ai paperless-rag
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up data"
|
||||||
|
cp -r /opt/paperless-ai/data /opt/paperless-ai-data-backup
|
||||||
|
msg_ok "Backed up data"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "paperless-ai" "clusterzx/paperless-ai"
|
fetch_and_deploy_gh_release "paperless-ai" "clusterzx/paperless-ai"
|
||||||
|
|
||||||
|
msg_info "Restoring data"
|
||||||
|
cp -r /opt/paperless-ai-data-backup/* /opt/paperless-ai/data/
|
||||||
|
rm -rf /opt/paperless-ai-data-backup
|
||||||
|
msg_ok "Restored data"
|
||||||
|
|
||||||
msg_info "Updating Paperless-AI"
|
msg_info "Updating Paperless-AI"
|
||||||
cd /opt/paperless-ai
|
cd /opt/paperless-ai
|
||||||
|
if [[ ! -d /opt/paperless-ai/venv ]]; then
|
||||||
|
msg_info "Recreating Python venv"
|
||||||
|
$STD python3 -m venv /opt/paperless-ai/venv
|
||||||
|
fi
|
||||||
source /opt/paperless-ai/venv/bin/activate
|
source /opt/paperless-ai/venv/bin/activate
|
||||||
$STD pip install --upgrade pip
|
$STD pip install --upgrade pip
|
||||||
$STD pip install --no-cache-dir -r requirements.txt
|
$STD pip install --no-cache-dir -r requirements.txt
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
48
frontend/public/json/koel.json
Normal file
48
frontend/public/json/koel.json
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "Koel",
|
||||||
|
"slug": "koel",
|
||||||
|
"categories": [
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-12-15",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.koel.dev/",
|
||||||
|
"config_path": "/opt/koel/.env",
|
||||||
|
"website": "https://koel.dev/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/koel-light.webp",
|
||||||
|
"description": "Koel is a simple web-based personal audio streaming service written in Vue and Laravel. It supports multiple users, audio visualization, smart playlists, YouTube integration, and Last.fm scrobbling.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/koel.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "admin@koel.dev",
|
||||||
|
"password": "KoelIsCool"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Media files should be placed in /opt/koel_media",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Database credentials are stored in ~/koel.creds",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Music library is scanned hourly via cron job",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -1,4 +1,159 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"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": "mattermost/mattermost",
|
||||||
|
"version": "mattermost-redux@11.2.0",
|
||||||
|
"date": "2025-12-15T20:37:15Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "metabase/metabase",
|
||||||
|
"version": "v0.57.x",
|
||||||
|
"date": "2025-12-15T20:02:49Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "azukaar/Cosmos-Server",
|
||||||
|
"version": "v0.19.0",
|
||||||
|
"date": "2025-12-15T19:43:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "livebook-dev/livebook",
|
||||||
|
"version": "v0.18.2",
|
||||||
|
"date": "2025-12-15T19:17:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "opencloud-eu/opencloud",
|
||||||
|
"version": "v4.1.0",
|
||||||
|
"date": "2025-12-15T18:53:25Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
|
"version": "v4.2.2",
|
||||||
|
"date": "2025-12-15T18:25:36Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MediaBrowser/Emby.Releases",
|
||||||
|
"version": "4.9.1.90",
|
||||||
|
"date": "2025-11-11T01:00:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prometheus/alertmanager",
|
||||||
|
"version": "v0.30.0",
|
||||||
|
"date": "2025-12-15T17:23:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.123.6",
|
||||||
|
"date": "2025-12-15T14:22:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rcourtman/Pulse",
|
||||||
|
"version": "v4.36.2",
|
||||||
|
"date": "2025-12-03T22:46:29Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "danielbrendel/hortusfox-web",
|
||||||
|
"version": "v5.6",
|
||||||
|
"date": "2025-12-15T14:40:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "librenms/librenms",
|
||||||
|
"version": "25.12.0",
|
||||||
|
"date": "2025-12-15T14:06:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.4.11",
|
||||||
|
"date": "2025-12-15T08:01:35Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tailscale/tailscale",
|
||||||
|
"version": "v1.92.2",
|
||||||
|
"date": "2025-12-10T21:20:31Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meilisearch/meilisearch",
|
||||||
|
"version": "latest",
|
||||||
|
"date": "2025-12-15T13:03:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "endurain-project/endurain",
|
||||||
|
"version": "v0.16.3",
|
||||||
|
"date": "2025-12-15T12:56:50Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "LimeSurvey/LimeSurvey",
|
||||||
|
"version": "6.16.2+251209",
|
||||||
|
"date": "2025-12-15T12:05:26Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cockpit-project/cockpit",
|
||||||
|
"version": "353.1",
|
||||||
|
"date": "2025-12-15T10:29:34Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
|
"version": "pmm-6401-v1.132.0",
|
||||||
|
"date": "2025-12-15T09:38:46Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Prowlarr/Prowlarr",
|
||||||
|
"version": "v2.3.0.5236",
|
||||||
|
"date": "2025-11-16T22:41:22Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lidarr/Lidarr",
|
||||||
|
"version": "v3.1.0.4875",
|
||||||
|
"date": "2025-11-16T22:40:18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Radarr/Radarr",
|
||||||
|
"version": "v6.0.4.10291",
|
||||||
|
"date": "2025-11-16T22:39:01Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.3",
|
||||||
|
"date": "2025-09-20T12:12:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.24.454",
|
||||||
|
"date": "2025-12-15T05:54:27Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jellyfin/jellyfin",
|
||||||
|
"version": "v10.11.5",
|
||||||
|
"date": "2025-12-15T02:44:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "steveiliop56/tinyauth",
|
||||||
|
"version": "v4.1.0",
|
||||||
|
"date": "2025-11-23T12:13:34Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jeedom/core",
|
||||||
|
"version": "4.5",
|
||||||
|
"date": "2025-12-15T00:27:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "esphome/esphome",
|
||||||
|
"version": "2025.11.5",
|
||||||
|
"date": "2025-12-09T17:54:33Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "9001/copyparty",
|
||||||
|
"version": "v1.19.22",
|
||||||
|
"date": "2025-12-14T23:38:57Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "BerriAI/litellm",
|
"name": "BerriAI/litellm",
|
||||||
"version": "v1.80.10.rc.2",
|
"version": "v1.80.10.rc.2",
|
||||||
@ -14,41 +169,16 @@
|
|||||||
"version": "v1.9.13",
|
"version": "v1.9.13",
|
||||||
"date": "2025-12-14T20:18:28Z"
|
"date": "2025-12-14T20:18:28Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "netvisor-io/netvisor",
|
|
||||||
"version": "v0.12.0",
|
|
||||||
"date": "2025-12-14T19:20:29Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "alexta69/metube",
|
"name": "alexta69/metube",
|
||||||
"version": "2025.12.14",
|
"version": "2025.12.14",
|
||||||
"date": "2025-12-14T18:24:33Z"
|
"date": "2025-12-14T18:24:33Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.4.10",
|
|
||||||
"date": "2025-12-14T18:13:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "openhab/openhab-core",
|
"name": "openhab/openhab-core",
|
||||||
"version": "5.1.0.M4",
|
"version": "5.1.0.M4",
|
||||||
"date": "2025-12-14T18:12:04Z"
|
"date": "2025-12-14T18:12:04Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "rcourtman/Pulse",
|
|
||||||
"version": "v4.36.2",
|
|
||||||
"date": "2025-12-03T22:46:29Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.24.452",
|
|
||||||
"date": "2025-12-14T15:50:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "semaphoreui/semaphore",
|
|
||||||
"version": "v2.17.0-beta24",
|
|
||||||
"date": "2025-12-14T14:04:23Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "blakeblackshear/frigate",
|
"name": "blakeblackshear/frigate",
|
||||||
"version": "v0.14.1",
|
"version": "v0.14.1",
|
||||||
@ -84,11 +214,6 @@
|
|||||||
"version": "2.223.0",
|
"version": "2.223.0",
|
||||||
"date": "2025-12-14T08:16:54Z"
|
"date": "2025-12-14T08:16:54Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.3",
|
|
||||||
"date": "2025-09-20T12:12:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "release-argus/Argus",
|
"name": "release-argus/Argus",
|
||||||
"version": "0.28.1",
|
"version": "0.28.1",
|
||||||
@ -99,16 +224,6 @@
|
|||||||
"version": "1.3.12",
|
"version": "1.3.12",
|
||||||
"date": "2025-12-14T02:58:24Z"
|
"date": "2025-12-14T02:58:24Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "steveiliop56/tinyauth",
|
|
||||||
"version": "v4.1.0",
|
|
||||||
"date": "2025-11-23T12:13:34Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jeedom/core",
|
|
||||||
"version": "4.5",
|
|
||||||
"date": "2025-12-14T00:27:06Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "martabal/qbittorrent-exporter",
|
"name": "martabal/qbittorrent-exporter",
|
||||||
"version": "v1.13.2",
|
"version": "v1.13.2",
|
||||||
@ -214,11 +329,6 @@
|
|||||||
"version": "v1.46.0",
|
"version": "v1.46.0",
|
||||||
"date": "2025-12-12T19:23:36Z"
|
"date": "2025-12-12T19:23:36Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "metabase/metabase",
|
|
||||||
"version": "v0.57.x",
|
|
||||||
"date": "2025-12-12T19:08:53Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "home-assistant/core",
|
"name": "home-assistant/core",
|
||||||
"version": "2025.12.3",
|
"version": "2025.12.3",
|
||||||
@ -229,11 +339,6 @@
|
|||||||
"version": "v1.14.1",
|
"version": "v1.14.1",
|
||||||
"date": "2025-12-12T17:37:58Z"
|
"date": "2025-12-12T17:37:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "esphome/esphome",
|
|
||||||
"version": "2025.11.5",
|
|
||||||
"date": "2025-12-09T17:54:33Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "keycloak/keycloak",
|
"name": "keycloak/keycloak",
|
||||||
"version": "26.4.7",
|
"version": "26.4.7",
|
||||||
@ -254,16 +359,6 @@
|
|||||||
"version": "v0.30.0",
|
"version": "v0.30.0",
|
||||||
"date": "2025-12-12T14:03:52Z"
|
"date": "2025-12-12T14:03:52Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.123.5-exp.0",
|
|
||||||
"date": "2025-12-10T16:35:50Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mattermost/mattermost",
|
|
||||||
"version": "v10.11.8",
|
|
||||||
"date": "2025-11-21T17:06:07Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "zitadel/zitadel",
|
"name": "zitadel/zitadel",
|
||||||
"version": "v4.7.5",
|
"version": "v4.7.5",
|
||||||
@ -289,11 +384,6 @@
|
|||||||
"version": "3.4.3",
|
"version": "3.4.3",
|
||||||
"date": "2025-12-12T11:35:00Z"
|
"date": "2025-12-12T11:35:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "opencloud-eu/opencloud",
|
|
||||||
"version": "4.0.1-rc.1",
|
|
||||||
"date": "2025-12-12T10:52:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "grokability/snipe-it",
|
"name": "grokability/snipe-it",
|
||||||
"version": "v8.3.7",
|
"version": "v8.3.7",
|
||||||
@ -329,16 +419,6 @@
|
|||||||
"version": "v1.30.22",
|
"version": "v1.30.22",
|
||||||
"date": "2025-12-11T18:02:06Z"
|
"date": "2025-12-11T18:02:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "meilisearch/meilisearch",
|
|
||||||
"version": "prototype-v1.30.0-network-topology.2",
|
|
||||||
"date": "2025-12-11T16:47:51Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "endurain-project/endurain",
|
|
||||||
"version": "v0.16.2",
|
|
||||||
"date": "2025-12-11T15:16:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Stirling-Tools/Stirling-PDF",
|
"name": "Stirling-Tools/Stirling-PDF",
|
||||||
"version": "v2.1.3",
|
"version": "v2.1.3",
|
||||||
@ -369,11 +449,6 @@
|
|||||||
"version": "v5.33.1",
|
"version": "v5.33.1",
|
||||||
"date": "2025-12-11T01:59:13Z"
|
"date": "2025-12-11T01:59:13Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "tailscale/tailscale",
|
|
||||||
"version": "v1.92.2",
|
|
||||||
"date": "2025-12-10T21:20:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "gethomepage/homepage",
|
"name": "gethomepage/homepage",
|
||||||
"version": "v1.8.0",
|
"version": "v1.8.0",
|
||||||
@ -384,11 +459,6 @@
|
|||||||
"version": "jenkins-2.541",
|
"version": "jenkins-2.541",
|
||||||
"date": "2025-12-10T15:57:13Z"
|
"date": "2025-12-10T15:57:13Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "prometheus/alertmanager",
|
|
||||||
"version": "v0.29.0",
|
|
||||||
"date": "2025-11-04T15:00:07Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "rclone/rclone",
|
"name": "rclone/rclone",
|
||||||
"version": "v1.72.1",
|
"version": "v1.72.1",
|
||||||
@ -404,11 +474,6 @@
|
|||||||
"version": "0.211.1",
|
"version": "0.211.1",
|
||||||
"date": "2025-12-10T12:25:19Z"
|
"date": "2025-12-10T12:25:19Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "cockpit-project/cockpit",
|
|
||||||
"version": "353",
|
|
||||||
"date": "2025-12-10T10:55:50Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "kyantech/Palmr",
|
"name": "kyantech/Palmr",
|
||||||
"version": "v3.3.2-beta",
|
"version": "v3.3.2-beta",
|
||||||
@ -444,11 +509,6 @@
|
|||||||
"version": "9.0.1",
|
"version": "9.0.1",
|
||||||
"date": "2025-12-09T18:13:25Z"
|
"date": "2025-12-09T18:13:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "MediaBrowser/Emby.Releases",
|
|
||||||
"version": "4.9.1.90",
|
|
||||||
"date": "2025-11-11T01:00:32Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Infisical/infisical",
|
"name": "Infisical/infisical",
|
||||||
"version": "v0.154.6",
|
"version": "v0.154.6",
|
||||||
@ -484,11 +544,6 @@
|
|||||||
"version": "16.3",
|
"version": "16.3",
|
||||||
"date": "2025-11-04T12:28:47Z"
|
"date": "2025-11-04T12:28:47Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "LimeSurvey/LimeSurvey",
|
|
||||||
"version": "6.16.1+251125",
|
|
||||||
"date": "2025-12-09T12:27:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Paymenter/Paymenter",
|
"name": "Paymenter/Paymenter",
|
||||||
"version": "v1.4.7",
|
"version": "v1.4.7",
|
||||||
@ -549,11 +604,6 @@
|
|||||||
"version": "v1.15.5",
|
"version": "v1.15.5",
|
||||||
"date": "2025-12-07T12:24:21Z"
|
"date": "2025-12-07T12:24:21Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "livebook-dev/livebook",
|
|
||||||
"version": "v0.18.1",
|
|
||||||
"date": "2025-12-07T11:35:51Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "sysadminsmedia/homebox",
|
"name": "sysadminsmedia/homebox",
|
||||||
"version": "v0.22.0-rc.2",
|
"version": "v0.22.0-rc.2",
|
||||||
@ -664,11 +714,6 @@
|
|||||||
"version": "11.0.4",
|
"version": "11.0.4",
|
||||||
"date": "2025-12-04T09:26:37Z"
|
"date": "2025-12-04T09:26:37Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "danielbrendel/hortusfox-web",
|
|
||||||
"version": "v5.5",
|
|
||||||
"date": "2025-12-03T21:20:30Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "actualbudget/actual",
|
"name": "actualbudget/actual",
|
||||||
"version": "v25.12.0",
|
"version": "v25.12.0",
|
||||||
@ -704,11 +749,6 @@
|
|||||||
"version": "v0.6.41",
|
"version": "v0.6.41",
|
||||||
"date": "2025-12-02T22:28:58Z"
|
"date": "2025-12-02T22:28:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "9001/copyparty",
|
|
||||||
"version": "v1.19.21",
|
|
||||||
"date": "2025-12-02T21:48:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "WordPress/WordPress",
|
"name": "WordPress/WordPress",
|
||||||
"version": "6.9",
|
"version": "6.9",
|
||||||
@ -759,11 +799,6 @@
|
|||||||
"version": "v3.6.0",
|
"version": "v3.6.0",
|
||||||
"date": "2025-12-01T18:48:10Z"
|
"date": "2025-12-01T18:48:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
|
||||||
"version": "pmm-6401-v1.131.0",
|
|
||||||
"date": "2025-12-01T17:18:24Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "OctoPrint/OctoPrint",
|
"name": "OctoPrint/OctoPrint",
|
||||||
"version": "1.11.5",
|
"version": "1.11.5",
|
||||||
@ -774,11 +809,6 @@
|
|||||||
"version": "251130-b3068414c",
|
"version": "251130-b3068414c",
|
||||||
"date": "2025-12-01T05:07:31Z"
|
"date": "2025-12-01T05:07:31Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jellyfin/jellyfin",
|
|
||||||
"version": "v10.11.4",
|
|
||||||
"date": "2025-12-01T02:33:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "recyclarr/recyclarr",
|
"name": "recyclarr/recyclarr",
|
||||||
"version": "v7.5.2",
|
"version": "v7.5.2",
|
||||||
@ -1059,31 +1089,6 @@
|
|||||||
"version": "v0.28.2",
|
"version": "v0.28.2",
|
||||||
"date": "2025-11-18T05:51:46Z"
|
"date": "2025-11-18T05:51:46Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "librenms/librenms",
|
|
||||||
"version": "25.11.0",
|
|
||||||
"date": "2025-11-17T13:29:57Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
|
||||||
"version": "v4.2.1",
|
|
||||||
"date": "2025-11-17T02:47:15Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Prowlarr/Prowlarr",
|
|
||||||
"version": "v2.3.0.5236",
|
|
||||||
"date": "2025-11-16T22:41:22Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Lidarr/Lidarr",
|
|
||||||
"version": "v3.1.0.4875",
|
|
||||||
"date": "2025-11-16T22:40:18Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radarr/Radarr",
|
|
||||||
"version": "v6.0.4.10291",
|
|
||||||
"date": "2025-11-16T22:39:01Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "binwiederhier/ntfy",
|
"name": "binwiederhier/ntfy",
|
||||||
"version": "v2.15.0",
|
"version": "v2.15.0",
|
||||||
@ -1179,11 +1184,6 @@
|
|||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"date": "2025-11-05T16:14:37Z"
|
"date": "2025-11-05T16:14:37Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "azukaar/Cosmos-Server",
|
|
||||||
"version": "v0.18.4",
|
|
||||||
"date": "2025-04-05T19:12:57Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "getumbrel/umbrel",
|
"name": "getumbrel/umbrel",
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
|
|||||||
@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y nginx
|
$STD apt install -y nginx
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli,tokenizer,dom,redis,session,openssl" PHP_FPM="YES" setup_php
|
PHP_MODULE="common,ctype,fileinfo,mysql,tokenizer,dom,redis" PHP_VERSION="8.4" PHP_FPM="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
MARIADB_DB_NAME="2fauth_db" MARIADB_DB_USER="2fauth" setup_mariadb_db
|
MARIADB_DB_NAME="2fauth_db" MARIADB_DB_USER="2fauth" setup_mariadb_db
|
||||||
@ -65,7 +65,7 @@ server {
|
|||||||
error_page 404 /index.php;
|
error_page 404 /index.php;
|
||||||
|
|
||||||
location ~ \.php\$ {
|
location ~ \.php\$ {
|
||||||
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
|
fastcgi_pass unix:/var/run/php/php${PHP_VERSION}-fpm.sock;
|
||||||
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,8 @@ fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "lates
|
|||||||
setup_docker
|
setup_docker
|
||||||
|
|
||||||
msg_info "Setting up DiscoPanel"
|
msg_info "Setting up DiscoPanel"
|
||||||
|
cd /opt/discopanel
|
||||||
|
$STD make gen
|
||||||
cd /opt/discopanel/web/discopanel
|
cd /opt/discopanel/web/discopanel
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
|
|||||||
@ -14,27 +14,22 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y apt-transport-https
|
$STD apt install -y apt-transport-https
|
||||||
$STD apt-get install -y composer
|
|
||||||
$STD apt-get install -y php8.2-{bz2,curl,sqlite3,zip,xml}
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
|
PHP_VERSION="8.4" PHP_MODULE="bz2,sqlite3" PHP_FPM="YES" setup_php
|
||||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
setup_composer
|
||||||
msg_info "Installing Heimdall Dashboard ${RELEASE}"
|
fetch_and_deploy_gh_release "Heimdall" "linuxserver/Heimdall" "tarball"
|
||||||
curl -fsSL "https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz" -o "${RELEASE}".tar.gz
|
|
||||||
tar xzf "${RELEASE}".tar.gz
|
msg_info "Setting up Heimdall-Dashboard"
|
||||||
VER=$(curl -fsSL https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
rm -rf "${RELEASE}".tar.gz
|
|
||||||
mv Heimdall-"${VER}" /opt/Heimdall
|
|
||||||
cd /opt/Heimdall
|
cd /opt/Heimdall
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
$STD php artisan key:generate
|
$STD php artisan key:generate
|
||||||
msg_ok "Installed Heimdall Dashboard ${RELEASE}"
|
msg_ok "Setup Heimdall-Dashboard"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
service_path="/etc/systemd/system/heimdall.service"
|
cat <<EOF >/etc/systemd/system/heimdall.service
|
||||||
echo "[Unit]
|
[Unit]
|
||||||
Description=Heimdall
|
Description=Heimdall
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
@ -44,14 +39,16 @@ RestartSec=5
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/opt/Heimdall
|
WorkingDirectory=/opt/Heimdall
|
||||||
ExecStart="/usr/bin/php" artisan serve --port 7990 --host 0.0.0.0
|
ExecStart=/usr/bin/php artisan serve --port 7990 --host 0.0.0.0
|
||||||
TimeoutStopSec=30
|
TimeoutStopSec=30
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target" >$service_path
|
WantedBy=multi-user.target"
|
||||||
|
EOF
|
||||||
systemctl enable -q --now heimdall
|
systemctl enable -q --now heimdall
|
||||||
cd /opt/Heimdall
|
cd /opt/Heimdall
|
||||||
COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer dump-autoload
|
||||||
systemctl restart heimdall.service
|
systemctl restart heimdall.service
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
|||||||
189
install/koel-install.sh
Normal file
189
install/koel-install.sh
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://koel.dev/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
nginx \
|
||||||
|
ffmpeg \
|
||||||
|
cron \
|
||||||
|
locales
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
import_local_ip
|
||||||
|
PG_VERSION="16" setup_postgresql
|
||||||
|
PG_DB_NAME="koel" PG_DB_USER="koel" setup_postgresql_db
|
||||||
|
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bz2,exif,imagick,pgsql,sqlite3" setup_php
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||||
|
setup_composer
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring Koel"
|
||||||
|
mkdir -p /opt/koel_media /opt/koel_sync
|
||||||
|
cd /opt/koel
|
||||||
|
cat <<EOF >/opt/koel/.env
|
||||||
|
APP_NAME=Koel
|
||||||
|
APP_ENV=production
|
||||||
|
APP_DEBUG=false
|
||||||
|
APP_URL=http://${LOCAL_IP}
|
||||||
|
APP_KEY=
|
||||||
|
|
||||||
|
TRUSTED_HOSTS=
|
||||||
|
|
||||||
|
DB_CONNECTION=pgsql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_DATABASE=${PG_DB_NAME}
|
||||||
|
DB_USERNAME=${PG_DB_USER}
|
||||||
|
DB_PASSWORD=${PG_DB_PASS}
|
||||||
|
|
||||||
|
STORAGE_DRIVER=local
|
||||||
|
MEDIA_PATH=/opt/koel_media
|
||||||
|
ARTIFACTS_PATH=
|
||||||
|
|
||||||
|
IGNORE_DOT_FILES=true
|
||||||
|
APP_MAX_SCAN_TIME=600
|
||||||
|
MEMORY_LIMIT=
|
||||||
|
|
||||||
|
STREAMING_METHOD=php
|
||||||
|
SCOUT_DRIVER=tntsearch
|
||||||
|
|
||||||
|
USE_MUSICBRAINZ=true
|
||||||
|
MUSICBRAINZ_USER_AGENT=
|
||||||
|
|
||||||
|
LASTFM_API_KEY=
|
||||||
|
LASTFM_API_SECRET=
|
||||||
|
|
||||||
|
SPOTIFY_CLIENT_ID=
|
||||||
|
SPOTIFY_CLIENT_SECRET=
|
||||||
|
|
||||||
|
YOUTUBE_API_KEY=
|
||||||
|
|
||||||
|
CDN_URL=
|
||||||
|
|
||||||
|
TRANSCODE_FLAC=false
|
||||||
|
FFMPEG_PATH=/usr/bin/ffmpeg
|
||||||
|
TRANSCODE_BIT_RATE=128
|
||||||
|
|
||||||
|
ALLOW_DOWNLOAD=true
|
||||||
|
BACKUP_ON_DELETE=true
|
||||||
|
|
||||||
|
MEDIA_BROWSER_ENABLED=false
|
||||||
|
|
||||||
|
PROXY_AUTH_ENABLED=false
|
||||||
|
|
||||||
|
SYNC_LOG_LEVEL=error
|
||||||
|
FORCE_HTTPS=
|
||||||
|
|
||||||
|
MAIL_FROM_ADDRESS="noreply@localhost"
|
||||||
|
MAIL_FROM_NAME="Koel"
|
||||||
|
MAIL_MAILER=log
|
||||||
|
MAIL_HOST=null
|
||||||
|
MAIL_PORT=null
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
|
||||||
|
BROADCAST_CONNECTION=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
FILESYSTEM_DISK=local
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p /opt/koel/storage/{app/public,framework/{cache/data,sessions,views},logs}
|
||||||
|
chown -R www-data:www-data /opt/koel /opt/koel_media /opt/koel_sync
|
||||||
|
chmod -R 775 /opt/koel/storage /opt/koel/bootstrap/cache
|
||||||
|
msg_ok "Configured Koel"
|
||||||
|
|
||||||
|
msg_info "Installing Koel (Patience)"
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
cd /opt/koel
|
||||||
|
$STD composer install --no-interaction --no-dev --optimize-autoloader
|
||||||
|
$STD php artisan key:generate --force
|
||||||
|
$STD php artisan config:clear
|
||||||
|
$STD php artisan cache:clear
|
||||||
|
$STD php artisan koel:init --no-assets --no-interaction
|
||||||
|
chown -R www-data:www-data /opt/koel
|
||||||
|
msg_ok "Installed Koel"
|
||||||
|
|
||||||
|
msg_info "Tuning PHP-FPM"
|
||||||
|
PHP_FPM_CONF="/etc/php/8.4/fpm/pool.d/www.conf"
|
||||||
|
sed -i 's/^pm.max_children = .*/pm.max_children = 15/' "$PHP_FPM_CONF"
|
||||||
|
sed -i 's/^pm.start_servers = .*/pm.start_servers = 4/' "$PHP_FPM_CONF"
|
||||||
|
sed -i 's/^pm.min_spare_servers = .*/pm.min_spare_servers = 2/' "$PHP_FPM_CONF"
|
||||||
|
sed -i 's/^pm.max_spare_servers = .*/pm.max_spare_servers = 8/' "$PHP_FPM_CONF"
|
||||||
|
$STD systemctl restart php8.4-fpm
|
||||||
|
msg_ok "Tuned PHP-FPM"
|
||||||
|
|
||||||
|
msg_info "Configuring Nginx"
|
||||||
|
cat <<'EOF' >/etc/nginx/sites-available/koel
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
root /opt/koel/public;
|
||||||
|
index index.php;
|
||||||
|
|
||||||
|
client_max_body_size 50M;
|
||||||
|
charset utf-8;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;
|
||||||
|
gzip_comp_level 9;
|
||||||
|
|
||||||
|
send_timeout 3600;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$args;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /media/ {
|
||||||
|
internal;
|
||||||
|
alias $upstream_http_x_media_root;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
try_files $uri $uri/ /index.php?$args;
|
||||||
|
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.(?!well-known).* {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
ln -sf /etc/nginx/sites-available/koel /etc/nginx/sites-enabled/koel
|
||||||
|
$STD systemctl reload nginx
|
||||||
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
msg_info "Setting up Cron Job"
|
||||||
|
cat <<'EOF' >/etc/cron.d/koel
|
||||||
|
0 * * * * www-data cd /opt/koel && /usr/bin/php artisan koel:scan >/dev/null 2>&1
|
||||||
|
EOF
|
||||||
|
chmod 644 /etc/cron.d/koel
|
||||||
|
msg_ok "Set up Cron Job"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@ -230,6 +230,8 @@ systemctl enable -q --now gerbil
|
|||||||
cat <<'EOF' >/etc/systemd/system/traefik.service
|
cat <<'EOF' >/etc/systemd/system/traefik.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience
|
Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=notify
|
Type=notify
|
||||||
|
|||||||
@ -205,7 +205,10 @@ update_motd_ip() {
|
|||||||
# - Falls back to warning if no keys provided
|
# - Falls back to warning if no keys provided
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
install_ssh_keys_into_ct() {
|
install_ssh_keys_into_ct() {
|
||||||
[[ "$SSH" != "yes" ]] && return 0
|
[[ "${SSH:-no}" != "yes" ]] && return 0
|
||||||
|
|
||||||
|
# Ensure SSH_KEYS_FILE is defined (may not be set if advanced_settings was skipped)
|
||||||
|
: "${SSH_KEYS_FILE:=}"
|
||||||
|
|
||||||
if [[ -n "$SSH_KEYS_FILE" && -s "$SSH_KEYS_FILE" ]]; then
|
if [[ -n "$SSH_KEYS_FILE" && -s "$SSH_KEYS_FILE" ]]; then
|
||||||
msg_info "Installing selected SSH keys into CT ${CTID}"
|
msg_info "Installing selected SSH keys into CT ${CTID}"
|
||||||
@ -430,6 +433,14 @@ base_settings() {
|
|||||||
ENABLE_FUSE=${var_fuse:-"${1:-no}"}
|
ENABLE_FUSE=${var_fuse:-"${1:-no}"}
|
||||||
ENABLE_TUN=${var_tun:-"${1:-no}"}
|
ENABLE_TUN=${var_tun:-"${1:-no}"}
|
||||||
|
|
||||||
|
# Additional settings that may be skipped if advanced_settings is not run (e.g., App Defaults)
|
||||||
|
ENABLE_GPU=${var_gpu:-"no"}
|
||||||
|
ENABLE_NESTING=${var_nesting:-"1"}
|
||||||
|
ENABLE_KEYCTL=${var_keyctl:-"0"}
|
||||||
|
ENABLE_MKNOD=${var_mknod:-"0"}
|
||||||
|
PROTECT_CT=${var_protection:-"no"}
|
||||||
|
CT_TIMEZONE=${var_timezone:-"$timezone"}
|
||||||
|
|
||||||
# Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
|
# Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
|
||||||
if [ -z "$var_os" ]; then
|
if [ -z "$var_os" ]; then
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
@ -445,9 +456,11 @@ base_settings() {
|
|||||||
# - Safe parser for KEY=VALUE lines from vars files
|
# - Safe parser for KEY=VALUE lines from vars files
|
||||||
# - Used by default_var_settings and app defaults loading
|
# - Used by default_var_settings and app defaults loading
|
||||||
# - Only loads whitelisted var_* keys
|
# - Only loads whitelisted var_* keys
|
||||||
|
# - Optional force parameter to override existing values (for app defaults)
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
load_vars_file() {
|
load_vars_file() {
|
||||||
local file="$1"
|
local file="$1"
|
||||||
|
local force="${2:-no}" # If "yes", override existing variables
|
||||||
[ -f "$file" ] || return 0
|
[ -f "$file" ] || return 0
|
||||||
msg_info "Loading defaults from ${file}"
|
msg_info "Loading defaults from ${file}"
|
||||||
|
|
||||||
@ -485,8 +498,12 @@ load_vars_file() {
|
|||||||
var_val="${BASH_REMATCH[1]}"
|
var_val="${BASH_REMATCH[1]}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set only if not already exported
|
# Set variable: force mode overrides existing, otherwise only set if empty
|
||||||
[[ -z "${!var_key+x}" ]] && export "${var_key}=${var_val}"
|
if [[ "$force" == "yes" ]]; then
|
||||||
|
export "${var_key}=${var_val}"
|
||||||
|
else
|
||||||
|
[[ -z "${!var_key+x}" ]] && export "${var_key}=${var_val}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done <"$file"
|
done <"$file"
|
||||||
msg_ok "Loaded ${file}"
|
msg_ok "Loaded ${file}"
|
||||||
@ -1892,13 +1909,13 @@ Advanced:
|
|||||||
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IPv4: ${BGN}$NET${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IPv4: ${BGN}$NET${CL}"
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IPv6: ${BGN}$IPV6_METHOD${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IPv6: ${BGN}$IPV6_METHOD${CL}"
|
||||||
echo -e "${FUSE}${BOLD}${DGN}FUSE Support: ${BGN}$ENABLE_FUSE${CL}"
|
echo -e "${FUSE}${BOLD}${DGN}FUSE Support: ${BGN}${ENABLE_FUSE:-no}${CL}"
|
||||||
[[ "$ENABLE_TUN" == "yes" ]] && echo -e "${NETWORK}${BOLD}${DGN}TUN/TAP Support: ${BGN}$ENABLE_TUN${CL}"
|
[[ "${ENABLE_TUN:-no}" == "yes" ]] && echo -e "${NETWORK}${BOLD}${DGN}TUN/TAP Support: ${BGN}$ENABLE_TUN${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Nesting: ${BGN}$([ "$ENABLE_NESTING" == "1" ] && echo "Enabled" || echo "Disabled")${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Nesting: ${BGN}$([ "${ENABLE_NESTING:-1}" == "1" ] && echo "Enabled" || echo "Disabled")${CL}"
|
||||||
[[ "$ENABLE_KEYCTL" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Keyctl: ${BGN}Enabled${CL}"
|
[[ "${ENABLE_KEYCTL:-0}" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Keyctl: ${BGN}Enabled${CL}"
|
||||||
echo -e "${GPU}${BOLD}${DGN}GPU Passthrough: ${BGN}$ENABLE_GPU${CL}"
|
echo -e "${GPU}${BOLD}${DGN}GPU Passthrough: ${BGN}${ENABLE_GPU:-no}${CL}"
|
||||||
[[ "$PROTECT_CT" == "yes" || "$PROTECT_CT" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Protection: ${BGN}Enabled${CL}"
|
[[ "${PROTECT_CT:-no}" == "yes" || "${PROTECT_CT:-no}" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Protection: ${BGN}Enabled${CL}"
|
||||||
[[ -n "$CT_TIMEZONE" ]] && echo -e "${INFO}${BOLD}${DGN}Timezone: ${BGN}$CT_TIMEZONE${CL}"
|
[[ -n "${CT_TIMEZONE:-}" ]] && echo -e "${INFO}${BOLD}${DGN}Timezone: ${BGN}$CT_TIMEZONE${CL}"
|
||||||
[[ "$APT_CACHER" == "yes" ]] && echo -e "${INFO}${BOLD}${DGN}APT Cacher: ${BGN}$APT_CACHER_IP${CL}"
|
[[ "$APT_CACHER" == "yes" ]] && echo -e "${INFO}${BOLD}${DGN}APT Cacher: ${BGN}$APT_CACHER_IP${CL}"
|
||||||
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
|
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
|
||||||
echo -e "${CREATING}${BOLD}${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
|
echo -e "${CREATING}${BOLD}${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
|
||||||
@ -2148,8 +2165,8 @@ install_script() {
|
|||||||
header_info
|
header_info
|
||||||
echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}"
|
echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}"
|
||||||
METHOD="appdefaults"
|
METHOD="appdefaults"
|
||||||
|
load_vars_file "$(get_app_defaults_path)" "yes" # Force override script defaults
|
||||||
base_settings
|
base_settings
|
||||||
load_vars_file "$(get_app_defaults_path)"
|
|
||||||
echo_default
|
echo_default
|
||||||
defaults_target="$(get_app_defaults_path)"
|
defaults_target="$(get_app_defaults_path)"
|
||||||
break
|
break
|
||||||
|
|||||||
@ -828,7 +828,7 @@ cleanup_lxc() {
|
|||||||
# Ruby gem
|
# Ruby gem
|
||||||
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
|
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
|
||||||
# Composer (PHP)
|
# Composer (PHP)
|
||||||
if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi
|
if command -v composer &>/dev/null; then COMPOSER_ALLOW_SUPERUSER=1 && $STD composer clear-cache || true; fi
|
||||||
|
|
||||||
if command -v journalctl &>/dev/null; then
|
if command -v journalctl &>/dev/null; then
|
||||||
$STD journalctl --vacuum-time=10m || true
|
$STD journalctl --vacuum-time=10m || true
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 137 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB |
@ -1249,7 +1249,10 @@ setup_deb822_repo() {
|
|||||||
echo "Types: deb"
|
echo "Types: deb"
|
||||||
echo "URIs: $repo_url"
|
echo "URIs: $repo_url"
|
||||||
echo "Suites: $suite"
|
echo "Suites: $suite"
|
||||||
echo "Components: $component"
|
# Flat repositories (suite="./" or absolute path) must not have Components
|
||||||
|
if [[ "$suite" != "./" && -n "$component" ]]; then
|
||||||
|
echo "Components: $component"
|
||||||
|
fi
|
||||||
[[ -n "$architectures" ]] && echo "Architectures: $architectures"
|
[[ -n "$architectures" ]] && echo "Architectures: $architectures"
|
||||||
echo "Signed-By: /etc/apt/keyrings/${name}.gpg"
|
echo "Signed-By: /etc/apt/keyrings/${name}.gpg"
|
||||||
} >/etc/apt/sources.list.d/${name}.sources
|
} >/etc/apt/sources.list.d/${name}.sources
|
||||||
@ -4424,7 +4427,7 @@ function setup_rust() {
|
|||||||
# Get currently installed version
|
# Get currently installed version
|
||||||
local CURRENT_VERSION=""
|
local CURRENT_VERSION=""
|
||||||
if command -v rustc &>/dev/null; then
|
if command -v rustc &>/dev/null; then
|
||||||
CURRENT_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}')
|
CURRENT_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}' 2>/dev/null) || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Scenario 1: Rustup not installed - fresh install
|
# Scenario 1: Rustup not installed - fresh install
|
||||||
@ -4443,7 +4446,8 @@ function setup_rust() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local RUST_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}')
|
local RUST_VERSION
|
||||||
|
RUST_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}' 2>/dev/null) || true
|
||||||
if [[ -z "$RUST_VERSION" ]]; then
|
if [[ -z "$RUST_VERSION" ]]; then
|
||||||
msg_error "Failed to determine Rust version"
|
msg_error "Failed to determine Rust version"
|
||||||
return 1
|
return 1
|
||||||
@ -4474,7 +4478,8 @@ function setup_rust() {
|
|||||||
# Ensure PATH is updated for current shell session
|
# Ensure PATH is updated for current shell session
|
||||||
export PATH="$CARGO_BIN:$PATH"
|
export PATH="$CARGO_BIN:$PATH"
|
||||||
|
|
||||||
local RUST_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}')
|
local RUST_VERSION
|
||||||
|
RUST_VERSION=$(rustc --version 2>/dev/null | awk '{print $2}' 2>/dev/null) || true
|
||||||
if [[ -z "$RUST_VERSION" ]]; then
|
if [[ -z "$RUST_VERSION" ]]; then
|
||||||
msg_error "Failed to determine Rust version after update"
|
msg_error "Failed to determine Rust version after update"
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@ -578,7 +578,25 @@ fi
|
|||||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
||||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
||||||
msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image"
|
msg_info "Retrieving the URL for the OPNsense Qcow2 Disk Image"
|
||||||
URL="https://download.freebsd.org/releases/VM-IMAGES/14.3-RELEASE/amd64/Latest/FreeBSD-14.3-RELEASE-amd64.qcow2.xz"
|
# Use latest stable FreeBSD amd64 qcow2 VM image (generic, not UFS/ZFS)
|
||||||
|
RELEASE_LIST="$(curl -s https://download.freebsd.org/releases/VM-IMAGES/ \
|
||||||
|
| grep -Eo '[0-9]+\.[0-9]+-RELEASE' \
|
||||||
|
| sort -Vr \
|
||||||
|
| uniq)"
|
||||||
|
URL=""
|
||||||
|
FREEBSD_VER=""
|
||||||
|
for ver in $RELEASE_LIST; do
|
||||||
|
candidate="https://download.freebsd.org/releases/VM-IMAGES/${ver}/amd64/Latest/FreeBSD-${ver}-amd64.qcow2.xz"
|
||||||
|
if curl -fsI "$candidate" >/dev/null 2>&1; then
|
||||||
|
FREEBSD_VER="$ver"
|
||||||
|
URL="$candidate"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$URL" ]; then
|
||||||
|
msg_error "Could not find generic FreeBSD amd64 qcow2 image (non-UFS/ZFS)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
|
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
|
||||||
curl -f#SL -o "$(basename "$URL")" "$URL"
|
curl -f#SL -o "$(basename "$URL")" "$URL"
|
||||||
echo -en "\e[1A\e[0K"
|
echo -en "\e[1A\e[0K"
|
||||||
|
|||||||
Reference in New Issue
Block a user