diff --git a/ct/debian13.sh b/ct/debian13.sh deleted file mode 100644 index 4be94c1c..00000000 --- a/ct/debian13.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://www.debian.org/ - -APP="Debian13" -var_tags="${var_tags:-os}" -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}" -#var_fuse="${var_fuse:-no}" -#var_tun="${var_tun:-no}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated $APP LXC" - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!" -msg_custom "🚀" "${GN}" "${APP} setup has been successfully initialized!" diff --git a/ct/librespeed.sh b/ct/deferred/librespeed.sh similarity index 100% rename from ct/librespeed.sh rename to ct/deferred/librespeed.sh diff --git a/ct/vikunja.sh b/ct/deferred/vikunja.sh similarity index 100% rename from ct/vikunja.sh rename to ct/deferred/vikunja.sh diff --git a/ct/litellm.sh b/ct/litellm.sh deleted file mode 100644 index 8d2b7f73..00000000 --- a/ct/litellm.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: stout01 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/BerriAI/litellm - -APP="LiteLLM" -var_tags="${var_tags:-ai;interface}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -f /etc/systemd/system/litellm.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Stopping ${APP}" - systemctl stop litellm - msg_ok "Stopped ${APP}" - - VENV_PATH="/opt/litellm/.venv" - PYTHON_VERSION="3.13" setup_uv - - msg_info "Updating $APP" - $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma - - msg_info "Updating DB Schema" - $STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup - msg_ok "DB Schema Updated" - - msg_info "Starting ${APP}" - systemctl start litellm - msg_ok "Started ${APP}" - 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}:4000${CL}" diff --git a/ct/mediamanager.sh b/ct/mediamanager.sh deleted file mode 100644 index d633f657..00000000 --- a/ct/mediamanager.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/maxdorninger/MediaManager - -APP="MediaManager" -var_tags="${var_tags:-arr}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-3072}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/mediamanager ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - setup_uv - - RELEASE=$(curl -fsSL https://api.github.com/repos/maxdorninger/MediaManager/releases/latest | jq '.tag_name' | sed 's/^v//') - if [[ "${RELEASE}" != "$(cat ~/.mediamanager 2>/dev/null)" ]] || [[ ! -f ~/.mediamanager ]]; then - msg_info "Stopping Service" - systemctl stop mediamanager - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager" - msg_info "Updating ${APP}" - MM_DIR="/opt/mm" - export CONFIG_DIR="${MM_DIR}/config" - export FRONTEND_FILES_DIR="${MM_DIR}/web/build" - export BASE_PATH="" - export PUBLIC_VERSION="" - export PUBLIC_API_URL="${BASE_PATH}/api/v1" - export BASE_PATH="${BASE_PATH}/web" - cd /opt/mediamanager/web - $STD npm ci - $STD npm run build - rm -rf "$FRONTEND_FILES_DIR"/build - cp -r build "$FRONTEND_FILES_DIR" - - export BASE_PATH="" - export VIRTUAL_ENV="/opt/${MM_DIR}/venv" - cd /opt/mediamanager - rm -rf "$MM_DIR"/{media_manager,alembic*} - cp -r {media_manager,alembic*} "$MM_DIR" - $STD /usr/local/bin/uv sync --locked --active - msg_ok "Updated $APP" - - msg_info "Starting Service" - systemctl start mediamanager - msg_ok "Started Service" - - msg_ok "Updated Successfully" - else - msg_ok "Already up to date" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh deleted file mode 100644 index eb7259de..00000000 --- a/ct/nginxproxymanager.sh +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://nginxproxymanager.com/ - -APP="Nginx Proxy Manager" -var_tags="${var_tags:-proxy}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /lib/systemd/system/npm.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if ! command -v pnpm &>/dev/null; then - msg_info "Installing pnpm" - #export NODE_OPTIONS=--openssl-legacy-provider - $STD npm install -g pnpm@8.15 - msg_ok "Installed pnpm" - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | - grep "tag_name" | - awk '{print substr($2, 3, length($2)-4) }') - msg_info "Stopping Services" - systemctl stop openresty - systemctl stop npm - msg_ok "Stopped Services" - - msg_info "Cleaning Old Files" - rm -rf /app \ - /var/www/html \ - /etc/nginx \ - /var/log/nginx \ - /var/lib/nginx \ - "$STD" /var/cache/nginx - msg_ok "Cleaned Old Files" - - msg_info "Downloading NPM v${RELEASE}" - curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz - cd nginx-proxy-manager-"${RELEASE}" - msg_ok "Downloaded NPM v${RELEASE}" - - msg_info "Setting up Enviroment" - ln -sf /usr/bin/python3 /usr/bin/python - ln -sf /usr/bin/certbot /opt/certbot/bin/certbot - ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx - ln -sf /usr/local/openresty/nginx/ /etc/nginx - sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json - sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json - sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf - NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") - for NGINX_CONF in $NGINX_CONFS; do - sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF" - done - mkdir -p /var/www/html /etc/nginx/logs - cp -r docker/rootfs/var/www/html/* /var/www/html/ - cp -r docker/rootfs/etc/nginx/* /etc/nginx/ - cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini - cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager - ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf - rm -f /etc/nginx/conf.d/dev.conf - mkdir -p /tmp/nginx/body \ - /run/nginx \ - /data/nginx \ - /data/custom_ssl \ - /data/logs \ - /data/access \ - /data/nginx/default_host \ - /data/nginx/default_www \ - /data/nginx/proxy_host \ - /data/nginx/redirection_host \ - /data/nginx/stream \ - /data/nginx/dead_host \ - /data/nginx/temp \ - /var/lib/nginx/cache/public \ - /var/lib/nginx/cache/private \ - /var/cache/nginx/proxy_temp - chmod -R 777 /var/cache/nginx - chown root /tmp/nginx - echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf - if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then - $STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem - fi - mkdir -p /app/global /app/frontend/images - cp -r backend/* /app - cp -r global/* /app/global - $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare - msg_ok "Setup Enviroment" - - msg_info "Building Frontend" - cd ./frontend - $STD pnpm install - $STD pnpm upgrade - $STD pnpm run build - cp -r dist/* /app/frontend - cp -r app-images/* /app/frontend/images - msg_ok "Built Frontend" - - msg_info "Initializing Backend" - $STD rm -rf /app/config/default.json - if [ ! -f /app/config/production.json ]; then - cat <<'EOF' >/app/config/production.json -{ - "database": { - "engine": "knex-native", - "knex": { - "client": "sqlite3", - "connection": { - "filename": "/data/database.sqlite" - } - } - } -} -EOF - fi - cd /app - $STD pnpm install - msg_ok "Initialized Backend" - - msg_info "Starting Services" - sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf - sed -i 's/su npm npm/su root root/g' /etc/logrotate.d/nginx-proxy-manager - sed -i 's/include-system-site-packages = false/include-system-site-packages = true/g' /opt/certbot/pyvenv.cfg - systemctl enable -q --now openresty - systemctl enable -q --now npm - msg_ok "Started Services" - - msg_info "Cleaning up" - rm -rf ~/nginx-proxy-manager-* - msg_ok "Cleaned" - - 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}:81${CL}" diff --git a/ct/proxmox-backup-server.sh b/ct/proxmox-backup-server.sh deleted file mode 100644 index 5463b1eb..00000000 --- a/ct/proxmox-backup-server.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.proxmox.com/en/proxmox-backup-server - -APP="Proxmox-Backup-Server" -var_tags="${var_tags:-backup}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-10}" -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 [[ ! -e /usr/sbin/proxmox-backup-manager ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" - 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}https://${IP}:8007${CL}" diff --git a/ct/tracktor.sh b/ct/tracktor.sh deleted file mode 100644 index c568f28d..00000000 --- a/ct/tracktor.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: CrazyWolf13 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://tracktor.bytedge.in/ - -APP="tracktor" -var_tags="${var_tags:-car;monitoring}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-6}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_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/tracktor ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -fsSL https://api.github.com/repos/javedh-dev/tracktor/releases/latest | jq -r '.tag_name' | sed 's/^v//') - if [[ "${RELEASE}" != "$(cat ~/.tracktor 2>/dev/null)" ]] || [[ ! -f ~/.tracktor ]]; then - msg_info "Stopping Service" - systemctl stop tracktor - msg_ok "Stopped Service" - - msg_info "Creating Backup" - cp /opt/tracktor/app/backend/.env /opt/tracktor.env - msg_ok "Created Backup" - - msg_info "Updating ${APP}" - setup_nodejs - fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" - cd /opt/tracktor - $STD npm install - $STD npm run build - msg_ok "Updated $APP" - - msg_info "Restoring Backup" - cp /opt/tracktor.env /opt/tracktor/app/backend/.env - msg_ok "Restored Backup" - - msg_info "Starting Service" - systemctl start tracktor - msg_ok "Started Service" - msg_ok "Updated Successfully" - else - msg_ok "Already up to date" - 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}:3000${CL}" diff --git a/ct/traefik.sh b/ct/traefik.sh deleted file mode 100644 index fe4d80f9..00000000 --- a/ct/traefik.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://traefik.io/ - -APP="Traefik" -var_tags="${var_tags:-proxy}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/traefik.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) - msg_info "Updating $APP LXC" - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz") - tar -C /tmp -xzf traefik*.tar.gz - mv /tmp/traefik /usr/bin/ - rm -rf traefik*.tar.gz - systemctl restart traefik.service - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP LXC" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" -echo -e "Commands available are as below:" -echo -e "addsite - creating a config" -echo -e "ensite - enables a config" -echo -e "dissite - disables a config" -echo -e "editsite - edits a config" diff --git a/ct/zitadel.sh b/ct/zitadel.sh deleted file mode 100644 index c35c7b39..00000000 --- a/ct/zitadel.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: dave-yap (dave-yap) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://zitadel.com/ - -APP="Zitadel" -var_tags="${var_tags:-identity-provider}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -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 [[ ! -f /etc/systemd/system/zitadel.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f ~/.zitadel ]] || [[ "${RELEASE}" != "$(cat ~/.zitadel)" ]]; then - msg_info "Stopping $APP" - systemctl stop zitadel - msg_ok "Stopped $APP" - - rm -f /usr/local/bin/zitadel - fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz" - - msg_info "Updating $APP to ${RELEASE}" - $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true - msg_ok "Updated $APP to ${RELEASE}" - - msg_info "Starting $APP" - systemctl start zitadel - msg_ok "Started $APP" - - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/ui/console${CL}" diff --git a/frontend/public/json/librespeed.json b/frontend/public/json/librespeed.json deleted file mode 100644 index 713b2fe8..00000000 --- a/frontend/public/json/librespeed.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Librespeed", - "slug": "librespeed", - "categories": [ - 4 - ], - "date_created": "2025-04-26", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md", - "config_path": "", - "website": "https://librespeed.org", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librespeed.webp", - "description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.", - "install_methods": [ - { - "type": "default", - "script": "ct/librespeed.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 4, - "os": "Debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "root", - "password": null - }, - "notes": [] -} diff --git a/frontend/public/json/litellm.json b/frontend/public/json/litellm.json deleted file mode 100644 index b2e7b7d7..00000000 --- a/frontend/public/json/litellm.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "LiteLLM", - "slug": "litellm", - "categories": [ - 20 - ], - "date_created": "2025-08-07", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 4000, - "documentation": "https://docs.litellm.ai/", - "config_path": "/opt/litellm/litellm.yaml", - "website": "https://www.litellm.ai/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/litellm-light.webp", - "description": "LLM proxy to call 100+ LLMs in a unified interface & track spend, set budgets per virtual key/user", - "install_methods": [ - { - "type": "default", - "script": "ct/litellm.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 4, - "os": "Debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "admin", - "password": "sk-1234" - }, - "notes": [ - { - "text": "Update master key in the config file", - "type": "info" - } - ] -} diff --git a/frontend/public/json/mediamanager.json b/frontend/public/json/mediamanager.json deleted file mode 100644 index c8590b01..00000000 --- a/frontend/public/json/mediamanager.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "MediaManager", - "slug": "mediamanager", - "categories": [ - 14, - 13 - ], - "date_created": "2025-07-22", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8000, - "documentation": "https://maxdorninger.github.io/MediaManager/introduction.html", - "config_path": "/opt/mm_data/config.toml", - "website": "https://github.com/maxdorninger/MediaManager", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mediamanager.webp", - "description": "A modern selfhosted media management system for your media library", - "install_methods": [ - { - "type": "default", - "script": "ct/mediamanager.sh", - "resources": { - "cpu": 2, - "ram": 3072, - "hdd": 4, - "os": "Debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "", - "password": "admin" - }, - "notes": [ - { - "text": "During the installation, provide the email address of the first admin user", - "type": "info" - }, - { - "text": "You're probably going to want to use a bind mount for the media directories", - "type": "info" - } - ] -} diff --git a/frontend/public/json/tracktor.json b/frontend/public/json/tracktor.json deleted file mode 100644 index 0a8f7c3b..00000000 --- a/frontend/public/json/tracktor.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Tracktor", - "slug": "tracktor", - "categories": [ - 9 - ], - "date_created": "2025-08-06", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://tracktor.bytedge.in/introduction.html", - "config_path": "/opt/tracktor/app/server/.env", - "website": "https://tracktor.bytedge.in/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/tracktor.svg", - "description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track ⛽ fuel consumption, 🛠️ maintenance, 🛡️ insurance, and 📄 regulatory documents for all your vehicles in one place. ", - "install_methods": [ - { - "type": "default", - "script": "ct/tracktor.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 6, - "os": "Debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.", - "type": "info" - } - ] -} diff --git a/frontend/public/json/vikunja.json b/frontend/public/json/vikunja.json deleted file mode 100644 index ea171140..00000000 --- a/frontend/public/json/vikunja.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Vikunja", - "slug": "vikunja", - "categories": [ - 12 - ], - "date_created": "2024-11-05", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3456, - "documentation": null, - "website": "https://vikunja.io/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/vikunja.webp", - "config_path": "/etc/vikunja/config.yml", - "description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.", - "install_methods": [ - { - "type": "default", - "script": "ct/vikunja.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} diff --git a/install/debian13-install.sh b/install/debian13-install.sh deleted file mode 100644 index 466d6af6..00000000 --- a/install/debian13-install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE - -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 gpg -msg_ok "Installed Dependencies" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt -y autoremove -$STD apt -y autoclean -msg_ok "Cleaned" diff --git a/install/vikunja-install.sh b/install/deferred/vikunja-install.sh similarity index 100% rename from install/vikunja-install.sh rename to install/deferred/vikunja-install.sh diff --git a/install/jeedom-install.sh b/install/jeedom-install.sh deleted file mode 100644 index d868e84b..00000000 --- a/install/jeedom-install.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: Mips2648 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://jeedom.com/ - -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 \ - lsb-release \ - git -msg_ok "Dependencies installed" - -DEFAULT_BRANCH="master" -REPO_URL="https://github.com/jeedom/core.git" - -echo -while true; do - read -rp "${TAB3}Enter branch to use (master, beta, alpha...) (Default: ${DEFAULT_BRANCH}): " BRANCH - BRANCH="${BRANCH:-$DEFAULT_BRANCH}" - - if git ls-remote --heads "$REPO_URL" "refs/heads/$BRANCH" | grep -q .; then - break - else - msg_error "Branch '$BRANCH' does not exist on remote. Please try again." - fi -done - -msg_info "Downloading Jeedom installation script" -cd /tmp -wget -q https://raw.githubusercontent.com/jeedom/core/"${BRANCH}"/install/install.sh -chmod +x install.sh -msg_ok "Installation script downloaded" - -msg_info "Install Jeedom main dependencies, please wait" -$STD ./install.sh -v "$BRANCH" -s 2 -msg_ok "Installed Jeedom main dependencies" - -msg_info "Install Database" -$STD ./install.sh -v "$BRANCH" -s 3 -msg_ok "Database installed" - -msg_info "Install Apache" -$STD ./install.sh -v "$BRANCH" -s 4 -msg_ok "Apache installed" - -msg_info "Install PHP and dependencies" -$STD ./install.sh -v "$BRANCH" -s 5 -msg_ok "PHP installed" - -msg_info "Download Jeedom core" -$STD ./install.sh -v "$BRANCH" -s 6 -msg_ok "Download done" - -msg_info "Database customisation" -$STD ./install.sh -v "$BRANCH" -s 7 -msg_ok "Database customisation done" - -msg_info "Jeedom customisation" -$STD ./install.sh -v "$BRANCH" -s 8 -msg_ok "Jeedom customisation done" - -msg_info "Configuring Jeedom" -$STD ./install.sh -v "$BRANCH" -s 9 -msg_ok "Jeedom configured" - -msg_info "Installing Jeedom" -$STD ./install.sh -v "$BRANCH" -s 10 -msg_ok "Jeedom installed" - -msg_info "Post installation" -$STD ./install.sh -v "$BRANCH" -s 11 -msg_ok "Post installation done" - -msg_info "Check installation" -$STD ./install.sh -v "$BRANCH" -s 12 -msg_ok "Installation checked, everything is successfuly installed. A reboot is recommended." - -motd_ssh -customize - -msg_info "Cleaning up" -rm -rf /tmp/install.sh -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/librespeed-install.sh b/install/librespeed-install.sh deleted file mode 100644 index 8b2bc48a..00000000 --- a/install/librespeed-install.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: elvito -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/librespeed/speedtest - -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 update -$STD apt-get install -y \ - caddy \ - php-fpm -msg_ok "Installed Dependencies" - -msg_info "Installing librespeed" -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') -curl -fsSL "https://github.com/librespeed/speedtest/archive/refs/tags/${RELEASE}.zip" -o "$temp_file" -mkdir -p /opt/librespeed -mkdir -p /temp -unzip -q "$temp_file" -d /temp -cd /temp/speedtest-"${RELEASE}" -cp -u favicon.ico index.html speedtest.js speedtest_worker.js /opt/librespeed/ -cp -ru backend results /opt/librespeed/ - -cat </etc/caddy/Caddyfile -:80 { - root * /opt/librespeed - file_server - php_fastcgi unix//run/php/php-fpm.sock -} -EOF - -systemctl restart caddy -echo "${RELEASE}" >/opt/"${APP}_version.txt" -msg_ok "Installation completed" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -rf /temp -rm -f "$temp_file" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/litellm-install.sh b/install/litellm-install.sh deleted file mode 100644 index b79341f9..00000000 --- a/install/litellm-install.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: stout01 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/BerriAI/litellm - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -PG_VERSION="17" setup_postgresql -PYTHON_VERSION="3.13" setup_uv - -msg_info "Setting up PostgreSQL" -DB_NAME="litellm_db" -DB_USER="litellm" -DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" -$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" -$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" -{ - echo "${APPLICATION} Credentials" - echo "Database Name: $DB_NAME" - echo "Database User: $DB_USER" - echo "Database Password: $DB_PASS" -} >>~/litellm.creds -msg_ok "Set up PostgreSQL" - -msg_info "Setting up Virtual Environment" -mkdir -p /opt/litellm -cd /opt/litellm -$STD uv venv /opt/litellm/.venv -$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade -$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip -$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma -msg_ok "Installed LiteLLM" - -msg_info "Configuring LiteLLM" -mkdir -p /opt -cat </opt/litellm/litellm.yaml -general_settings: - master_key: sk-1234 - database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME - store_model_in_db: true -EOF - -uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup -msg_ok "Configured LiteLLM" - -msg_info "Creating Service" -cat </etc/systemd/system/litellm.service -[Unit] -Description=LiteLLM - -[Service] -Type=simple -ExecStart=uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml -Restart=always - -[Install] -WantedBy=multi-user.target -EOF - -systemctl enable -q --now litellm -msg_ok "Created Service" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/mediamanager-install.sh b/install/mediamanager-install.sh deleted file mode 100644 index 3aa0df7b..00000000 --- a/install/mediamanager-install.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2025 Community Scripts ORG -# Author: vhsdream -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/maxdorninger/MediaManager - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -read -r -p "${TAB3}Enter the email address of your first admin user: " admin_email -if [[ "$admin_email" ]]; then - EMAIL="$admin_email" -fi - -setup_yq -NODE_VERSION="24" setup_nodejs -setup_uv -PG_VERSION="17" setup_postgresql - -msg_info "Setting up PostgreSQL" -DB_NAME="mm_db" -DB_USER="mm_user" -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;" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" -{ - echo "MediaManager Credentials" - echo "MediaManager Database User: $DB_USER" - echo "MediaManager Database Password: $DB_PASS" - echo "MediaManager Database Name: $DB_NAME" -} >>~/mediamanager.creds -msg_ok "Set up PostgreSQL" - -fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager" - -msg_info "Configuring MediaManager" -MM_DIR="/opt/mm" -MEDIA_DIR="${MM_DIR}/media" -export CONFIG_DIR="${MM_DIR}/config" -export FRONTEND_FILES_DIR="${MM_DIR}/web/build" -export BASE_PATH="" -export PUBLIC_VERSION="" -export PUBLIC_API_URL="${BASE_PATH}/api/v1" -export BASE_PATH="${BASE_PATH}/web" -cd /opt/mediamanager/web -$STD npm ci -$STD npm run build -mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"} -cp -r build "$FRONTEND_FILES_DIR" - -export BASE_PATH="" -export VIRTUAL_ENV="${MM_DIR}/venv" -cd /opt/mediamanager -cp -r {media_manager,alembic*} "$MM_DIR" -$STD /usr/local/bin/uv venv "$VIRTUAL_ENV" -$STD /usr/local/bin/uv sync --locked --active -msg_ok "Configured MediaManager" - -msg_info "Creating config and start script" -LOCAL_IP="$(hostname -I | awk '{print $1}')" -SECRET="$(openssl rand -hex 32)" -sed -e "s/localhost:8/$LOCAL_IP:8/g" \ - -e "s|/data/|$MEDIA_DIR/|g" \ - -e 's/"db"/"localhost"/' \ - -e "s/user = \"MediaManager\"/user = \"$DB_USER\"/" \ - -e "s/password = \"MediaManager\"/password = \"$DB_PASS\"/" \ - -e "s/dbname = \"MediaManager\"/dbname = \"$DB_NAME\"/" \ - -e "/^token_secret/s/=.*/= \"$SECRET\"/" \ - -e "s/admin@example.com/$EMAIL/" \ - -e '/^admin_emails/s/, .*/]/' \ - /opt/mediamanager/config.example.toml >"$CONFIG_DIR"/config.toml - -mkdir -p "$MEDIA_DIR"/{images,tv,movies,torrents} - -cat <"$MM_DIR"/start.sh -#!/usr/bin/env bash - -export CONFIG_DIR="$CONFIG_DIR" -export FRONTEND_FILES_DIR="$FRONTEND_FILES_DIR" -export BASE_PATH="" - -cd "$MM_DIR" -source ./venv/bin/activate -/usr/local/bin/uv run alembic upgrade head -/usr/local/bin/uv run fastapi run ./media_manager/main.py --port 8000 -EOF -chmod +x "$MM_DIR"/start.sh -msg_ok "Created config and start script" - -msg_info "Creating service" -cat </etc/systemd/system/mediamanager.service -[Unit] -Description=MediaManager Backend Service -After=network.target - -[Service] -Type=simple -WorkingDirectory=${MM_DIR} -ExecStart=/usr/bin/bash start.sh - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now mediamanager -msg_ok "Created service" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/nginxproxymanager-install.sh b/install/nginxproxymanager-install.sh deleted file mode 100644 index 9aaf4cc4..00000000 --- a/install/nginxproxymanager-install.sh +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://nginxproxymanager.com/ - -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 update -$STD apt-get -y install \ - ca-certificates \ - apache2-utils \ - logrotate \ - build-essential \ - jq \ - git -msg_ok "Installed Dependencies" - -NODE_VERSION="16" NODE_MODULE="yarn" setup_nodejs -PYTHON_VERSION="3.12" setup_uv -fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "latest" "/tmp/nginxproxymanager" - -msg_info "Installing Python Dependencies" -$STD apt-get install -y \ - python3 \ - python3-dev \ - python3-venv -msg_ok "Installed Python Dependencies" - -msg_info "Setting up Certbot Environment" -$STD uv venv /opt/certbot -$STD uv pip install --python \ - certbot \ - certbot-dns-cloudflare \ - certbot-dns-multi -msg_ok "Certbot Environment Ready" - -msg_info "Installing Openresty" -VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" -curl -fsSL "https://openresty.org/package/pubkey.gpg" | gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg -echo -e "deb http://openresty.org/package/debian $VERSION openresty" >/etc/apt/sources.list.d/openresty.list -$STD apt-get update -$STD apt-get -y install openresty -msg_ok "Installed Openresty" - -msg_info "Setting up Environment" -ln -sf /usr/bin/python3 /usr/bin/python -ln -sf /opt/certbot/bin/certbot /usr/bin/certbot -ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx -ln -sf /usr/local/openresty/nginx/ /etc/nginx -sed -i 's+^daemon+#daemon+g' /tmp/nginxproxymanager/docker/rootfs/etc/nginx/nginx.conf -NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") -for NGINX_CONF in $NGINX_CONFS; do - sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF" -done - -mkdir -p /var/www/html /etc/nginx/logs -cd /tmp/nginxproxymanager -cp -r docker/rootfs/var/www/html/* /var/www/html/ -cp -r docker/rootfs/etc/nginx/* /etc/nginx/ -cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini -cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager -ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf -rm -f /etc/nginx/conf.d/dev.conf - -mkdir -p /tmp/nginx/body \ - /run/nginx \ - /data/nginx \ - /data/custom_ssl \ - /data/logs \ - /data/access \ - /data/nginx/default_host \ - /data/nginx/default_www \ - /data/nginx/proxy_host \ - /data/nginx/redirection_host \ - /data/nginx/stream \ - /data/nginx/dead_host \ - /data/nginx/temp \ - /var/lib/nginx/cache/public \ - /var/lib/nginx/cache/private \ - /var/cache/nginx/proxy_temp - -chmod -R 777 /var/cache/nginx -chown root /tmp/nginx - -echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf - -if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then - openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem &>/dev/null -fi - -mkdir -p /app/global /app/frontend/images -cd /tmp/nginxproxymanager -cp -r backend/* /app -cp -r global/* /app/global -msg_ok "Set up Environment" - -msg_info "Building Frontend" -cd /tmp/nginxproxymanager/frontend -$STD yarn install --frozen-lockfile -$STD yarn build -cp -r dist/* /app/frontend -cp -r app-images/* /app/frontend/images -msg_ok "Built Frontend" - -msg_info "Initializing Backend" -rm -rf /app/config/default.json -if [ ! -f /app/config/production.json ]; then - cat <<'EOF' >/app/config/production.json -{ - "database": { - "engine": "knex-native", - "knex": { - "client": "sqlite3", - "connection": { - "filename": "/data/database.sqlite" - } - } - } -} -EOF -fi -cd /app -$STD yarn install --production -msg_ok "Initialized Backend" - -msg_info "Creating Service" -cat <<'EOF' >/lib/systemd/system/npm.service -[Unit] -Description=Nginx Proxy Manager -After=network.target -Wants=openresty.service - -[Service] -Type=simple -Environment=NODE_ENV=production -Environment=NODE_OPTIONS=--openssl-legacy-provider -ExecStartPre=-mkdir -p /tmp/nginx/body /data/letsencrypt-acme-challenge -ExecStart=/usr/bin/node index.js --abort_on_uncaught_exception --max_old_space_size=1024 -WorkingDirectory=/app -Restart=on-failure - -[Install] -WantedBy=multi-user.target -EOF -msg_ok "Created Service" - -motd_ssh -customize - -msg_info "Starting Services" -sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf -sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager -systemctl enable -q --now openresty -systemctl enable -q --now npm -msg_ok "Started Services" - -msg_info "Cleaning up" -rm -rf /tmp/* -systemctl restart openresty -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/proxmox-backup-server-install.sh b/install/proxmox-backup-server-install.sh deleted file mode 100644 index cac095b9..00000000 --- a/install/proxmox-backup-server-install.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.proxmox.com/en/proxmox-backup-server - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -read -rp "${TAB3}Do you want to use the Enterprise repository (requires valid subscription key)? [y/N]: " USE_ENTERPRISE_REPO - -msg_info "Installing Proxmox Backup Server" -curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg | - gpg --dearmor -o /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg -if [[ "$USE_ENTERPRISE_REPO" =~ ^([yY].*)$ ]]; then - echo "deb https://enterprise.proxmox.com/debian/pbs bookworm pbs-enterprise" >/etc/apt/sources.list.d/pbs-enterprise.list - msg_ok "Enterprise repository enabled. Make sure your subscription key is installed." -else - echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" >>/etc/apt/sources.list - msg_ok "No-subscription repository enabled." -fi - -$STD apt-get update -$STD apt-get install -y proxmox-backup-server -msg_ok "Installed Proxmox Backup Server" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/tracktor-install.sh b/install/tracktor-install.sh deleted file mode 100644 index d0d432d9..00000000 --- a/install/tracktor-install.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2025 Community Scripts ORG -# Author: CrazyWolf13 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://tracktor.bytedge.in - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -setup_nodejs -fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" - -msg_info "Configuring Tracktor" -cd /opt/tracktor -$STD npm install -$STD npm run build -mkdir /opt/tracktor-data -HOST_IP=$(hostname -I | awk '{print $1}') -cat </opt/tracktor/app/backend/.env -NODE_ENV=production -PUBLIC_DEMO_MODE=false -DB_PATH=/opt/tracktor-data/tracktor.db -# Replace this URL if using behind reverse proxy for https traffic. Though it is optional and should work without changing -PUBLIC_API_BASE_URL=http://$HOST_IP:3000 -# Here add the reverse proxy url as well to avoid cross errors from the app. -CORS_ORIGINS=http://$HOST_IP:3000 -PORT=3000 -EOF -msg_ok "Configured Tracktor" - -msg_info "Creating service" -cat </etc/systemd/system/tracktor.service -[Unit] -Description=Tracktor Service -After=network.target - -[Service] -Type=simple -WorkingDirectory=/opt/tracktor -EnvironmentFile=/opt/tracktor/app/backend/.env -ExecStart=/usr/bin/npm start - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now tracktor -msg_ok "Created service" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/traefik-install.sh b/install/traefik-install.sh deleted file mode 100644 index 3f3dc2fb..00000000 --- a/install/traefik-install.sh +++ /dev/null @@ -1,266 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://traefik.io/ - -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 apt-transport-https -msg_ok "Installed Dependencies" - -RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1) -msg_info "Installing Traefik v${RELEASE}" -mkdir -p /etc/traefik/{conf.d,ssl,sites-available} -curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz" -o "traefik_v${RELEASE}_linux_amd64.tar.gz" -tar -C /tmp -xzf traefik*.tar.gz -mv /tmp/traefik /usr/bin/ -rm -rf traefik*.tar.gz -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt -msg_ok "Installed Traefik v${RELEASE}" - -msg_info "Creating Traefik configuration" -cat <<'EOF' >/etc/traefik/traefik.yaml -providers: - file: - directory: /etc/traefik/conf.d/ - watch: true - -entryPoints: - web: - address: ':80' - http: - redirections: - entryPoint: - to: websecure - scheme: https - websecure: - address: ':443' - http: - tls: - certResolver: letsencrypt - # Uncomment below if using cloudflare - /* - forwardedHeaders: - trustedIPs: - - 173.245.48.0/20 - - 103.21.244.0/22 - - 103.22.200.0/22 - - 103.31.101.64/22 - - 141.101.64.0/18 - - 108.162.192.0/18 - - 190.93.240.0/20 - - 188.114.96.0/20 - - 197.234.240.0/22 - - 198.41.128.0/17 - - 162.158.0.0/15 - - 104.16.0.0/13 - - 104.16.0.0/13 - - 172.64.0.0/13 - - 131.0.72.0/22 - */ - asDefault: true - traefik: - address: ':8080' - -certificatesResolvers: - letsencrypt: - acme: - email: "foo@bar.com" - storage: /etc/traefik/ssl/acme.json - tlsChallenge: {} - -# Uncomment below if you are using self signed or no certificate -#serversTransport: -# insecureSkipVerify: true - -api: - dashboard: true - insecure: true - -log: - filePath: /var/log/traefik/traefik.log - format: json - level: INFO - -accessLog: - filePath: /var/log/traefik/traefik-access.log - format: json - filters: - statusCodes: - - "200" - - "400-599" - retryAttempts: true - minDuration: "10ms" - bufferingSize: 0 - fields: - headers: - defaultMode: drop - names: - User-Agent: keep -EOF -msg_ok "Created Traefik configuration" - -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/traefik.service -[Unit] -Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience - -[Service] -Type=notify -ExecStart=/usr/bin/traefik --configFile=/etc/traefik/traefik.yaml -Restart=on-failure -ExecReload=/bin/kill -USR1 \$MAINPID - -[Install] -WantedBy=multi-user.target -EOF - -systemctl enable -q --now traefik -msg_ok "Created Service" - -msg_info "Creating site templates" -cat <<'EOF' >/etc/traefik/template.yaml.tpl -http: - routers: - ${hostname}: - rule: Host(`${FQDN}`) - service: ${hostname} - tls: - certResolver: letsencrypt - services: - ${hostname}: - loadbalancer: - servers: - - url: "${URL}" -EOF -msg_ok "Template Created" - -msg_info "Creating Helper Scripts" -cat <<'EOF' >/usr/bin/addsite -#!/bin/bash - -function setup_site() { - hostname="$(whiptail --inputbox "Enter the hostname of the Site" 8 78 --title "Hostname" 3>&1 1>&2 2>&3)" - exitstatus=$? - [[ "$exitstatus" = 1 ]] && return; - FQDN="$(whiptail --inputbox "Enter the FQDN of the Site" 8 78 --title "FQDN" 3>&1 1>&2 2>&3)" - exitstatus=$? - [[ "$exitstatus" = 1 ]] && return; - URL="$(whiptail --inputbox "Enter the URL of the Site (For example http://192.168.x.x:8080)" 8 78 --title "URL" 3>&1 1>&2 2>&3)" - exitstatus=$? - [[ "$exitstatus" = 1 ]] && return; - filename="/etc/traefik/sites-available/${hostname}.yaml" - export hostname FQDN URL - envsubst '${hostname} ${FQDN} ${URL}' < /etc/traefik/template.yaml.tpl > ${filename} -} - -setup_site -EOF - -cat <<'EOF' >/usr/bin/ensite -#!/bin/bash - -function ensite() { - DIR="/etc/traefik/sites-available" - files=( "$DIR"/* ) - - opts=() - for f in "${files[@]}"; do - name="${f##*/}" - opts+=( "$name" "" ) - done - - choice=$(whiptail \ - --title "Select an entry" \ - --menu "Choose a site" \ - 20 60 12 \ - "${opts[@]}" \ - 3>&1 1>&2 2>&3) - - if [ $? -eq 0 ]; then - ln -s $DIR/$choice /etc/traefik/conf.d - else - return - fi -} - -ensite -EOF - -cat <<'EOF' >/usr/bin/dissite -#!/bin/bash - -function dissite() { - DIR="/etc/traefik/conf.d" - files=( "$DIR"/* ) - - opts=() - for f in "${files[@]}"; do - name="${f##*/}" - opts+=( "$name" "" ) - done - - choice=$(whiptail \ - --title "Select an entry" \ - --menu "Choose a site" \ - 20 60 12 \ - "${opts[@]}" \ - 3>&1 1>&2 2>&3) - - if [ $? -eq 0 ]; then - rm $DIR/$choice - else - return - fi -} - -dissite -EOF - -cat <<'EOF' >/usr/bin/editsite -#!/bin/bash - -function edit_site() { - DIR="/etc/traefik/sites-available" - files=( "$DIR"/* ) - - opts=() - for f in "${files[@]}"; do - name="${f##*/}" - opts+=( "$name" "" ) - done - - choice=$(whiptail \ - --title "Select an entry" \ - --menu "Choose a site" \ - 20 60 12 \ - "${opts[@]}" \ - 3>&1 1>&2 2>&3) - - if [ $? -eq 0 ]; then - nano $DIR/$choice - else - return - fi -} - -edit_site -EOF -msg_ok "Helper Scripts Created" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/install/zitadel-install.sh b/install/zitadel-install.sh deleted file mode 100644 index 5b5a8451..00000000 --- a/install/zitadel-install.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: dave-yap -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://zitadel.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies (Patience)" -$STD apt-get install -y ca-certificates -msg_ok "Installed Dependecies" - -PG_VERSION="17" setup_postgresql - -msg_info "Installing Postgresql" -DB_NAME="zitadel" -DB_USER="zitadel" -DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) -DB_ADMIN_USER="root" -DB_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) -systemctl start postgresql -$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';" -$STD sudo -u postgres psql -c "CREATE USER $DB_ADMIN_USER WITH PASSWORD '$DB_ADMIN_PASS' SUPERUSER;" -$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;" -{ - echo "Application Credentials" - echo "DB_NAME: $DB_NAME" - echo "DB_USER: $DB_USER" - echo "DB_PASS: $DB_PASS" - echo "DB_ADMIN_USER: $DB_ADMIN_USER" - echo "DB_ADMIN_PASS: $DB_ADMIN_PASS" -} >>~/zitadel.creds -msg_ok "Installed PostgreSQL" - -fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz" - -msg_info "Setting up Zitadel Environments" -mkdir -p /opt/zitadel -echo "/opt/zitadel/config.yaml" >"/opt/zitadel/.config" -head -c 32 < <(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9') >"/opt/zitadel/.masterkey" -{ - echo "Config location: $(cat "/opt/zitadel/.config")" - echo "Masterkey: $(cat "/opt/zitadel/.masterkey")" -} >>~/zitadel.creds -cat </opt/zitadel/config.yaml -Port: 8080 -ExternalPort: 8080 -ExternalDomain: localhost -ExternalSecure: false -TLS: - Enabled: false - KeyPath: "" - Key: "" - CertPath: "" - Cert: "" - -Database: - postgres: - Host: localhost - Port: 5432 - Database: ${DB_NAME} - User: - Username: ${DB_USER} - Password: ${DB_PASS} - SSL: - Mode: disable - RootCert: "" - Cert: "" - Key: "" - Admin: - Username: ${DB_ADMIN_USER} - Password: ${DB_ADMIN_PASS} - SSL: - Mode: disable - RootCert: "" - Cert: "" - Key: "" -DefaultInstance: - Features: - LoginV2: - Required: false -EOF -msg_ok "Installed Zitadel Enviroments" - -msg_info "Creating Services" -cat </etc/systemd/system/zitadel.service -[Unit] -Description=ZITADEL Identiy Server -After=network.target postgresql.service -Wants=postgresql.service - -[Service] -Type=simple -User=zitadel -Group=zitadel -ExecStart=/usr/local/bin/zitadel start --masterkeyFile "/opt/zitadel/.masterkey" --config "/opt/zitadel/config.yaml" -Restart=always -RestartSec=5 -TimeoutStartSec=0 - -# Security Hardening options -ProtectSystem=full -ProtectHome=true -PrivateTmp=true -NoNewPrivileges=true - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q zitadel -msg_ok "Created Services" - -msg_info "Zitadel initial setup" -zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null & -sleep 60 -kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1) -useradd zitadel -msg_ok "Zitadel initialized" - -msg_info "Set ExternalDomain to current IP and restart Zitadel" -IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) -sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml -systemctl stop -q zitadel -$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml -systemctl restart -q zitadel -msg_ok "Zitadel restarted with ExternalDomain set to current IP" - -msg_info "Create zitadel-rerun.sh" -cat <~/zitadel-rerun.sh -systemctl stop zitadel -timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml -systemctl restart zitadel -EOF -msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned"