Files
eagler-tiers/server/install.sh
starified 08bf320b57 uploaded
2026-04-21 22:03:19 -04:00

187 lines
6.2 KiB
Bash

#!/bin/bash
# EaglerTiers System Services Installation Script
# For Debian 13
# This script sets up the API and Discord bot as systemd services
set -e
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ EaglerTiers - System Services Setup (Debian 13) ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
# Check if running as root
if [[ $EUID -ne 0 ]]; then
echo "✗ This script must be run as root (use sudo)"
exit 1
fi
# Update package manager
echo "✓ Updating package manager..."
apt-get update
echo ""
# Check and install Node.js if needed
echo "✓ Checking Node.js installation..."
if ! command -v node &> /dev/null; then
echo " Node.js not found, installing from NodeSource repository..."
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs
echo " Node.js installed"
else
NODE_VERSION=$(node -v)
echo " Found Node.js: $NODE_VERSION"
fi
echo ""
# Check and install MariaDB if needed
echo "✓ Checking MariaDB installation..."
if ! command -v mysql &> /dev/null; then
echo " MariaDB client not found, installing MariaDB server and client..."
apt-get install -y mariadb-server mariadb-client
systemctl start mariadb
systemctl enable mariadb
echo " MariaDB installed and started"
else
echo " Found MariaDB/MySQL"
fi
echo ""
# Install other required dependencies
echo "✓ Installing system dependencies..."
apt-get install -y build-essential git
echo ""
echo "✓ This script will:"
echo " - Create/update systemd service files"
echo " - Create the eaglertiers user (if needed)"
echo " - Set up proper permissions"
echo " - Enable auto-start on boot"
echo ""
read -p "Continue? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
echo ""
# Create eaglertiers user if it doesn't exist
echo "✓ Setting up eaglertiers user..."
if ! id "eaglertiers" &>/dev/null; then
useradd -r -s /bin/bash -d /opt/eaglertiers -m eaglertiers
echo " Created eaglertiers user"
else
echo " eaglertiers user already exists"
fi
echo ""
# Find project root (where package.json is located)
echo "✓ Finding project directory..."
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# If script is in a subdirectory, go up to find package.json
PROJECT_ROOT="$SCRIPT_DIR"
if [ ! -f "$PROJECT_ROOT/package.json" ]; then
if [ -f "$PROJECT_ROOT/../package.json" ]; then
PROJECT_ROOT="$( cd "$PROJECT_ROOT/.." && pwd )"
elif [ -f "$PROJECT_ROOT/../../package.json" ]; then
PROJECT_ROOT="$( cd "$PROJECT_ROOT/../.." && pwd )"
fi
fi
if [ ! -f "$PROJECT_ROOT/package.json" ]; then
echo "✗ Could not find package.json in project root"
echo " Please run this script from the eaglertiers project directory"
exit 1
fi
echo " Found project at: $PROJECT_ROOT"
echo ""
# Copy project to /opt/eaglertiers if not already there
echo "✓ Setting up project directory..."
if [ ! -d "/opt/eaglertiers" ]; then
mkdir -p /opt/eaglertiers
echo " Created /opt/eaglertiers"
fi
if [ "$PROJECT_ROOT" != "/opt/eaglertiers" ]; then
echo " Copying project files to /opt/eaglertiers..."
cp -r "$PROJECT_ROOT"/* /opt/eaglertiers/ 2>/dev/null || true
cp -r "$PROJECT_ROOT"/.[^.]* /opt/eaglertiers/ 2>/dev/null || true
chown -R eaglertiers:eaglertiers /opt/eaglertiers
chmod 755 /opt/eaglertiers
echo " Files copied and permissions set"
fi
echo ""
# Install npm dependencies if needed
echo "✓ Installing npm dependencies..."
cd /opt/eaglertiers
if [ ! -d "node_modules" ]; then
sudo -u eaglertiers npm install --production
echo " Dependencies installed"
else
echo " Dependencies already installed"
fi
echo ""
# Seed database
echo "✓ Database setup..."
read -p "Seed database with sample data? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
sudo -u eaglertiers ALLOW_SEED=YES_WIPE_AND_SEED npm run seed
echo " Database seeded"
else
echo " Skipping database seed"
fi
echo ""
# Install systemd service files
echo "✓ Installing systemd service files..."
cp "$SCRIPT_DIR/eaglertiers-api.service" /etc/systemd/system/
cp "$SCRIPT_DIR/eaglertiers-bot.service" /etc/systemd/system/
chmod 644 /etc/systemd/system/eaglertiers-api.service
chmod 644 /etc/systemd/system/eaglertiers-bot.service
systemctl daemon-reload
echo " Service files installed and loaded"
echo ""
# Enable services
echo "✓ Enabling services..."
systemctl enable eaglertiers-api.service
systemctl enable eaglertiers-bot.service
echo " Services enabled (will start on boot)"
echo ""
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ Installation Complete! ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
echo "Service Management Commands:"
echo ""
echo " API Server:"
echo " sudo systemctl start eaglertiers-api"
echo " sudo systemctl stop eaglertiers-api"
echo " sudo systemctl restart eaglertiers-api"
echo " sudo systemctl status eaglertiers-api"
echo " sudo journalctl -u eaglertiers-api -f # View logs"
echo ""
echo " Discord Bot:"
echo " sudo systemctl start eaglertiers-bot"
echo " sudo systemctl stop eaglertiers-bot"
echo " sudo systemctl restart eaglertiers-bot"
echo " sudo systemctl status eaglertiers-bot"
echo " sudo journalctl -u eaglertiers-bot -f # View logs"
echo ""
echo " Both Together:"
echo " sudo systemctl restart eaglertiers-api eaglertiers-bot"
echo " sudo systemctl stop eaglertiers-api eaglertiers-bot"
echo " sudo systemctl status eaglertiers-api eaglertiers-bot"
echo ""
echo " View All Logs:"
echo " sudo journalctl -u eaglertiers-api -u eaglertiers-bot -f"
echo ""