- proxmox/setup.sh: 전체 자동화 (VM + LXC 동시 생성) * 대화형 입력으로 ID, 리소스 설정 가능 * VM1 (PHP 8.2), VM2 (PHP 8.4), LXC (MariaDB) 생성 * 설정 요약 및 확인 절차 포함 * 설치 가이드 제공 - proxmox/create_vm.sh: 개별 VM 생성 * 사용자가 VM ID와 리소스 지정 가능 * 기존 ID 중복 확인 * 기본값 제공 (메모리 2GB, CPU 2Core, 디스크 30GB) - proxmox/create_lxc.sh: 개별 LXC 생성 및 자동 설정 * 사용자가 LXC ID와 리소스 지정 가능 * 자동 IP 확인 및 표시 * MariaDB 설정 스크립트 자동 실행 - proxmox/README.md: 완전한 사용 가이드 * 각 스크립트 상세 설명 * 사용 예시 제공 * 문제 해결 섹션 * 기본 설정값 표시 - README.md 개선 * 디렉토리 구조에 proxmox 폴더 추가 * Proxmox 자동화 방법 안내 * 수동 생성 가이드 유지
287 lines
7.6 KiB
Bash
287 lines
7.6 KiB
Bash
#!/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://github.com/yourusername/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@<VM_IP>"
|
|
echo " curl -fsSL https://github.com/yourusername/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://github.com/yourusername/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 ""
|