Merge pull request #20 from MickLesk/main

Add structured installer.sh with dependency checks and systemd service
This commit is contained in:
Michel Roegl-Brunner
2025-09-16 10:09:45 +02:00
committed by GitHub
2 changed files with 168 additions and 91 deletions

View File

@@ -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://<YOUR_PVE_IP>: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

View File

@@ -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" <<EOF
[Unit]
Description=PVEScriptslocal Service
After=network.target
[Service]
WorkingDirectory=${INSTALL_DIR}
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
Environment=NODE_ENV=production
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reexec
msg_ok "Systemd service created."
read -rp "Enable and start the service now? (y/N): " START_SERVICE
if [[ "$START_SERVICE" =~ ^[Yy]$ ]]; then
systemctl enable --now "$SERVICE_NAME"
msg_ok "Service enabled and started."
else
msg_info "You can start it manually with: systemctl start $SERVICE_NAME"
fi
echo
echo "---------------------------------------------"
echo " Service installed: $SERVICE_NAME"
echo " Manage it with:"
echo " systemctl start $SERVICE_NAME"
echo " systemctl stop $SERVICE_NAME"
echo " systemctl status $SERVICE_NAME"
echo " App will be available at: http://<IP>:3000"
echo "---------------------------------------------"
}
# --- Main ---------------------------------------------------------------------
main() {
check_pve
check_dependencies
check_nodejs
clone_or_update_repo
setup_app
setup_systemd_service
}
main "$@"