Proxmox 자동화 스크립트 추가

- 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 자동화 방법 안내
  * 수동 생성 가이드 유지
This commit is contained in:
2025-12-23 11:51:44 +09:00
parent dd654b970b
commit 83f5efc7af
5 changed files with 1017 additions and 17 deletions

View File

@ -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로 로그인한 후:

316
proxmox/README.md Normal file
View File

@ -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@<VM_IP>
# 스크립트 다운로드 및 실행
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

218
proxmox/create_lxc.sh Normal file
View File

@ -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 <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

143
proxmox/create_vm.sh Normal file
View File

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

286
proxmox/setup.sh Normal file
View File

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