#!/bin/bash # ============================================================================= # setup-game-vm.sh — Preparar una VM limpia para un servidor de juegos # ============================================================================= # Uso: ./setup-game-vm.sh # Ejemplo: ./setup-game-vm.sh nier # # Instala Docker, Docker Compose, Git, configura firewall y deja todo listo # para ejecutar install.sh # ============================================================================= set -e GAME="$1" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_ok() { echo -e "${GREEN}[OK]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } if [ -z "$GAME" ]; then log_error "Debes especificar el nombre del juego." echo "Uso: $0 " echo "Ejemplos: nier, dbo, maple2, fusionfall" exit 1 fi # ----------------------------------------------------------------------------- # Puertos por juego # ----------------------------------------------------------------------------- declare -A GAME_PORTS declare -A GAME_RAM declare -A GAME_DESC GAME_PORTS[nier]="80/tcp 443/tcp" GAME_PORTS[dbo]="22000/tcp 22001/tcp 22002/tcp 22003/tcp 22004/tcp 22005/tcp 22006/tcp 22007/tcp 22008/tcp 22009/tcp 22010/tcp" GAME_PORTS[maple2]="20001/tcp 21001/tcp 20003/tcp 21003/tcp 4000/tcp" GAME_PORTS[fusionfall]="23000/tcp 23001/tcp" GAME_RAM[nier]="1" GAME_RAM[dbo]="2" GAME_RAM[maple2]="2" GAME_RAM[fusionfall]="512" GAME_DESC[nier]="NieR Reincarnation (MariesWonderland)" GAME_DESC[dbo]="Dragon Ball Online (DBO Global)" GAME_DESC[maple2]="MapleStory 2 (Maple2)" GAME_DESC[fusionfall]="FusionFall (OpenFusion)" PORTS="${GAME_PORTS[$GAME]}" RAM="${GAME_RAM[$GAME]}" DESC="${GAME_DESC[$GAME]}" if [ -z "$PORTS" ]; then log_error "Juego desconocido: $GAME" exit 1 fi echo "" echo "==========================================" echo " Setup VM: $DESC" echo "==========================================" echo "" # ----------------------------------------------------------------------------- # 1. Actualizar sistema # ----------------------------------------------------------------------------- log_info "Actualizando sistema..." apt-get update && apt-get upgrade -y # ----------------------------------------------------------------------------- # 2. Instalar dependencias # ----------------------------------------------------------------------------- log_info "Instalando dependencias..." apt-get install -y curl wget git ufw ca-certificates gnupg lsb-release # ----------------------------------------------------------------------------- # 3. Instalar Docker # ----------------------------------------------------------------------------- if ! command -v docker &> /dev/null; then log_info "Instalando Docker..." curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl enable docker systemctl start docker log_ok "Docker instalado." else log_ok "Docker ya estaba instalado." fi # ----------------------------------------------------------------------------- # 4. Firewall # ----------------------------------------------------------------------------- log_info "Configurando firewall..." ufw default deny incoming ufw default allow outgoing ufw allow ssh for port in $PORTS; do ufw allow "$port" log_info " Puerto abierto: $port" done ufw --force enable log_ok "Firewall configurado." # ----------------------------------------------------------------------------- # 5. Directorio del proyecto # ----------------------------------------------------------------------------- PROJECT_DIR="/opt/project-afterlife" mkdir -p "$PROJECT_DIR" # ----------------------------------------------------------------------------- # 6. Resumen # ----------------------------------------------------------------------------- echo "" echo "==========================================" echo " VM $GAME — Setup Completado" echo "==========================================" echo "" echo "Juego: $DESC" echo "RAM estimada: ${RAM} GB" echo "Puertos: $PORTS" echo "Docker: $(docker --version)" echo "UFW: activo" echo "" echo "Proximos pasos:" echo " 1. git clone https://git.consultoria-as.com/consultoria-as/project-afterlife.git $PROJECT_DIR" echo " 2. cd $PROJECT_DIR" echo " 3. cp docker/.env.example docker/.env" echo " 4. Edita las variables especificas de $GAME en docker/.env" echo " 5. ./scripts/install.sh $GAME" echo ""