Files
cafe24-testserver/proxmox/setup.sh
KWON c95547628b 저장소 주소 변경: GitHub Gitea
모든 파일의 Git 저장소 주소를 변경:
- https://github.com/yourusername/cafe24-testserver
   https://git.siane.kr/firstgarden/cafe24-testserver

변경된 파일:
- README.md: 3곳
- proxmox/README.md: 4곳
- proxmox/setup.sh: 3곳
- proxmox/create_vm.sh: 1곳
- proxmox/create_lxc.sh: 2곳
- vm/setup_common.sh: 1곳
- lxc/setup_mariadb.sh: 1곳
2025-12-23 11:54:41 +09:00

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://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@<VM_IP>"
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 ""