mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 22:35:42 +00:00
* Next steps for productionization * Run deploy job on self-hosted runner for secure SSH * Temporarily disable production environment to debug runner * Use ubuntu-latest for deploy job * Add remote_tags to oci_push for latest tag
150 lines
3.8 KiB
Bash
Executable File
150 lines
3.8 KiB
Bash
Executable File
#!/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 ""
|