- 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 자동화 방법 안내 * 수동 생성 가이드 유지
219 lines
5.6 KiB
Bash
219 lines
5.6 KiB
Bash
#!/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://github.com/yourusername/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 '$REPO_URL/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 <DB_USER> -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
|