#!/bin/bash # ============================================================================= # deploy-vm.sh - Helper script for deploying Project Afterlife on a specific VM # ============================================================================= # Usage: ./deploy-vm.sh # Example: ./deploy-vm.sh web # # Available VMs: web, auth, nier, dbo, maple2, fusionfall # ============================================================================= set -e VM_NAME="$1" PROJECT_DIR="/opt/project-afterlife" COMPOSE_DIR="$PROJECT_DIR/docker" if [ -z "$VM_NAME" ]; then echo "Usage: $0 " echo "Available VMs: web, auth, nier, dbo, maple2, fusionfall" exit 1 fi case "$VM_NAME" in web) COMPOSE_FILE="docker-compose.web.yml" SERVICES="web cms postgres minio nginx" ;; auth) COMPOSE_FILE="docker-compose.auth.yml" SERVICES="authentik-server authentik-worker authentik-postgres authentik-redis" ;; nier) COMPOSE_FILE="docker-compose.nier.yml" SERVICES="nier-server" ;; dbo) COMPOSE_FILE="docker-compose.dbo.yml" SERVICES="dbo-mariadb" ;; maple2) COMPOSE_FILE="docker-compose.maple2.yml" SERVICES="maple2-world maple2-login maple2-game-ch0 maple2-web maple2-mysql" ;; fusionfall) COMPOSE_FILE="docker-compose.fusionfall.yml" SERVICES="openfusion" ;; *) echo "Unknown VM: $VM_NAME" echo "Available VMs: web, auth, nier, dbo, maple2, fusionfall" exit 1 ;; esac echo "==========================================" echo "Deploying VM: $VM_NAME" echo "Compose file: $COMPOSE_FILE" echo "Services: $SERVICES" echo "==========================================" cd "$PROJECT_DIR" echo "[1/4] Pulling latest code..." git pull origin main echo "[2/4] Building images..." cd "$COMPOSE_DIR" docker compose -f "$COMPOSE_FILE" build echo "[3/4] Starting services..." docker compose -f "$COMPOSE_FILE" up -d echo "[4/4] Checking health..." sleep 5 docker compose -f "$COMPOSE_FILE" ps echo "==========================================" echo "Deployment of $VM_NAME complete!" echo "==========================================" # Special handling for web VM: rebuild Next.js case "$VM_NAME" in web) echo "[Extra] Rebuilding Next.js app..." docker compose -f "$COMPOSE_FILE" exec web npm run build docker compose -f "$COMPOSE_FILE" restart web echo "Next.js rebuilt and restarted." ;; maple2) echo "[Extra] MapleStory 2 deployed." echo "Remember to set GAME_IP and LOGIN_IP in servers/maple2/.env to the VM's public IP." ;; nier) echo "[Extra] NieR Reincarnation deployed." echo "Remember to:" echo " 1. Place AssetDatabase and MasterDatabase in the data volume" echo " 2. Update RESOURCES_BASE_URL in .env (must be 43 chars after host)" echo " 3. Patch the APK with scripts/patcher.ipynb (Google Colab)" ;; dbo) echo "[Extra] DBO Global deployed." echo "WARNING: DBO server is currently a placeholder. The C++ server requires" echo "Windows or Wine. Consider running it on a dedicated Windows VM." ;; esac