mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-03 20:03:25 +01:00
Compare commits
118 Commits
2026-01-17
...
2026-01-21
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e21f411f5 | ||
|
|
fe21d3577f | ||
|
|
3725023ee3 | ||
|
|
c19817af8d | ||
|
|
5378d41acf | ||
|
|
5bb48fc843 | ||
|
|
e935289128 | ||
|
|
0db119d2c3 | ||
|
|
5c9087a91a | ||
|
|
1d7d8c27fa | ||
|
|
fae2d032ab | ||
|
|
2fab70294f | ||
|
|
477199a4c2 | ||
|
|
733425f970 | ||
|
|
7395a44277 | ||
|
|
f555f9ae0c | ||
|
|
fe2384a2fa | ||
|
|
5384adf0c3 | ||
|
|
ed18776710 | ||
|
|
13824931b0 | ||
|
|
88557d53f4 | ||
|
|
0c9653c7cb | ||
|
|
914c316f42 | ||
|
|
49d92afb98 | ||
|
|
dba473b2b3 | ||
|
|
5dd50aacd7 | ||
|
|
0dcb8b5ef7 | ||
|
|
a48435e064 | ||
|
|
cb2141ebe2 | ||
|
|
b1f21b4024 | ||
|
|
7699f4f6ad | ||
|
|
657a9629be | ||
|
|
d71f24bddb | ||
|
|
5a1c1e06f9 | ||
|
|
7146e8d5b9 | ||
|
|
a5dfa33af3 | ||
|
|
6dd5fbd7da | ||
|
|
718cda8eb1 | ||
|
|
ff5263981b | ||
|
|
785177fe29 | ||
|
|
5e7e7c884d | ||
|
|
97275d06ea | ||
|
|
0f15d81cd3 | ||
|
|
6712f6a9ca | ||
|
|
1816b0169e | ||
|
|
3f05972eb9 | ||
|
|
76912641bb | ||
|
|
11f67d3e50 | ||
|
|
7b0ea03295 | ||
|
|
eaf911be0b | ||
|
|
245ec06d77 | ||
|
|
9a489f0b53 | ||
|
|
f75f2a24d7 | ||
|
|
9e69c7a76e | ||
|
|
72631c0099 | ||
|
|
1aa0475e62 | ||
|
|
56c2e6cf1c | ||
|
|
379faaa3d6 | ||
|
|
0edd8fcfe3 | ||
|
|
c8c1c454ce | ||
|
|
69b0e5b858 | ||
|
|
41384d0764 | ||
|
|
1e6f37057b | ||
|
|
7a71414d0e | ||
|
|
de20a41423 | ||
|
|
008f6af0bd | ||
|
|
d6811a3383 | ||
|
|
38a0757e4e | ||
|
|
cb8a900d84 | ||
|
|
3bf08df691 | ||
|
|
90f73d1d24 | ||
|
|
bc53369bab | ||
|
|
56ab6a6cb8 | ||
|
|
4f389c01f9 | ||
|
|
db5a6bacf4 | ||
|
|
3e6cfe2766 | ||
|
|
de14cab715 | ||
|
|
187cd4825e | ||
|
|
4dbbbf1545 | ||
|
|
9e2c801d29 | ||
|
|
2903c3d8ad | ||
|
|
f029460bc6 | ||
|
|
6578f3c5f7 | ||
|
|
973e7e0325 | ||
|
|
73944792b5 | ||
|
|
afe9d08233 | ||
|
|
9e1354a87b | ||
|
|
f2aca758ea | ||
|
|
3f4e291203 | ||
|
|
ab86f00c68 | ||
|
|
9d6c2ba2ae | ||
|
|
ac68ce48de | ||
|
|
4aa6eb7fb5 | ||
|
|
dbf551d162 | ||
|
|
7a52b83eb8 | ||
|
|
ca97009d1e | ||
|
|
2c1756cad9 | ||
|
|
6e66359d8f | ||
|
|
e21ab1500b | ||
|
|
fe5108f7ca | ||
|
|
502c357895 | ||
|
|
0e59533bcc | ||
|
|
e05742b96a | ||
|
|
9dc1e606ec | ||
|
|
c03e532dde | ||
|
|
54ba53dd3e | ||
|
|
83b5d90c04 | ||
|
|
bcd143e91a | ||
|
|
c5031e6462 | ||
|
|
297b4c30df | ||
|
|
5abfac97f7 | ||
|
|
f6b3515c9e | ||
|
|
67685e62d1 | ||
|
|
25a6a7ecc7 | ||
|
|
6ccc0aaaf6 | ||
|
|
97ce511090 | ||
|
|
7d702353f7 | ||
|
|
b8f9ec2a34 |
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
2
.github/DISCUSSION_TEMPLATE/request-script.yml
generated
vendored
@@ -30,7 +30,7 @@ body:
|
||||
required: true
|
||||
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
||||
required: true
|
||||
- label: "The application requested has 200+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
- label: "The application requested has 600+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
143
CHANGELOG.md
143
CHANGELOG.md
@@ -10,8 +10,151 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-22
|
||||
|
||||
## 2026-01-21
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Byparr ([#11039](https://github.com/community-scripts/ProxmoxVE/pull/11039))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: Snipe-IT update missing all user uploads (#11032) [@ruanmed](https://github.com/ruanmed) ([#11033](https://github.com/community-scripts/ProxmoxVE/pull/11033))
|
||||
- yubal: fix for v0.2 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11006](https://github.com/community-scripts/ProxmoxVE/pull/11006))
|
||||
- Joplin-Server: use yarn workspaces focus for faster builds [@MickLesk](https://github.com/MickLesk) ([#11027](https://github.com/community-scripts/ProxmoxVE/pull/11027))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools: add ubuntu PHP repository setup [@MickLesk](https://github.com/MickLesk) ([#11034](https://github.com/community-scripts/ProxmoxVE/pull/11034))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: allow empty tags & improve template search [@MickLesk](https://github.com/MickLesk) ([#11020](https://github.com/community-scripts/ProxmoxVE/pull/11020))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Joplin Server: Set disable flag to true in joplin-server.json [@tremor021](https://github.com/tremor021) ([#11008](https://github.com/community-scripts/ProxmoxVE/pull/11008))
|
||||
|
||||
## 2026-01-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- dolibarr: switch mirror [@MickLesk](https://github.com/MickLesk) ([#11004](https://github.com/community-scripts/ProxmoxVE/pull/11004))
|
||||
- checkmk: reordner base function [@MickLesk](https://github.com/MickLesk) ([#10990](https://github.com/community-scripts/ProxmoxVE/pull/10990))
|
||||
- Homepage: preserve config directory during updates [@MickLesk](https://github.com/MickLesk) ([#10993](https://github.com/community-scripts/ProxmoxVE/pull/10993))
|
||||
- DiscoPanel: add go for update build process [@miausalvaje](https://github.com/miausalvaje) ([#10991](https://github.com/community-scripts/ProxmoxVE/pull/10991))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: add retry logic for template lock in LXC container creation [@MickLesk](https://github.com/MickLesk) ([#11002](https://github.com/community-scripts/ProxmoxVE/pull/11002))
|
||||
- core: implement ensure_profile_loaded function [@MickLesk](https://github.com/MickLesk) ([#10999](https://github.com/community-scripts/ProxmoxVE/pull/10999))
|
||||
- core: add input validations for several functions [@MickLesk](https://github.com/MickLesk) ([#10995](https://github.com/community-scripts/ProxmoxVE/pull/10995))
|
||||
|
||||
## 2026-01-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- yubal ([#10955](https://github.com/community-scripts/ProxmoxVE/pull/10955))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Apache-Guacamole: move jdbc cleanup after schema upgrade [@MickLesk](https://github.com/MickLesk) ([#10974](https://github.com/community-scripts/ProxmoxVE/pull/10974))
|
||||
- Outline: prevent corepack interactive prompt blocking installation [@MickLesk](https://github.com/MickLesk) ([#10973](https://github.com/community-scripts/ProxmoxVE/pull/10973))
|
||||
- firefly: prevent nested storage directories during update (#10967) [@MickLesk](https://github.com/MickLesk) ([#10972](https://github.com/community-scripts/ProxmoxVE/pull/10972))
|
||||
- PeaNUT: change default port [@vhsdream](https://github.com/vhsdream) ([#10962](https://github.com/community-scripts/ProxmoxVE/pull/10962))
|
||||
- Update/splunk enterprise [@rcastley](https://github.com/rcastley) ([#10949](https://github.com/community-scripts/ProxmoxVE/pull/10949))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Pangolin: use dynamic badger plugin version [@MickLesk](https://github.com/MickLesk) ([#10975](https://github.com/community-scripts/ProxmoxVE/pull/10975))
|
||||
- Tautulli: add version detection and add proper update script [@MickLesk](https://github.com/MickLesk) ([#10976](https://github.com/community-scripts/ProxmoxVE/pull/10976))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Remove custom IP fetching in scripts [@tremor021](https://github.com/tremor021) ([#10954](https://github.com/community-scripts/ProxmoxVE/pull/10954))
|
||||
- Refactor: Homepage [@tremor021](https://github.com/tremor021) ([#10950](https://github.com/community-scripts/ProxmoxVE/pull/10950))
|
||||
- Refactor: hev-socks5-server [@tremor021](https://github.com/tremor021) ([#10945](https://github.com/community-scripts/ProxmoxVE/pull/10945))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove: phpIPAM [@MickLesk](https://github.com/MickLesk) ([#10939](https://github.com/community-scripts/ProxmoxVE/pull/10939))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: add RFC 1123/952 compliant hostname/FQDN validation [@MickLesk](https://github.com/MickLesk) ([#10977](https://github.com/community-scripts/ProxmoxVE/pull/10977))
|
||||
- [core]: Make LXC IP a global variable [@tremor021](https://github.com/tremor021) ([#10951](https://github.com/community-scripts/ProxmoxVE/pull/10951))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: copyparty [@MickLesk](https://github.com/MickLesk) ([#10941](https://github.com/community-scripts/ProxmoxVE/pull/10941))
|
||||
|
||||
## 2026-01-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
|
||||
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Fix Patchmon install script (escaping) [@christiaangoossens](https://github.com/christiaangoossens) ([#10920](https://github.com/community-scripts/ProxmoxVE/pull/10920))
|
||||
- refactor: peanut entrypoint [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10902](https://github.com/community-scripts/ProxmoxVE/pull/10902))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Update Patchmon default Nginx config (IPv6 and correct scheme) [@christiaangoossens](https://github.com/christiaangoossens) ([#10917](https://github.com/community-scripts/ProxmoxVE/pull/10917))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: FluidCalendar [@tremor021](https://github.com/tremor021) ([#10928](https://github.com/community-scripts/ProxmoxVE/pull/10928))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove iVentoy script [@tremor021](https://github.com/tremor021) ([#10924](https://github.com/community-scripts/ProxmoxVE/pull/10924))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: improve password handling and validation logic [@MickLesk](https://github.com/MickLesk) ([#10925](https://github.com/community-scripts/ProxmoxVE/pull/10925))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- hwaccel: improve NVIDIA version matching and GPU selection UI [@MickLesk](https://github.com/MickLesk) ([#10901](https://github.com/community-scripts/ProxmoxVE/pull/10901))
|
||||
|
||||
### 📂 Github
|
||||
|
||||
- Fix typo in the New Script request template [@tremor021](https://github.com/tremor021) ([#10891](https://github.com/community-scripts/ProxmoxVE/pull/10891))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: preserve newest scripts pagination [@jgrubiox](https://github.com/jgrubiox) ([#10882](https://github.com/community-scripts/ProxmoxVE/pull/10882))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- Update qui.json [@GalaxyCatD3v](https://github.com/GalaxyCatD3v) ([#10896](https://github.com/community-scripts/ProxmoxVE/pull/10896))
|
||||
|
||||
## 2026-01-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -92,7 +92,6 @@ function update_script() {
|
||||
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-jdbc-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-jdbc.tar.gz"
|
||||
$STD tar -xf /tmp/guacamole-auth-jdbc.tar.gz -C /tmp
|
||||
mv /tmp/guacamole-auth-jdbc-"${LATEST_SERVER}"/mysql/guacamole-auth-jdbc-mysql-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
|
||||
rm -rf /tmp/guacamole-auth-jdbc*
|
||||
echo "${LATEST_SERVER}" >~/.guacamole_auth_jdbc
|
||||
msg_ok "Updated Guacamole Auth JDBC"
|
||||
else
|
||||
@@ -140,6 +139,7 @@ function update_script() {
|
||||
fi
|
||||
done
|
||||
fi
|
||||
rm -rf /tmp/guacamole-auth-jdbc*
|
||||
msg_ok "MySQL Schema updated"
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://phpipam.net/
|
||||
# Source: https://github.com/ThePhaseless/Byparr
|
||||
|
||||
APP="phpIPAM"
|
||||
var_tags="${var_tags:-network}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
APP="Byparr"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
@@ -23,31 +23,20 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/phpipam ]]; then
|
||||
if [[ ! -d /opt/Byparr ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
setup_mariadb
|
||||
if check_for_gh_release "phpipam" "phpipam/phpipam"; then
|
||||
|
||||
if check_for_gh_release "Byparr" "ThePhaseless/Byparr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop apache2
|
||||
systemctl stop byparr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
|
||||
|
||||
msg_info "Installing PHP-PEAR"
|
||||
$STD apt install -y \
|
||||
php-pear \
|
||||
php-dev
|
||||
msg_ok "Installed PHP-PEAR"
|
||||
|
||||
mv /opt/phpipam/ /opt/phpipam-backup
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
||||
rm -r /opt/phpipam-backup
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
systemctl start byparr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
@@ -61,4 +50,4 @@ 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}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8191${CL}"
|
||||
@@ -43,7 +43,6 @@ function update_script() {
|
||||
if [ "$UPD" == "2" ]; then
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
if check_for_gh_release "cronicle" "jhuckaby/Cronicle"; then
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
git \
|
||||
@@ -59,7 +58,7 @@ function update_script() {
|
||||
cd /opt/cronicle
|
||||
$STD npm install
|
||||
$STD node bin/build.js dist
|
||||
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
|
||||
sed -i "s/localhost:3012/${LOCAL_IP}:3012/g" /opt/cronicle/conf/config.json
|
||||
$STD /opt/cronicle/bin/control.sh start
|
||||
msg_ok "Installed Cronicle Worker"
|
||||
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
|
||||
|
||||
@@ -54,9 +54,14 @@ function update_script() {
|
||||
cd /opt/discopanel/web/discopanel
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Built Web Interface"
|
||||
|
||||
setup_go
|
||||
|
||||
msg_info "Building DiscoPanel"
|
||||
cd /opt/discopanel
|
||||
$STD go build -o discopanel cmd/discopanel/main.go
|
||||
msg_ok "Setup DiscoPanel"
|
||||
msg_ok "Built DiscoPanel"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/discopanel/data
|
||||
|
||||
@@ -32,6 +32,7 @@ function update_script() {
|
||||
if check_for_gh_release "firefly" "firefly-iii/firefly-iii"; then
|
||||
systemctl stop apache2
|
||||
cp /opt/firefly/.env /opt/.env
|
||||
rm -rf /opt/storage
|
||||
cp -r /opt/firefly/storage /opt/storage
|
||||
|
||||
if [[ -d /opt/firefly/dataimporter ]]; then
|
||||
@@ -82,6 +83,7 @@ function update_script() {
|
||||
chown -R www-data:www-data /opt/firefly/dataimporter
|
||||
msg_ok "Updated Firefly Importer"
|
||||
fi
|
||||
rm -rf /opt/storage /opt/.env /opt/dataimporter.env
|
||||
systemctl start apache2
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
|
||||
@@ -34,11 +34,10 @@ function update_script() {
|
||||
msg_info "Stopped Service"
|
||||
|
||||
cp /opt/fluid-calendar/.env /opt/fluid.env
|
||||
rm -rf /opt/fluid-calendar
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
|
||||
msg_info "Updating Fluid Calendar"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
cd /opt/fluid-calendar
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
|
||||
@@ -49,14 +49,13 @@ function update_script() {
|
||||
if [[ ! -f /opt/gitea-mirror.env ]]; then
|
||||
msg_info "Detected old Enviroment, updating files"
|
||||
APP_SECRET=$(openssl rand -base64 32)
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/gitea-mirror.env
|
||||
# See here for config options: https://github.com/RayLabsHQ/gitea-mirror/blob/main/docs/ENVIRONMENT_VARIABLES.md
|
||||
NODE_ENV=production
|
||||
HOST=0.0.0.0
|
||||
PORT=4321
|
||||
DATABASE_URL=sqlite://data/gitea-mirror.db
|
||||
BETTER_AUTH_URL=http://${HOST_IP}:4321
|
||||
BETTER_AUTH_URL=http://${LOCAL_IP}:4321
|
||||
BETTER_AUTH_SECRET=${APP_SECRET}
|
||||
npm_package_version=${APP_VERSION}
|
||||
EOF
|
||||
|
||||
6
ct/headers/byparr
Normal file
6
ct/headers/byparr
Normal file
@@ -0,0 +1,6 @@
|
||||
____
|
||||
/ __ )__ ______ ____ ___________
|
||||
/ __ / / / / __ \/ __ `/ ___/ ___/
|
||||
/ /_/ / /_/ / /_/ / /_/ / / / /
|
||||
/_____/\__, / .___/\__,_/_/ /_/
|
||||
/____/_/
|
||||
@@ -1,6 +0,0 @@
|
||||
_ _ __ __
|
||||
(_) | / /__ ____ / /_____ __ __
|
||||
/ /| | / / _ \/ __ \/ __/ __ \/ / / /
|
||||
/ / | |/ / __/ / / / /_/ /_/ / /_/ /
|
||||
/_/ |___/\___/_/ /_/\__/\____/\__, /
|
||||
/____/
|
||||
@@ -1,6 +0,0 @@
|
||||
__ ________ ___ __ ___
|
||||
____ / /_ ____ / _/ __ \/ | / |/ /
|
||||
/ __ \/ __ \/ __ \ / // /_/ / /| | / /|_/ /
|
||||
/ /_/ / / / / /_/ // // ____/ ___ |/ / / /
|
||||
/ .___/_/ /_/ .___/___/_/ /_/ |_/_/ /_/
|
||||
/_/ /_/
|
||||
6
ct/headers/termix
Normal file
6
ct/headers/termix
Normal file
@@ -0,0 +1,6 @@
|
||||
______ _
|
||||
/_ __/__ _________ ___ (_) __
|
||||
/ / / _ \/ ___/ __ `__ \/ / |/_/
|
||||
/ / / __/ / / / / / / / /> <
|
||||
/_/ \___/_/ /_/ /_/ /_/_/_/|_|
|
||||
|
||||
6
ct/headers/thingsboard
Normal file
6
ct/headers/thingsboard
Normal file
@@ -0,0 +1,6 @@
|
||||
________ _ ____ __
|
||||
/_ __/ /_ (_)___ ____ ______/ __ )____ ____ __________/ /
|
||||
/ / / __ \/ / __ \/ __ `/ ___/ __ / __ \/ __ `/ ___/ __ /
|
||||
/ / / / / / / / / / /_/ (__ ) /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ /_/ /_/_/_/ /_/\__, /____/_____/\____/\__,_/_/ \__,_/
|
||||
/____/
|
||||
6
ct/headers/yubal
Normal file
6
ct/headers/yubal
Normal file
@@ -0,0 +1,6 @@
|
||||
__ __ __ __
|
||||
\ \/ /_ __/ /_ ____ _/ /
|
||||
\ / / / / __ \/ __ `/ /
|
||||
/ / /_/ / /_/ / /_/ / /
|
||||
/_/\__,_/_.___/\__,_/_/
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -29,26 +29,18 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/heiher/${APP}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
|
||||
if check_for_gh_release "hev-socks5-server" "heiher/hev-socks5-server"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop hev-socks5-server
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
curl -L -o "${APP}" "https://github.com/heiher/${APP}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64"
|
||||
mv ${APP} /opt/${APP}
|
||||
chmod +x /opt/${APP}
|
||||
msg_ok "Updated hev-socks5-server to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-x86_64"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start hev-socks5-server
|
||||
msg_ok "Started Service"
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "4" ]; then
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
msg_info "Installing FileBrowser"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
|
||||
$STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
|
||||
@@ -95,7 +94,7 @@ WantedBy=default.target" >$service_path
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "FileBrowser should be reachable by going to the following URL.
|
||||
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
|
||||
${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,6 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
get_lxc_ip
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||
if ! command -v jq &>/dev/null; then
|
||||
$STD msg_info "Installing jq..."
|
||||
@@ -37,16 +38,21 @@ function update_script() {
|
||||
exit
|
||||
}
|
||||
fi
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Updating Homepage to v${RELEASE} (Patience)"
|
||||
|
||||
if check_for_gh_release "homepage" "gethomepage/homepage"; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop homepage
|
||||
curl -fsSL "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz")
|
||||
tar -xzf v${RELEASE}.tar.gz
|
||||
rm -rf v${RELEASE}.tar.gz
|
||||
cp -r homepage-${RELEASE}/* /opt/homepage/
|
||||
rm -rf homepage-${RELEASE}
|
||||
msg_ok "Stopped service"
|
||||
|
||||
cp /opt/homepage/.env /opt/homepage.env
|
||||
cp -r /opt/homepage/config /opt/homepage_config_backup
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homepage" "gethomepage/homepage" "tarball"
|
||||
mv /opt/homepage.env /opt/homepage
|
||||
rm -rf /opt/homepage/config
|
||||
mv /opt/homepage_config_backup /opt/homepage/config
|
||||
|
||||
msg_info "Updating Homepage (Patience)"
|
||||
RELEASE=$(get_latest_github_release "gethomepage/homepage")
|
||||
cd /opt/homepage
|
||||
$STD pnpm install
|
||||
$STD pnpm update --no-save caniuse-lite
|
||||
@@ -55,14 +61,12 @@ function update_script() {
|
||||
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD pnpm build
|
||||
if [[ ! -f /opt/homepage/.env ]]; then
|
||||
echo "HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000" >/opt/homepage/.env
|
||||
fi
|
||||
msg_ok "Updated Homepage"
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start homepage
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Started service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
|
||||
APP="iVentoy"
|
||||
var_tags="${var_tags:-pxe-tool}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/iventoy ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
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}:26000${CL}"
|
||||
@@ -44,7 +44,9 @@ function update_script() {
|
||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
export BUILD_SEQUENCIAL=1
|
||||
$STD yarn install --inline-builds
|
||||
$STD yarn workspaces focus @joplin/server
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run build
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run tsc
|
||||
msg_ok "Updated Joplin-Server"
|
||||
|
||||
msg_info "Starting Services"
|
||||
|
||||
@@ -29,13 +29,12 @@ function update_script() {
|
||||
fi
|
||||
if [ ! -f /opt/n8n.env ]; then
|
||||
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
mkdir -p /opt
|
||||
cat <<EOF >/opt/n8n.env
|
||||
N8N_SECURE_COOKIE=false
|
||||
N8N_PORT=5678
|
||||
N8N_PROTOCOL=http
|
||||
N8N_HOST=$HOST_IP
|
||||
N8N_HOST=$LOCAL_IP
|
||||
EOF
|
||||
fi
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
@@ -49,7 +49,6 @@ function update_script() {
|
||||
if [[ -f /opt/netvisor/oidc.toml ]]; then
|
||||
mv /opt/netvisor/oidc.toml /opt/scanopy/oidc.toml
|
||||
fi
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
|
||||
sed -i "\|_PATH=|a\NETVISOR_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||
fi
|
||||
|
||||
@@ -41,16 +41,17 @@ function update_script() {
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Outline"
|
||||
cd /opt/outline
|
||||
mv /opt/.env /opt/outline
|
||||
export NODE_ENV=development
|
||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
$STD corepack enable
|
||||
$STD yarn install --immutable
|
||||
export NODE_ENV=production
|
||||
$STD yarn build
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Outline"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start outline
|
||||
|
||||
@@ -60,6 +60,11 @@ function update_script() {
|
||||
rm -f /opt/pangolin_config_backup.tar.gz
|
||||
msg_ok "Restored config"
|
||||
|
||||
msg_info "Updating Badger plugin version"
|
||||
BADGER_VERSION=$(get_latest_github_release "fosrl/badger" "false")
|
||||
sed -i "s/version: \"v[0-9.]*\"/version: \"$BADGER_VERSION\"/g" /opt/pangolin/config/traefik/traefik_config.yml
|
||||
msg_ok "Updated Badger plugin version"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start pangolin
|
||||
systemctl start gerbil
|
||||
|
||||
13
ct/peanut.sh
13
ct/peanut.sh
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
|
||||
if check_for_gh_release "peanut" "Brandawg93/PeaNUT"; then
|
||||
msg_info "Stopping Service"
|
||||
@@ -37,6 +37,15 @@ function update_script() {
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
if ! grep -q '/opt/peanut/entrypoint.mjs' /etc/systemd/system/peanut.service; then
|
||||
msg_info "Fixing entrypoint"
|
||||
cd /opt/peanut
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
sed -i 's|/opt/peanut/.next/standalone/server.js|/opt/peanut/entrypoint.mjs|' /etc/systemd/system/peanut.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Fixed entrypoint"
|
||||
fi
|
||||
|
||||
msg_info "Updating Peanut"
|
||||
cd /opt/peanut
|
||||
$STD pnpm i
|
||||
@@ -61,4 +70,4 @@ description
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
|
||||
@@ -65,7 +65,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "3" ]; then
|
||||
import_local_ip
|
||||
msg_info "Installing FileBrowser"
|
||||
$STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
|
||||
$STD filebrowser config init -a '0.0.0.0'
|
||||
|
||||
@@ -56,7 +56,6 @@ function update_script() {
|
||||
if [[ -f /opt/scanopy.oidc.toml ]]; then
|
||||
mv /opt/scanopy.oidc.toml /opt/scanopy/oidc.toml
|
||||
fi
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
|
||||
sed -i "\|_PATH=|a\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||
fi
|
||||
|
||||
@@ -50,8 +50,8 @@ function update_script() {
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||
cp -r /opt/snipe-it-backup/public/uploads/. /opt/snipe-it/public/uploads/
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads/. /opt/snipe-it/storage/private_uploads/
|
||||
cd /opt/snipe-it/
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
|
||||
@@ -10,8 +10,8 @@ var_tags="${var_tags:-monitoring}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-40}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -27,11 +27,42 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating Tautulli"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Tautulli"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
if check_for_gh_release "Tautulli" "Tautulli/Tautulli"; then
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop tautulli
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up config"
|
||||
cp -r /opt/Tautulli/config /opt/tautulli_config_backup
|
||||
msg_ok "Backed up config"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
|
||||
|
||||
msg_info "Updating Tautulli"
|
||||
cd /opt/Tautulli
|
||||
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
|
||||
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
|
||||
echo "master" >/opt/Tautulli/branch.txt
|
||||
source /opt/Tautulli/.venv/bin/activate
|
||||
$STD pip install --upgrade uv
|
||||
$STD uv pip install -q -r requirements.txt
|
||||
$STD uv pip install -q pyopenssl
|
||||
deactivate
|
||||
msg_ok "Updated Tautulli"
|
||||
|
||||
msg_info "Restoring config"
|
||||
cp -r /opt/tautulli_config_backup/* /opt/Tautulli/config/
|
||||
rm -rf /opt/tautulli_config_backup
|
||||
msg_ok "Restored config"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tautulli
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
90
ct/termix.sh
Normal file
90
ct/termix.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Termix-SSH/Termix
|
||||
|
||||
APP="Termix"
|
||||
var_tags="${var_tags:-ssh;terminal;management}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
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/termix ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "termix" "Termix-SSH/Termix"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop termix
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/termix/data /opt/termix_data_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
|
||||
$STD npm install --ignore-scripts --force
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Building Backend"
|
||||
$STD npm rebuild better-sqlite3 --force
|
||||
$STD npm run build:backend
|
||||
msg_ok "Built Backend"
|
||||
|
||||
msg_info "Setting up Production Dependencies"
|
||||
$STD npm ci --only=production --ignore-scripts --force
|
||||
$STD npm rebuild better-sqlite3 bcryptjs --force
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Set up Production Dependencies"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/termix/data
|
||||
cp -r /opt/termix_data_backup/. /opt/termix/data
|
||||
rm -rf /opt/termix_data_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Updating Frontend Files"
|
||||
rm -rf /opt/termix/html/*
|
||||
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
|
||||
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
|
||||
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
|
||||
msg_ok "Updated Frontend Files"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start termix
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
57
ct/thingsboard.sh
Normal file
57
ct/thingsboard.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/thingsboard/thingsboard
|
||||
|
||||
APP="ThingsBoard"
|
||||
var_tags="${var_tags:-iot;platform}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
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 /usr/share/thingsboard ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "thingsboard" "thingsboard/thingsboard"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop thingsboard
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
|
||||
|
||||
msg_info "Running Database Upgrade"
|
||||
$STD /usr/share/thingsboard/bin/install/upgrade.sh
|
||||
msg_ok "Ran Database Upgrade"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start thingsboard
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
66
ct/yubal.sh
Normal file
66
ct/yubal.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Crazywolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/guillevc/yubal
|
||||
|
||||
APP="Yubal"
|
||||
var_tags="${var_tags:-music;media}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-15}"
|
||||
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/yubal ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "yubal" "guillevc/yubal"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop yubal
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/yubal/web
|
||||
$STD bun install --frozen-lockfile
|
||||
VERSION=$(get_latest_github_release "guillevc/yubal")
|
||||
VITE_VERSION=$VERSION VITE_COMMIT_SHA=$VERSION VITE_IS_RELEASE=true $STD bun run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Installing Python Dependencies"
|
||||
cd /opt/yubal
|
||||
$STD uv sync --no-dev --frozen
|
||||
msg_ok "Installed Python Dependencies"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start yubal
|
||||
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}:8000${CL}"
|
||||
@@ -434,12 +434,12 @@ create_self_signed_cert
|
||||
|
||||
## Utility Functions
|
||||
|
||||
### `import_local_ip`
|
||||
### `get_lxc_ip`
|
||||
|
||||
Set the `$LOCAL_IP` variable with the container's IP address.
|
||||
|
||||
```bash
|
||||
import_local_ip
|
||||
get_lxc_ip
|
||||
echo "Container IP: $LOCAL_IP"
|
||||
|
||||
# Use in config files
|
||||
@@ -528,7 +528,7 @@ msg_ok "Installed Dependencies"
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||
import_local_ip
|
||||
get_lxc_ip
|
||||
|
||||
# Download app using fetch_and_deploy (handles version tracking)
|
||||
fetch_and_deploy_gh_release "myapp" "example/myapp" "tarball" "latest" "/opt/myapp"
|
||||
@@ -664,7 +664,7 @@ PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,intl,mbstring,mysql,x
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||
import_local_ip
|
||||
get_lxc_ip
|
||||
|
||||
# Download pre-built release (with asset pattern)
|
||||
fetch_and_deploy_gh_release "myapp" "example/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||
|
||||
@@ -58,7 +58,7 @@ msg_ok "Installed Dependencies"
|
||||
# fetch_and_deploy_gh_release "appname" "owner/repo" "prebuild" "latest" "/opt/appname" "app-*.tar.gz"
|
||||
#
|
||||
# --- Tools & Utilities ---
|
||||
# import_local_ip # Sets $LOCAL_IP variable (call early!)
|
||||
# get_lxc_ip # Sets $LOCAL_IP variable (call early!)
|
||||
# setup_ffmpeg # Install FFmpeg with codecs
|
||||
# setup_hwaccel # Setup GPU hardware acceleration
|
||||
# setup_imagemagick # Install ImageMagick 7
|
||||
@@ -72,7 +72,7 @@ msg_ok "Installed Dependencies"
|
||||
# NODE_VERSION="22" setup_nodejs
|
||||
# PG_VERSION="17" setup_postgresql
|
||||
# PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||
# import_local_ip
|
||||
# get_lxc_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||
#
|
||||
# msg_info "Configuring MyApp"
|
||||
@@ -89,7 +89,7 @@ msg_ok "Installed Dependencies"
|
||||
# EXAMPLE 2: Python Application with uv
|
||||
# =============================================================================
|
||||
# PYTHON_VERSION="3.13" setup_uv
|
||||
# import_local_ip
|
||||
# get_lxc_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "tarball" "latest" "/opt/myapp"
|
||||
#
|
||||
# msg_info "Setting up MyApp"
|
||||
@@ -108,7 +108,7 @@ msg_ok "Installed Dependencies"
|
||||
# setup_composer
|
||||
# setup_mariadb
|
||||
# MARIADB_DB_NAME="myapp" MARIADB_DB_USER="myapp" setup_mariadb_db
|
||||
# import_local_ip
|
||||
# get_lxc_ip
|
||||
# fetch_and_deploy_gh_release "myapp" "owner/myapp" "prebuild" "latest" "/opt/myapp" "myapp-*.tar.gz"
|
||||
#
|
||||
# msg_info "Configuring MyApp"
|
||||
@@ -126,7 +126,7 @@ msg_ok "Installed Dependencies"
|
||||
# YOUR APPLICATION INSTALLATION
|
||||
# =============================================================================
|
||||
# 1. Setup runtimes and databases FIRST
|
||||
# 2. Call import_local_ip if you need the container IP
|
||||
# 2. Call get_lxc_ip if you need the container IP
|
||||
# 3. Use fetch_and_deploy_gh_release to download the app (handles version tracking)
|
||||
# 4. Configure the application
|
||||
# 5. Create systemd service
|
||||
@@ -134,7 +134,7 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
# --- Setup runtimes/databases ---
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
import_local_ip
|
||||
get_lxc_ip
|
||||
|
||||
# --- Download and install app ---
|
||||
fetch_and_deploy_gh_release "[appname]" "[owner/repo]" "tarball" "latest" "/opt/[appname]"
|
||||
|
||||
35
frontend/public/json/byparr.json
Normal file
35
frontend/public/json/byparr.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Byparr",
|
||||
"slug": "byparr",
|
||||
"categories": [
|
||||
14
|
||||
],
|
||||
"date_created": "2026-01-21",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8191,
|
||||
"documentation": "https://github.com/ThePhaseless/Byparr/blob/master/README.md",
|
||||
"website": "https://github.com/ThePhaseless/Byparr",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/byparr.webp",
|
||||
"config_path": "",
|
||||
"description": "Byparr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/byparr.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"type": "addon",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": null,
|
||||
"interface_port": 3923,
|
||||
"documentation": "https://github.com/9001/copyparty?tab=readme-ov-file#the-browser",
|
||||
"website": "https://github.com/9001/copyparty",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/copyparty.webp",
|
||||
@@ -35,6 +35,10 @@
|
||||
{
|
||||
"text": "Execute within the Proxmox shell or in LXC",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Update with: update_copyparty",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -35,10 +35,6 @@
|
||||
{
|
||||
"text": "Default credentials: `cat /root/hev.creds`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Config stored at `/etc/hev-socks5-server/main.yml`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 4096,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "iVentoy",
|
||||
"slug": "iventoy",
|
||||
"categories": [
|
||||
2
|
||||
],
|
||||
"date_created": "2024-05-16",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 26000,
|
||||
"documentation": "https://www.iventoy.com/en/doc_news.html",
|
||||
"website": "https://www.iventoy.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/iventoy.webp",
|
||||
"config_path": "",
|
||||
"description": "iVentoy is an upgraded PXE server that allows simultaneous OS booting and installation on multiple machines via network. It is user-friendly, requiring only the placement of ISO files in a designated folder and selecting PXE boot on the client machine. iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, and ARM64 UEFI modes. It is compatible with over 110 OS types, including Windows, WinPE, Linux, and VMware.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/iventoy.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Container must be privileged.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/Brandawg93/PeaNUT/blob/main/README.md",
|
||||
"website": "https://github.com/Brandawg93/PeaNUT/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/peanut.webp",
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "phpIPAM",
|
||||
"slug": "phpipam",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-01-15",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://phpipam.net/documents/all-documents/",
|
||||
"website": "https://phpipam.net/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/phpipam.webp",
|
||||
"config_path": "/opt/phpipam/config.php",
|
||||
"description": "phpipam is an open-source web IP address management application (IPAM). Its goal is to provide light, modern and useful IP address management.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/phpipam.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "Admin",
|
||||
"password": "ipamadmin"
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
"privileged": false,
|
||||
"interface_port": 7476,
|
||||
"documentation": "https://github.com/autobrr/qui",
|
||||
"website": "https://github.com/autobrr/qui",
|
||||
"website": "https://getqui.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qui.webp",
|
||||
"config_path": "/root/.config/qui/config.toml",
|
||||
"description": "Qui is a modern, self-hosted web interface for managing multiple qBittorrent instances with support for 10k+ torrents. It provides a clean and responsive interface for monitoring and controlling your qBittorrent downloads across multiple servers.",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"documentation": "https://help.splunk.com",
|
||||
"config_path": "",
|
||||
"website": "https://www.splunk.com/en_us/download/splunk-enterprise.html",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/splunk.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/splunk-light.webp",
|
||||
"description": "Platform for searching, monitoring, and analyzing machine-generated data at scale for operational intelligence and security.",
|
||||
"install_methods": [
|
||||
{
|
||||
@@ -22,8 +22,8 @@
|
||||
"cpu": 4,
|
||||
"ram": 8192,
|
||||
"hdd": 40,
|
||||
"os": "Ubuntu",
|
||||
"version": "24.04"
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
35
frontend/public/json/termix.json
Normal file
35
frontend/public/json/termix.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Termix",
|
||||
"slug": "termix",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.termix.site/",
|
||||
"website": "https://termix.site/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/termix.webp",
|
||||
"config_path": "",
|
||||
"description": "Termix is an open-source, self-hosted server management platform with SSH terminal access, SSH tunneling, remote file management, Docker management, and multi-platform support.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/termix.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
48
frontend/public/json/thingsboard.json
Normal file
48
frontend/public/json/thingsboard.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "ThingsBoard",
|
||||
"slug": "thingsboard",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2026-01-18",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://thingsboard.io/docs/",
|
||||
"website": "https://thingsboard.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/thingsboard.webp",
|
||||
"config_path": "/etc/thingsboard/conf/thingsboard.conf",
|
||||
"description": "ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management. It enables device connectivity via industry standard IoT protocols - MQTT, CoAP and HTTP and supports both cloud and on-premises deployments.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/thingsboard.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "sysadmin@thingsboard.org",
|
||||
"password": "sysadmin"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Please allow up to 90 seconds for the Web UI to start",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Additional demo accounts: tenant@thingsboard.org / tenant and customer@thingsboard.org / customer",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Change passwords for all accounts in the account profile page after first login",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
35
frontend/public/json/yubal.json
Normal file
35
frontend/public/json/yubal.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Yubal",
|
||||
"slug": "yubal",
|
||||
"categories": [
|
||||
13
|
||||
],
|
||||
"date_created": "2026-01-19",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://github.com/guillevc/yubal/blob/master/README.md",
|
||||
"website": "https://github.com/guillevc/yubal",
|
||||
"config_path": "/opt/yubal.env",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/yubal.webp",
|
||||
"description": "YouTube Music album downloader with Spotify metadata auto-tagging.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/yubal.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 15,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { CalendarPlus } from "lucide-react";
|
||||
import { useMemo, useState } from "react";
|
||||
import { useEffect, useMemo } from "react";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
@@ -26,9 +26,15 @@ export function getDisplayValueFromType(type: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export function LatestScripts({ items }: { items: Category[] }) {
|
||||
const [page, setPage] = useState(1);
|
||||
|
||||
export function LatestScripts({
|
||||
items,
|
||||
page,
|
||||
onPageChange,
|
||||
}: {
|
||||
items: Category[];
|
||||
page: number;
|
||||
onPageChange: (page: number) => void;
|
||||
}) {
|
||||
const latestScripts = useMemo(() => {
|
||||
if (!items)
|
||||
return [];
|
||||
@@ -48,12 +54,20 @@ export function LatestScripts({ items }: { items: Category[] }) {
|
||||
);
|
||||
}, [items]);
|
||||
|
||||
const totalPages = Math.max(1, Math.ceil(latestScripts.length / ITEMS_PER_PAGE));
|
||||
|
||||
useEffect(() => {
|
||||
if (page > totalPages) {
|
||||
onPageChange(totalPages);
|
||||
}
|
||||
}, [page, totalPages, onPageChange]);
|
||||
|
||||
const goToNextPage = () => {
|
||||
setPage(prevPage => prevPage + 1);
|
||||
onPageChange(Math.min(totalPages, page + 1));
|
||||
};
|
||||
|
||||
const goToPreviousPage = () => {
|
||||
setPage(prevPage => prevPage - 1);
|
||||
onPageChange(Math.max(1, page - 1));
|
||||
};
|
||||
|
||||
const startIndex = (page - 1) * ITEMS_PER_PAGE;
|
||||
|
||||
@@ -18,6 +18,7 @@ function ScriptContent() {
|
||||
const [selectedCategory, setSelectedCategory] = useQueryState("category");
|
||||
const [links, setLinks] = useState<Category[]>([]);
|
||||
const [item, setItem] = useState<Script>();
|
||||
const [latestPage, setLatestPage] = useState(1);
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedScript && links.length > 0) {
|
||||
@@ -50,14 +51,16 @@ function ScriptContent() {
|
||||
/>
|
||||
</div>
|
||||
<div className="px-4 w-full sm:max-w-[calc(100%-350px-16px)]">
|
||||
{selectedScript && item ? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
) : (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
{selectedScript && item
|
||||
? (
|
||||
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
|
||||
)
|
||||
: (
|
||||
<div className="flex w-full flex-col gap-5">
|
||||
<LatestScripts items={links} page={latestPage} onPageChange={setLatestPage} />
|
||||
<MostViewedScripts items={links} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,12 +17,11 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.4"
|
||||
PHP_MODULE="common,ctype,fileinfo,mysql,tokenizer,dom,redis" PHP_FPM="YES" setup_php
|
||||
PHP_VERSION="8.4" PHP_MODULE="common,ctype,fileinfo,mysql,tokenizer,dom,redis" PHP_FPM="YES" setup_php
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="2fauth_db" MARIADB_DB_USER="2fauth" setup_mariadb_db
|
||||
import_local_ip
|
||||
|
||||
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" "tarball"
|
||||
|
||||
msg_info "Setup 2FAuth"
|
||||
|
||||
@@ -26,8 +26,8 @@ PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||
PG_DB_NAME="adventurelog_db" PG_DB_USER="adventurelog_user" PG_DB_EXTENSIONS="postgis" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Installing AdventureLog (Patience)"
|
||||
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
|
||||
@@ -75,7 +75,6 @@ mkdir -p /opt/bar-assistant/resources/data
|
||||
curl -fsSL https://github.com/bar-assistant/data/archive/refs/heads/v5.tar.gz | tar -xz --strip-components=1 -C /opt/bar-assistant/resources/data
|
||||
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;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}')
|
||||
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_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
||||
|
||||
@@ -21,8 +21,8 @@ PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="bookstack_db" MARIADB_DB_USER="bookstack_user" setup_mariadb_db
|
||||
|
||||
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring Bookstack (Patience)"
|
||||
cd /opt/bookstack
|
||||
|
||||
50
install/byparr-install.sh
Normal file
50
install/byparr-install.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: luismco
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ThePhaseless/Byparr
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt -y install \
|
||||
xauth \
|
||||
xvfb \
|
||||
scrot \
|
||||
chromium \
|
||||
chromium-driver \
|
||||
ca-certificates
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
setup_uv
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/byparr.service
|
||||
[Unit]
|
||||
Description=Byparr
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/Byparr
|
||||
ExecStart=/usr/local/bin/uv run python3 main.py
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now byparr
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -21,9 +21,6 @@ rm -rf /opt/checkmk.deb
|
||||
echo "${RELEASE}" >"/opt/checkmk_version.txt"
|
||||
msg_ok "Installed Checkmk"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Creating Service"
|
||||
SITE_NAME="monitoring"
|
||||
$STD omd create "$SITE_NAME"
|
||||
@@ -42,3 +39,5 @@ $STD omd start "$SITE_NAME"
|
||||
msg_ok "Created Service"
|
||||
|
||||
cleanup_lxc
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -17,11 +17,10 @@ NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle" "tarball"
|
||||
|
||||
msg_info "Configuring Cronicle Primary Server"
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
cd /opt/cronicle
|
||||
$STD npm install
|
||||
$STD node bin/build.js dist
|
||||
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
|
||||
sed -i "s/localhost:3012/${LOCAL_IP}:3012/g" /opt/cronicle/conf/config.json
|
||||
$STD /opt/cronicle/bin/control.sh setup
|
||||
$STD /opt/cronicle/bin/control.sh start
|
||||
msg_ok "Configured Cronicle Primary Server"
|
||||
|
||||
@@ -28,8 +28,7 @@ $STD npm ci
|
||||
$STD npm run install:components
|
||||
$STD npm run build
|
||||
cp config/config.example.js config/config.js
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
sed -i "51s/localhost/${IP}/g" /opt/cryptpad/config/config.js
|
||||
sed -i "51s/localhost/${LOCAL_IP}/g" /opt/cryptpad/config/config.js
|
||||
sed -i "80s#//httpAddress: 'localhost'#httpAddress: '0.0.0.0'#g" /opt/cryptpad/config/config.js
|
||||
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
|
||||
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
||||
|
||||
@@ -22,7 +22,6 @@ msg_ok "Installed Dependencies"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="docmost_db" PG_DB_USER="docmost_user" setup_postgresql_db
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
||||
|
||||
msg_info "Configuring Docmost (Patience)"
|
||||
|
||||
@@ -34,7 +34,7 @@ msg_info "Setup Dolibarr"
|
||||
BASE="https://sourceforge.net/projects/dolibarr/files/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/"
|
||||
RELEASE=$(curl -fsSL "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)\d+(\.\d+)+(?=/)' | sort -V | tail -n1)
|
||||
FILE=$(curl -fsSL "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1)
|
||||
curl -fsSL "https://netcologne.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -o ""$FILE""
|
||||
curl -fsSL "https://altushost-swe.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -o ""$FILE""
|
||||
echo "dolibarr dolibarr/reconfigure-webserver multiselect apache2" | debconf-set-selections
|
||||
$STD apt-get install ./$FILE -y
|
||||
$STD apt install -f
|
||||
|
||||
@@ -21,7 +21,6 @@ PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
|
||||
PG_DB_NAME="enduraindb" PG_DB_USER="endurain" setup_postgresql_db
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||
|
||||
msg_info "Setting up Endurain"
|
||||
|
||||
@@ -17,7 +17,7 @@ PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="firefly" MARIADB_DB_USER="firefly" setup_mariadb_db
|
||||
import_local_ip
|
||||
|
||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
|
||||
fetch_and_deploy_gh_release "dataimporter" "firefly-iii/data-importer" "prebuild" "latest" "/opt/firefly/dataimporter" "DataImporter-v*.tar.gz"
|
||||
|
||||
|
||||
@@ -18,31 +18,15 @@ $STD apt-get install -y zip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
|
||||
msg_info "Setting up Postgresql Database"
|
||||
DB_NAME="fluiddb"
|
||||
DB_USER="fluiduser"
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
$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;"
|
||||
{
|
||||
echo "${APPLICATION} Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET"
|
||||
} >>~/$APPLICATION.creds
|
||||
msg_ok "Set up Postgresql Database"
|
||||
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
|
||||
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
msg_info "Configuring fluid-calendar"
|
||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||
echo "NextAuth Secret: $NEXTAUTH_SECRET" >>~/$APPLICATION.creds
|
||||
cat <<EOF >/opt/fluid-calendar/.env
|
||||
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
|
||||
|
||||
# Change the URL below to your external URL
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
@@ -61,7 +45,7 @@ $STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Configuring ${APPLICATION}"
|
||||
msg_ok "Configured fluid-calendar"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/fluid-calendar.service
|
||||
@@ -72,6 +56,7 @@ After=network.target postgresql.service
|
||||
[Service]
|
||||
Restart=always
|
||||
WorkingDirectory=/opt/fluid-calendar
|
||||
EnvironmentFile=/opt/fluid-calendar/.env
|
||||
ExecStart=/usr/bin/npm run start
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -39,14 +39,13 @@ msg_ok "Installed gitea-mirror"
|
||||
msg_info "Creating Services"
|
||||
APP_SECRET=$(openssl rand -base64 32)
|
||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/gitea-mirror.env
|
||||
# See here for config options: https://github.com/RayLabsHQ/gitea-mirror/blob/main/docs/ENVIRONMENT_VARIABLES.md
|
||||
NODE_ENV=production
|
||||
HOST=0.0.0.0
|
||||
PORT=4321
|
||||
DATABASE_URL=sqlite://data/gitea-mirror.db
|
||||
BETTER_AUTH_URL=http://${HOST_IP}:4321
|
||||
BETTER_AUTH_URL=http://${LOCAL_IP}:4321
|
||||
BETTER_AUTH_SECRET=${APP_SECRET}
|
||||
npm_package_version=${APP_VERSION}
|
||||
EOF
|
||||
|
||||
@@ -54,7 +54,6 @@ $STD pip install --upgrade pip wheel
|
||||
$STD pip install gunicorn -r requirements.txt
|
||||
msg_ok "Installed Python packages"
|
||||
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/healthchecks/hc/local_settings.py
|
||||
DEBUG = False
|
||||
|
||||
|
||||
@@ -13,36 +13,30 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setup ${APPLICATION}"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/heiher/${APPLICATION}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -L -o "${APPLICATION}" "https://github.com/heiher/${APPLICATION}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64"
|
||||
mv ${APPLICATION} /opt/${APPLICATION}
|
||||
chmod +x /opt/${APPLICATION}
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
curl -L -o "main.yml" "https://raw.githubusercontent.com/heiher/${APPLICATION}/refs/heads/main/conf/main.yml"
|
||||
sed -i 's/^#auth:/auth:/; s/^# file: conf\/auth.txt/ file: \/root\/hev.creds/' main.yml
|
||||
mkdir -p /etc/${APPLICATION}
|
||||
USERNAME="admin"
|
||||
fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-x86_64"
|
||||
|
||||
msg_info "Setup hev-socks5-server"
|
||||
mkdir -p /etc/hev-socks5-server
|
||||
download_file "https://raw.githubusercontent.com/heiher/hev-socks5-server/refs/heads/main/conf/main.yml" "/etc/hev-socks5-server/main.yml"
|
||||
sed -i 's/^#auth:/auth:/; s/^# file: conf\/auth.txt/ file: \/root\/hev.creds/' /etc/hev-socks5-server/main.yml
|
||||
PASSWORD=$(openssl rand -base64 16)
|
||||
MARK="0"
|
||||
echo "$USERNAME $PASSWORD $MARK" >/root/hev.creds
|
||||
mv main.yml /etc/${APPLICATION}/main.yml
|
||||
msg_ok "Setup ${APPLICATION}"
|
||||
echo "admin $PASSWORD 0" >/root/hev.creds
|
||||
msg_ok "Setup hev-socks5-server"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
||||
cat <<EOF >/etc/systemd/system/hev-socks5-server.service
|
||||
[Unit]
|
||||
Description=${APPLICATION} Service
|
||||
Description=hev-socks5-server Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/${APPLICATION} /etc/${APPLICATION}/main.yml
|
||||
ExecStart=/opt/hev-socks5-server /etc/hev-socks5-server/main.yml
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now ${APPLICATION}
|
||||
systemctl enable -q --now hev-socks5-server
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -18,16 +18,11 @@ $STD apt-get install -y jq
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||
fetch_and_deploy_gh_release "homepage" "gethomepage/homepage" "tarball"
|
||||
RELEASE=$(get_latest_github_release "gethomepage/homepage")
|
||||
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Installing Homepage v${RELEASE} (Patience)"
|
||||
curl -fsSL "https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
|
||||
$STD tar -xzf v${RELEASE}.tar.gz
|
||||
rm -rf v${RELEASE}.tar.gz
|
||||
msg_info "Installing Homepage (Patience)"
|
||||
mkdir -p /opt/homepage/config
|
||||
mv homepage-${RELEASE}/* /opt/homepage
|
||||
rm -rf homepage-${RELEASE}
|
||||
cd /opt/homepage
|
||||
cp /opt/homepage/src/skeleton/* /opt/homepage/config
|
||||
$STD pnpm install
|
||||
@@ -37,8 +32,7 @@ export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepa
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD pnpm build
|
||||
echo "HOMEPAGE_ALLOWED_HOSTS=localhost:3000,${LOCAL_IP}:3000" >/opt/homepage/.env
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Homepage v${RELEASE}"
|
||||
msg_ok "Installed Homepage"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/homepage.service
|
||||
@@ -46,6 +40,7 @@ cat <<EOF >/etc/systemd/system/homepage.service
|
||||
Description=Homepage
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
@@ -53,6 +48,7 @@ RestartSec=1
|
||||
User=root
|
||||
WorkingDirectory=/opt/homepage/
|
||||
ExecStart=pnpm start
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
@@ -21,7 +21,6 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="infisical_db" PG_DB_USER="infisical" setup_postgresql_db
|
||||
import_local_ip
|
||||
|
||||
msg_info "Setting up Infisical Repository"
|
||||
setup_deb822_repo \
|
||||
|
||||
@@ -28,7 +28,6 @@ $STD apt install -y inventree
|
||||
msg_ok "Installed InvenTree"
|
||||
|
||||
msg_info "Configuring InvenTree"
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
if [[ -f /etc/inventree/config.yaml ]]; then
|
||||
sed -i "s|site_url:.*|site_url: http://${LOCAL_IP}|" /etc/inventree/config.yaml
|
||||
fi
|
||||
|
||||
@@ -33,7 +33,6 @@ setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="investbrain" PG_DB_USER="investbrain" setup_postgresql_db
|
||||
import_local_ip
|
||||
|
||||
fetch_and_deploy_gh_release "Investbrain" "investbrainapp/investbrain" "tarball" "latest" "/opt/investbrain"
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ msg_ok "Installed Dependencies"
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="invoiceninja" MARIADB_DB_USER="invoiceninja" setup_mariadb_db
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="bcmath,curl,gd,gmp,imagick,intl,mbstring,mysql,soap,xml,zip" setup_php
|
||||
import_local_ip
|
||||
|
||||
fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
|
||||
|
||||
msg_info "Configuring InvoiceNinja"
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.iventoy.com/en/index.html
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Installing iVentoy v${RELEASE}"
|
||||
mkdir -p /opt/iventoy/{data,iso}
|
||||
curl -fsSL "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz" -o "iventoy-${RELEASE}-linux-free.tar.gz"
|
||||
tar -C /tmp -xzf iventoy*.tar.gz
|
||||
mv /tmp/iventoy*/* /opt/iventoy/
|
||||
rm -rf iventoy*.tar.gz
|
||||
msg_ok "Installed iVentoy"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/iventoy.service
|
||||
[Unit]
|
||||
Description=iVentoy PXE Booter
|
||||
Documentation=https://www.iventoy.com
|
||||
Wants=network-online.target
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment=IVENTOY_API_ALL=1
|
||||
Environment=IVENTOY_AUTO_RUN=1
|
||||
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
|
||||
ExecStart=sh ./iventoy.sh -R start
|
||||
WorkingDirectory=/opt/iventoy
|
||||
Restart=on-failure
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now iventoy
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -28,16 +28,17 @@ $STD pm2 install pm2-logrotate
|
||||
$STD pm2 set pm2-logrotate:max_size 100MB
|
||||
$STD pm2 set pm2-logrotate:retain 5
|
||||
$STD pm2 set pm2-logrotate:compress tr
|
||||
|
||||
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Setting up Joplin Server (Patience)"
|
||||
cd /opt/joplin-server
|
||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
export BUILD_SEQUENCIAL=1
|
||||
$STD yarn install --inline-builds
|
||||
|
||||
$STD yarn workspaces focus @joplin/server
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run build
|
||||
$STD yarn workspaces foreach -R --topological-dev --from @joplin/server run tsc
|
||||
cat <<EOF >/opt/joplin-server/.env
|
||||
PM2_HOME=/opt/pm2
|
||||
NODE_ENV=production
|
||||
|
||||
@@ -21,7 +21,6 @@ $STD apt install -y \
|
||||
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
|
||||
|
||||
@@ -21,8 +21,7 @@ $STD ln -s /usr/local/kubo/ipfs /usr/local/bin/ipfs
|
||||
$STD ipfs init
|
||||
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
|
||||
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
|
||||
LXCIP=$(hostname -I | awk '{print $1}')
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://${LXCIP}:5001\", \"http://localhost:3000\", \"http://127.0.0.1:5001\", \"https://webui.ipfs.io\", \"http://0.0.0.0:5001\"]"
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://${LOCAL_IP}:5001\", \"http://localhost:3000\", \"http://127.0.0.1:5001\", \"https://webui.ipfs.io\", \"http://0.0.0.0:5001\"]"
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'
|
||||
msg_ok "Configured IPFS"
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ read -rp "${TAB3}Enter your choice <i/e> (default: i): " ssl_choice
|
||||
ssl_choice=${ssl_choice:-i}
|
||||
case "${ssl_choice,,}" in
|
||||
i)
|
||||
import_local_ip
|
||||
DEFAULT_HOST="$LOCAL_IP"
|
||||
|
||||
msg_info "Configuring Caddy"
|
||||
|
||||
@@ -78,11 +78,10 @@ sed -i "s/listen = \/run\/php\/php8.4-fpm.sock/listen = \/run\/php-fpm-librenms.
|
||||
msg_ok "Configured PHP-FPM"
|
||||
|
||||
msg_info "Configure Nginx"
|
||||
IP_ADDR=$(hostname -I | awk '{print $1}')
|
||||
cat >/etc/nginx/sites-enabled/librenms <<'EOF'
|
||||
server {
|
||||
listen 80;
|
||||
server_name ${IP_ADDR};
|
||||
server_name ${LOCAL_IP};
|
||||
root /opt/librenms/html;
|
||||
index index.php;
|
||||
|
||||
|
||||
@@ -50,10 +50,9 @@ fi
|
||||
$STD yarn
|
||||
$STD npx playwright install-deps
|
||||
$STD npx playwright install
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/linkwarden/.env
|
||||
NEXTAUTH_SECRET=${SECRET_KEY}
|
||||
NEXTAUTH_URL=http://${IP}:3000
|
||||
NEXTAUTH_URL=http://${LOCAL_IP}:3000
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||
EOF
|
||||
$STD yarn prisma:generate
|
||||
|
||||
@@ -44,14 +44,13 @@ $STD sudo -u postgres psql -c "GRANT USAGE, CREATE ON SCHEMA PUBLIC TO $DB_USER;
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Installing Mattermost"
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
curl -fsSL -o /usr/share/keyrings/mattermost-archive-keyring.gpg https://deb.packages.mattermost.com/pubkey.gpg
|
||||
sh -c 'curl -fsSL https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost' >/dev/null
|
||||
$STD apt update
|
||||
$STD apt install -y mattermost
|
||||
$STD install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
|
||||
sed -i -e "/DataSource/c\ \"DataSource\": \"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME?sslmode=disable&connect_timeout=10\"," \
|
||||
-e "/SiteURL/c\ \"SiteURL\": \"http://$IPADDRESS:8065\"," /opt/mattermost/config/config.json
|
||||
-e "/SiteURL/c\ \"SiteURL\": \"http://$LOCAL_IP:8065\"," /opt/mattermost/config/config.json
|
||||
systemctl enable -q --now mattermost
|
||||
msg_ok "Installed Mattermost"
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ msg_ok "Installed Python Dependencies"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
MEALIE_VERSION=$(<$HOME/.mealie)
|
||||
CONTAINER_IP=$(hostname -I | awk '{print $1}')
|
||||
export NUXT_TELEMETRY_DISABLED=1
|
||||
cd /opt/mealie/frontend
|
||||
$STD sed -i "s|https://github.com/mealie-recipes/mealie/commit/|https://github.com/mealie-recipes/mealie/releases/tag/|g" /opt/mealie/frontend/pages/admin/site-settings.vue
|
||||
@@ -79,7 +78,7 @@ POSTGRES_DB=${PG_DB_NAME}
|
||||
PRODUCTION=true
|
||||
HOST=0.0.0.0
|
||||
PORT=9000
|
||||
BASE_URL=http://${CONTAINER_IP}:9000
|
||||
BASE_URL=http://${LOCAL_IP}:9000
|
||||
EOF
|
||||
msg_ok "Wrote Environment File"
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ $STD /usr/local/bin/uv sync --locked --active -n -p cpython3.13 --managed-python
|
||||
msg_ok "Configured MediaManager"
|
||||
|
||||
msg_info "Creating config and start script"
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
SECRET="$(openssl rand -hex 32)"
|
||||
sed -e "s/localhost:8/$LOCAL_IP:8/g" \
|
||||
-e "s|/data/|$MEDIA_DIR/|g" \
|
||||
|
||||
@@ -18,7 +18,6 @@ fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||
MASTER_KEY=$(openssl rand -base64 12)
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
sed -i \
|
||||
-e 's|^env =.*|env = "production"|' \
|
||||
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||
|
||||
@@ -29,13 +29,12 @@ $STD npm install --global n8n
|
||||
msg_ok "Installed n8n"
|
||||
|
||||
msg_info "Creating Service"
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
mkdir -p /opt
|
||||
cat <<EOF >/opt/n8n.env
|
||||
N8N_SECURE_COOKIE=false
|
||||
N8N_PORT=5678
|
||||
N8N_PROTOCOL=http
|
||||
N8N_HOST=$HOST_IP
|
||||
N8N_HOST=${LOCAL_IP}
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/n8n.service
|
||||
|
||||
@@ -20,11 +20,11 @@ msg_ok "Installed dependendencies"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="openarchiver_db" PG_DB_USER="openarchiver" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||
fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
|
||||
JWT_KEY="$(openssl rand -hex 32)"
|
||||
SECRET_KEY="$(openssl rand -hex 32)"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring MeiliSearch"
|
||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||
|
||||
@@ -21,7 +21,6 @@ PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="openproject" PG_DB_USER="openproject" setup_postgresql_db
|
||||
API_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
echo "OpenProject API Key: $API_KEY" >>~/openproject.creds
|
||||
import_local_ip
|
||||
|
||||
msg_info "Setting up OpenProject Repository"
|
||||
curl -fsSL "https://dl.packager.io/srv/opf/openproject/key" | gpg --dearmor >/etc/apt/trusted.gpg.d/packager-io.gpg
|
||||
|
||||
@@ -29,8 +29,7 @@ msg_ok "Installed openziti"
|
||||
|
||||
read -r -p "${TAB3}Would you like to go through the auto configuration now? <y/N>" prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
GEN_FQDN="controller.${IPADDRESS}.sslip.io"
|
||||
GEN_FQDN="controller.${LOCAL_IP}.sslip.io"
|
||||
read -r -p "${TAB3}Please enter the controller FQDN [${GEN_FQDN}]: " ZITI_CTRL_ADVERTISED_ADDRESS
|
||||
ZITI_CTRL_ADVERTISED_ADDRESS=${ZITI_CTRL_ADVERTISED_ADDRESS:-$GEN_FQDN}
|
||||
read -r -p "${TAB3}Please enter the controller port [1280]: " ZITI_CTRL_ADVERTISED_PORT
|
||||
|
||||
@@ -23,8 +23,8 @@ msg_ok "Installed Dependencies"
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring Outline (Patience)"
|
||||
SECRET_KEY="$(openssl rand -hex 32)"
|
||||
@@ -38,6 +38,7 @@ sed -i 's/redis:6379/localhost:6379/g' /opt/outline/.env
|
||||
sed -i "5s#URL=#URL=http://${LOCAL_IP}#g" /opt/outline/.env
|
||||
sed -i 's/FORCE_HTTPS=true/FORCE_HTTPS=false/g' /opt/outline/.env
|
||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
$STD corepack enable
|
||||
$STD yarn install --immutable
|
||||
export NODE_ENV=production
|
||||
|
||||
@@ -28,8 +28,8 @@ read -rp "${TAB3}Enter your Pangolin URL (ex: https://pangolin.example.com): " p
|
||||
read -rp "${TAB3}Enter your email address: " pango_email
|
||||
|
||||
msg_info "Setup Pangolin"
|
||||
IP_ADDR=$(hostname -I | awk '{print $1}')
|
||||
SECRET_KEY=$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32)
|
||||
BADGER_VERSION=$(get_latest_github_release "fosrl/badger" "false")
|
||||
cd /opt/pangolin
|
||||
mkdir -p /opt/pangolin/config/{traefik,db,letsencrypt,logs}
|
||||
$STD npm ci
|
||||
@@ -77,7 +77,7 @@ api:
|
||||
|
||||
providers:
|
||||
http:
|
||||
endpoint: "http://$IP_ADDR:3001/api/v1/traefik-config"
|
||||
endpoint: "http://$LOCAL_IP:3001/api/v1/traefik-config"
|
||||
pollInterval: "5s"
|
||||
file:
|
||||
filename: "/opt/pangolin/config/traefik/dynamic_config.yml"
|
||||
@@ -86,7 +86,7 @@ experimental:
|
||||
plugins:
|
||||
badger:
|
||||
moduleName: "github.com/fosrl/badger"
|
||||
version: "v1.2.0"
|
||||
version: "$BADGER_VERSION"
|
||||
|
||||
log:
|
||||
level: "INFO"
|
||||
@@ -168,12 +168,12 @@ http:
|
||||
next-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://$IP_ADDR:3002"
|
||||
- url: "http://$LOCAL_IP:3002"
|
||||
|
||||
api-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://$IP_ADDR:3000"
|
||||
- url: "http://$LOCAL_IP:3000"
|
||||
EOF
|
||||
$STD npm run db:sqlite:generate
|
||||
$STD npm run db:sqlite:push
|
||||
@@ -218,7 +218,7 @@ Requires=pangolin.service
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=/usr/bin/gerbil --reachableAt=http://$IP_ADDR:3004 --generateAndSaveKeyTo=/var/config/key --remoteConfig=http://$IP_ADDR:3001/api/v1/
|
||||
ExecStart=/usr/bin/gerbil --reachableAt=http://$LOCAL_IP:3004 --generateAndSaveKeyTo=/var/config/key --remoteConfig=http://$LOCAL_IP:3001/api/v1/
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ msg_ok "Installed dependencies"
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="passboltdb" MARIADB_DB_USER="passbolt" setup_mariadb_db
|
||||
create_self_signed_cert
|
||||
import_local_ip
|
||||
|
||||
setup_deb822_repo \
|
||||
"passbolt" \
|
||||
"https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x3D1A0346C8E1802F774AEF21DE8B853FC155581D" \
|
||||
|
||||
@@ -23,8 +23,8 @@ msg_ok "Installed Dependencies"
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="patchmon_db" PG_DB_USER="patchmon_usr" setup_postgresql_db
|
||||
|
||||
fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring PatchMon"
|
||||
cd /opt/patchmon
|
||||
@@ -98,9 +98,16 @@ msg_ok "Configured PatchMon"
|
||||
|
||||
msg_info "Configuring Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
|
||||
map \$http_x_forwarded_proto \$proxy_corrected_scheme {
|
||||
default \$scheme; # Fallback to Nginx's actual connection scheme if no X-Forwarded-Proto header was set
|
||||
https https; # If X-Forwarded-Proto is 'https', use 'https'
|
||||
http http; # If X-Forwarded-Proto is 'http', use 'http'
|
||||
}
|
||||
|
||||
server {
|
||||
# Listen on both IPv4 and IPv6 (with all hostnames)
|
||||
listen 80;
|
||||
server_name $LOCAL_IP;
|
||||
listen [::]:80;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options DENY always;
|
||||
@@ -123,7 +130,7 @@ server {
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
|
||||
proxy_set_header X-Forwarded-Host \$host;
|
||||
proxy_set_header Cookie \$http_cookie;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
@@ -150,7 +157,7 @@ server {
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
|
||||
proxy_cache_bypass \$http_upgrade;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
|
||||
@@ -18,7 +18,7 @@ msg_info "Installing NUT"
|
||||
$STD apt install -y nut-client
|
||||
msg_ok "Installed NUT"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
msg_info "Setup Peanut"
|
||||
@@ -28,9 +28,10 @@ $STD pnpm run build:local
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
mkdir -p /opt/peanut/.next/standalone/config
|
||||
mkdir -p /etc/peanut/
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
cat <<EOF >/etc/peanut/settings.yml
|
||||
WEB_HOST: 0.0.0.0
|
||||
WEB_PORT: 3000
|
||||
WEB_PORT: 8080
|
||||
NUT_HOST: 0.0.0.0
|
||||
NUT_PORT: 3493
|
||||
EOF
|
||||
@@ -51,9 +52,9 @@ Environment="NODE_ENV=production"
|
||||
#Environment="NUT_HOST=localhost"
|
||||
#Environment="NUT_PORT=3493"
|
||||
#Environment="WEB_HOST=0.0.0.0"
|
||||
#Environment="WEB_PORT=3000"
|
||||
#Environment="WEB_PORT=8080"
|
||||
WorkingDirectory=/opt/peanut
|
||||
ExecStart=node /opt/peanut/.next/standalone/server.js
|
||||
ExecStart=node /opt/peanut/entrypoint.mjs
|
||||
TimeoutStopSec=30
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://phpipam.net/
|
||||
|
||||
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 fping
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
|
||||
|
||||
msg_info "Installing PHP-PEAR"
|
||||
$STD apt install -y \
|
||||
php-pear \
|
||||
php-dev
|
||||
msg_ok "Installed PHP-PEAR"
|
||||
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="phpipam" MARIADB_DB_USER="phpipam" setup_mariadb_db
|
||||
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
|
||||
msg_info "Installing phpIPAM"
|
||||
# patch SCHEMA, during varchar l_name is to short in upstream (2025-11-15)
|
||||
sed -i -E 's/`l_name`\s+varchar\([0-9]+\)/`l_name` varchar(128)/' /opt/phpipam/db/SCHEMA.sql
|
||||
$STD mariadb -u root "${MARIADB_DB_NAME}" </opt/phpipam/db/SCHEMA.sql
|
||||
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
||||
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
||||
-e "s/\(\$db\['user'\] = \).*/\1'$MARIADB_DB_USER';/" \
|
||||
-e "s/\(\$db\['pass'\] = \).*/\1'$MARIADB_DB_PASS';/" \
|
||||
-e "s/\(\$db\['name'\] = \).*/\1'$MARIADB_DB_NAME';/" \
|
||||
/opt/phpipam/config.php
|
||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.4/apache2/php.ini
|
||||
msg_ok "Installed phpIPAM"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/phpipam.conf
|
||||
<VirtualHost *:80>
|
||||
ServerName phpipam
|
||||
DocumentRoot /opt/phpipam
|
||||
<Directory /opt/phpipam>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/phpipam_error.log
|
||||
CustomLog /var/log/apache2/phpipam_access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite phpipam
|
||||
$STD a2enmod rewrite
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -43,7 +43,6 @@ msg_ok "Set up PostgreSQL Database"
|
||||
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
|
||||
|
||||
msg_info "Configuring PLANKA"
|
||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||
SECRET_KEY=$(openssl rand -hex 64)
|
||||
cd /opt/planka
|
||||
$STD npm install
|
||||
|
||||
@@ -70,11 +70,10 @@ cd /opt/pterodactyl-panel
|
||||
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o "panel.tar.gz"
|
||||
tar -xzf "panel.tar.gz"
|
||||
cp .env.example .env
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
$STD php artisan key:generate --force
|
||||
$STD php artisan p:environment:setup --no-interaction --author "$ADMIN_EMAIL" --url "http://$IP"
|
||||
$STD php artisan p:environment:setup --no-interaction --author "$ADMIN_EMAIL" --url "http://$LOCAL_IP"
|
||||
$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password "$DB_PASS"
|
||||
$STD php artisan migrate --seed --force --no-interaction
|
||||
$STD php artisan p:user:make --no-interaction --admin=1 --email "$ADMIN_EMAIL" --password "$ADMIN_PASS" --name-first "$NAME_FIRST" --name-last "$NAME_LAST" --username "admin"
|
||||
|
||||
@@ -19,7 +19,6 @@ curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio
|
||||
$STD dpkg -i minio.deb
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
import_local_ip
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="rxresume" PG_DB_USER="rxresume" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||
|
||||
@@ -47,7 +47,6 @@ cp ./target/release/daemon /usr/bin/scanopy-daemon
|
||||
msg_ok "Built scanopy-daemon"
|
||||
|
||||
msg_info "Configuring server for first-run"
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
cat <<EOF >/opt/scanopy/.env
|
||||
### - SERVER
|
||||
scanopy_DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME
|
||||
|
||||
@@ -24,7 +24,6 @@ setup_composer
|
||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="snipeit_db" MARIADB_DB_USER="snipeit" setup_mariadb_db
|
||||
import_local_ip
|
||||
|
||||
msg_info "Configuring Snipe-IT"
|
||||
cd /opt/snipe-it
|
||||
|
||||
@@ -23,8 +23,7 @@ msg_ok "Installed Dependencies"
|
||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||
setup_composer
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
import_local_ip
|
||||
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker"
|
||||
fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball"
|
||||
|
||||
msg_info "Installing Speedtest CLI"
|
||||
setup_deb822_repo \
|
||||
|
||||
@@ -43,14 +43,17 @@ while true; do
|
||||
done
|
||||
|
||||
msg_info "Setup Splunk Enterprise"
|
||||
DOWNLOAD_URL=$(curl -s "https://www.splunk.com/en_us/download/splunk-enterprise.html" | grep -o 'data-link="[^"]*' | sed 's/data-link="//' | grep "https.*products/splunk/releases" | grep "\.deb$")
|
||||
DOWNLOAD_URL=$(curl -s "https://www.splunk.com/en_us/download/splunk-enterprise.html" | grep -o 'data-link="[^"]*' | sed 's/data-link="//' | grep "https.*products/splunk/releases" | grep "linux-amd64\.tgz$")
|
||||
RELEASE=$(echo "$DOWNLOAD_URL" | sed 's|.*/releases/\([^/]*\)/.*|\1|')
|
||||
$STD curl -fsSL -o "splunk-enterprise.deb" "$DOWNLOAD_URL" || {
|
||||
$STD curl -fsSL -o "splunk-enterprise.tgz" "$DOWNLOAD_URL" || {
|
||||
msg_error "Failed to download Splunk Enterprise from the provided link."
|
||||
exit 1
|
||||
}
|
||||
$STD dpkg -i "splunk-enterprise.deb"
|
||||
rm -f "splunk-enterprise.deb"
|
||||
$STD tar -xzf "splunk-enterprise.tgz" -C /opt
|
||||
rm -f "splunk-enterprise.tgz"
|
||||
addgroup --system splunk
|
||||
adduser --system --home /opt/splunk --shell /bin/bash --ingroup splunk --no-create-home splunk
|
||||
chown -R splunk:splunk /opt/splunk
|
||||
msg_ok "Setup Splunk Enterprise v${RELEASE}"
|
||||
|
||||
msg_info "Creating Splunk admin user"
|
||||
@@ -62,7 +65,7 @@ ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
echo "Password: $ADMIN_PASS"
|
||||
} >> ~/splunk.creds
|
||||
|
||||
cat > "/opt/splunk/etc/system/local/user-seed.conf" << EOF
|
||||
cat << EOF > "/opt/splunk/etc/system/local/user-seed.conf"
|
||||
[user_info]
|
||||
USERNAME = $ADMIN_USER
|
||||
PASSWORD = $ADMIN_PASS
|
||||
@@ -70,8 +73,8 @@ EOF
|
||||
msg_ok "Created Splunk admin user"
|
||||
|
||||
msg_info "Starting Service"
|
||||
$STD /opt/splunk/bin/splunk start --accept-license --answer-yes --no-prompt
|
||||
$STD /opt/splunk/bin/splunk enable boot-start
|
||||
$STD sudo -u splunk /opt/splunk/bin/splunk start --accept-license --answer-yes --no-prompt
|
||||
$STD /opt/splunk/bin/splunk enable boot-start -user splunk
|
||||
msg_ok "Started Service"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -22,6 +22,9 @@ fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
|
||||
|
||||
msg_info "Installing Tautulli"
|
||||
cd /opt/Tautulli
|
||||
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
|
||||
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
|
||||
echo "master" >/opt/Tautulli/branch.txt
|
||||
uv venv -q
|
||||
uv pip install -q -r requirements.txt
|
||||
uv pip install -q pyopenssl
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user