From 9926ed24e355239dd04fe1b9366b9ca39e94a3bf Mon Sep 17 00:00:00 2001 From: Jocelyn Knight Date: Fri, 19 Sep 2025 14:28:55 -0700 Subject: [PATCH] Add: Verdaccio LXC --- ct/headers/verdaccio | 6 ++ ct/verdaccio.sh | 46 +++++++++++ frontend/public/json/verdaccio.json | 52 ++++++++++++ install/verdaccio-install.sh | 118 ++++++++++++++++++++++++++++ 4 files changed, 222 insertions(+) create mode 100644 ct/headers/verdaccio create mode 100644 ct/verdaccio.sh create mode 100644 frontend/public/json/verdaccio.json create mode 100644 install/verdaccio-install.sh diff --git a/ct/headers/verdaccio b/ct/headers/verdaccio new file mode 100644 index 00000000..76128a0b --- /dev/null +++ b/ct/headers/verdaccio @@ -0,0 +1,6 @@ + _ __ __ _ + | | / /__ _________/ /___ ___________(_)___ + | | / / _ \/ ___/ __ / __ `/ ___/ ___/ / __ \ + | |/ / __/ / / /_/ / /_/ / /__/ /__/ / /_/ / + |___/\___/_/ \__,_/\__,_/\___/\___/_/\____/ + \ No newline at end of file diff --git a/ct/verdaccio.sh b/ct/verdaccio.sh new file mode 100644 index 00000000..1b8d158d --- /dev/null +++ b/ct/verdaccio.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: BrynnJKnight +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://verdaccio.org/ + +APP="Verdaccio" +var_tags="${var_tags:-dev-tools;npm;registry}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +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/verdaccio.service ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + NODE_VERSION="22" setup_nodejs + + msg_info "Updating ${APP} LXC" + $STD npm update -g verdaccio + systemctl restart verdaccio + 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}:4873${CL}" \ No newline at end of file diff --git a/frontend/public/json/verdaccio.json b/frontend/public/json/verdaccio.json new file mode 100644 index 00000000..b8e7443b --- /dev/null +++ b/frontend/public/json/verdaccio.json @@ -0,0 +1,52 @@ +{ + "name": "Verdaccio", + "slug": "verdaccio", + "categories": [ + 20 + ], + "date_created": "2025-01-19", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 4873, + "documentation": "https://verdaccio.org/docs/what-is-verdaccio", + "website": "https://verdaccio.org/", + "logo": "https://verdaccio.org/img/logo/symbol/png/verdaccio-tiny.png", + "config_path": "/etc/verdaccio/config.yaml", + "description": "Verdaccio is a lightweight private npm proxy registry built with Node.js. It allows you to host your own npm registry with minimal configuration, providing a private npm repository for your projects. Verdaccio supports npm, yarn, and pnpm, and can cache packages from the public npm registry, allowing for faster installs and protection against npm registry outages. It includes a web interface for browsing packages, authentication and authorization features, and can be easily integrated into your development workflow.", + "install_methods": [ + { + "type": "default", + "script": "ct/verdaccio.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "Create via CLI", + "password": "Create via CLI" + }, + "notes": [ + { + "text": "Default configuration proxies to npmjs.org for packages not found locally.", + "type": "info" + }, + { + "text": "To create the first user, run: npm adduser --registry http://:4873", + "type": "info" + }, + { + "text": "After creating a user, you can publish packages with: npm publish --registry http://:4873", + "type": "info" + }, + { + "text": "Configuration file located at /etc/verdaccio/config.yaml", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/install/verdaccio-install.sh b/install/verdaccio-install.sh new file mode 100644 index 00000000..b19c504c --- /dev/null +++ b/install/verdaccio-install.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: BrynnJKnight +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://verdaccio.org/ + +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 \ + ca-certificates \ + build-essential +msg_ok "Installed Dependencies" + +NODE_VERSION="22" setup_nodejs + +msg_info "Installing Verdaccio" +$STD npm install --global verdaccio +msg_ok "Installed Verdaccio" + +msg_info "Configuring Verdaccio" +HOST_IP=$(hostname -I | awk '{print $1}') +mkdir -p /etc/verdaccio +mkdir -p /var/lib/verdaccio + +cat </etc/verdaccio/config.yaml +# Verdaccio configuration +storage: /var/lib/verdaccio +auth: + htpasswd: + file: /var/lib/verdaccio/htpasswd + max_users: 1000 +uplinks: + npmjs: + url: https://registry.npmjs.org/ +packages: + '@*/*': + access: \$all + publish: \$authenticated + proxy: npmjs + '**': + access: \$all + publish: \$authenticated + proxy: npmjs +middlewares: + audit: + enabled: true +logs: + - {type: stdout, format: pretty, level: http} +listen: + - 0.0.0.0:4873 +web: + enable: true + title: Verdaccio + gravatar: true + sort_packages: asc + login: true +EOF + +chown -R root:root /etc/verdaccio +chown -R root:root /var/lib/verdaccio +chmod -R 755 /etc/verdaccio +chmod -R 755 /var/lib/verdaccio +msg_ok "Configured Verdaccio" + +msg_info "Creating Service" +cat </etc/systemd/system/verdaccio.service +[Unit] +Description=Verdaccio lightweight private npm proxy registry +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/verdaccio --config /etc/verdaccio/config.yaml +Restart=on-failure +StandardOutput=journal +StandardError=journal +SyslogIdentifier=verdaccio +KillMode=control-group + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable -q --now verdaccio +msg_ok "Created Service" + +msg_info "Creating Update Script" +cat <<'EOF' >/usr/bin/update +#!/bin/bash +set -euo pipefail +NODE_VERSION="22" +export NVM_DIR="/opt/nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +nvm use $NODE_VERSION >/dev/null 2>&1 + +echo "Updating Verdaccio..." +npm update -g verdaccio +systemctl restart verdaccio +echo "Verdaccio has been updated successfully." +EOF +chmod +x /usr/bin/update +msg_ok "Created Update Script" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" \ No newline at end of file