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:
71
README.md
71
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로 로그인한 후:
|
||||
|
||||
|
||||
316
proxmox/README.md
Normal file
316
proxmox/README.md
Normal 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
218
proxmox/create_lxc.sh
Normal 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
143
proxmox/create_vm.sh
Normal 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
286
proxmox/setup.sh
Normal 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 ""
|
||||
Reference in New Issue
Block a user