518 lines
12 KiB
Markdown
518 lines
12 KiB
Markdown
# 테스트 서버 구축 가이드 (Proxmox + Rocky Linux 9)
|
||
|
||
## 개요
|
||
|
||
Cafe24 10G 자이언트플러스 환경과 최대한 동일한 테스트 서버 구성을 위한 완전 자동화 스크립트 모음입니다.
|
||
|
||
### 구성도
|
||
```
|
||
|
||
Proxmox VE (호스트)
|
||
|
||
|
||
VM1 (PHP 8.2) VM2 (PHP 8.4) LXC (MariaDB)
|
||
Rocky Linux 9 Rocky Linux 9 Rocky Linux 9
|
||
Apache 2.4 Apache 2.4 MariaDB 10.6
|
||
PHP 8.2 PHP 8.4 Port: 3306
|
||
Port: 80,443 Port: 80,443
|
||
FTP (vsftpd) FTP (vsftpd)
|
||
|
||
Tailscale 연동 (원격 접근)
|
||
|
||
|
||
````
|
||
|
||
---
|
||
|
||
## 디렉토리 구조
|
||
|
||
```
|
||
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 설정
|
||
└── proxmox/ # Proxmox 자동화 스크립트
|
||
├── README.md # Proxmox 스크립트 가이드
|
||
├── setup.sh # 전체 자동화 (VM + LXC)
|
||
├── create_vm.sh # 개별 VM 생성
|
||
└── create_lxc.sh # 개별 LXC 생성 및 설정
|
||
```
|
||
|
||
---
|
||
|
||
## 빠른 시작
|
||
|
||
### ⚡ 방법 1: Proxmox 호스트에서 자동화 (권장)
|
||
|
||
Proxmox VE 호스트의 root 계정에서 한 명령어로 VM과 LXC를 모두 생성합니다.
|
||
|
||
```bash
|
||
# Proxmox 호스트에서 root로 실행
|
||
cd /root
|
||
git clone https://git.siane.kr/firstgarden/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) 참고
|
||
|
||
---
|
||
|
||
### ⚡ 방법 3: 개별 스크립트 한줄 실행
|
||
|
||
각 스크립트를 독립적으로 한 명령어로 다운로드 > 권한 설정 > 실행할 수 있습니다.
|
||
|
||
#### VM 공통 설정 (Apache, FTP, Vim, Bash)
|
||
|
||
- VM에 SSH 접속 후 실행
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/vm/setup_common.sh | bash
|
||
```
|
||
|
||
#### PHP 8.2 설치
|
||
|
||
- 위의 setup_common.sh 이후 실행
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/vm/install_php.sh | bash -s 8.2
|
||
```
|
||
|
||
#### PHP 8.4 설치
|
||
|
||
- 위의 setup_common.sh 이후 실행
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/vm/install_php.sh | bash -s 8.4
|
||
```
|
||
|
||
#### MariaDB 설정 (LXC에서 root로 실행)
|
||
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/lxc/setup_mariadb.sh | bash
|
||
```
|
||
|
||
#### Proxmox 전체 자동화 (Proxmox 호스트에서 root로 실행)
|
||
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/proxmox/setup.sh | bash
|
||
```
|
||
|
||
#### Proxmox 개별 VM 생성 (Proxmox 호스트에서 root로 실행)
|
||
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/proxmox/create_vm.sh | bash
|
||
```
|
||
|
||
#### Proxmox 개별 LXC 생성 (Proxmox 호스트에서 root로 실행)
|
||
|
||
```bash
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/proxmox/create_lxc.sh | bash
|
||
```
|
||
|
||
**한줄 명령어 설명:**
|
||
- `curl -fsSL` : 조용하고 안전하게 저장소에서 스크립트 파일 다운로드
|
||
- `| bash` : 다운로드된 스크립트를 bash로 직접 실행
|
||
- `bash -s [인자]` : PHP 버전처럼 스크립트에 인자 전달 (예: `bash -s 8.2`)
|
||
|
||
---
|
||
|
||
### 📖 방법 2: 수동 생성 (단계별)
|
||
|
||
#### 1️⃣ Proxmox에서 VM 생성
|
||
|
||
**VM1 (PHP 8.2):**
|
||
```bash
|
||
# Proxmox 호스트에서 실행
|
||
qm create 101 \
|
||
--name vm1-php82 \
|
||
--memory 2048 \
|
||
--cores 2 \
|
||
--scsihw virtio-scsi-pci \
|
||
--scsi0 local-lvm:30 \
|
||
--net0 virtio,bridge=vmbr0 \
|
||
--cdrom local:iso/Rocky-9.0-latest.iso
|
||
|
||
qm start 101
|
||
```
|
||
|
||
**VM2 (PHP 8.4):**
|
||
```bash
|
||
qm create 102 \
|
||
--name vm2-php84 \
|
||
--memory 2048 \
|
||
--cores 2 \
|
||
--scsihw virtio-scsi-pci \
|
||
--scsi0 local-lvm:30 \
|
||
--net0 virtio,bridge=vmbr0 \
|
||
--cdrom local:iso/Rocky-9.0-latest.iso
|
||
|
||
qm start 102
|
||
```
|
||
|
||
**Rocky Linux 9 설치 시 주의:**
|
||
- 설치 중 일반 사용자 생성 (예: `firstgarden`)
|
||
- Root 비밀번호 설정
|
||
- 기본 네트워크 설정
|
||
|
||
#### 2️⃣ Proxmox에서 LXC 생성 (MariaDB)
|
||
|
||
```bash
|
||
# LXC 생성
|
||
pct create 201 \
|
||
local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz \
|
||
-hostname lxc-db \
|
||
-memory 2048 \
|
||
-cores 2 \
|
||
-rootfs local-lvm:20 \
|
||
-net0 name=eth0,bridge=vmbr0,ip=dhcp
|
||
|
||
pct start 201
|
||
pct enter 201 # LXC 진입
|
||
```
|
||
|
||
#### 3️⃣ VM1 (PHP 8.2) 설정
|
||
|
||
SSH로 VM1에 접속한 후:
|
||
|
||
```bash
|
||
# 스크립트 다운로드
|
||
cd ~
|
||
git clone https://git.siane.kr/firstgarden/cafe24-testserver.git
|
||
cd cafe24-testserver
|
||
|
||
# 공통 설정 실행
|
||
chmod +x vm/setup_common.sh
|
||
./vm/setup_common.sh
|
||
|
||
# PHP 8.2 설치
|
||
chmod +x vm/install_php.sh
|
||
./vm/install_php.sh 8.2
|
||
|
||
# Apache 재시작
|
||
sudo systemctl restart httpd
|
||
```
|
||
|
||
#### 4️⃣ VM2 (PHP 8.4) 설정
|
||
|
||
VM1과 동일하게 진행하되, PHP 버전만 8.4로 변경:
|
||
|
||
```bash
|
||
./vm/install_php.sh 8.4
|
||
```
|
||
|
||
#### 5️⃣ LXC (MariaDB) 설정
|
||
|
||
LXC에서 Root로 로그인한 후:
|
||
|
||
```bash
|
||
# 스크립트 다운로드
|
||
cd /root
|
||
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/archive/main.tar.gz | tar xz
|
||
cd cafe24-testserver-main
|
||
|
||
# MariaDB 설정 실행
|
||
chmod +x lxc/setup_mariadb.sh
|
||
./lxc/setup_mariadb.sh
|
||
```
|
||
|
||
**스크립트 실행 중 입력 항목:**
|
||
- Linux 사용자 이름
|
||
- Linux 사용자 비밀번호
|
||
- DB 사용자 계정 통합 여부 (Y/n)
|
||
- MariaDB 비밀번호 (선택시)
|
||
- Database 이름
|
||
|
||
---
|
||
|
||
## 각 스크립트 상세 설명
|
||
|
||
### 'vm/setup_common.sh' - 공통 설정
|
||
|
||
**설치/설정 항목:**
|
||
- Apache 2.4 (DocumentRoot: '/home//www')
|
||
- vsftpd (FTP 서버, localhost 바인드)
|
||
- Vim (마우스 비활성화)
|
||
- Bash (프롬프트, 별칭, 히스토리)
|
||
- SSH 강화 (Root 로그인 비활성화)
|
||
- SELinux 설정 (httpd 접근 허용)
|
||
- firewalld 비활성화
|
||
|
||
**실행:**
|
||
```bash
|
||
chmod +x vm/setup_common.sh
|
||
./vm/setup_common.sh
|
||
```
|
||
|
||
**생성되는 디렉토리:**
|
||
- '~/www' - 웹 루트 (권한: 750)
|
||
- '~' - 홈 디렉토리 (권한: 711)
|
||
|
||
**설정 파일:**
|
||
- Apache: '/etc/httpd/conf.d/.conf'
|
||
- PHP-FPM: '/etc/php-fpm.d/.conf'
|
||
|
||
---
|
||
|
||
### 'vm/install_php.sh' - PHP 설치
|
||
|
||
PHP 8.2 또는 8.4를 설치하고 PHP-FPM pool을 생성합니다.
|
||
|
||
**사전 요구사항:**
|
||
- 'vm/setup_common.sh' 실행 완료
|
||
|
||
**설치 항목:**
|
||
- PHP CLI & FPM (NTS 빌드)
|
||
- 필수 확장: mysqlnd, pdo, mbstring, xml, gd, curl, opcache, soap, intl, zip, bcmath, bz2, imagick
|
||
|
||
**실행:**
|
||
```bash
|
||
chmod +x vm/install_php.sh
|
||
./vm/install_php.sh 8.2 # PHP 8.2
|
||
./vm/install_php.sh 8.4 # PHP 8.4
|
||
```
|
||
|
||
**생성되는 파일:**
|
||
- '/etc/php-fpm.d/.conf' - PHP-FPM pool 설정
|
||
|
||
**PHP 버전 확인:**
|
||
```bash
|
||
php -v
|
||
php-fpm -v
|
||
```
|
||
|
||
---
|
||
|
||
### 'lxc/setup_mariadb.sh' - MariaDB 설정
|
||
|
||
MariaDB 10.6을 설치하고 사용자/DB를 생성합니다.
|
||
|
||
**설치 항목:**
|
||
- MariaDB Server 10.6
|
||
- 외부 접속 허용 (모든 인터페이스 바인드)
|
||
- Firewall 3306 포트 개방
|
||
- 초기 보안 설정 (테스트 DB/계정 제거)
|
||
|
||
**실행:**
|
||
```bash
|
||
chmod +x lxc/setup_mariadb.sh
|
||
./lxc/setup_mariadb.sh
|
||
```
|
||
|
||
**대화형 입력:**
|
||
1. Linux 사용자 이름 (권장: 첫 번째 설정한 사용자)
|
||
2. Linux 사용자 비밀번호
|
||
3. DB 계정 통합 여부 (권장: Y)
|
||
4. Database 이름 (예: 'testdb')
|
||
|
||
**접속 확인 (VM에서):**
|
||
```bash
|
||
# LXC IP 확인: pct exec 201 ip addr show eth0 | grep inet
|
||
mysql -h <LXC_IP> -u <DB_USER> -p<DB_PW>
|
||
|
||
# 또는
|
||
mysql -h 192.168.1.100 -u firstgarden -p
|
||
```
|
||
|
||
---
|
||
|
||
## dotfiles (설정 파일)
|
||
|
||
각 스크립트에서 필요한 설정 파일들입니다. Git에서 관리되며 curl로 자동 다운로드됩니다.
|
||
|
||
### 'dotfiles/vimrc'
|
||
- ~~줄 번호 표시~~
|
||
- 문법 강조
|
||
- 마우스 비활성화
|
||
- 80자 안내선
|
||
- UTF-8 인코딩
|
||
|
||
### 'dotfiles/bashrc_addon'
|
||
- 한국어 로케일 설정
|
||
- 색상 지원 ('ls', 'grep' 등)
|
||
- 유용한 별칭 ('ll', 'la', 'l' 등)
|
||
- 편의 함수 ('mcd', 'f755', 'f644')
|
||
- 히스토리 설정
|
||
|
||
---
|
||
|
||
## Tailscale 연동 (선택)
|
||
|
||
원격에서 테스트 서버에 접근하려면:
|
||
|
||
### VM 및 LXC에 설치
|
||
```bash
|
||
curl -fsSL https://tailscale.com/install.sh | sh
|
||
sudo systemctl enable --now tailscaled
|
||
|
||
# 가입 및 네트워크 등록
|
||
sudo tailscale up
|
||
```
|
||
|
||
### 접속
|
||
```bash
|
||
# 각 호스트의 Tailscale IP 확인
|
||
tailscale ip
|
||
|
||
# SSH 접속 (Tailscale IP 사용)
|
||
ssh firstgarden@100.x.x.x
|
||
|
||
# MySQL 접속
|
||
mysql -h 100.x.x.x -u firstgarden -p
|
||
```
|
||
|
||
---
|
||
|
||
## 보안 설정
|
||
|
||
### 기본 설정
|
||
- **Root 로그인:** 비활성화 (SSH)
|
||
- **패스워드 인증:** 활성화 (공개키 권장)
|
||
- **FTP:** localhost 바인드 (Tailscale 통해만 접근 가능)
|
||
- **firewalld:** 비활성화 (테스트 환경용)
|
||
|
||
### 프로덕션 권장사항
|
||
```bash
|
||
# SSH 공개키 인증 설정
|
||
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
|
||
|
||
# ~/.ssh/authorized_keys에 공개키 추가
|
||
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
|
||
chmod 700 ~/.ssh
|
||
chmod 600 ~/.ssh/authorized_keys
|
||
|
||
# SSH 설정 강화
|
||
sudo nano /etc/ssh/sshd_config
|
||
# 다음 설정 추가:
|
||
# PasswordAuthentication no
|
||
# PubkeyAuthentication yes
|
||
# PermitRootLogin no
|
||
|
||
sudo systemctl restart sshd
|
||
```
|
||
|
||
---
|
||
|
||
## 성능 설정
|
||
|
||
### PHP-FPM 튜닝
|
||
'/etc/php-fpm.d/.conf' 수정:
|
||
```ini
|
||
pm.max_children = 20 # 최대 프로세스 (RAM에 따라)
|
||
pm.start_servers = 5
|
||
pm.min_spare_servers = 2
|
||
pm.max_spare_servers = 10
|
||
```
|
||
|
||
### MariaDB 튜닝
|
||
'/etc/my.cnf.d/50-server.cnf' 수정:
|
||
```ini
|
||
max_connections = 200
|
||
innodb_buffer_pool_size = 512M
|
||
```
|
||
|
||
---
|
||
|
||
## 문제 해결
|
||
|
||
### Apache 403 Forbidden
|
||
```bash
|
||
# 웹 루트 권한 확인
|
||
ls -ld ~/www
|
||
# 예상: drwxr-x--- (750)
|
||
|
||
# Apache 실행 사용자 확인
|
||
ps aux | grep apache
|
||
|
||
# SELinux 컨텍스트 확인
|
||
ls -Z ~/www
|
||
```
|
||
|
||
### PHP-FPM 연결 실패
|
||
```bash
|
||
# PHP-FPM 상태 확인
|
||
sudo systemctl status php-fpm
|
||
|
||
# 소켓 파일 확인
|
||
ls -l /run/php-fpm/.sock
|
||
|
||
# Apache에서 PHP 핸들러 설정 확인
|
||
grep -r "proxy_fcgi" /etc/httpd/conf.d/
|
||
```
|
||
|
||
### MariaDB 연결 실패
|
||
```bash
|
||
# MariaDB 상태 확인
|
||
sudo systemctl status mariadb
|
||
|
||
# 바인드 주소 확인
|
||
sudo grep bind-address /etc/my.cnf.d/50-server.cnf
|
||
|
||
# 포트 확인
|
||
sudo ss -tlnp | grep 3306
|
||
|
||
# 방화벽 확인 (LXC)
|
||
sudo firewall-cmd --list-ports
|
||
```
|
||
|
||
---
|
||
|
||
## 기타
|
||
|
||
### 스크립트 실행 순서 (정리)
|
||
|
||
**VM1 (PHP 8.2):**
|
||
1. Rocky Linux 9 설치 (Minimal)
|
||
2. 사용자 생성 (예: firstgarden)
|
||
3. 'vm/setup_common.sh' 실행
|
||
4. 'vm/install_php.sh 8.2' 실행
|
||
|
||
**VM2 (PHP 8.4):**
|
||
1. Rocky Linux 9 설치 (Minimal)
|
||
2. 사용자 생성 (예: firstgarden)
|
||
3. 'vm/setup_common.sh' 실행
|
||
4. 'vm/install_php.sh 8.4' 실행
|
||
|
||
**LXC (MariaDB):**
|
||
1. Rocky Linux 9 LXC 생성
|
||
2. Root로 로그인
|
||
3. 'lxc/setup_mariadb.sh' 실행
|
||
4. 입력값 입력 (사용자, 비밀번호 등)
|
||
|
||
### 파일 권한
|
||
|
||
스크립트 실행 가능 권한 설정:
|
||
```bash
|
||
chmod +x vm/setup_common.sh
|
||
chmod +x vm/install_php.sh
|
||
chmod +x lxc/setup_mariadb.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 라이선스 및 기여
|
||
|
||
이 프로젝트는 Cafe24 환경 테스트용으로 제공됩니다.
|
||
|
||
---
|
||
|
||
**최종 수정:** 2024년 12월 23일
|
||
**버전:** 1.0.0
|