#!/bin/bash # # Setup script for Eagle0 production droplet # Run this on a fresh DigitalOcean droplet (Ubuntu 24.04) # # Usage: curl -sSL https://raw.githubusercontent.com/nolen777/eagle0/main/scripts/setup_droplet.sh | sudo bash # set -euo pipefail DOMAIN="${DOMAIN:-eagle0.net}" DEPLOY_USER="${DEPLOY_USER:-deploy}" APP_DIR="/opt/eagle0" echo "=== Eagle0 Production Server Setup ===" echo "Domain: ${DOMAIN}" echo "Deploy user: ${DEPLOY_USER}" echo "" # Check if running as root if [[ $EUID -ne 0 ]]; then echo "This script must be run as root (use sudo)" exit 1 fi echo "=== Updating system ===" apt-get update apt-get upgrade -y echo "=== Installing Docker ===" if ! command -v docker &> /dev/null; then curl -fsSL https://get.docker.com | sh systemctl enable docker systemctl start docker else echo "Docker already installed" fi echo "=== Installing Docker Compose plugin ===" apt-get install -y docker-compose-plugin echo "=== Installing additional utilities ===" apt-get install -y \ curl \ wget \ git \ netcat-openbsd \ jq \ htop \ unattended-upgrades echo "=== Configuring automatic security updates ===" cat > /etc/apt/apt.conf.d/20auto-upgrades << 'EOF' APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7"; EOF echo "=== Creating deploy user ===" if ! id "${DEPLOY_USER}" &>/dev/null; then useradd -m -s /bin/bash -G docker "${DEPLOY_USER}" mkdir -p "/home/${DEPLOY_USER}/.ssh" chmod 700 "/home/${DEPLOY_USER}/.ssh" chown -R "${DEPLOY_USER}:${DEPLOY_USER}" "/home/${DEPLOY_USER}/.ssh" echo "" echo "*** IMPORTANT: Add your SSH public key to /home/${DEPLOY_USER}/.ssh/authorized_keys ***" echo "" else echo "User ${DEPLOY_USER} already exists" # Ensure user is in docker group usermod -aG docker "${DEPLOY_USER}" fi echo "=== Creating application directory ===" mkdir -p "${APP_DIR}"/{nginx,certbot/conf,certbot/www,saves} chown -R "${DEPLOY_USER}:${DEPLOY_USER}" "${APP_DIR}" echo "=== Configuring Docker registry authentication ===" echo "" echo "*** IMPORTANT: Run the following command to authenticate with DigitalOcean Container Registry: ***" echo " docker login registry.digitalocean.com" echo "" echo "=== Creating systemd service ===" cat > /etc/systemd/system/eagle0.service << EOF [Unit] Description=Eagle0 Game Servers Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=${APP_DIR} ExecStart=/usr/bin/docker compose -f docker-compose.prod.yml up -d ExecStop=/usr/bin/docker compose -f docker-compose.prod.yml down User=${DEPLOY_USER} Group=${DEPLOY_USER} [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable eagle0 echo "=== Configuring firewall (UFW) ===" if ! command -v ufw &> /dev/null; then apt-get install -y ufw fi ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw allow 80/tcp ufw allow 443/tcp ufw --force enable echo "=== Setting up log rotation ===" cat > /etc/logrotate.d/eagle0 << EOF /var/log/eagle0/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 ${DEPLOY_USER} ${DEPLOY_USER} sharedscripts } EOF mkdir -p /var/log/eagle0 chown "${DEPLOY_USER}:${DEPLOY_USER}" /var/log/eagle0 echo "" echo "=== Setup Complete ===" echo "" echo "Next steps:" echo "1. Add SSH public key to /home/${DEPLOY_USER}/.ssh/authorized_keys" echo "2. Copy docker-compose.prod.yml to ${APP_DIR}/" echo "3. Copy nginx/nginx.conf to ${APP_DIR}/nginx/" echo "4. Create .env file in ${APP_DIR}/ with OPENAI_API_KEY" echo "5. Run: docker login registry.digitalocean.com" echo "6. Get SSL certificate: (see init_ssl.sh)" echo "7. Start services: systemctl start eagle0" echo "" echo "Server IP: $(curl -s ifconfig.me)" echo ""