diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1425c8037..f6356f517 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,4 @@ -## **Scripts wich are clearly AI generated and not further revied by the Author of this PR (in terms of Coding Standards and Script Layout) may be closed without review.** +## **Scripts which are clearly AI generated and not further revised by the Author of this PR (in terms of Coding Standards and Script Layout) may be closed without review.** ## ✍️ Description @@ -43,7 +43,7 @@ Link: # ## 📦 Application Requirements (for new scripts) > Required for **🆕 New script** submissions. -> PRs that do not meet these requirements may be closed without review. +> Pull requests that do not meet these requirements may be closed without review. - [ ] The application is **at least 6 months old** - [ ] The application is **actively maintained** - [ ] The application has **600+ GitHub stars** diff --git a/ct/jellyseerr.sh b/ct/jellyseerr.sh new file mode 100644 index 000000000..2a79b86b7 --- /dev/null +++ b/ct/jellyseerr.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://docs.jellyseerr.dev/ + +APP="Jellyseerr" +var_tags="${var_tags:-media}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/jellyseerr ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if [ "$(node -v | cut -c2-3)" -ne 22 ]; then + msg_info "Updating Node.js Repository" + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + msg_ok "Updating Node.js Repository" + + msg_info "Updating Packages" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updating Packages" + fi + + cd /opt/jellyseerr + output=$(git pull --no-rebase) + + pnpm_current=$(pnpm --version 2>/dev/null) + pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json) + + if [ -z "$pnpm_current" ]; then + msg_error "pnpm not found. Installing version $pnpm_desired..." + NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs + elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then + msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..." + NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs + else + msg_ok "pnpm is already installed and satisfies version $pnpm_desired." + fi + + msg_info "Updating Jellyseerr" + if echo "$output" | grep -q "Already up to date."; then + msg_ok "$APP is already up to date." + exit + fi + + systemctl stop jellyseerr + rm -rf dist .next node_modules + export CYPRESS_INSTALL_BINARY=0 + cd /opt/jellyseerr + $STD pnpm install --frozen-lockfile + export NODE_OPTIONS="--max-old-space-size=3072" + $STD pnpm build + + cat </etc/systemd/system/jellyseerr.service +[Unit] +Description=jellyseerr Service +After=network.target + +[Service] +EnvironmentFile=/etc/jellyseerr/jellyseerr.conf +Environment=NODE_ENV=production +Type=exec +WorkingDirectory=/opt/jellyseerr +ExecStart=/usr/bin/node dist/index.js + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reload + systemctl start jellyseerr + msg_ok "Updated Jellyseerr" + msg_ok "Updated successfully!" + exit +} + +start +build_container +description + +msg_ok "Completed successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}" diff --git a/ct/seer.sh b/ct/seer.sh new file mode 100644 index 000000000..7aba57e52 --- /dev/null +++ b/ct/seer.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: CrazyWolf13 +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://docs.seerr.dev/ + +APP="Seer" +var_tags="${var_tags:-media}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/seer ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "seer" "seerr-team/seerr"; then + msg_info "Stopping Service" + systemctl stop seer + msg_ok "Stopped Service" + + pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/seer/package.json) + NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "seer" "seerr-team/seerr" "tarball" "latest" + + cd /opt/seer + export CYPRESS_INSTALL_BINARY=0 + $STD pnpm install --frozen-lockfile + export NODE_OPTIONS="--max-old-space-size=3072" + $STD pnpm build + + cat </etc/systemd/system/seer.service +[Unit] +Description=Seer Service +After=network.target + +[Service] +EnvironmentFile=/etc/seer/seer.conf +Environment=NODE_ENV=production +Type=exec +WorkingDirectory=/opt/seer +ExecStart=/usr/bin/node dist/index.js + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reload + systemctl start seer + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}" diff --git a/ct/termix.sh b/ct/termix.sh deleted file mode 100644 index c169058be..000000000 --- a/ct/termix.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://github.com/Termix-SSH/Termix - -APP="Termix" -var_tags="${var_tags:-ssh;terminal;management}" -var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-10}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /opt/termix ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "termix" "Termix-SSH/Termix"; then - msg_info "Stopping Service" - systemctl stop termix - msg_ok "Stopped Service" - - msg_info "Backing up Data" - cp -r /opt/termix/data /opt/termix_data_backup - msg_ok "Backed up Data" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" - - msg_info "Building Frontend" - cd /opt/termix - export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true - $STD npm install --ignore-scripts --force - $STD npm run build - msg_ok "Built Frontend" - - msg_info "Building Backend" - $STD npm rebuild better-sqlite3 --force - $STD npm run build:backend - msg_ok "Built Backend" - - msg_info "Setting up Production Dependencies" - $STD npm ci --only=production --ignore-scripts --force - $STD npm rebuild better-sqlite3 bcryptjs --force - $STD npm cache clean --force - msg_ok "Set up Production Dependencies" - - msg_info "Restoring Data" - mkdir -p /opt/termix/data - cp -r /opt/termix_data_backup/. /opt/termix/data - rm -rf /opt/termix_data_backup - msg_ok "Restored Data" - - msg_info "Updating Frontend Files" - rm -rf /opt/termix/html/* - cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true - cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true - cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true - msg_ok "Updated Frontend Files" - - msg_info "Starting Service" - systemctl start termix - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/frontend/public/json/seer.json b/frontend/public/json/seer.json new file mode 100644 index 000000000..21966d0ba --- /dev/null +++ b/frontend/public/json/seer.json @@ -0,0 +1,44 @@ +{ + "name": "Seer", + "slug": "seer", + "categories": [ + 13 + ], + "date_created": "2026-01-19", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 5055, + "documentation": "https://docs.seerr.dev/", + "website": "https://seerr.dev/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/seerr.webp", + "config_path": "/etc/seer/seer.conf", + "description": "Open-source media request and discovery manager for Jellyfin, Plex, and Emby. Unified version of Overseerr and Jellyseerr.", + "install_methods": [ + { + "type": "default", + "script": "ct/seer.sh", + "resources": { + "cpu": 4, + "ram": 4096, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Seer migration is currently in beta.", + "type": "warning" + }, + { + "text": "First release is essentially Jellyseerr rebranded with Overseerr migration support.", + "type": "info" + } + ] +} diff --git a/frontend/public/json/termix.json b/frontend/public/json/termix.json deleted file mode 100644 index 21e590170..000000000 --- a/frontend/public/json/termix.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Termix", - "slug": "termix", - "categories": [ - 6 - ], - "date_created": "2026-01-16", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://docs.termix.site/", - "website": "https://termix.site/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/termix.webp", - "config_path": "", - "description": "Termix is an open-source, self-hosted server management platform with SSH terminal access, SSH tunneling, remote file management, Docker management, and multi-platform support.", - "install_methods": [ - { - "type": "default", - "script": "ct/termix.sh", - "resources": { - "cpu": 4, - "ram": 4096, - "hdd": 10, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} diff --git a/install/jellyseerr-install.sh b/install/jellyseerr-install.sh new file mode 100644 index 000000000..d865698f7 --- /dev/null +++ b/install/jellyseerr-install.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 tteck +# Author: tteck (tteckster) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://docs.jellyseerr.dev/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y build-essential +msg_ok "Installed Dependencies" + +git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr +cd /opt/jellyseerr +$STD git checkout main + +pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json) +NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs + +msg_info "Installing Jellyseerr (Patience)" +export CYPRESS_INSTALL_BINARY=0 +cd /opt/jellyseerr +$STD pnpm install --frozen-lockfile +export NODE_OPTIONS="--max-old-space-size=3072" +$STD pnpm build +mkdir -p /etc/jellyseerr/ +cat </etc/jellyseerr/jellyseerr.conf +PORT=5055 +# HOST=0.0.0.0 +# JELLYFIN_TYPE=emby +EOF +msg_ok "Installed Jellyseerr" + +msg_info "Creating Service" +cat </etc/systemd/system/jellyseerr.service +[Unit] +Description=jellyseerr Service +After=network.target + +[Service] +EnvironmentFile=/etc/jellyseerr/jellyseerr.conf +Environment=NODE_ENV=production +Type=exec +WorkingDirectory=/opt/jellyseerr +ExecStart=/usr/bin/node dist/index.js + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now jellyseerr +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/seer-install.sh b/install/seer-install.sh new file mode 100644 index 000000000..bda0ca80c --- /dev/null +++ b/install/seer-install.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: CrazyWolf13 +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://docs.seerr.dev/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y build-essential +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "seer" "seerr-team/seerr" "tarball" "latest" + +pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/seer/package.json) +NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs + +msg_info "Installing Seer (Patience)" +export CYPRESS_INSTALL_BINARY=0 +cd /opt/seer +$STD pnpm install --frozen-lockfile +export NODE_OPTIONS="--max-old-space-size=3072" +$STD pnpm build +mkdir -p /etc/seer/ +cat </etc/seer/seer.conf +## Seer's default port is 5055, if you want to use both, change this. +## specify on which port to listen +PORT=5055 + +## specify on which interface to listen, by default seer listens on all interfaces +HOST=0.0.0.0 + +## Uncomment if you want to force Node.js to resolve IPv4 before IPv6 (advanced users only) +# FORCE_IPV4_FIRST=true +EOF +msg_ok "Installed Seer" + +msg_info "Creating Service" +cat </etc/systemd/system/seer.service +[Unit] +Description=Seer Service +After=network.target + +[Service] +EnvironmentFile=/etc/seer/seer.conf +Environment=NODE_ENV=production +Type=exec +WorkingDirectory=/opt/seer +ExecStart=/usr/bin/node dist/index.js + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now seer +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/termix-install.sh b/install/termix-install.sh deleted file mode 100644 index ea879b997..000000000 --- a/install/termix-install.sh +++ /dev/null @@ -1,260 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://github.com/Termix-SSH/Termix - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt-get install -y \ - build-essential \ - python3 \ - make \ - g++ \ - nginx \ - openssl \ - gettext-base -msg_ok "Installed Dependencies" - -NODE_VERSION="22" setup_nodejs -fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" - -msg_info "Building Frontend" -cd /opt/termix -export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true -$STD npm install --ignore-scripts --force -$STD npm cache clean --force -$STD npm run build -msg_ok "Built Frontend" - -msg_info "Building Backend" -$STD npm rebuild better-sqlite3 --force -$STD npm run build:backend -msg_ok "Built Backend" - -msg_info "Setting up Node Dependencies" -cd /opt/termix -$STD npm ci --only=production --ignore-scripts --force -$STD npm rebuild better-sqlite3 bcryptjs --force -$STD npm cache clean --force -msg_ok "Set up Node Dependencies" - -msg_info "Setting up Directories" -mkdir -p /opt/termix/data \ - /opt/termix/uploads \ - /opt/termix/html \ - /opt/termix/nginx \ - /opt/termix/nginx/logs \ - /opt/termix/nginx/cache \ - /opt/termix/nginx/client_body - -cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true -cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true -cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true -msg_ok "Set up Directories" - -msg_info "Configuring Nginx" -cat <<'EOF' >/etc/nginx/sites-available/termix.conf -error_log /opt/termix/nginx/logs/error.log warn; - -events { - worker_connections 1024; -} - -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; - - sendfile on; - keepalive_timeout 65; - client_header_timeout 300s; - - server { - listen 80; - server_name _; - - add_header X-Content-Type-Options nosniff always; - add_header X-XSS-Protection "1; mode=block" always; - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { - root /opt/termix/html; - expires 1y; - add_header Cache-Control "public, immutable"; - try_files $uri =404; - } - - location / { - root /opt/termix/html; - index index.html; - try_files $uri $uri/ /index.html; - } - - location ~ ^/users(/.*)?$ { - 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 ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|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 ~ ^/(database|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_connect_timeout 60s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; - proxy_request_buffering off; - proxy_buffering off; - } - - 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; - } - - 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_read_timeout 86400s; - proxy_send_timeout 86400s; - proxy_buffering off; - proxy_request_buffering off; - } - - location /ssh/tunnel/ { - proxy_pass http://127.0.0.1:30003; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - } - - 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_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)$ { - 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; - } - - location /health { - proxy_pass http://127.0.0.1:30001; - proxy_http_version 1.1; - proxy_set_header Host $host; - } - - location ~ ^/(status|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; - } - - location ~ ^/(uptime|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; - } - - 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_read_timeout 86400s; - proxy_send_timeout 86400s; - proxy_buffering off; - proxy_request_buffering off; - } - - location ~ ^/docker(/.*)?$ { - proxy_pass http://127.0.0.1:30007; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_connect_timeout 60s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; - } - } -} -EOF -rm -f /etc/nginx/sites-enabled/default -rm -f /etc/nginx/nginx.conf -ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/nginx.conf -systemctl reload nginx -msg_ok "Configured Nginx" - -msg_info "Creating Service" -cat </etc/systemd/system/termix.service -[Unit] -Description=Termix Backend -After=network.target - -[Service] -Type=simple -User=root -WorkingDirectory=/opt/termix -Environment=NODE_ENV=production -Environment=DATA_DIR=/opt/termix/data -ExecStart=/usr/bin/node /opt/termix/dist/backend/backend/starter.js -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now termix -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/yubal-install.sh b/install/yubal-install.sh index c007e0317..942789e85 100644 --- a/install/yubal-install.sh +++ b/install/yubal-install.sh @@ -38,7 +38,7 @@ msg_ok "Installed Deno" msg_info "Creating directories" mkdir -p /opt/yubal \ /opt/yubal_data \ - /opt/yubal/ytdlp + /opt/yubal_config msg_ok "Created directories" fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal" @@ -53,16 +53,16 @@ msg_ok "Built Frontend" msg_info "Installing Python Dependencies" cd /opt/yubal export UV_CONCURRENT_DOWNLOADS=1 -$STD uv sync --no-dev --frozen +$STD uv sync --package yubal-api --no-dev --frozen msg_ok "Installed Python Dependencies" msg_info "Creating Service" cat </opt/yubal.env YUBAL_HOST=0.0.0.0 YUBAL_PORT=8001 -YUBAL_DATA_DIR=/opt/yubal_data -YUBAL_BEETS_DIR=/opt/yubal/beets -YUBAL_YTDLP_DIR=/opt/yubal/ytdlp +YUBAL_DATA=/opt/yubal_data +YUBAL_CONFIG=/opt/yubal_config +YUBAL_ROOT=/opt/yubal PYTHONUNBUFFERED=1 EOF cat </etc/systemd/system/yubal.service diff --git a/misc/build.func b/misc/build.func index 06923e925..300bd6227 100644 --- a/misc/build.func +++ b/misc/build.func @@ -3286,7 +3286,7 @@ EOF' fi # Build package list - EL10+ may not have glibc-langpack-en in same form - local rhel_packages="curl sudo mc jq procps-ng ncurses" + local rhel_packages="curl sudo mc jq which tar procps-ng ncurses" if [[ "$rhel_version" -lt 10 ]]; then rhel_packages="$rhel_packages glibc-langpack-en" else @@ -3298,12 +3298,12 @@ EOF' local install_log="/tmp/dnf_install_${CTID}.log" if ! pct exec "$CTID" -- bash -c "dnf install -y $rhel_packages 2>&1 | tee $install_log; exit \${PIPESTATUS[0]}" >/dev/null 2>&1; then # Check if it's just missing optional packages - if pct exec "$CTID" -- bash -c "rpm -q curl sudo mc jq procps-ng" >/dev/null 2>&1; then + if pct exec "$CTID" -- bash -c "rpm -q curl sudo mc jq which tar procps-ng" >/dev/null 2>&1; then msg_warn "Some optional packages may have failed, but core packages installed" else # Real failure - try minimal install msg_warn "Full package install failed, trying minimal set..." - if ! pct exec "$CTID" -- bash -c "dnf install -y curl sudo jq 2>&1" >/dev/null 2>&1; then + if ! pct exec "$CTID" -- bash -c "dnf install -y curl sudo jq which tar 2>&1" >/dev/null 2>&1; then msg_error "dnf/yum base packages installation failed" pct exec "$CTID" -- bash -c "cat $install_log 2>/dev/null" || true exit 1