모든 파일의 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곳
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://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 ""
|