From 83f5efc7af842b1423ce1203ebf8f09a7d680e59 Mon Sep 17 00:00:00 2001 From: KWON Date: Tue, 23 Dec 2025 11:51:44 +0900 Subject: [PATCH] =?UTF-8?q?Proxmox=20=EC=9E=90=EB=8F=99=ED=99=94=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 자동화 방법 안내 * 수동 생성 가이드 유지 --- README.md | 71 +++++++--- proxmox/README.md | 316 ++++++++++++++++++++++++++++++++++++++++++ proxmox/create_lxc.sh | 218 +++++++++++++++++++++++++++++ proxmox/create_vm.sh | 143 +++++++++++++++++++ proxmox/setup.sh | 286 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1017 insertions(+), 17 deletions(-) create mode 100644 proxmox/README.md create mode 100644 proxmox/create_lxc.sh create mode 100644 proxmox/create_vm.sh create mode 100644 proxmox/setup.sh diff --git a/README.md b/README.md index aae4271..d750207 100644 --- a/README.md +++ b/README.md @@ -28,24 +28,61 @@ Cafe24 10G 자이언트플러스 환경과 최대한 동일한 테스트 서버 ``` maketestserver/ - README.md # 이 파일 - dotfiles/ # git 관리 설정 파일 - vimrc # Vim 설정 - bashrc_addon # Bash 추가 설정 - vm/ # VM 스크립트 - setup_common.sh # 공통 설정 (Apache, FTP, Vim, Bash) - install_php.sh # PHP 8.2/8.4 설치 - lxc/ # LXC 스크립트 - setup_mariadb.sh # MariaDB 10.6 설정 +├── README.md # 이 파일 +├── dotfiles/ # git 관리 설정 파일 +│ ├── vimrc # Vim 설정 +│ └── bashrc_addon # Bash 추가 설정 +├── vm/ # VM 스크립트 +│ ├── setup_common.sh # 공통 설정 (Apache, FTP, Vim, Bash) +│ └── install_php.sh # PHP 8.2/8.4 설치 +├── lxc/ # LXC 스크립트 +│ └── setup_mariadb.sh # MariaDB 10.6 설정 +└── proxmox/ # Proxmox 자동화 스크립트 + ├── README.md # Proxmox 스크립트 가이드 + ├── setup.sh # 전체 자동화 (VM + LXC) + ├── create_vm.sh # 개별 VM 생성 + └── create_lxc.sh # 개별 LXC 생성 및 설정 ``` --- ## 빠른 시작 -### 1 Proxmox에서 VM 생성 +### ⚡ 방법 1: Proxmox 호스트에서 자동화 (권장) -#### VM1 (PHP 8.2) +Proxmox VE 호스트의 root 계정에서 한 명령어로 VM과 LXC를 모두 생성합니다. + +```bash +# Proxmox 호스트에서 root로 실행 +cd /root +git clone https://github.com/yourusername/cafe24-testserver.git +cd cafe24-testserver +chmod +x proxmox/setup.sh +./proxmox/setup.sh + +# 대화형 입력 진행 +# - Git 저장소 URL +# - VM1 설정 (ID, 이름, 메모리, CPU, 디스크) +# - VM2 설정 +# - LXC 설정 +# - 확인 (y/n) +``` + +**자동으로 수행되는 작업:** +- VM1 생성 (PHP 8.2용) +- VM2 생성 (PHP 8.4용) +- LXC 생성 (MariaDB용) +- LXC MariaDB 자동 설정 + +더 자세한 내용은 [proxmox/README.md](proxmox/README.md) 참고 + +--- + +### 📖 방법 2: 수동 생성 (단계별) + +#### 1️⃣ Proxmox에서 VM 생성 + +**VM1 (PHP 8.2):** ```bash # Proxmox 호스트에서 실행 qm create 101 \ @@ -60,7 +97,7 @@ qm create 101 \ qm start 101 ``` -#### VM2 (PHP 8.4) +**VM2 (PHP 8.4):** ```bash qm create 102 \ --name vm2-php84 \ @@ -75,11 +112,11 @@ qm start 102 ``` **Rocky Linux 9 설치 시 주의:** -- 설치 중 일반 사용자 생성 (예: 'firstgarden') +- 설치 중 일반 사용자 생성 (예: `firstgarden`) - Root 비밀번호 설정 - 기본 네트워크 설정 -### 2 Proxmox에서 LXC 생성 (MariaDB) +#### 2️⃣ Proxmox에서 LXC 생성 (MariaDB) ```bash # LXC 생성 @@ -95,7 +132,7 @@ pct start 201 pct enter 201 # LXC 진입 ``` -### 3 VM1 (PHP 8.2) 설정 +#### 3️⃣ VM1 (PHP 8.2) 설정 SSH로 VM1에 접속한 후: @@ -117,7 +154,7 @@ chmod +x vm/install_php.sh sudo systemctl restart httpd ``` -### 4 VM2 (PHP 8.4) 설정 +#### 4️⃣ VM2 (PHP 8.4) 설정 VM1과 동일하게 진행하되, PHP 버전만 8.4로 변경: @@ -125,7 +162,7 @@ VM1과 동일하게 진행하되, PHP 버전만 8.4로 변경: ./vm/install_php.sh 8.4 ``` -### 5 LXC (MariaDB) 설정 +#### 5️⃣ LXC (MariaDB) 설정 LXC에서 Root로 로그인한 후: diff --git a/proxmox/README.md b/proxmox/README.md new file mode 100644 index 0000000..e6215c4 --- /dev/null +++ b/proxmox/README.md @@ -0,0 +1,316 @@ +# Proxmox VE 자동화 스크립트 + +Proxmox VE 호스트에서 직접 VM과 LXC를 생성하고 자동으로 설정하는 스크립트 모음입니다. + +## 📋 스크립트 목록 + +### 1. `setup.sh` - 전체 자동화 (권장) + +Proxmox 호스트에서 VM 2개(PHP 8.2, 8.4)와 LXC(MariaDB)를 한 번에 생성하고 설정합니다. + +**사전 요구사항:** +- Proxmox VE 호스트 (root 계정) +- Rocky Linux 9 ISO 파일 +- Rocky Linux 9 LXC 템플릿 +- Git 설치 + +**사용법:** +```bash +cd /root +git clone https://github.com/yourusername/cafe24-testserver.git +cd cafe24-testserver +chmod +x proxmox/setup.sh +./proxmox/setup.sh +``` + +**주요 기능:** +- ✓ Git 저장소 클론/업데이트 +- ✓ VM1 (PHP 8.2) 생성 +- ✓ VM2 (PHP 8.4) 생성 +- ✓ LXC (MariaDB) 생성 및 자동 설정 +- ✓ 사용자 입력으로 ID, 리소스 설정 가능 +- ✓ 설정 요약 및 확인 절차 포함 + +**실행 흐름:** +``` +1. Git 저장소 설정 +2. VM1 설정 입력 (ID, 이름, 메모리 등) +3. VM2 설정 입력 +4. LXC 설정 입력 +5. 설정 요약 확인 +6. VM1, VM2, LXC 생성 +7. LXC MariaDB 자동 설정 +``` + +--- + +### 2. `create_vm.sh` - 개별 VM 생성 + +단일 VM을 생성합니다. ID는 사용자가 지정 가능합니다. + +**사용법:** +```bash +chmod +x proxmox/create_vm.sh +./proxmox/create_vm.sh +``` + +**입력 항목:** +- VM ID (예: 101, 102, 103...) +- VM 이름 (예: vm1-php82) +- 메모리 (MB) +- CPU 코어 +- 디스크 (GB) +- ISO 경로 + +**주요 기능:** +- ✓ 기본값 제공 (메모리 2GB, CPU 2Core, 디스크 30GB) +- ✓ 기존 ID 중복 확인 +- ✓ 설정 요약 및 확인 +- ✓ Rocky Linux 설치 가이드 제공 + +**실행 예시:** +```bash +$ ./proxmox/create_vm.sh +[INFO] ========================================== +[INFO] Proxmox VE - VM 생성 +[INFO] ========================================== + +VM ID (예: 101): 103 +VM 이름 (예: vm1-php82): vm3-php82-test +메모리 (MB) [기본값: 2048]: 2048 +CPU 코어 [기본값: 2]: 2 +디스크 (GB) [기본값: 30]: 30 +ISO 경로 [기본값: local:iso/Rocky-9.0-latest.iso]: + +[INFO] ========================================== +[INFO] 설정 요약 +[INFO] ========================================== + +ID: 103 +이름: vm3-php82-test +... +``` + +--- + +### 3. `create_lxc.sh` - 개별 LXC 생성 및 MariaDB 설정 + +단일 LXC를 생성하고 MariaDB를 자동 설정합니다. ID는 사용자가 지정 가능합니다. + +**사용법:** +```bash +chmod +x proxmox/create_lxc.sh +./proxmox/create_lxc.sh +``` + +**입력 항목:** +- LXC ID (예: 201, 202, 203...) +- 호스트명 (예: lxc-db) +- 메모리 (MB) +- CPU 코어 +- 디스크 (GB) +- LXC 템플릿 경로 +- Git 저장소 URL + +**주요 기능:** +- ✓ 기본값 제공 (메모리 2GB, CPU 2Core, 디스크 20GB) +- ✓ 기존 ID 중복 확인 +- ✓ 자동 IP 확인 +- ✓ MariaDB 설정 스크립트 자동 실행 +- ✓ LXC IP 주소 표시 + +**실행 예시:** +```bash +$ ./proxmox/create_lxc.sh +[INFO] ========================================== +[INFO] Proxmox VE - LXC 생성 및 MariaDB 설정 +[INFO] ========================================== + +LXC ID (예: 201): 202 +호스트명 (예: lxc-db): lxc-db-backup +메모리 (MB) [기본값: 2048]: 2048 +... + +[✓] LXC 생성 완료 +[✓] LXC IP: 192.168.1.100 +[INFO] MariaDB 설정 스크립트 실행 중... +``` + +--- + +## 🔧 사용 예시 + +### 예시 1: 전체 자동화 (권장) + +```bash +# Proxmox 호스트에서 root로 실행 +cd /root +git clone https://github.com/yourusername/cafe24-testserver.git +cd cafe24-testserver +chmod +x proxmox/setup.sh +./proxmox/setup.sh + +# 대화형 입력 시작 +# 기본값 입력하려면 Enter 키 누르기 +# 전부 입력 후 확인 (y/n) +``` + +### 예시 2: 개별 VM 생성 + +```bash +# VM1 (PHP 8.2) +./proxmox/create_vm.sh +# ID 입력: 101 +# 이름 입력: vm1-php82 +# 나머지 기본값 입력 + +# VM2 (PHP 8.4) +./proxmox/create_vm.sh +# ID 입력: 102 +# 이름 입력: vm2-php84 +``` + +### 예시 3: 개별 LXC 생성 + +```bash +./proxmox/create_lxc.sh +# ID 입력: 201 +# 호스트명 입력: lxc-db +# 나머지 설정 입력 +# MariaDB 설정이 자동으로 진행됨 +``` + +--- + +## ⚙️ 고급 옵션 + +### VM 생성 후 수동 설정 + +VM을 생성한 후 Proxmox 웹 UI 콘솔에서 Rocky Linux를 설치한 후: + +```bash +# VM에 SSH로 접속 +ssh firstgarden@ + +# 스크립트 다운로드 및 실행 +curl -fsSL https://github.com/yourusername/cafe24-testserver/archive/main.tar.gz | tar xz +cd cafe24-testserver-main + +# 공통 설정 실행 +chmod +x vm/setup_common.sh +./vm/setup_common.sh + +# PHP 설치 +chmod +x vm/install_php.sh +./vm/install_php.sh 8.2 # 또는 8.4 +``` + +### LXC 수동 설정 + +LXC가 생성되었지만 MariaDB 설정을 다시 실행하려면: + +```bash +# Proxmox 호스트에서 실행 +pct exec 201 -- bash + +# LXC 내부에서 +cd /root/cafe24-testserver-main +chmod +x lxc/setup_mariadb.sh +./lxc/setup_mariadb.sh +``` + +--- + +## 🐛 문제 해결 + +### 문제: "Proxmox VE가 설치되어 있지 않습니다." + +**원인:** Proxmox 호스트가 아닌 다른 시스템에서 실행 중 + +**해결:** Proxmox VE 호스트의 root 계정에서만 실행 + +```bash +ssh root@proxmox-host +cd /root/cafe24-testserver +./proxmox/setup.sh +``` + +### 문제: "VM ID 101이 이미 존재합니다." + +**해결:** 다른 ID 사용 또는 기존 VM 삭제 + +```bash +# 기존 VM 확인 +qm list + +# 기존 VM 삭제 (주의!) +qm destroy 101 --force +``` + +### 문제: LXC 생성 후 IP가 자동 할당되지 않음 + +**해결:** DHCP 설정 확인 + +```bash +# LXC 네트워크 재시작 +pct exec 201 -- systemctl restart networking + +# IP 확인 +pct exec 201 -- ip addr show eth0 +``` + +### 문제: MariaDB 스크립트가 실행되지 않음 + +**원인:** 저장소 다운로드 실패 + +**해결:** 수동으로 실행 + +```bash +pct exec 201 -- bash -c " + 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 +" +``` + +--- + +## 📊 기본 설정값 + +| 항목 | VM | LXC | +|------|----|----| +| 메모리 | 2048 MB | 2048 MB | +| CPU | 2 Core | 2 Core | +| 디스크 | 30 GB | 20 GB | +| 네트워크 | vmbr0 (DHCP) | vmbr0 (DHCP) | +| 저장소 | local-lvm | local-lvm | + +--- + +## 🔐 보안 주의사항 + +1. **Git 저장소 URL 변경** + - 모든 스크립트의 `yourusername` 부분을 실제 GitHub 계정으로 변경 + - 개인 저장소인 경우 SSH 키 설정 필요 + +2. **Root 계정 사용** + - 스크립트는 root 권한이 필요 + - Proxmox 호스트에서만 실행 + +3. **비밀번호 안전성** + - MariaDB 설정 중 강력한 비밀번호 사용 + +--- + +## 📝 참고사항 + +- 모든 스크립트는 **Rocky Linux 9** 기준으로 작성됨 +- **색상 표시**는 Linux/Unix 환경에서만 작동 (Windows PowerShell 미지원) +- 각 스크립트는 독립적으로 실행 가능하며 서로 영향을 주지 않음 + +--- + +**최종 수정:** 2024년 12월 23일 +**버전:** 1.0.0 diff --git a/proxmox/create_lxc.sh b/proxmox/create_lxc.sh new file mode 100644 index 0000000..49bf060 --- /dev/null +++ b/proxmox/create_lxc.sh @@ -0,0 +1,218 @@ +#!/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 -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 diff --git a/proxmox/create_vm.sh b/proxmox/create_vm.sh new file mode 100644 index 0000000..0c262e1 --- /dev/null +++ b/proxmox/create_vm.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# Proxmox VE - VM 생성 스크립트 +# 목적: 단일 VM 생성 및 설정 +# 사용법: ./proxmox/create_vm.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 qm &> /dev/null; then + print_error "Proxmox VE가 설치되어 있지 않습니다." + exit 1 +fi + +# 기본값 +DEFAULT_MEMORY=2048 +DEFAULT_CORES=2 +DEFAULT_DISK=30 +DEFAULT_ISO="local:iso/Rocky-9.0-latest.iso" + +print_info "==========================================" +print_info "Proxmox VE - VM 생성" +print_info "==========================================" +echo "" + +# 사용자 입력 +read -p "VM ID (예: 101): " VM_ID +if [[ -z "$VM_ID" ]]; then + print_error "VM ID는 필수입니다." + exit 1 +fi + +# VM ID가 이미 존재하는지 확인 +if qm status "$VM_ID" &>/dev/null 2>&1; then + print_error "VM ID $VM_ID가 이미 존재합니다." + exit 1 +fi + +read -p "VM 이름 (예: vm1-php82): " VM_NAME +if [[ -z "$VM_NAME" ]]; then + print_error "VM 이름은 필수입니다." + exit 1 +fi + +read -p "메모리 (MB) [기본값: $DEFAULT_MEMORY]: " VM_MEMORY +VM_MEMORY="${VM_MEMORY:-$DEFAULT_MEMORY}" + +read -p "CPU 코어 [기본값: $DEFAULT_CORES]: " VM_CORES +VM_CORES="${VM_CORES:-$DEFAULT_CORES}" + +read -p "디스크 (GB) [기본값: $DEFAULT_DISK]: " VM_DISK +VM_DISK="${VM_DISK:-$DEFAULT_DISK}" + +read -p "ISO 경로 [기본값: $DEFAULT_ISO]: " ISO_PATH +ISO_PATH="${ISO_PATH:-$DEFAULT_ISO}" + +# 설정 요약 +print_info "==========================================" +print_info "설정 요약" +print_info "==========================================" +echo "" +echo "ID: $VM_ID" +echo "이름: $VM_NAME" +echo "메모리: ${VM_MEMORY}MB" +echo "CPU: ${VM_CORES} Core" +echo "디스크: ${VM_DISK}GB" +echo "ISO: $ISO_PATH" +echo "" + +read -p "위 설정으로 VM을 생성하시겠습니까? (y/n): " CONFIRM +if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then + print_warning "취소되었습니다." + exit 0 +fi + +# VM 생성 +print_info "VM 생성 중..." +qm create "$VM_ID" \ + --name "$VM_NAME" \ + --memory "$VM_MEMORY" \ + --cores "$VM_CORES" \ + --scsihw virtio-scsi-pci \ + --scsi0 "local-lvm:${VM_DISK}" \ + --net0 virtio,bridge=vmbr0 \ + --cdrom "$ISO_PATH" \ + --serial0 socket \ + --boot c + +if [ $? -eq 0 ]; then + print_success "VM 생성 완료!" + echo "" + print_info "다음 단계:" + echo "1. VM 시작: qm start $VM_ID" + echo "2. Proxmox 웹 UI에서 VM 콘솔로 접속하여 Rocky Linux 설치" + echo "3. 설치 중 사용자 계정 생성 (권장: firstgarden)" + echo "4. 설치 완료 후 다음 명령어 실행:" + echo "" + echo " SSH로 VM에 접속:" + echo " ssh firstgarden@" + echo "" + echo " 스크립트 실행:" + 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 && ./vm/setup_common.sh" + echo " chmod +x vm/install_php.sh" + echo "" + echo " PHP 8.2 또는 8.4 설치:" + echo " ./vm/install_php.sh 8.2 # 또는 8.4" + echo "" +else + print_error "VM 생성에 실패했습니다." + exit 1 +fi diff --git a/proxmox/setup.sh b/proxmox/setup.sh new file mode 100644 index 0000000..8cc393a --- /dev/null +++ b/proxmox/setup.sh @@ -0,0 +1,286 @@ +#!/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@" + 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 ""