diff --git a/README.md b/README.md index 51b323a..c04633a 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,36 @@ A modern web-based management interface for Proxmox VE (PVE) helper scripts. Thi ## 🚀 Installation -You can use the provided ```install.sh``` file in the root directory of this repository or follow the steps below to install manually. The install script takes care of all prerequisits. +You can either install automatically via the provided installer script or do a manual setup. + +### Option 1: Install via Bash (Recommended) + +Run this command directly on your Proxmox VE host: + +```bash +bash -c "$(curl -fsSL https://raw.githubusercontent.com/michelroegl-brunner/PVESciptslocal/main/install.sh)" +``` + +## The script will: +- Verify that you are running on Proxmox VE +- Check and install git and Node.js 24.x if missing +- Clone the repository into /opt/PVESciptslocal (or your chosen path) +- Run npm install and build the project +- Set up .env from .env.example if missing +- Create a systemd service (pvescriptslocal.service) for easy start/stop management + +After installation, the app will be accessible at: +👉 http://:3000 + +You can manage the service with: +```bash +systemctl start pvescriptslocal +systemctl stop pvescriptslocal +systemctl status pvescriptslocal +``` + + +### Option 2: Manual Installation ### 1. Clone the Repository diff --git a/install.sh b/install.sh index 9ed1732..63e946a 100644 --- a/install.sh +++ b/install.sh @@ -1,90 +1,138 @@ -#!/usr/bin/env bash -# ------------------------------------------------------------------------------ -# Installer for PVESciptslocal -# Author: Canbiz -# ------------------------------------------------------------------------------ - -set -euo pipefail - -# Colors -RD=$(echo -e "\033[01;31m") -GN=$(echo -e "\033[1;92m") -YW=$(echo -e "\033[33m") -CL=$(echo -e "\033[m") - -# Status functions -msg_info() { echo -e "⏳ $YW$1$CL"; } -msg_ok() { echo -e "✔️ $GN$1$CL"; } -msg_err() { echo -e "❌ $RD$1$CL"; } - -# --- Check Proxmox VE environment --- -if ! command -v pveversion >/dev/null 2>&1; then - msg_err "This script must be executed on a Proxmox VE host." - exit 1 -fi -msg_ok "Proxmox VE detected: $(pveversion)" - -# --- Check git --- -if ! command -v git >/dev/null 2>&1; then - msg_info "Git not found, installing..." - apt-get update - apt-get install -y git - msg_ok "Git installed: $(git --version)" -else - msg_ok "Git already available: $(git --version)" -fi - -# --- Check Node.js --- -if ! command -v node >/dev/null 2>&1; then - msg_info "Node.js not found, installing Node.js 24.x..." - curl -fsSL https://deb.nodesource.com/setup_24.x | bash - - apt-get install -y nodejs - msg_ok "Node.js installed: $(node -v)" -else - msg_ok "Node.js already available: $(node -v)" -fi - -# --- Ask for installation path --- -read -rp "Installation directory [default: /opt/PVESciptslocal]: " INSTALL_DIR -INSTALL_DIR=${INSTALL_DIR:-/opt/PVESciptslocal} - -# --- Clone or update repository --- -if [ ! -d "$INSTALL_DIR/.git" ]; then - msg_info "Cloning repository into $INSTALL_DIR..." - git clone https://github.com/michelroegl-brunner/PVESciptslocal.git "$INSTALL_DIR" - msg_ok "Repository cloned." -else - msg_info "Directory already exists. Pulling latest changes..." - git -C "$INSTALL_DIR" pull - msg_ok "Repository updated." -fi - -cd "$INSTALL_DIR" - -# --- Install dependencies --- -msg_info "Installing dependencies..." -npm install -msg_ok "Dependencies installed." - -# --- Environment file --- -if [ ! -f .env ]; then - msg_info "Creating environment file from example..." - cp .env.example .env - msg_ok ".env file created." -else - msg_ok ".env file already exists, keeping it." -fi - -# --- Build the application --- -msg_info "Building application..." -npm run build -msg_ok "Build completed." - -# --- Start the application --- -read -rp "Do you want to start the application now? (y/N): " START_APP -if [[ "$START_APP" =~ ^[Yy]$ ]]; then - msg_info "Starting application..." - npm start -else - msg_info "You can start the app anytime by running: cd $INSTALL_DIR && npm start" -fi +#!/usr/bin/env bash +# ------------------------------------------------------------------------------ +# Installer for PVESciptslocal with systemd integration +# ------------------------------------------------------------------------------ + +set -euo pipefail + +# --- Core --------------------------------------------------------------------- +RD=$(echo -e "\033[01;31m") +GN=$(echo -e "\033[1;92m") +YW=$(echo -e "\033[33m") +CL=$(echo -e "\033[m") + +msg_info() { echo -e "⏳ $YW$1$CL"; } +msg_ok() { echo -e "✔️ $GN$1$CL"; } +msg_err() { echo -e "❌ $RD$1$CL"; } + +# --- PVE Check ---------------------------------------------------------------- +check_pve() { + if ! command -v pveversion >/dev/null 2>&1; then + msg_err "This script must be executed on a Proxmox VE host." + exit 1 + fi + msg_ok "Proxmox VE detected: $(pveversion)" +} + +# --- Dependency Check & Install ----------------------------------------------- +check_dependencies() { + msg_info "Checking required packages (build-essential, git)..." + apt-get update + apt-get install -y build-essential git + msg_ok "Dependencies installed." +} + +check_nodejs() { + if ! command -v node >/dev/null 2>&1; then + msg_info "Node.js not found, installing Node.js 24.x..." + curl -fsSL https://deb.nodesource.com/setup_24.x | bash - + apt-get install -y nodejs + msg_ok "Node.js installed: $(node -v)" + else + msg_ok "Node.js already available: $(node -v)" + fi +} + +# --- Repository Handling ------------------------------------------------------ +clone_or_update_repo() { + read -rp "Installation directory [default: /opt/PVESciptslocal]: " INSTALL_DIR + INSTALL_DIR=${INSTALL_DIR:-/opt/PVESciptslocal} + + if [ ! -d "$INSTALL_DIR/.git" ]; then + msg_info "Cloning repository into $INSTALL_DIR..." + git clone https://github.com/michelroegl-brunner/PVESciptslocal.git "$INSTALL_DIR" + msg_ok "Repository cloned." + else + msg_info "Directory already exists. Pulling latest changes..." + git -C "$INSTALL_DIR" pull + msg_ok "Repository updated." + fi + + cd "$INSTALL_DIR" +} + +# --- Application Setup -------------------------------------------------------- +setup_app() { + msg_info "Installing npm dependencies..." + npm install + msg_ok "Dependencies installed." + + if [ ! -f .env ]; then + msg_info "Creating environment file from example..." + cp .env.example .env + msg_ok ".env file created." + else + msg_ok ".env file already exists, keeping it." + fi + + msg_info "Building application..." + npm run build + msg_ok "Build completed." +} + +# --- Systemd Service ---------------------------------------------------------- +setup_systemd_service() { + SERVICE_NAME="pvescriptslocal" + SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" + + msg_info "Creating systemd service at $SERVICE_FILE..." + cat > "$SERVICE_FILE" <:3000" + echo "---------------------------------------------" +} + +# --- Main --------------------------------------------------------------------- +main() { + check_pve + check_dependencies + check_nodejs + clone_or_update_repo + setup_app + setup_systemd_service +} + +main "$@"