#!/bin/bash # Proxmox VE - LXC 생성 및 MariaDB 설정 스크립트 # 목적: 단일 LXC 생성 및 자동 설정 # 사용법: ./proxmox/create_lxc.sh # 실행: root 계정에서만 가능 set -e # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 함수: 메시지 출력 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 pct &> /dev/null; then print_error "Proxmox VE가 설치되어 있지 않습니다." exit 1 fi # 기본값 DEFAULT_MEMORY=2048 DEFAULT_CORES=2 DEFAULT_DISK=20 DEFAULT_TEMPLATE="local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz" GIT_REPO="https://git.siane.kr/firstgarden/cafe24-testserver.git" print_info "==========================================" print_info "Proxmox VE - LXC 생성 및 MariaDB 설정" print_info "==========================================" echo "" # 사용자 입력 read -p "LXC ID (예: 201): " LXC_ID if [[ -z "$LXC_ID" ]]; then print_error "LXC ID는 필수입니다." exit 1 fi # LXC ID가 이미 존재하는지 확인 if pct status "$LXC_ID" &>/dev/null 2>&1; then print_error "LXC ID $LXC_ID가 이미 존재합니다." exit 1 fi read -p "호스트명 (예: lxc-db): " HOSTNAME if [[ -z "$HOSTNAME" ]]; then print_error "호스트명은 필수입니다." exit 1 fi read -p "메모리 (MB) [기본값: $DEFAULT_MEMORY]: " LXC_MEMORY LXC_MEMORY="${LXC_MEMORY:-$DEFAULT_MEMORY}" read -p "CPU 코어 [기본값: $DEFAULT_CORES]: " LXC_CORES LXC_CORES="${LXC_CORES:-$DEFAULT_CORES}" read -p "디스크 (GB) [기본값: $DEFAULT_DISK]: " LXC_DISK LXC_DISK="${LXC_DISK:-$DEFAULT_DISK}" read -p "LXC 템플릿 [기본값: $DEFAULT_TEMPLATE]: " TEMPLATE TEMPLATE="${TEMPLATE:-$DEFAULT_TEMPLATE}" read -p "Git 저장소 URL [기본값: $GIT_REPO]: " REPO_URL REPO_URL="${REPO_URL:-$GIT_REPO}" # 설정 요약 print_info "==========================================" print_info "설정 요약" print_info "==========================================" echo "" echo "ID: $LXC_ID" echo "호스트명: $HOSTNAME" echo "메모리: ${LXC_MEMORY}MB" echo "CPU: ${LXC_CORES} Core" echo "디스크: ${LXC_DISK}GB" echo "템플릿: $TEMPLATE" echo "Git 저장소: $REPO_URL" echo "" read -p "위 설정으로 LXC를 생성하시겠습니까? (y/n): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then print_warning "취소되었습니다." exit 0 fi # LXC 생성 print_info "LXC 생성 중..." pct create "$LXC_ID" "$TEMPLATE" \ -hostname "$HOSTNAME" \ -memory "$LXC_MEMORY" \ -cores "$LXC_CORES" \ -rootfs "local-lvm:${LXC_DISK}" \ -net0 name=eth0,bridge=vmbr0,ip=dhcp if [ $? -ne 0 ]; then print_error "LXC 생성에 실패했습니다." exit 1 fi print_success "LXC 생성 완료" echo "" # LXC 시작 print_info "LXC 시작 중..." pct start "$LXC_ID" sleep 10 # LXC IP 확인 print_info "LXC IP 확인 중..." LXC_IP=$(pct exec "$LXC_ID" -- ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1) if [ -z "$LXC_IP" ]; then print_warning "LXC IP를 자동으로 확인할 수 없습니다." print_info "수동으로 확인하려면: pct exec $LXC_ID -- ip addr show eth0" else print_success "LXC IP: $LXC_IP" fi echo "" # MariaDB 스크립트 실행 print_info "==========================================" print_info "MariaDB 설정 스크립트 실행" print_info "==========================================" echo "" print_info "스크립트 다운로드 중..." pct exec "$LXC_ID" -- bash -c " cd /root if command -v git &>/dev/null; then git clone '$REPO_URL' cafe24-testserver else curl -fsSL 'https://git.siane.kr/firstgarden/cafe24-testserver/archive/main.tar.gz' | tar xz mv cafe24-testserver-main cafe24-testserver fi " if [ $? -ne 0 ]; then print_warning "스크립트 다운로드에 실패했습니다." echo "" print_info "수동으로 스크립트 실행:" echo " pct exec $LXC_ID -- bash" echo " cd /root" echo " curl -fsSL '$REPO_URL/archive/main.tar.gz' | tar xz" echo " cd cafe24-testserver-main" echo " chmod +x lxc/setup_mariadb.sh" echo " ./lxc/setup_mariadb.sh" exit 0 fi print_success "스크립트 다운로드 완료" echo "" # MariaDB 설정 실행 print_info "MariaDB 설정 스크립트 실행 중..." echo "주의: 다음 입력이 필요합니다:" echo " - Linux 사용자 이름" echo " - Linux 사용자 비밀번호" echo " - DB 계정 통합 여부 (Y/n)" echo " - Database 이름" echo "" pct exec "$LXC_ID" -- bash -c " cd /root/cafe24-testserver chmod +x lxc/setup_mariadb.sh ./lxc/setup_mariadb.sh " if [ $? -eq 0 ]; then print_success "==========================================" print_success "MariaDB 설정 완료!" print_success "==========================================" echo "" echo "LXC 정보:" if [ -n "$LXC_IP" ]; then echo " IP 주소: $LXC_IP" fi echo " ID: $LXC_ID" echo " 호스트명: $HOSTNAME" echo "" echo "다음 단계:" echo "1. VM에서 MariaDB에 접속 테스트:" echo " mysql -h $HOSTNAME -u -p" echo "" echo "2. LXC 접속:" echo " pct exec $LXC_ID -- bash" echo "" echo "3. LXC IP 확인:" echo " pct exec $LXC_ID -- ip addr show eth0" echo "" else print_error "MariaDB 설정에 실패했습니다." exit 1 fi