187 lines
6.2 KiB
Bash
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 ""
|