163 lines
4.6 KiB
Bash
163 lines
4.6 KiB
Bash
#!/bin/bash
|
|
# Production Setup Script for Faction War Dispatch Bot
|
|
# Run this script on your Linux server
|
|
|
|
set -e # Exit on error
|
|
|
|
echo "========================================"
|
|
echo "Faction War Dispatch Bot - Setup Script"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Please run as root (use sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Get domain name
|
|
read -p "Enter your domain name (e.g., faction.yourdomain.com): " DOMAIN
|
|
if [ -z "$DOMAIN" ]; then
|
|
echo "Domain name is required!"
|
|
exit 1
|
|
fi
|
|
|
|
# Get email for Let's Encrypt
|
|
read -p "Enter your email for SSL certificate (Let's Encrypt): " EMAIL
|
|
if [ -z "$EMAIL" ]; then
|
|
echo "Email is required for SSL certificate!"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Installing required packages..."
|
|
apt update
|
|
apt install -y python3 python3-pip python3-venv nginx certbot python3-certbot-nginx git
|
|
|
|
echo ""
|
|
echo "Creating application user..."
|
|
if ! id "factionwar" &>/dev/null; then
|
|
adduser --group --home /opt/faction-war factionwar
|
|
fi
|
|
|
|
echo ""
|
|
echo "Setting up application directory..."
|
|
mkdir -p /opt/faction-war
|
|
cd /opt/faction-war
|
|
|
|
# If app directory doesn't exist, clone or expect user to upload files
|
|
if [ ! -d "app" ]; then
|
|
echo "Please upload your application files to /opt/faction-war/app"
|
|
echo "Or clone from git repository"
|
|
exit 1
|
|
fi
|
|
|
|
cd app
|
|
|
|
echo ""
|
|
echo "Setting up Python virtual environment..."
|
|
if [ ! -d "venv" ]; then
|
|
sudo -u factionwar python3 -m venv venv
|
|
fi
|
|
|
|
echo "Installing Python dependencies..."
|
|
sudo -u factionwar venv/bin/pip install -r requirements.txt
|
|
|
|
echo ""
|
|
echo "Creating data directory..."
|
|
mkdir -p /opt/faction-war/app/data
|
|
chown -R factionwar:factionwar /opt/faction-war/app/data
|
|
chmod 700 /opt/faction-war/app/data
|
|
|
|
echo ""
|
|
echo "Setting up environment file..."
|
|
if [ ! -f ".env" ]; then
|
|
cp .env.example .env
|
|
echo ""
|
|
echo "⚠️ IMPORTANT: Edit /opt/faction-war/app/.env with your configuration!"
|
|
echo " Generate secure secrets with:"
|
|
echo " - AUTH_PASSWORD: openssl rand -base64 32"
|
|
echo " - JWT_SECRET: openssl rand -hex 64"
|
|
echo ""
|
|
read -p "Press Enter to edit .env file now (or Ctrl+C to exit and edit later)..."
|
|
nano .env
|
|
fi
|
|
|
|
chown factionwar:factionwar .env
|
|
chmod 600 .env
|
|
|
|
echo ""
|
|
echo "Setting up Nginx configuration..."
|
|
cat nginx.conf.example | sed "s/yourdomain.com/$DOMAIN/g" > /tmp/faction-war-nginx.conf
|
|
cp /tmp/faction-war-nginx.conf /etc/nginx/sites-available/faction-war
|
|
ln -sf /etc/nginx/sites-available/faction-war /etc/nginx/sites-enabled/faction-war
|
|
|
|
# Remove default nginx site if it exists
|
|
rm -f /etc/nginx/sites-enabled/default
|
|
|
|
echo ""
|
|
echo "Testing Nginx configuration..."
|
|
nginx -t
|
|
|
|
echo ""
|
|
echo "Getting SSL certificate from Let's Encrypt..."
|
|
certbot --nginx -d $DOMAIN --non-interactive --agree-tos --email $EMAIL
|
|
|
|
echo ""
|
|
echo "Setting up systemd service..."
|
|
cp faction-war.service /etc/systemd/system/faction-war.service
|
|
systemctl daemon-reload
|
|
systemctl enable faction-war
|
|
systemctl start faction-war
|
|
|
|
echo ""
|
|
echo "Configuring firewall..."
|
|
ufw --force enable
|
|
ufw allow ssh
|
|
ufw allow 80/tcp
|
|
ufw allow 443/tcp
|
|
|
|
echo ""
|
|
echo "Setting up backup cron job..."
|
|
cat > /opt/faction-war/backup.sh << 'EOF'
|
|
#!/bin/bash
|
|
BACKUP_DIR="/opt/faction-war/backups"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
APP_DIR="/opt/faction-war/app"
|
|
|
|
mkdir -p $BACKUP_DIR
|
|
tar -czf $BACKUP_DIR/data_backup_$DATE.tar.gz -C $APP_DIR data/
|
|
find $BACKUP_DIR -name "data_backup_*.tar.gz" -mtime +7 -delete
|
|
echo "Backup completed: data_backup_$DATE.tar.gz"
|
|
EOF
|
|
|
|
chmod +x /opt/faction-war/backup.sh
|
|
|
|
# Add to crontab if not already present
|
|
(crontab -l 2>/dev/null | grep -v backup.sh; echo "0 2 * * * /opt/faction-war/backup.sh") | crontab -
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "✅ Setup Complete!"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "Your application should now be running at: https://$DOMAIN"
|
|
echo ""
|
|
echo "Important next steps:"
|
|
echo "1. Visit https://$DOMAIN and log in with your AUTH_PASSWORD"
|
|
echo "2. Configure your API keys in the Settings page"
|
|
echo "3. Test the application functionality"
|
|
echo ""
|
|
echo "Useful commands:"
|
|
echo " - Check status: sudo systemctl status faction-war"
|
|
echo " - View logs: sudo journalctl -u faction-war -f"
|
|
echo " - Restart: sudo systemctl restart faction-war"
|
|
echo " - Update code: cd /opt/faction-war/app && git pull && sudo systemctl restart faction-war"
|
|
echo ""
|
|
echo "Security reminders:"
|
|
echo " - Keep your .env file secure (chmod 600)"
|
|
echo " - Regularly update: apt update && apt upgrade"
|
|
echo " - Monitor logs for suspicious activity"
|
|
echo " - Backup data regularly (automated at 2 AM daily)"
|
|
echo ""
|