#!/bin/bash set -eo pipefail # WebsiteBox Install Script # Bootstrap script: installs Docker, clones repo, runs setup wizard # Usage: curl -fsSL /install.sh | bash echo "" echo "═══════════════════════════════════════════════════════════" echo " WebsiteBox Installer" echo "═══════════════════════════════════════════════════════════" echo "" # --- Check for root/sudo --- if [ "$(id -u)" -eq 0 ]; then SUDO="" ACTUAL_USER="${SUDO_USER:-root}" else if ! command -v sudo &>/dev/null; then echo "ERROR: This script requires root or sudo access." exit 1 fi SUDO="sudo" ACTUAL_USER="$(whoami)" fi # --- Detect OS --- if [ -f /etc/os-release ]; then # shellcheck disable=SC1091 . /etc/os-release OS_ID="$ID" OS_VERSION="$VERSION_ID" else echo "ERROR: Cannot detect OS. /etc/os-release not found." echo "WebsiteBox supports Ubuntu 20.04+ and Debian 11+." exit 1 fi case "$OS_ID" in ubuntu) if [ "${OS_VERSION%%.*}" -lt 20 ]; then echo "ERROR: Ubuntu 20.04 or later is required (detected: ${OS_VERSION})." exit 1 fi ;; debian) if [ "${OS_VERSION%%.*}" -lt 11 ]; then echo "ERROR: Debian 11 or later is required (detected: ${OS_VERSION})." exit 1 fi ;; *) echo "WARNING: Unsupported OS detected (${OS_ID} ${OS_VERSION})." echo "WebsiteBox is tested on Ubuntu 20.04+ and Debian 11+." read -rp "Continue anyway? (y/N) " cont if [ "$cont" != "y" ] && [ "$cont" != "Y" ]; then exit 1 fi ;; esac echo "Detected: ${OS_ID} ${OS_VERSION}" # --- Install Docker if needed --- DOCKER_JUST_INSTALLED=false if command -v docker &>/dev/null; then echo "Docker is already installed." else echo "Installing Docker..." # Install prerequisites $SUDO apt-get update -qq $SUDO apt-get install -y -qq ca-certificates curl gnupg lsb-release # Add Docker's GPG key $SUDO install -m 0755 -d /etc/apt/keyrings curl -fsSL "https://download.docker.com/linux/${OS_ID}/gpg" | $SUDO gpg --dearmor -o /etc/apt/keyrings/docker.gpg $SUDO chmod a+r /etc/apt/keyrings/docker.gpg # Add Docker repository echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${OS_ID} \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ $SUDO tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker $SUDO apt-get update -qq $SUDO apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin # Add user to docker group if [ "$ACTUAL_USER" != "root" ]; then $SUDO usermod -aG docker "$ACTUAL_USER" DOCKER_JUST_INSTALLED=true echo "Docker installed. User '${ACTUAL_USER}' added to docker group." fi # Start and enable Docker $SUDO systemctl start docker $SUDO systemctl enable docker echo "Docker installation complete." fi # --- Clone Repository --- INSTALL_DIR="${HOME}/websitebox" if [ -d "$INSTALL_DIR" ]; then echo "WebsiteBox directory already exists at ${INSTALL_DIR}" echo "Pulling latest changes..." cd "$INSTALL_DIR" git pull || true else echo "Cloning WebsiteBox..." git clone https://github.com/websitebox/websitebox.git "$INSTALL_DIR" cd "$INSTALL_DIR" fi # Make scripts executable chmod +x setup.sh install.sh scripts/*.sh # --- Run Setup Wizard --- echo "" if [ "$DOCKER_JUST_INSTALLED" = true ] && [ "$ACTUAL_USER" != "root" ]; then # Activate docker group for this session without requiring logout/login echo "Activating Docker permissions for current session..." sg docker -c "./setup.sh" else ./setup.sh fi echo "" echo "If 'docker compose' commands fail later, log out and back in" echo "to permanently activate Docker permissions, then try again." echo ""