#!/bin/bash # Proxmox VE 자동화 설정 스크립트 # 목적: VM 및 LXC 생성, 스크립트 실행 자동화 # 실행: root 계정에서만 가능 # 사용법: ./proxmox/setup.sh set -e # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 함수: 메시지 출력 print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[✓]${NC} $1" } print_warning() { echo -e "${YELLOW}[⚠]${NC} $1" } print_error() { echo -e "${RED}[✗]${NC} $1" } # Root 권한 확인 if [[ $EUID -ne 0 ]]; then print_error "이 스크립트는 root 권한으로 실행되어야 합니다." exit 1 fi # Proxmox 설치 여부 확인 if ! command -v qm &> /dev/null; then print_error "Proxmox VE가 설치되어 있지 않습니다." exit 1 fi print_info "==========================================" print_info "Proxmox VE 테스트 서버 자동화 설정" print_info "==========================================" echo "" # 1. Git 저장소 확인 REPO_URL="https://git.siane.kr/firstgarden/cafe24-testserver.git" REPO_DIR="/root/cafe24-testserver" read -p "Git 저장소 URL [${REPO_URL}]: " input_repo REPO_URL="${input_repo:-$REPO_URL}" print_info "저장소 클론 중: $REPO_URL" if [ -d "$REPO_DIR" ]; then print_warning "기존 저장소가 있습니다. 업데이트 중..." cd "$REPO_DIR" git pull else git clone "$REPO_URL" "$REPO_DIR" fi cd "$REPO_DIR" print_success "저장소 설정 완료: $REPO_DIR" echo "" # 2. VM 생성 print_info "==========================================" print_info "VM 생성 설정" print_info "==========================================" echo "" read -p "VM1 ID (기본값: 101): " VM1_ID VM1_ID="${VM1_ID:-101}" read -p "VM1 이름 (기본값: vm1-php82): " VM1_NAME VM1_NAME="${VM1_NAME:-vm1-php82}" read -p "VM1 메모리 (MB, 기본값: 2048): " VM1_MEMORY VM1_MEMORY="${VM1_MEMORY:-2048}" read -p "VM1 CPU 코어 (기본값: 2): " VM1_CORES VM1_CORES="${VM1_CORES:-2}" read -p "VM1 디스크 (GB, 기본값: 30): " VM1_DISK VM1_DISK="${VM1_DISK:-30}" echo "" read -p "VM2 ID (기본값: 102): " VM2_ID VM2_ID="${VM2_ID:-102}" read -p "VM2 이름 (기본값: vm2-php84): " VM2_NAME VM2_NAME="${VM2_NAME:-vm2-php84}" read -p "VM2 메모리 (MB, 기본값: 2048): " VM2_MEMORY VM2_MEMORY="${VM2_MEMORY:-2048}" read -p "VM2 CPU 코어 (기본값: 2): " VM2_CORES VM2_CORES="${VM2_CORES:-2}" read -p "VM2 디스크 (GB, 기본값: 30): " VM2_DISK VM2_DISK="${VM2_DISK:-30}" print_info "Rocky Linux ISO 경로: " read -p "ISO 경로 (예: local:iso/Rocky-9.0-latest.iso) [local:iso/Rocky-9.0-latest.iso]: " ISO_PATH ISO_PATH="${ISO_PATH:-local:iso/Rocky-9.0-latest.iso}" # 3. LXC 생성 print_info "==========================================" print_info "LXC 생성 설정" print_info "==========================================" echo "" read -p "LXC ID (기본값: 201): " LXC_ID LXC_ID="${LXC_ID:-201}" read -p "LXC 호스트명 (기본값: lxc-db): " LXC_HOSTNAME LXC_HOSTNAME="${LXC_HOSTNAME:-lxc-db}" read -p "LXC 메모리 (MB, 기본값: 2048): " LXC_MEMORY LXC_MEMORY="${LXC_MEMORY:-2048}" read -p "LXC CPU 코어 (기본값: 2): " LXC_CORES LXC_CORES="${LXC_CORES:-2}" read -p "LXC 디스크 (GB, 기본값: 20): " LXC_DISK LXC_DISK="${LXC_DISK:-20}" print_info "Rocky Linux LXC 템플릿 경로: " read -p "템플릿 경로 [local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz]: " LXC_TEMPLATE LXC_TEMPLATE="${LXC_TEMPLATE:-local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz}" # 4. 설정 요약 및 확인 print_info "==========================================" print_info "설정 요약" print_info "==========================================" echo "" echo "Git 저장소:" echo " URL: $REPO_URL" echo " 경로: $REPO_DIR" echo "" echo "VM1:" echo " ID: $VM1_ID" echo " 이름: $VM1_NAME" echo " 메모리: ${VM1_MEMORY}MB" echo " CPU: ${VM1_CORES} Core" echo " 디스크: ${VM1_DISK}GB" echo "" echo "VM2:" echo " ID: $VM2_ID" echo " 이름: $VM2_NAME" echo " 메모리: ${VM2_MEMORY}MB" echo " CPU: ${VM2_CORES} Core" echo " 디스크: ${VM2_DISK}GB" echo "" echo "LXC:" echo " ID: $LXC_ID" echo " 호스트명: $LXC_HOSTNAME" echo " 메모리: ${LXC_MEMORY}MB" echo " CPU: ${LXC_CORES} Core" echo " 디스크: ${LXC_DISK}GB" echo "" echo "ISO: $ISO_PATH" echo "LXC 템플릿: $LXC_TEMPLATE" echo "" read -p "위 설정으로 진행하시겠습니까? (y/n): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then print_warning "취소되었습니다." exit 0 fi # 5. VM1 생성 함수 create_vm() { local vm_id=$1 local vm_name=$2 local memory=$3 local cores=$4 local disk=$5 local php_version=$6 print_info "VM$((vm_id-100)) 생성 중 (ID: $vm_id)..." # VM 생성 qm create "$vm_id" \ --name "$vm_name" \ --memory "$memory" \ --cores "$cores" \ --scsihw virtio-scsi-pci \ --scsi0 "local-lvm:${disk}" \ --net0 virtio,bridge=vmbr0 \ --cdrom "$ISO_PATH" \ --serial0 socket \ --boot c print_success "VM $vm_name (ID: $vm_id) 생성 완료" echo "" print_warning "Rocky Linux 9 설치 필요" print_info "1. Proxmox 웹 UI에서 VM 콘솔로 접속" print_info "2. Rocky Linux 9 설치 진행" print_info "3. 설치 중 사용자 계정 생성 (권장: firstgarden)" print_info "4. 설치 완료 후 다음 명령어 실행:" echo "" echo " ssh firstgarden@" echo " curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/archive/main.tar.gz | tar xz" echo " cd cafe24-testserver-main" echo " chmod +x vm/setup_common.sh" echo " ./vm/setup_common.sh" echo " chmod +x vm/install_php.sh" echo " ./vm/install_php.sh $php_version" echo "" } # 6. LXC 생성 함수 create_lxc() { local lxc_id=$1 local lxc_hostname=$2 local memory=$3 local cores=$4 local disk=$5 print_info "LXC 생성 중 (ID: $lxc_id)..." pct create "$lxc_id" "$LXC_TEMPLATE" \ -hostname "$lxc_hostname" \ -memory "$memory" \ -cores "$cores" \ -rootfs "local-lvm:${disk}" \ -net0 name=eth0,bridge=vmbr0,ip=dhcp print_success "LXC $lxc_hostname (ID: $lxc_id) 생성 완료" echo "" print_info "LXC 스크립트 실행 중..." # LXC 시작 pct start "$lxc_id" sleep 5 # 스크립트 다운로드 및 실행 pct exec "$lxc_id" -- bash -c " set -e cd /root curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/archive/main.tar.gz | tar xz cd cafe24-testserver-main chmod +x lxc/setup_mariadb.sh ./lxc/setup_mariadb.sh " print_success "LXC MariaDB 설정 완료" echo "" } # 7. 실행 print_info "==========================================" print_info "VM 및 LXC 생성 시작" print_info "==========================================" echo "" # VM1 생성 create_vm "$VM1_ID" "$VM1_NAME" "$VM1_MEMORY" "$VM1_CORES" "$VM1_DISK" "8.2" # VM2 생성 create_vm "$VM2_ID" "$VM2_NAME" "$VM2_MEMORY" "$VM2_CORES" "$VM2_DISK" "8.4" # LXC 생성 create_lxc "$LXC_ID" "$LXC_HOSTNAME" "$LXC_MEMORY" "$LXC_CORES" "$LXC_DISK" # 완료 print_success "==========================================" print_success "모든 설정이 완료되었습니다!" print_success "==========================================" echo "" echo "다음 단계:" echo "1. Proxmox 웹 UI에서 각 VM의 상태 확인" echo "2. VM 설치 완료 후 스크립트 실행" echo "3. LXC MariaDB 스크립트는 자동 실행됨" echo "" echo "LXC IP 확인:" echo " pct exec $LXC_ID -- ip addr show eth0 | grep inet" echo "" echo "VM IP 확인:" echo " qm guest cmd $VM1_ID guest-get-network-info" echo ""