mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-04 20:33:24 +01:00
Compare commits
69 Commits
2026-01-23
...
2026-01-26
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20a6e35a07 | ||
|
|
4173579597 | ||
|
|
f8f50f9b00 | ||
|
|
fa29f74c31 | ||
|
|
e50f3cd4f5 | ||
|
|
297a0a00de | ||
|
|
4e910de96d | ||
|
|
b3b67651c9 | ||
|
|
9aadff9c95 | ||
|
|
d42dbc155c | ||
|
|
92f15001b6 | ||
|
|
13a4af4300 | ||
|
|
78bc815a4f | ||
|
|
427986deaf | ||
|
|
6767ea4420 | ||
|
|
befc014eb9 | ||
|
|
35a011e5c5 | ||
|
|
b9eef7a257 | ||
|
|
64752790b6 | ||
|
|
cf08e8d644 | ||
|
|
9603c39487 | ||
|
|
b53cfe6bbc | ||
|
|
f05927602c | ||
|
|
2a234829b8 | ||
|
|
cd678bf8a9 | ||
|
|
ac696e22ca | ||
|
|
3471392fe4 | ||
|
|
9f3fa8e46c | ||
|
|
d91d5d7fd0 | ||
|
|
377dbcddfc | ||
|
|
596f0166dc | ||
|
|
1b5db3dce7 | ||
|
|
8c28895ec4 | ||
|
|
918d7c9053 | ||
|
|
4b83732478 | ||
|
|
92d33ee5e9 | ||
|
|
be154d9a20 | ||
|
|
1702f693b8 | ||
|
|
54e99261b4 | ||
|
|
5b612a0f11 | ||
|
|
16fb028ad4 | ||
|
|
68b2043fd6 | ||
|
|
d8b0db99f1 | ||
|
|
352bbc880e | ||
|
|
9311829cf4 | ||
|
|
105b83fcc3 | ||
|
|
dc2810c5d4 | ||
|
|
28b42883b7 | ||
|
|
8742fedcea | ||
|
|
a31febc8ce | ||
|
|
61ea6d980a | ||
|
|
aab4edf25e | ||
|
|
87610515a3 | ||
|
|
d6b4cea3ba | ||
|
|
ebcbe90c99 | ||
|
|
5ce7f35793 | ||
|
|
8764bbc754 | ||
|
|
83cd058586 | ||
|
|
661fb9efe0 | ||
|
|
d356ba4822 | ||
|
|
b17b555139 | ||
|
|
1741e007bb | ||
|
|
06ce9de1fa | ||
|
|
c0fb35c90b | ||
|
|
f66a751427 | ||
|
|
4b3f7f688c | ||
|
|
0828068d39 | ||
|
|
b7ef77cb66 | ||
|
|
e7f8a27aac |
85
CHANGELOG.md
85
CHANGELOG.md
@@ -10,8 +10,93 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2026-01-27
|
||||
|
||||
## 2026-01-26
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Ghost: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#11196](https://github.com/community-scripts/ProxmoxVE/pull/11196))
|
||||
- tracearr: fix install check and update node to version 24 [@durzo](https://github.com/durzo) ([#11188](https://github.com/community-scripts/ProxmoxVE/pull/11188))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- jotty: full refactor / prebuild package [@MickLesk](https://github.com/MickLesk) ([#11059](https://github.com/community-scripts/ProxmoxVE/pull/11059))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Fixing Nginx configuration for 1.11.0 installs [@8b1th3r0](https://github.com/8b1th3r0) ([#11207](https://github.com/community-scripts/ProxmoxVE/pull/11207))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: refine cleanup_lxc to safely clear caches [@MickLesk](https://github.com/MickLesk) ([#11197](https://github.com/community-scripts/ProxmoxVE/pull/11197))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: add nesting warning for systemd-based distributions [@MickLesk](https://github.com/MickLesk) ([#11208](https://github.com/community-scripts/ProxmoxVE/pull/11208))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- jellystat: correct WorkingDirectory to /backend [@MickLesk](https://github.com/MickLesk) ([#11201](https://github.com/community-scripts/ProxmoxVE/pull/11201))
|
||||
|
||||
## 2026-01-25
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [FIX] Tautulli: ensure virtualenv is recreated during update; backup tautulli.db [@vhsdream](https://github.com/vhsdream) ([#11182](https://github.com/community-scripts/ProxmoxVE/pull/11182))
|
||||
- [Fix] Pangolin: ensure additional JSON files are in place [@vhsdream](https://github.com/vhsdream) ([#11183](https://github.com/community-scripts/ProxmoxVE/pull/11183))
|
||||
- Manyfold: fix permissions error [@vhsdream](https://github.com/vhsdream) ([#11165](https://github.com/community-scripts/ProxmoxVE/pull/11165))
|
||||
- Termix: recreate nginx dirs and backup uploads on update [@MickLesk](https://github.com/MickLesk) ([#11169](https://github.com/community-scripts/ProxmoxVE/pull/11169))
|
||||
- Deluge: correct service paths to /usr/local/bin [@MickLesk](https://github.com/MickLesk) ([#11170](https://github.com/community-scripts/ProxmoxVE/pull/11170))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Karakeep: Add the FFmpeg option to the installation script [@vonhyou](https://github.com/vonhyou) ([#11157](https://github.com/community-scripts/ProxmoxVE/pull/11157))
|
||||
- apt-cacher-ng: add avahi-daemon for mDNS service discovery [@MickLesk](https://github.com/MickLesk) ([#11140](https://github.com/community-scripts/ProxmoxVE/pull/11140))
|
||||
|
||||
## 2026-01-24
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Manyfold ([#11143](https://github.com/community-scripts/ProxmoxVE/pull/11143))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- elementsynapse: correct parameter order in fetch_and_deploy_gh_release [@MickLesk](https://github.com/MickLesk) ([#11145](https://github.com/community-scripts/ProxmoxVE/pull/11145))
|
||||
- leantime: fix backup file naming [@MickLesk](https://github.com/MickLesk) ([#11137](https://github.com/community-scripts/ProxmoxVE/pull/11137))
|
||||
- [Hotfix] Element Synapse [@vhsdream](https://github.com/vhsdream) ([#11135](https://github.com/community-scripts/ProxmoxVE/pull/11135))
|
||||
- authelia: use POSIX-safe arithmetic to avoid exit code 1 with set -e in subshells [@MickLesk](https://github.com/MickLesk) ([#11125](https://github.com/community-scripts/ProxmoxVE/pull/11125))
|
||||
- Bitmagnet: PostgreSQL and environment variable fixes [@tremor021](https://github.com/tremor021) ([#11119](https://github.com/community-scripts/ProxmoxVE/pull/11119))
|
||||
- Spoolman: move to uv [@vhsdream](https://github.com/vhsdream) ([#11121](https://github.com/community-scripts/ProxmoxVE/pull/11121))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- bump crafty-controller to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11094](https://github.com/community-scripts/ProxmoxVE/pull/11094))
|
||||
- Netbox: Refactor [@vhsdream](https://github.com/vhsdream) ([#11126](https://github.com/community-scripts/ProxmoxVE/pull/11126))
|
||||
- Flatnotes: Standard enforcing [@tremor021](https://github.com/tremor021) ([#11109](https://github.com/community-scripts/ProxmoxVE/pull/11109))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- nvidia: use versioned nvidia-utils package for Ubuntu fallback [@MickLesk](https://github.com/MickLesk) ([#11139](https://github.com/community-scripts/ProxmoxVE/pull/11139))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- Byparr: Add config file path to website [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11120](https://github.com/community-scripts/ProxmoxVE/pull/11120))
|
||||
|
||||
## 2026-01-23
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -45,4 +45,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}https://YOUR_AUTHELIA_URL${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9091 or https://auth.YOURDOMAIN ${CL}"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-16}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -27,7 +27,7 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
|
||||
msg_info "Updating LXC"
|
||||
@@ -35,26 +35,25 @@ function update_script() {
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated LXC"
|
||||
|
||||
if check_for_gh_release "synapse-admin" "etkecc/synapse-admin"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop synapse-admin
|
||||
msg_ok "Stopped Service"
|
||||
if check_for_gh_release "synapse-admin" "etkecc/synapse-admin"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop synapse-admin
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "synapse-admin" "etkecc/synapse-admin" "tarball" "latest" "/opt/synapse-admin"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "synapse-admin" "etkecc/synapse-admin" "tarball" "latest" "/opt/synapse-admin"
|
||||
|
||||
msg_info "Building Synapse-Admin"
|
||||
cd /opt/synapse-admin
|
||||
$STD yarn global add serve
|
||||
$STD yarn install --ignore-engines
|
||||
$STD yarn build
|
||||
mv ./dist ../ && rm -rf * && mv ../dist ./
|
||||
msg_ok "Built Synapse-Admin"
|
||||
msg_info "Building Synapse-Admin"
|
||||
cd /opt/synapse-admin
|
||||
$STD yarn global add serve
|
||||
$STD yarn install --ignore-engines
|
||||
$STD yarn build
|
||||
mv ./dist ../ && rm -rf * && mv ../dist ./
|
||||
msg_ok "Built Synapse-Admin"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start synapse-admin
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated Synapse-Admin to ${CHECK_UPDATE_RELEASE}"
|
||||
fi
|
||||
msg_info "Starting Service"
|
||||
systemctl start synapse-admin
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated Synapse-Admin to ${CHECK_UPDATE_RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -40,18 +40,15 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
msg_info "Updating Flatnotes"
|
||||
cd /opt/flatnotes/client
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
msg_info "Updating Backend"
|
||||
cd /opt/flatnotes
|
||||
rm -f uv.lock
|
||||
$STD /usr/local/bin/uvx migrate-to-uv
|
||||
$STD /usr/local/bin/uv sync
|
||||
msg_ok "Updated Backend"
|
||||
msg_ok "Updated Flatnotes"
|
||||
|
||||
msg_info "Restoring Configuration and Data"
|
||||
cp /opt/flatnotes.env /opt/flatnotes/.env
|
||||
|
||||
@@ -26,6 +26,7 @@ function update_script() {
|
||||
|
||||
setup_mariadb
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
ensure_dependencies git
|
||||
|
||||
msg_info "Updating Ghost"
|
||||
if command -v ghost &>/dev/null; then
|
||||
|
||||
6
ct/headers/manyfold
Normal file
6
ct/headers/manyfold
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ___ ____ __ __
|
||||
/ |/ /___ _____ __ __/ __/___ / /___/ /
|
||||
/ /|_/ / __ `/ __ \/ / / / /_/ __ \/ / __ /
|
||||
/ / / / /_/ / / / / /_/ / __/ /_/ / / /_/ /
|
||||
/_/ /_/\__,_/_/ /_/\__, /_/ \____/_/\__,_/
|
||||
/____/
|
||||
54
ct/jotty.sh
54
ct/jotty.sh
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
|
||||
APP="jotty"
|
||||
var_tags="${var_tags:-tasks;notes}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -35,61 +35,21 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up configuration & data"
|
||||
cd /opt/jotty
|
||||
cp ./.env /opt/app.env
|
||||
$STD tar -cf /opt/data_config.tar ./data ./config
|
||||
cp /opt/jotty/.env /opt/app.env
|
||||
[[ -d /opt/jotty/data ]] && mv /opt/jotty/data /opt/data
|
||||
msg_ok "Backed up configuration & data"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
|
||||
|
||||
msg_info "Updating jotty"
|
||||
cd /opt/jotty
|
||||
unset NODE_OPTIONS
|
||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
|
||||
[ -d "public" ] && cp -r public .next/standalone/
|
||||
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||
mkdir -p .next/standalone/.next
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf ./* .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
msg_ok "Updated jotty"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz"
|
||||
|
||||
msg_info "Restoring configuration & data"
|
||||
mv /opt/app.env /opt/jotty/.env
|
||||
$STD tar -xf /opt/data_config.tar
|
||||
[[ -d /opt/data ]] && mv /opt/data /opt/jotty/data
|
||||
msg_ok "Restored configuration & data"
|
||||
|
||||
msg_info "Updating Service"
|
||||
cat <<EOF >/etc/systemd/system/jotty.service
|
||||
[Unit]
|
||||
Description=jotty server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/jotty
|
||||
EnvironmentFile=/opt/jotty/.env
|
||||
ExecStart=/usr/bin/node server.js
|
||||
Restart=on-abnormal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated Service"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start jotty
|
||||
msg_ok "Started Service"
|
||||
rm /opt/data_config.tar
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -31,8 +31,8 @@ function update_script() {
|
||||
setup_mariadb
|
||||
if check_for_gh_release "leantime" "Leantime/leantime"; then
|
||||
msg_info "Creating Backup"
|
||||
mariadb-dump leantime >"/opt/${APP}_db_backup_$(date +%F).sql"
|
||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" "/opt/${APP}"
|
||||
mariadb-dump leantime >"/opt/leantime_db_backup_$(date +%F).sql"
|
||||
tar -czf "/opt/leantime_backup_$(date +%F).tar.gz" "/opt/leantime"
|
||||
mv /opt/leantime /opt/leantime_bak
|
||||
msg_ok "Backup Created"
|
||||
|
||||
|
||||
107
ct/manyfold.sh
Normal file
107
ct/manyfold.sh
Normal file
@@ -0,0 +1,107 @@
|
||||
#!/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 | Co-Author: SunFlowerOwl
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/manyfold3d/manyfold
|
||||
|
||||
APP="Manyfold"
|
||||
var_tags="${var_tags:-3d}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
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/manyfold ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
CURRENT_VERSION=$(grep -oP 'APP_VERSION=\K[^ ]+' /opt/manyfold/.env || echo "unknown")
|
||||
cp -r /opt/manyfold/app/storage /opt/manyfold_storage_backup 2>/dev/null || true
|
||||
cp -r /opt/manyfold/app/tmp /opt/manyfold_tmp_backup 2>/dev/null || true
|
||||
cp /opt/manyfold/app/config/credentials.yml.enc /opt/manyfold_credentials.yml.enc 2>/dev/null || true
|
||||
cp /opt/manyfold/app/config/master.key /opt/manyfold_master.key 2>/dev/null || true
|
||||
$STD tar -czf "/opt/manyfold_${CURRENT_VERSION}_backup.tar.gz" -C /opt/manyfold app
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
|
||||
|
||||
msg_info "Configuring Manyfold"
|
||||
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
|
||||
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
||||
RELEASE=$(get_latest_github_release "manyfold3d/manyfold")
|
||||
sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env"
|
||||
msg_ok "Configured Manyfold"
|
||||
|
||||
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
|
||||
|
||||
msg_info "Installing Manyfold"
|
||||
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
|
||||
chown -R manyfold:manyfold /opt/manyfold
|
||||
|
||||
sudo -u manyfold bash -c '
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/bin:$PATH"
|
||||
eval "$(/home/manyfold/.rbenv/bin/rbenv init - bash)"
|
||||
cd /opt/manyfold/app
|
||||
gem install bundler sidekiq foreman
|
||||
bundle install
|
||||
corepack enable yarn
|
||||
corepack prepare '"$YARN_VERSION"' --activate
|
||||
corepack use '"$YARN_VERSION"'
|
||||
bin/rails db:migrate
|
||||
bin/rails assets:precompile
|
||||
'
|
||||
msg_ok "Installed Manyfold"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
|
||||
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
|
||||
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
|
||||
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
|
||||
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
|
||||
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
|
||||
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Restarting Services"
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
|
||||
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
|
||||
for f in /etc/systemd/system/manyfold-*.service; do
|
||||
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
|
||||
done
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
|
||||
msg_ok "Restarted Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
40
ct/netbox.sh
40
ct/netbox.sh
@@ -28,46 +28,30 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
msg_info "Stopping Service"
|
||||
if check_for_gh_release "netbox" "netbox-community/netbox"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop netbox netbox-rq
|
||||
msg_ok "Stopped Service"
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
msg_info "Backing up NetBox configurations"
|
||||
mv /opt/netbox/ /opt/netbox-backup
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip")
|
||||
$STD unzip "v${RELEASE}.zip"
|
||||
mv /opt/netbox-${RELEASE}/ /opt/netbox/
|
||||
msg_ok "Backed up NetBox configurations"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "netbox" "netbox-community/netbox" "tarball"
|
||||
|
||||
cp -r /opt/netbox-backup/netbox/netbox/configuration.py /opt/netbox/netbox/netbox/
|
||||
cp -r /opt/netbox-backup/netbox/media/ /opt/netbox/netbox/
|
||||
cp -r /opt/netbox-backup/netbox/scripts /opt/netbox/netbox/
|
||||
cp -r /opt/netbox-backup/netbox/reports /opt/netbox/netbox/
|
||||
cp -r /opt/netbox-backup/netbox/{media,scripts,reports}/ /opt/netbox/netbox/
|
||||
cp -r /opt/netbox-backup/gunicorn.py /opt/netbox/
|
||||
|
||||
if [ -f /opt/netbox-backup/local_requirements.txt ]; then
|
||||
cp -r /opt/netbox-backup/local_requirements.txt /opt/netbox/
|
||||
fi
|
||||
|
||||
if [ -f /opt/netbox-backup/netbox/netbox/ldap_config.py ]; then
|
||||
cp -r /opt/netbox-backup/netbox/netbox/ldap_config.py /opt/netbox/netbox/netbox/
|
||||
fi
|
||||
[[ -f /opt/netbox-backup/local_requirements.txt ]] && cp -r /opt/netbox-backup/local_requirements.txt /opt/netbox/
|
||||
[[ -f /opt/netbox-backup/netbox/netbox/ldap_config.py ]] && cp -r /opt/netbox-backup/netbox/netbox/ldap_config.py /opt/netbox/netbox/netbox/
|
||||
|
||||
$STD /opt/netbox/upgrade.sh
|
||||
rm -r "/opt/v${RELEASE}.zip"
|
||||
rm -r /opt/netbox-backup
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
msg_info "Starting Services"
|
||||
systemctl start netbox netbox-rq
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ function update_script() {
|
||||
cp -R .next/standalone ./
|
||||
chmod +x ./dist/cli.mjs
|
||||
cp server/db/names.json ./dist/names.json
|
||||
cp server/db/ios_models.json ./dist/ios_models.json
|
||||
cp server/db/mac_models.json ./dist/mac_models.json
|
||||
msg_ok "Updated Pangolin"
|
||||
|
||||
msg_info "Restoring config"
|
||||
|
||||
@@ -28,6 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
if check_for_gh_release "spoolman" "Donkie/Spoolman"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop spoolman
|
||||
@@ -42,8 +44,10 @@ function update_script() {
|
||||
|
||||
msg_info "Updating Spoolman"
|
||||
cd /opt/spoolman
|
||||
$STD pip3 install -r requirements.txt
|
||||
$STD uv sync --locked --no-install-project
|
||||
$STD uv sync --locked
|
||||
cp /opt/spoolman_bak/.env /opt/spoolman
|
||||
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/bash /opt/spoolman/scripts/start.sh|' /etc/systemd/system/spoolman.service
|
||||
msg_ok "Updated Spoolman"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
@@ -35,9 +35,10 @@ function update_script() {
|
||||
systemctl stop tautulli
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up config"
|
||||
msg_info "Backing up config and database"
|
||||
cp /opt/Tautulli/config.ini /opt/tautulli_config.ini.backup
|
||||
msg_ok "Backed up config"
|
||||
cp /opt/Tautulli/tautulli.db /opt/tautulli.db.backup
|
||||
msg_ok "Backed up config and database"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Tautulli" "Tautulli/Tautulli" "tarball"
|
||||
|
||||
@@ -46,17 +47,17 @@ function update_script() {
|
||||
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
|
||||
$STD uv venv -c
|
||||
$STD source /opt/Tautulli/.venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD uv pip install pyopenssl
|
||||
msg_ok "Updated Tautulli"
|
||||
|
||||
msg_info "Restoring config"
|
||||
msg_info "Restoring config and database"
|
||||
cp /opt/tautulli_config.ini.backup /opt/Tautulli/config.ini
|
||||
rm -f /opt/tautulli_config.ini.backup
|
||||
msg_ok "Restored config"
|
||||
cp /opt/tautulli.db.backup /opt/Tautulli/tautulli.db
|
||||
rm -f /opt/{tautulli_config.ini.backup,tautulli.db.backup}
|
||||
msg_ok "Restored config and database"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tautulli
|
||||
|
||||
15
ct/termix.sh
15
ct/termix.sh
@@ -36,10 +36,19 @@ function update_script() {
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/termix/data /opt/termix_data_backup
|
||||
cp -r /opt/termix/uploads /opt/termix_uploads_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||
|
||||
msg_info "Recreating Directories"
|
||||
mkdir -p /opt/termix/html \
|
||||
/opt/termix/nginx \
|
||||
/opt/termix/nginx/logs \
|
||||
/opt/termix/nginx/cache \
|
||||
/opt/termix/nginx/client_body
|
||||
msg_ok "Recreated Directories"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/termix
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
@@ -60,9 +69,9 @@ function update_script() {
|
||||
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
|
||||
cp -r /opt/termix_data_backup /opt/termix/data
|
||||
cp -r /opt/termix_uploads_backup /opt/termix/uploads
|
||||
rm -rf /opt/termix_data_backup /opt/termix_uploads_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Updating Frontend Files"
|
||||
|
||||
@@ -23,11 +23,13 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/systemd/system/tracearr.service ]]; then
|
||||
if [[ ! -f /lib/systemd/system/tracearr.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop tracearr postgresql redis
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"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": "",
|
||||
"config_path": "/etc/systemd/system/byparr.service",
|
||||
"description": "Byparr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 4096,
|
||||
"hdd": 16,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
"type": "default",
|
||||
"script": "ct/jotty.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 8,
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 5,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
@@ -31,10 +31,5 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "jotty was previously named rwMarkable",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
"notes": []
|
||||
}
|
||||
|
||||
40
frontend/public/json/manyfold.json
Normal file
40
frontend/public/json/manyfold.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "Manyfold",
|
||||
"slug": "manyfold",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2026-01-24",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://manyfold.app/sysadmin/",
|
||||
"website": "https://manyfold.app/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/manyfold.webp",
|
||||
"config_path": "/opt/manyfold/.env",
|
||||
"description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/manyfold.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 15,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Setup library on first connection in /opt/manyfold/data",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,8 +1,243 @@
|
||||
[
|
||||
{
|
||||
"name": "webmin/webmin",
|
||||
"version": "2.621",
|
||||
"date": "2026-01-26T23:14:03Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.108.2",
|
||||
"date": "2026-01-26T22:43:09Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.15.0-rc2",
|
||||
"date": "2026-01-23T23:37:17Z"
|
||||
"version": "v0.15.2",
|
||||
"date": "2026-01-26T22:34:29Z"
|
||||
},
|
||||
{
|
||||
"name": "Forceu/Gokapi",
|
||||
"version": "v2.1.0",
|
||||
"date": "2025-08-29T12:56:13Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.2.0-dev.3",
|
||||
"date": "2026-01-26T21:56:05Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.57.10.6",
|
||||
"date": "2026-01-26T21:31:59Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "1.19.1",
|
||||
"date": "2026-01-26T21:30:39Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.81.3.rc.2",
|
||||
"date": "2026-01-26T18:18:16Z"
|
||||
},
|
||||
{
|
||||
"name": "hargata/lubelog",
|
||||
"version": "v1.5.8",
|
||||
"date": "2026-01-26T18:18:03Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.3.0-alpha2",
|
||||
"date": "2026-01-26T17:21:09Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-26T16:17:09Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v5.0.0",
|
||||
"date": "2026-01-26T15:58:00Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@2.4.6",
|
||||
"date": "2026-01-23T15:32:50Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "6.1.1",
|
||||
"date": "2026-01-26T15:14:16Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "@fumadocs/ui@16.4.9",
|
||||
"date": "2026-01-26T15:02:21Z"
|
||||
},
|
||||
{
|
||||
"name": "itsmng/itsm-ng",
|
||||
"version": "v2.1.2",
|
||||
"date": "2026-01-26T14:57:54Z"
|
||||
},
|
||||
{
|
||||
"name": "passbolt/passbolt_api",
|
||||
"version": "v5.9.0",
|
||||
"date": "2026-01-26T14:46:28Z"
|
||||
},
|
||||
{
|
||||
"name": "jordan-dalby/ByteStash",
|
||||
"version": "v1.5.10",
|
||||
"date": "2026-01-26T14:07:59Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "7.1.0-alpha.2",
|
||||
"date": "2026-01-26T12:07:12Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.4",
|
||||
"date": "2026-01-26T11:29:13Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
"date": "2026-01-26T09:30:03Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.13",
|
||||
"date": "2026-01-06T12:09:32Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e5.10.3-rc.3",
|
||||
"date": "2026-01-26T08:27:48Z"
|
||||
},
|
||||
{
|
||||
"name": "alam00000/bentopdf",
|
||||
"version": "v1.16.1",
|
||||
"date": "2026-01-26T08:27:11Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "v7.5.3",
|
||||
"date": "2026-01-26T07:28:46Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.16",
|
||||
"date": "2026-01-17T07:54:15Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.946",
|
||||
"date": "2026-01-26T06:11:11Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.4",
|
||||
"date": "2026-01-04T22:41:00Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "9.0.5",
|
||||
"date": "2026-01-26T03:34:21Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
"date": "2025-06-14T17:45:06Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-26T00:27:06Z"
|
||||
},
|
||||
{
|
||||
"name": "TasmoAdmin/TasmoAdmin",
|
||||
"version": "v4.3.4",
|
||||
"date": "2026-01-25T22:16:41Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-availability-sync-single-server-resolution",
|
||||
"date": "2026-01-25T21:05:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.5.1",
|
||||
"date": "2026-01-25T20:50:59Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2026.1.2",
|
||||
"date": "2026-01-25T18:21:29Z"
|
||||
},
|
||||
{
|
||||
"name": "FreshRSS/FreshRSS",
|
||||
"version": "1.28.1",
|
||||
"date": "2026-01-25T18:20:14Z"
|
||||
},
|
||||
{
|
||||
"name": "project-zot/zot",
|
||||
"version": "v2.1.14",
|
||||
"date": "2026-01-25T17:14:38Z"
|
||||
},
|
||||
{
|
||||
"name": "benjaminjonard/koillection",
|
||||
"version": "1.8.0",
|
||||
"date": "2026-01-25T13:48:30Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.6",
|
||||
"date": "2026-01-25T10:37:05Z"
|
||||
},
|
||||
{
|
||||
"name": "eclipse-mosquitto/mosquitto",
|
||||
"version": "v2.1.0rc3",
|
||||
"date": "2026-01-25T09:15:01Z"
|
||||
},
|
||||
{
|
||||
"name": "kimai/kimai",
|
||||
"version": "2.47.0",
|
||||
"date": "2026-01-25T09:01:46Z"
|
||||
},
|
||||
{
|
||||
"name": "mayswind/AriaNg",
|
||||
"version": "1.3.13",
|
||||
"date": "2026-01-25T07:56:27Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.9.0",
|
||||
"date": "2026-01-25T00:31:51Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.7.1",
|
||||
"date": "2026-01-24T21:03:08Z"
|
||||
},
|
||||
{
|
||||
"name": "go-vikunja/vikunja",
|
||||
"version": "v1.0.0-rc0",
|
||||
"date": "2025-08-17T18:47:15Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.15.1",
|
||||
"date": "2026-01-24T20:34:24Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
@@ -10,20 +245,65 @@
|
||||
"date": "2025-09-27T20:59:46Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.3.0-alpha1",
|
||||
"date": "2026-01-23T22:42:26Z"
|
||||
"name": "benzino77/tasmocompiler",
|
||||
"version": "v13.1.0",
|
||||
"date": "2026-01-24T17:52:54Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.18.5",
|
||||
"date": "2026-01-24T17:15:32Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.5.1",
|
||||
"date": "2026-01-24T14:44:07Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v1.2.1-beta",
|
||||
"date": "2026-01-24T14:38:21Z"
|
||||
},
|
||||
{
|
||||
"name": "tobychui/zoraxy",
|
||||
"version": "v3.3.1-rc3",
|
||||
"date": "2026-01-24T14:31:01Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.12.2",
|
||||
"date": "2026-01-24T14:01:03Z"
|
||||
},
|
||||
{
|
||||
"name": "deuxfleurs-org/garage",
|
||||
"version": "v1.3.1",
|
||||
"date": "2026-01-24T13:50:25Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.3.0",
|
||||
"date": "2026-01-08T16:08:34Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.25",
|
||||
"date": "2026-01-24T05:56:58Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.4.0",
|
||||
"date": "2026-01-24T00:51:05Z"
|
||||
},
|
||||
{
|
||||
"name": "azukaar/Cosmos-Server",
|
||||
"version": "v0.20.2",
|
||||
"date": "2026-01-24T00:12:39Z"
|
||||
},
|
||||
{
|
||||
"name": "endurain-project/endurain",
|
||||
"version": "v0.17.3",
|
||||
"date": "2026-01-23T22:02:05Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v1.2.0-dev.2",
|
||||
"date": "2026-01-23T21:57:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Donkie/Spoolman",
|
||||
"version": "v0.23.0",
|
||||
@@ -34,26 +314,11 @@
|
||||
"version": "2026.1.3",
|
||||
"date": "2026-01-23T20:15:10Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.16",
|
||||
"date": "2026-01-17T07:54:15Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.7",
|
||||
"date": "2026-01-12T09:54:36Z"
|
||||
},
|
||||
{
|
||||
"name": "fosrl/pangolin",
|
||||
"version": "1.15.0",
|
||||
"date": "2026-01-23T19:48:21Z"
|
||||
},
|
||||
{
|
||||
"name": "metabase/metabase",
|
||||
"version": "v0.58.x",
|
||||
"date": "2026-01-23T19:39:09Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.52",
|
||||
@@ -64,41 +329,21 @@
|
||||
"version": "v1.51.0",
|
||||
"date": "2026-01-23T19:29:49Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.18.3",
|
||||
"date": "2026-01-22T23:11:30Z"
|
||||
},
|
||||
{
|
||||
"name": "ghostfolio/ghostfolio",
|
||||
"version": "2.233.0",
|
||||
"date": "2026-01-23T18:41:45Z"
|
||||
},
|
||||
{
|
||||
"name": "azukaar/Cosmos-Server",
|
||||
"version": "v0.20.1",
|
||||
"date": "2026-01-23T17:58:18Z"
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.5.2",
|
||||
"date": "2026-01-23T14:26:58Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.50.3",
|
||||
"date": "2026-01-23T16:09:10Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@2.4.6",
|
||||
"date": "2026-01-23T15:32:50Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.5.2",
|
||||
"date": "2026-01-23T14:26:58Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.10.0",
|
||||
@@ -119,66 +364,21 @@
|
||||
"version": "v1.7.6",
|
||||
"date": "2026-01-23T09:41:22Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "@jupyter-notebook/ui-components@7.6.0-alpha.2",
|
||||
"date": "2026-01-23T08:07:05Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "5.26.20",
|
||||
"date": "2026-01-23T07:30:39Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.25",
|
||||
"date": "2026-01-23T07:00:51Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.903",
|
||||
"date": "2026-01-23T05:55:59Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.20.4",
|
||||
"date": "2026-01-23T01:29:26Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.5.2",
|
||||
"date": "2026-01-23T00:27:08Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-11-23T12:13:34Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2026.1.1",
|
||||
"date": "2026-01-22T23:19:21Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-22T20:38:13Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.8.0",
|
||||
"date": "2026-01-22T20:08:17Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.94.1",
|
||||
"date": "2026-01-22T19:07:16Z"
|
||||
},
|
||||
{
|
||||
"name": "fccview/jotty",
|
||||
"version": "develop",
|
||||
"date": "2026-01-22T18:59:33Z"
|
||||
},
|
||||
{
|
||||
"name": "redis/redis",
|
||||
"version": "8.4.0",
|
||||
@@ -229,11 +429,6 @@
|
||||
"version": "2026-01-22-r1",
|
||||
"date": "2026-01-22T10:20:04Z"
|
||||
},
|
||||
{
|
||||
"name": "eclipse-mosquitto/mosquitto",
|
||||
"version": "v2.1.0rc2",
|
||||
"date": "2026-01-22T09:42:43Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.52.9",
|
||||
@@ -254,11 +449,6 @@
|
||||
"version": "v4.2.3",
|
||||
"date": "2026-01-22T03:57:50Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.81.0.rc.5",
|
||||
"date": "2026-01-22T03:30:46Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.25.4",
|
||||
@@ -269,21 +459,11 @@
|
||||
"version": "v0.156.3",
|
||||
"date": "2026-01-22T00:44:20Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v2.3.1",
|
||||
"date": "2026-01-21T22:50:25Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v2.8.0",
|
||||
"date": "2025-12-12T20:25:00Z"
|
||||
},
|
||||
{
|
||||
"name": "livebook-dev/livebook",
|
||||
"version": "nightly",
|
||||
"date": "2026-01-21T20:40:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Comfy-Org/ComfyUI",
|
||||
"version": "v0.10.0",
|
||||
@@ -299,31 +479,16 @@
|
||||
"version": "jenkins-2.541.1",
|
||||
"date": "2026-01-21T15:09:10Z"
|
||||
},
|
||||
{
|
||||
"name": "node-red/node-red",
|
||||
"version": "4.1.3",
|
||||
"date": "2026-01-07T16:24:23Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.17.0-rc7",
|
||||
"date": "2026-01-21T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.300.5",
|
||||
"date": "2026-01-21T11:35:44Z"
|
||||
},
|
||||
{
|
||||
"name": "javedh-dev/tracktor",
|
||||
"version": "1.2.1",
|
||||
"date": "2026-01-21T11:12:28Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e5.10.3-rc.2",
|
||||
"date": "2026-01-21T08:57:16Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v5.0.2",
|
||||
@@ -344,11 +509,6 @@
|
||||
"version": "v2.20.5",
|
||||
"date": "2026-01-21T00:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "seerr-team/seerr",
|
||||
"version": "preview-availability-sync-fix",
|
||||
"date": "2026-01-20T22:11:24Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v5.0.17",
|
||||
@@ -364,11 +524,6 @@
|
||||
"version": "v4.5.1",
|
||||
"date": "2026-01-20T19:45:05Z"
|
||||
},
|
||||
{
|
||||
"name": "nickheyer/discopanel",
|
||||
"version": "v1.0.24",
|
||||
"date": "2026-01-20T18:31:20Z"
|
||||
},
|
||||
{
|
||||
"name": "mysql/mysql-server",
|
||||
"version": "mysql-cluster-8.0.45",
|
||||
@@ -384,11 +539,6 @@
|
||||
"version": "v0.88.4",
|
||||
"date": "2026-01-20T16:02:12Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v1.1.1-stable",
|
||||
"date": "2026-01-12T23:25:10Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "@mattermost/client@11.3.0",
|
||||
@@ -399,11 +549,6 @@
|
||||
"version": "v14.0.8",
|
||||
"date": "2026-01-20T15:10:44Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
"date": "2026-01-20T14:25:19Z"
|
||||
},
|
||||
{
|
||||
"name": "sysadminsmedia/homebox",
|
||||
"version": "v0.23.0-rc.1",
|
||||
@@ -419,26 +564,11 @@
|
||||
"version": "2026.1.1",
|
||||
"date": "2026-01-20T11:22:06Z"
|
||||
},
|
||||
{
|
||||
"name": "passbolt/passbolt_api",
|
||||
"version": "v5.9.0-test.1",
|
||||
"date": "2026-01-20T10:34:53Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.5.0",
|
||||
"date": "2026-01-20T08:53:52Z"
|
||||
},
|
||||
{
|
||||
"name": "HydroshieldMKII/Guardian",
|
||||
"version": "v1.3.4",
|
||||
"date": "2026-01-20T06:20:36Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.4",
|
||||
"date": "2026-01-04T22:41:00Z"
|
||||
},
|
||||
{
|
||||
"name": "diced/zipline",
|
||||
"version": "v4.4.1",
|
||||
@@ -499,11 +629,6 @@
|
||||
"version": "v1.0.0-beta22",
|
||||
"date": "2026-01-18T22:38:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.5.0",
|
||||
"date": "2026-01-18T22:16:38Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
"version": "v5.21.2",
|
||||
@@ -524,11 +649,6 @@
|
||||
"version": "2.4",
|
||||
"date": "2026-01-18T12:12:02Z"
|
||||
},
|
||||
{
|
||||
"name": "hyperion-project/hyperion.ng",
|
||||
"version": "2.1.1",
|
||||
"date": "2025-06-14T17:45:06Z"
|
||||
},
|
||||
{
|
||||
"name": "oauth2-proxy/oauth2-proxy",
|
||||
"version": "v7.14.2",
|
||||
@@ -549,11 +669,6 @@
|
||||
"version": "v14.0.1",
|
||||
"date": "2026-01-17T07:14:19Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.108.1",
|
||||
"date": "2026-01-17T04:09:09Z"
|
||||
},
|
||||
{
|
||||
"name": "wanetty/upgopher",
|
||||
"version": "v1.13.0",
|
||||
@@ -619,11 +734,6 @@
|
||||
"version": "v4.8.0",
|
||||
"date": "2026-01-14T17:54:36Z"
|
||||
},
|
||||
{
|
||||
"name": "alam00000/bentopdf",
|
||||
"version": "v1.16.0",
|
||||
"date": "2026-01-14T16:45:03Z"
|
||||
},
|
||||
{
|
||||
"name": "Bubka/2FAuth",
|
||||
"version": "v6.0.0",
|
||||
@@ -634,11 +744,6 @@
|
||||
"version": "v3.6.7",
|
||||
"date": "2026-01-14T14:11:45Z"
|
||||
},
|
||||
{
|
||||
"name": "tobychui/zoraxy",
|
||||
"version": "v3.3.1-rc2",
|
||||
"date": "2026-01-14T12:29:28Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudreve/cloudreve",
|
||||
"version": "4.11.1",
|
||||
@@ -709,11 +814,6 @@
|
||||
"version": "1.1.15",
|
||||
"date": "2026-01-12T05:38:30Z"
|
||||
},
|
||||
{
|
||||
"name": "hargata/lubelog",
|
||||
"version": "v1.5.7",
|
||||
"date": "2026-01-11T19:31:59Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2026.01.11",
|
||||
@@ -759,11 +859,6 @@
|
||||
"version": "v0.7.2",
|
||||
"date": "2026-01-10T21:00:12Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "6.0.0",
|
||||
"date": "2026-01-10T20:28:07Z"
|
||||
},
|
||||
{
|
||||
"name": "blakeblackshear/frigate",
|
||||
"version": "v0.14.1",
|
||||
@@ -789,26 +884,11 @@
|
||||
"version": "v3007.11",
|
||||
"date": "2026-01-09T17:23:23Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "@fumadocs/base-ui@16.4.6",
|
||||
"date": "2026-01-09T10:54:11Z"
|
||||
},
|
||||
{
|
||||
"name": "webmin/webmin",
|
||||
"version": "2.620",
|
||||
"date": "2026-01-09T00:17:04Z"
|
||||
},
|
||||
{
|
||||
"name": "ErsatzTV/ErsatzTV",
|
||||
"version": "v26.1.1",
|
||||
"date": "2026-01-08T22:02:15Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.3.0",
|
||||
"date": "2026-01-08T16:08:34Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "5.1.1",
|
||||
@@ -819,11 +899,6 @@
|
||||
"version": "v2.2.0.103-2.2.0.103_canary_2026-01-08",
|
||||
"date": "2026-01-08T12:41:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.2.11",
|
||||
"date": "2026-01-08T12:15:04Z"
|
||||
},
|
||||
{
|
||||
"name": "requarks/wiki",
|
||||
"version": "v2.5.311",
|
||||
@@ -869,11 +944,6 @@
|
||||
"version": "2.2.16",
|
||||
"date": "2026-01-07T03:26:27Z"
|
||||
},
|
||||
{
|
||||
"name": "kimai/kimai",
|
||||
"version": "2.46.0",
|
||||
"date": "2026-01-07T00:19:31Z"
|
||||
},
|
||||
{
|
||||
"name": "caddyserver/caddy",
|
||||
"version": "v2.10.2",
|
||||
@@ -889,11 +959,6 @@
|
||||
"version": "26.1.0.118079",
|
||||
"date": "2026-01-06T14:46:07Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.13",
|
||||
"date": "2026-01-06T12:09:32Z"
|
||||
},
|
||||
{
|
||||
"name": "transmission/transmission",
|
||||
"version": "4.0.1-beta.1",
|
||||
@@ -932,7 +997,7 @@
|
||||
{
|
||||
"name": "mealie-recipes/mealie",
|
||||
"version": "v3.9.2",
|
||||
"date": "2026-01-02T19:40:19Z"
|
||||
"date": "2026-01-02T19:40:09Z"
|
||||
},
|
||||
{
|
||||
"name": "gotify/server",
|
||||
@@ -954,11 +1019,6 @@
|
||||
"version": "2.2.2",
|
||||
"date": "2025-12-31T16:53:34Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.12.1",
|
||||
"date": "2025-12-30T17:25:57Z"
|
||||
},
|
||||
{
|
||||
"name": "ArchiveBox/ArchiveBox",
|
||||
"version": "v0.8.6rc1",
|
||||
@@ -984,11 +1044,6 @@
|
||||
"version": "v1.3.7",
|
||||
"date": "2025-12-25T11:08:14Z"
|
||||
},
|
||||
{
|
||||
"name": "FreshRSS/FreshRSS",
|
||||
"version": "1.28.0",
|
||||
"date": "2025-12-24T19:27:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Dolibarr/dolibarr",
|
||||
"version": "22.0.4",
|
||||
@@ -1009,16 +1064,6 @@
|
||||
"version": "v5.7",
|
||||
"date": "2025-12-23T14:53:51Z"
|
||||
},
|
||||
{
|
||||
"name": "itsmng/itsm-ng",
|
||||
"version": "v1.6.11",
|
||||
"date": "2025-12-23T10:40:42Z"
|
||||
},
|
||||
{
|
||||
"name": "project-zot/zot",
|
||||
"version": "v2.1.13",
|
||||
"date": "2025-12-23T10:14:48Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.5",
|
||||
@@ -1029,11 +1074,6 @@
|
||||
"version": "v4.0.16.2944",
|
||||
"date": "2025-11-05T01:56:48Z"
|
||||
},
|
||||
{
|
||||
"name": "benjaminjonard/koillection",
|
||||
"version": "1.7.1",
|
||||
"date": "2025-12-21T17:06:17Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.10",
|
||||
@@ -1079,11 +1119,6 @@
|
||||
"version": "7.4.6",
|
||||
"date": "2025-12-18T07:00:26Z"
|
||||
},
|
||||
{
|
||||
"name": "opencloud-eu/opencloud",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-12-15T18:53:25Z"
|
||||
},
|
||||
{
|
||||
"name": "docmost/docmost",
|
||||
"version": "v0.24.1",
|
||||
@@ -1094,11 +1129,6 @@
|
||||
"version": "v5.0.87",
|
||||
"date": "2025-12-14T08:35:11Z"
|
||||
},
|
||||
{
|
||||
"name": "mayswind/AriaNg",
|
||||
"version": "1.3.12",
|
||||
"date": "2025-12-14T02:58:24Z"
|
||||
},
|
||||
{
|
||||
"name": "martabal/qbittorrent-exporter",
|
||||
"version": "v1.13.2",
|
||||
@@ -1244,11 +1274,6 @@
|
||||
"version": "1.23.6",
|
||||
"date": "2025-11-28T03:52:50Z"
|
||||
},
|
||||
{
|
||||
"name": "go-vikunja/vikunja",
|
||||
"version": "v1.0.0-rc0",
|
||||
"date": "2025-08-17T18:47:15Z"
|
||||
},
|
||||
{
|
||||
"name": "phpipam/phpipam",
|
||||
"version": "v1.7.4",
|
||||
@@ -1284,11 +1309,6 @@
|
||||
"version": "mariadb-12.1.2",
|
||||
"date": "2025-11-18T15:16:21Z"
|
||||
},
|
||||
{
|
||||
"name": "TasmoAdmin/TasmoAdmin",
|
||||
"version": "v4.3.2",
|
||||
"date": "2025-10-18T12:11:00Z"
|
||||
},
|
||||
{
|
||||
"name": "nextcloud/nextcloudpi",
|
||||
"version": "v1.56.0",
|
||||
@@ -1359,11 +1379,6 @@
|
||||
"version": "2.11.1",
|
||||
"date": "2025-11-08T14:27:27Z"
|
||||
},
|
||||
{
|
||||
"name": "deuxfleurs-org/garage",
|
||||
"version": "v1.99.3-internal",
|
||||
"date": "2025-11-06T17:27:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Notifiarr/notifiarr",
|
||||
"version": "v0.9.1",
|
||||
@@ -1419,11 +1434,6 @@
|
||||
"version": "v2.7.0",
|
||||
"date": "2025-10-23T17:15:07Z"
|
||||
},
|
||||
{
|
||||
"name": "benzino77/tasmocompiler",
|
||||
"version": "v13.0.0",
|
||||
"date": "2025-10-19T10:03:18Z"
|
||||
},
|
||||
{
|
||||
"name": "minio/minio",
|
||||
"version": "RELEASE.2025-10-15T17-29-55Z",
|
||||
@@ -1444,11 +1454,6 @@
|
||||
"version": "v2.2.2",
|
||||
"date": "2025-10-06T21:31:07Z"
|
||||
},
|
||||
{
|
||||
"name": "jordan-dalby/ByteStash",
|
||||
"version": "v1.5.9",
|
||||
"date": "2025-10-06T08:34:01Z"
|
||||
},
|
||||
{
|
||||
"name": "thomiceli/opengist",
|
||||
"version": "v1.11.1",
|
||||
@@ -1519,11 +1524,6 @@
|
||||
"version": "v0.11.0",
|
||||
"date": "2025-09-01T16:19:38Z"
|
||||
},
|
||||
{
|
||||
"name": "Forceu/Gokapi",
|
||||
"version": "v2.1.0",
|
||||
"date": "2025-08-29T12:56:13Z"
|
||||
},
|
||||
{
|
||||
"name": "janeczku/calibre-web",
|
||||
"version": "0.6.25",
|
||||
|
||||
@@ -14,7 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Apt-Cacher NG"
|
||||
DEBIAN_FRONTEND=noninteractive $STD apt -o Dpkg::Options::="--force-confold" install -y apt-cacher-ng
|
||||
DEBIAN_FRONTEND=noninteractive $STD apt -o Dpkg::Options::="--force-confold" install -y apt-cacher-ng avahi-daemon
|
||||
sed -i 's/# PassThroughPattern: .* # this would allow CONNECT to everything/PassThroughPattern: .*/' /etc/apt-cacher-ng/acng.conf
|
||||
cat <<EOF >/etc/apt/apt.conf.d/00aptproxy.conf
|
||||
Acquire::http::Proxy "http://localhost:3142";
|
||||
|
||||
@@ -15,11 +15,10 @@ update_os
|
||||
|
||||
fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
|
||||
|
||||
get_lxc_ip
|
||||
MAX_ATTEMPTS=3
|
||||
attempt=0
|
||||
while true; do
|
||||
((attempt++))
|
||||
attempt=$((attempt + 1))
|
||||
read -rp "${TAB3}Enter your domain or IP (ex. example.com or 192.168.1.100): " DOMAIN
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
if ((attempt >= MAX_ATTEMPTS)); then
|
||||
@@ -53,6 +52,14 @@ touch /etc/authelia/emails.txt
|
||||
JWT_SECRET=$(openssl rand -hex 64)
|
||||
SESSION_SECRET=$(openssl rand -hex 64)
|
||||
STORAGE_KEY=$(openssl rand -hex 64)
|
||||
|
||||
if [[ "$DOMAIN" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
|
||||
AUTHELIA_URL="https://${DOMAIN}:9091"
|
||||
else
|
||||
AUTHELIA_URL="https://auth.${DOMAIN}"
|
||||
fi
|
||||
echo "$AUTHELIA_URL" > /etc/authelia/.authelia_url
|
||||
|
||||
cat <<EOF >/etc/authelia/users.yml
|
||||
users:
|
||||
authelia:
|
||||
@@ -76,7 +83,7 @@ session:
|
||||
remember_me: '1M'
|
||||
cookies:
|
||||
- domain: "${DOMAIN}"
|
||||
authelia_url: "https://auth.${DOMAIN}"
|
||||
authelia_url: "${AUTHELIA_URL}"
|
||||
storage:
|
||||
encryption_key: "${STORAGE_KEY}"
|
||||
local:
|
||||
|
||||
@@ -21,12 +21,12 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db
|
||||
setup_go
|
||||
|
||||
fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball"
|
||||
RELEASE=$(cat ~/.bitmagnet)
|
||||
|
||||
PG_DB_NAME="bitmagnet" PG_DB_USER="postgres" setup_postgresql_db
|
||||
|
||||
msg_info "Configuring bitmagnet"
|
||||
cd /opt/bitmagnet
|
||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v${RELEASE}"
|
||||
@@ -34,6 +34,20 @@ chmod +x bitmagnet
|
||||
msg_ok "Configured bitmagnet"
|
||||
|
||||
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
|
||||
|
||||
cat <<EOF >/etc/bitmagnet.env
|
||||
POSTGRES_HOST=localhost
|
||||
POSTGRES_USER=${PG_DB_USER}
|
||||
POSTGRES_NAME=${PG_DB_NAME}
|
||||
POSTGRES_PASSWORD=${PG_DB_PASS}
|
||||
EOF
|
||||
|
||||
if [ -z "$tmdbapikey" ]; then
|
||||
echo "TMDB_ENABLED=false" >>/etc/bitmagnet.env
|
||||
else
|
||||
echo "TMDB_API_KEY=$tmdbapikey" >>/etc/bitmagnet.env
|
||||
fi
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/bitmagnet-web.service
|
||||
[Unit]
|
||||
@@ -44,10 +58,8 @@ After=network-online.target
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/bitmagnet
|
||||
EnvironmentFile=/etc/bitmagnet.env
|
||||
ExecStart=/opt/bitmagnet/bitmagnet worker run --all
|
||||
Environment=POSTGRES_HOST=localhost
|
||||
Environment=POSTGRES_PASSWORD=${PG_DB_PASS}
|
||||
Environment=TMDB_API_KEY=$tmdbapikey
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -13,24 +13,14 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (a lot of patience)"
|
||||
$STD apt-get install -y \
|
||||
git \
|
||||
sed \
|
||||
lsb-release \
|
||||
apt-transport-https \
|
||||
coreutils \
|
||||
software-properties-common
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up TemurinJDK"
|
||||
setup_java
|
||||
$STD apt-get install -y temurin-{8,11,17,21}-jre
|
||||
$STD apt install -y temurin-{8,11,17,21}-jre
|
||||
sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java
|
||||
msg_ok "Installed TemurinJDK"
|
||||
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
$STD apt install -y \
|
||||
python3 \
|
||||
python3-dev \
|
||||
python3-pip \
|
||||
@@ -59,8 +49,8 @@ $STD sudo -u crafty bash -c '
|
||||
'
|
||||
msg_ok "Installed Craft-Controller and dependencies"
|
||||
|
||||
msg_info "Setting up Crafty-Controller service"
|
||||
cat >/etc/systemd/system/crafty-controller.service <<'EOF'
|
||||
msg_info "Setting up service"
|
||||
cat <<EOF >/etc/systemd/system/crafty-controller.service
|
||||
[Unit]
|
||||
Description=Crafty 4
|
||||
After=network.target
|
||||
@@ -83,7 +73,7 @@ sleep 10
|
||||
echo "Username: $(grep -oP '(?<="username": ")[^"]*' /opt/crafty-controller/crafty/crafty-4/app/config/default-creds.txt)"
|
||||
echo "Password: $(grep -oP '(?<="password": ")[^"]*' /opt/crafty-controller/crafty/crafty-4/app/config/default-creds.txt)"
|
||||
} >>~/crafty-controller.creds
|
||||
msg_ok "Crafty-Controller service started"
|
||||
msg_ok "Service started"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -38,7 +38,7 @@ After=network-online.target
|
||||
[Service]
|
||||
Type=simple
|
||||
UMask=007
|
||||
ExecStart=/usr/bin/deluged -d
|
||||
ExecStart=/usr/local/bin/deluged -d
|
||||
Restart=on-failure
|
||||
TimeoutStopSec=300
|
||||
|
||||
@@ -56,7 +56,7 @@ Wants=deluged.service
|
||||
[Service]
|
||||
Type=simple
|
||||
UMask=027
|
||||
ExecStart=/usr/bin/deluge-web -d
|
||||
ExecStart=/usr/local/bin/deluge-web -d
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -51,7 +51,7 @@ sed -i '34d' /etc/matrix-synapse/homeserver.yaml
|
||||
systemctl start matrix-synapse
|
||||
msg_ok "Installed Element Synapse"
|
||||
|
||||
fetch_and_deploy_gh_release "etkecc/synapse-admin" "/opt/synapse-admin" "tarball"
|
||||
fetch_and_deploy_gh_release "synapse-admin" "etkecc/synapse-admin" "tarball"
|
||||
|
||||
msg_info "Installing Synapse-Admin"
|
||||
cd /opt/synapse-admin
|
||||
|
||||
@@ -13,25 +13,19 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
|
||||
USE_UVX=YES setup_uv
|
||||
setup_nodejs
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
|
||||
USE_UVX="YES" setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Installing Backend"
|
||||
msg_info "Setting up Flatnotes"
|
||||
cd /opt/flatnotes
|
||||
$STD /usr/local/bin/uvx migrate-to-uv
|
||||
$STD /usr/local/bin/uv sync
|
||||
mkdir /opt/flatnotes/data
|
||||
msg_ok "Installed Backend"
|
||||
|
||||
msg_info "Installing Frontend"
|
||||
mkdir -p /opt/flatnotes/data
|
||||
cd /opt/flatnotes/client
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Installed Frontend"
|
||||
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/opt/flatnotes/.env
|
||||
FLATNOTES_AUTH_TYPE='none'
|
||||
FLATNOTES_PATH='/opt/flatnotes/data/'
|
||||
@@ -39,6 +33,9 @@ FLATNOTES_PATH='/opt/flatnotes/data/'
|
||||
#FLATNOTES_PASSWORD='password'
|
||||
#FLATNOTES_SECRET_KEY='secret-key'
|
||||
EOF
|
||||
msg_ok "Setup Flatnotes"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/flatnotes.service
|
||||
[Unit]
|
||||
Description=Flatnotes
|
||||
|
||||
@@ -17,7 +17,8 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
nginx \
|
||||
ca-certificates \
|
||||
libjemalloc2
|
||||
libjemalloc2 \
|
||||
git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_mariadb
|
||||
|
||||
@@ -14,33 +14,16 @@ network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jotty"
|
||||
|
||||
msg_info "Installing ${APPLICATION}"
|
||||
cd /opt/jotty
|
||||
unset NODE_OPTIONS
|
||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||
$STD yarn --frozen-lockfile
|
||||
$STD yarn next telemetry disable
|
||||
$STD yarn build
|
||||
|
||||
[ -d "public" ] && cp -r public .next/standalone/
|
||||
[ -d "howto" ] && cp -r howto .next/standalone/
|
||||
mkdir -p .next/standalone/.next
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
|
||||
mv .next/standalone /tmp/jotty_standalone
|
||||
rm -rf ./* .next .git .gitignore .yarn
|
||||
mv /tmp/jotty_standalone/* .
|
||||
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
|
||||
rm -rf /tmp/jotty_standalone
|
||||
fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz"
|
||||
|
||||
msg_info "Setup jotty"
|
||||
mkdir -p data/{users,checklists,notes}
|
||||
|
||||
cat <<EOF >/opt/jotty/.env
|
||||
NODE_ENV=production
|
||||
|
||||
# --- Uncomment to enable
|
||||
# APP_URL=https://your-jotty-domain.com
|
||||
# INTERNAL_API_URL=http://localhost:3000
|
||||
# HTTPS=true
|
||||
# SERVE_PUBLIC_IMAGES=yes
|
||||
# SERVE_PUBLIC_FILES=yes
|
||||
@@ -53,12 +36,11 @@ NODE_ENV=production
|
||||
# SSO_MODE=oidc
|
||||
# OIDC_ISSUER=<your-oidc-issuer-url>
|
||||
# OIDC_CLIENT_ID=<oidc-client-id>
|
||||
# APP_URL=<https://app.domain.tld>
|
||||
# SSO_FALLBACK_LOCAL=yes
|
||||
# OIDC_CLIENT_SECRET=your_client_secret
|
||||
# OIDC_ADMIN_GROUPS=admins
|
||||
EOF
|
||||
msg_ok "Installed ${APPLICATION}"
|
||||
msg_ok "Setup jotty"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/jotty.service
|
||||
|
||||
@@ -19,7 +19,8 @@ $STD apt install -y \
|
||||
ca-certificates \
|
||||
chromium \
|
||||
graphicsmagick \
|
||||
ghostscript
|
||||
ghostscript \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "monolith" "Y2Z/monolith" "singlefile" "latest" "/usr/bin" "monolith-gnu-linux-x86_64"
|
||||
|
||||
139
install/manyfold-install.sh
Normal file
139
install/manyfold-install.sh
Normal file
@@ -0,0 +1,139 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: bvdberg01 | Co-Author: SunFlowerOwl
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/manyfold3d/manyfold
|
||||
|
||||
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 \
|
||||
libarchive-dev \
|
||||
git \
|
||||
libmariadb-dev \
|
||||
redis-server \
|
||||
nginx \
|
||||
libassimp-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_imagemagick
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="manyfold" PG_DB_USER="manyfold" setup_postgresql_db
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
|
||||
|
||||
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
|
||||
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
|
||||
|
||||
msg_info "Configuring Manyfold"
|
||||
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
||||
RELEASE=$(get_latest_github_release "manyfold3d/manyfold")
|
||||
useradd -m -s /usr/bin/bash manyfold
|
||||
cat <<EOF >/opt/manyfold/.env
|
||||
export APP_VERSION=${RELEASE}
|
||||
export GUID=1002
|
||||
export PUID=1001
|
||||
export PUBLIC_PORT=5000
|
||||
export REDIS_URL=redis://127.0.0.1:6379/1
|
||||
export DATABASE_ADAPTER=postgresql
|
||||
export DATABASE_HOST=127.0.0.1
|
||||
export DATABASE_USER=${PG_DB_USER}
|
||||
export DATABASE_PASSWORD=${PG_DB_PASS}
|
||||
export DATABASE_NAME=${PG_DB_NAME}
|
||||
export DATABASE_CONNECTION_POOL=16
|
||||
export MULTIUSER=enabled
|
||||
export HTTPS_ONLY=false
|
||||
export RAILS_ENV=production
|
||||
EOF
|
||||
cat <<EOF >/opt/manyfold/user_setup.sh
|
||||
#!/bin/bash
|
||||
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/bin:\$PATH"
|
||||
eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)"
|
||||
cd /opt/manyfold/app
|
||||
rbenv global $RUBY_INSTALL_VERSION
|
||||
gem install bundler
|
||||
bundle install
|
||||
gem install sidekiq
|
||||
gem install foreman
|
||||
corepack enable yarn
|
||||
rm -f /opt/manyfold/app/config/credentials.yml.enc
|
||||
corepack prepare $YARN_VERSION --activate
|
||||
corepack use $YARN_VERSION
|
||||
export VISUAL="code --wait"
|
||||
bin/rails credentials:edit
|
||||
bin/rails db:migrate
|
||||
bin/rails assets:precompile
|
||||
EOF
|
||||
$STD mkdir -p /opt/manyfold_data
|
||||
msg_ok "Configured Manyfold"
|
||||
|
||||
msg_info "Installing Manyfold"
|
||||
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
|
||||
chmod +x /opt/manyfold/user_setup.sh
|
||||
$STD npm install --global corepack
|
||||
$STD sudo -u manyfold bash /opt/manyfold/user_setup.sh
|
||||
rm -f /opt/manyfold/user_setup.sh
|
||||
msg_ok "Installed Manyfold"
|
||||
|
||||
msg_info "Creating Services"
|
||||
source /opt/manyfold/.env
|
||||
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"
|
||||
$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile
|
||||
for f in /etc/systemd/system/manyfold-*.service; do
|
||||
sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f"
|
||||
done
|
||||
systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1
|
||||
cat <<EOF >/etc/nginx/sites-available/manyfold.conf
|
||||
server {
|
||||
listen 80;
|
||||
server_name manyfold;
|
||||
root /opt/manyfold/app/public;
|
||||
|
||||
location /cable {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_set_header Host \$host;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files \$uri/index.html \$uri @rails;
|
||||
}
|
||||
|
||||
location @rails {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
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;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
ln -s /etc/nginx/sites-available/manyfold.conf /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -27,6 +27,7 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="netbox" PG_DB_USER="netbox" setup_postgresql_db
|
||||
|
||||
msg_info "Installing Python"
|
||||
$STD apt install -y \
|
||||
@@ -36,42 +37,24 @@ $STD apt install -y \
|
||||
python3-dev
|
||||
msg_ok "Installed Python"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=netbox
|
||||
DB_USER=netbox
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
{
|
||||
echo "Netbox-Credentials"
|
||||
echo -e "Netbox Database User: \e[32m$DB_USER\e[0m"
|
||||
echo -e "Netbox Database Password: \e[32m$DB_PASS\e[0m"
|
||||
echo -e "Netbox Database Name: \e[32m$DB_NAME\e[0m"
|
||||
} >>~/netbox.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
fetch_and_deploy_gh_release "netbox" "netbox-community/netbox" "tarball"
|
||||
|
||||
msg_info "Installing NetBox (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
||||
$STD unzip "v${RELEASE}.zip"
|
||||
mv /opt/netbox-"${RELEASE}"/ /opt/netbox
|
||||
msg_info "Configuring NetBox (Patience)"
|
||||
cd /opt/netbox
|
||||
mkdir -p /opt/netbox/netbox/media
|
||||
|
||||
$STD adduser --system --group netbox
|
||||
chown --recursive netbox /opt/netbox/netbox/media/
|
||||
chown --recursive netbox /opt/netbox/netbox/reports/
|
||||
chown --recursive netbox /opt/netbox/netbox/scripts/
|
||||
chown -R netbox /opt/netbox/netbox
|
||||
|
||||
mv /opt/netbox/netbox/netbox/configuration_example.py /opt/netbox/netbox/netbox/configuration.py
|
||||
|
||||
SECRET_KEY=$(python3 /opt/netbox/netbox/generate_secret_key.py)
|
||||
ESCAPED_SECRET_KEY=$(printf '%s\n' "$SECRET_KEY" | sed 's/[&/\]/\\&/g')
|
||||
|
||||
sed -i 's/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = ["*"]/' /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "s|SECRET_KEY = ''|SECRET_KEY = '${ESCAPED_SECRET_KEY}'|" /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "/DATABASES = {/,/}/s/'USER': '[^']*'/'USER': '$DB_USER'/" /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "/DATABASES = {/,/}/s/'PASSWORD': '[^']*'/'PASSWORD': '$DB_PASS'/" /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i -e 's/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = ["*"]/' \
|
||||
-e "s|SECRET_KEY = ''|SECRET_KEY = '${ESCAPED_SECRET_KEY}'|" \
|
||||
-e "/DATABASES = {/,/}/s/'USER': '[^']*'/'USER': '$PG_DB_USER'/" \
|
||||
-e "/DATABASES = {/,/}/s/'PASSWORD': '[^']*'/'PASSWORD': '$PG_DB_PASS'/" /opt/netbox/netbox/netbox/configuration.py
|
||||
|
||||
$STD /opt/netbox/upgrade.sh
|
||||
ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
|
||||
@@ -86,10 +69,8 @@ mv /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
|
||||
mv /opt/netbox/contrib/*.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now netbox netbox-rq
|
||||
rm "/opt/v${RELEASE}.zip"
|
||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
||||
echo -e "Netbox Secret: \e[32m$SECRET_KEY\e[0m" >>~/netbox.creds
|
||||
msg_ok "Installed NetBox"
|
||||
msg_ok "Configured NetBox"
|
||||
|
||||
msg_info "Setting up Django Admin"
|
||||
DJANGO_USER=Admin
|
||||
|
||||
@@ -47,6 +47,8 @@ cd /opt/pangolin
|
||||
EOF
|
||||
chmod +x /usr/local/bin/pangctl ./dist/cli.mjs
|
||||
cp server/db/names.json ./dist/names.json
|
||||
cp server/db/ios_models.json ./dist/ios_models.json
|
||||
cp server/db/mac_models.json ./dist/mac_models.json
|
||||
mkdir -p /var/config
|
||||
|
||||
cat <<EOF >/opt/pangolin/config/config.yml
|
||||
|
||||
@@ -17,27 +17,22 @@ update_os
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
libpq-dev
|
||||
libpq-dev \
|
||||
libffi-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Python3"
|
||||
$STD apt install -y \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
python3-pip
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
msg_info "Setting up Spoolman"
|
||||
cd /opt/spoolman
|
||||
$STD pip3 install --upgrade --ignore-installed -r requirements.txt
|
||||
$STD uv sync --locked --no-install-project
|
||||
$STD uv sync --locked
|
||||
cp .env.example .env
|
||||
msg_ok "Setup Spoolman"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<'EOF' >/etc/systemd/system/spoolman.service
|
||||
cat <<EOF >/etc/systemd/system/spoolman.service
|
||||
[Unit]
|
||||
Description=Spoolman
|
||||
After=network.target
|
||||
@@ -46,7 +41,7 @@ After=network.target
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/spoolman
|
||||
EnvironmentFile=/opt/spoolman/.env
|
||||
ExecStart=uvicorn spoolman.main:app --host "${SPOOLMAN_HOST}" --port "${SPOOLMAN_PORT}"
|
||||
ExecStart=/usr/bin/bash /opt/spoolman/scripts/start.sh
|
||||
Restart=always
|
||||
User=root
|
||||
|
||||
|
||||
@@ -25,9 +25,10 @@ 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
|
||||
$STD uv venv
|
||||
$STD source /opt/Tautulli/.venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD uv pip install pyopenssl
|
||||
msg_ok "Installed Tautulli"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -71,18 +71,31 @@ events {
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
access_log /opt/termix/nginx/logs/access.log;
|
||||
|
||||
client_body_temp_path /opt/termix/nginx/client_body;
|
||||
proxy_temp_path /opt/termix/nginx/proxy_temp;
|
||||
fastcgi_temp_path /opt/termix/nginx/fastcgi_temp;
|
||||
uwsgi_temp_path /opt/termix/nginx/uwsgi_temp;
|
||||
scgi_temp_path /opt/termix/nginx/scgi_temp;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
client_header_timeout 300s;
|
||||
|
||||
set_real_ip_from 127.0.0.1;
|
||||
real_ip_header X-Forwarded-For;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 10m;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
server_name localhost;
|
||||
|
||||
add_header X-Content-Type-Options nosniff always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
@@ -96,10 +109,25 @@ http {
|
||||
|
||||
location / {
|
||||
root /opt/termix/html;
|
||||
index index.html;
|
||||
index index.html index.htm;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~* \.map$ {
|
||||
return 404;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
location ~ ^/users/sessions(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/users(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
@@ -109,7 +137,7 @@ http {
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ {
|
||||
location ~ ^/version(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
@@ -118,39 +146,153 @@ http {
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(database|db)(/.*)?$ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
location ~ ^/releases(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/alerts(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/rbac(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/credentials(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
|
||||
location ~ ^/snippets(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/terminal(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/database(/.*)?$ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/db(/.*)?$ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/encryption(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/quick-connect {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/websocket/ {
|
||||
proxy_pass http://127.0.0.1:30002/;
|
||||
proxy_http_version 1.1;
|
||||
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
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_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_connect_timeout 10s;
|
||||
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
|
||||
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
|
||||
}
|
||||
|
||||
location /ssh/tunnel/ {
|
||||
@@ -158,59 +300,153 @@ http {
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/recent {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/pinned {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/shortcuts {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/sudo-password {
|
||||
proxy_pass http://127.0.0.1:30004;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /ssh/file_manager/ssh/ {
|
||||
client_max_body_size 5G;
|
||||
client_body_timeout 300s;
|
||||
|
||||
proxy_pass http://127.0.0.1:30004;
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
|
||||
location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ {
|
||||
location ~ ^/network-topology(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location /health {
|
||||
proxy_pass http://127.0.0.1:30001;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/(status|metrics)(/.*)?$ {
|
||||
location ~ ^/status(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30005;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/(uptime|activity)(/.*)?$ {
|
||||
location ~ ^/metrics(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30005;
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
location ~ ^/uptime(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30006;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/activity(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30006;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ~ ^/dashboard/preferences(/.*)?$ {
|
||||
proxy_pass http://127.0.0.1:30006;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
location ^~ /docker/console/ {
|
||||
proxy_pass http://127.0.0.1:30008/;
|
||||
proxy_http_version 1.1;
|
||||
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
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_read_timeout 86400s;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_connect_timeout 10s;
|
||||
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
|
||||
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
|
||||
}
|
||||
|
||||
location ~ ^/docker(/.*)?$ {
|
||||
@@ -218,10 +454,18 @@ http {
|
||||
proxy_http_version 1.1;
|
||||
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_connect_timeout 60s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root /opt/termix/html;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y redis-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="18" setup_postgresql
|
||||
|
||||
msg_info "Installing pnpm"
|
||||
|
||||
@@ -1134,6 +1134,10 @@ load_vars_file() {
|
||||
msg_warn "Invalid nesting value '$var_val' in $file (must be 0 or 1), ignoring"
|
||||
continue
|
||||
fi
|
||||
# Warn about potential issues with systemd-based OS when nesting is disabled via vars file
|
||||
if [[ "$var_val" == "0" && "${var_os:-debian}" != "alpine" ]]; then
|
||||
msg_warn "Nesting disabled in $file - modern systemd-based distributions may require nesting for proper operation"
|
||||
fi
|
||||
;;
|
||||
var_keyctl)
|
||||
if [[ "$var_val" != "0" && "$var_val" != "1" ]]; then
|
||||
@@ -2394,6 +2398,12 @@ advanced_settings() {
|
||||
else
|
||||
if [ $? -eq 1 ]; then
|
||||
_enable_nesting="0"
|
||||
# Warn about potential issues with systemd-based OS when nesting is disabled
|
||||
if [[ "$var_os" != "alpine" ]]; then
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||
--title "⚠️ NESTING WARNING" \
|
||||
--msgbox "Modern systemd-based distributions (Debian 13+, Ubuntu 24.04+, etc.) may require nesting to be enabled for proper operation.\n\nWithout nesting, the container may start in a degraded state with failing services (error 243/CREDENTIALS).\n\nIf you experience issues, enable nesting in the container options." 14 68
|
||||
fi
|
||||
else
|
||||
((STEP--))
|
||||
continue
|
||||
|
||||
@@ -815,11 +815,9 @@ is_verbose_mode() {
|
||||
# ------------------------------------------------------------------------------
|
||||
# cleanup_lxc()
|
||||
#
|
||||
# - Comprehensive cleanup of package managers, caches, and logs
|
||||
# - Supports Alpine (apk), Debian/Ubuntu (apt), and language package managers
|
||||
# - Cleans: Python (pip/uv), Node.js (npm/yarn/pnpm), Go, Rust, Ruby, PHP
|
||||
# - Truncates log files and vacuums systemd journal
|
||||
# - Run at end of container creation to minimize disk usage
|
||||
# - Cleans package manager and language caches (safe for installs AND updates)
|
||||
# - Supports Alpine (apk), Debian/Ubuntu (apt), Python, Node.js, Go, Rust, Ruby, PHP
|
||||
# - Uses fallback error handling to prevent cleanup failures from breaking installs
|
||||
# ------------------------------------------------------------------------------
|
||||
cleanup_lxc() {
|
||||
msg_info "Cleaning up"
|
||||
@@ -828,32 +826,52 @@ cleanup_lxc() {
|
||||
$STD apk cache clean || true
|
||||
rm -rf /var/cache/apk/*
|
||||
else
|
||||
$STD apt -y autoremove || true
|
||||
$STD apt -y autoclean || true
|
||||
$STD apt -y clean || true
|
||||
$STD apt -y autoremove 2>/dev/null || msg_warn "apt autoremove failed (non-critical)"
|
||||
$STD apt -y autoclean 2>/dev/null || msg_warn "apt autoclean failed (non-critical)"
|
||||
$STD apt -y clean 2>/dev/null || msg_warn "apt clean failed (non-critical)"
|
||||
fi
|
||||
|
||||
# Clear temp artifacts (keep sockets/FIFOs; ignore errors)
|
||||
find /tmp /var/tmp -type f -name 'tmp*' -delete 2>/dev/null || true
|
||||
find /tmp /var/tmp -type f -name 'tempfile*' -delete 2>/dev/null || true
|
||||
|
||||
# Node.js npm - directly remove cache directory
|
||||
# npm cache clean/verify can fail with ENOTEMPTY errors, so we skip them
|
||||
# Python
|
||||
if command -v pip &>/dev/null; then
|
||||
rm -rf /root/.cache/pip 2>/dev/null || true
|
||||
fi
|
||||
if command -v uv &>/dev/null; then
|
||||
rm -rf /root/.cache/uv 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Node.js
|
||||
if command -v npm &>/dev/null; then
|
||||
rm -rf /root/.npm/_cacache /root/.npm/_logs 2>/dev/null || true
|
||||
fi
|
||||
# Node.js yarn
|
||||
if command -v yarn &>/dev/null; then yarn cache clean &>/dev/null || true; fi
|
||||
# Node.js pnpm
|
||||
if command -v pnpm &>/dev/null; then pnpm store prune &>/dev/null || true; fi
|
||||
# Go
|
||||
if command -v go &>/dev/null; then $STD go clean -cache -modcache || true; fi
|
||||
# Rust cargo
|
||||
if command -v cargo &>/dev/null; then $STD cargo clean || true; fi
|
||||
# Ruby gem
|
||||
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
|
||||
# Composer (PHP)
|
||||
if command -v composer &>/dev/null; then COMPOSER_ALLOW_SUPERUSER=1 $STD composer clear-cache || true; fi
|
||||
if command -v yarn &>/dev/null; then
|
||||
rm -rf /root/.cache/yarn /root/.yarn/cache 2>/dev/null || true
|
||||
fi
|
||||
if command -v pnpm &>/dev/null; then
|
||||
pnpm store prune &>/dev/null || true
|
||||
fi
|
||||
|
||||
# Go (only build cache, not modules)
|
||||
if command -v go &>/dev/null; then
|
||||
$STD go clean -cache 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Rust (only registry cache, not build artifacts)
|
||||
if command -v cargo &>/dev/null; then
|
||||
rm -rf /root/.cargo/registry/cache /root/.cargo/.package-cache 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Ruby
|
||||
if command -v gem &>/dev/null; then
|
||||
rm -rf /root/.gem/cache 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# PHP
|
||||
if command -v composer &>/dev/null; then
|
||||
rm -rf /root/.composer/cache 2>/dev/null || true
|
||||
fi
|
||||
|
||||
msg_ok "Cleaned"
|
||||
}
|
||||
|
||||
@@ -3135,13 +3135,25 @@ NVIDIA_PIN
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
|
||||
msg_ok "Installed version-matched NVIDIA libraries"
|
||||
else
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
# Fallback to Ubuntu repo packages with versioned nvidia-utils
|
||||
msg_warn "CUDA repo install failed - trying Ubuntu native packages (nvidia-utils-${nvidia_major_version})"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libnvidia-decode-${nvidia_major_version} libnvidia-encode-${nvidia_major_version} nvidia-utils-${nvidia_major_version} 2>/dev/null; then
|
||||
msg_ok "Installed Ubuntu NVIDIA packages (${nvidia_major_version})"
|
||||
else
|
||||
msg_warn "NVIDIA driver installation failed - please install manually: apt install nvidia-utils-${nvidia_major_version}"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo"
|
||||
# Fallback to Ubuntu repo packages
|
||||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
|
||||
# Fallback to Ubuntu repo packages with versioned nvidia-utils
|
||||
msg_info "Trying Ubuntu native packages (nvidia-utils-${nvidia_major_version})"
|
||||
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
|
||||
libnvidia-decode-${nvidia_major_version} libnvidia-encode-${nvidia_major_version} nvidia-utils-${nvidia_major_version} 2>/dev/null; then
|
||||
msg_ok "Installed Ubuntu NVIDIA packages (${nvidia_major_version})"
|
||||
else
|
||||
msg_warn "NVIDIA driver installation failed - please install manually: apt install nvidia-utils-${nvidia_major_version}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ After=network.target postgresql.service
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=${INSTALL_PATH}
|
||||
WorkingDirectory=${INSTALL_PATH}/backend
|
||||
EnvironmentFile=${CONFIG_PATH}
|
||||
ExecStart=/usr/bin/node ${INSTALL_PATH}/backend/server.js
|
||||
Restart=always
|
||||
|
||||
Reference in New Issue
Block a user