테스트 서버 구축 가이드 (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를 모두 생성합니다.

# 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 참고


방법 3: 개별 스크립트 한줄 실행

각 스크립트를 독립적으로 한 명령어로 다운로드 > 권한 설정 > 실행할 수 있습니다.

VM 공통 설정 (Apache, FTP, Vim, Bash)

  • VM에 SSH 접속 후 실행
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/vm/setup_common.sh | bash

PHP 8.2 설치

  • 위의 setup_common.sh 이후 실행
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 이후 실행
curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/vm/install_php.sh | bash -s 8.4

MariaDB 설정 (LXC에서 root로 실행)

curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/lxc/setup_mariadb.sh | bash

Proxmox 전체 자동화 (Proxmox 호스트에서 root로 실행)

curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/proxmox/setup.sh | bash

Proxmox 개별 VM 생성 (Proxmox 호스트에서 root로 실행)

curl -fsSL https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch/main/proxmox/create_vm.sh | bash

Proxmox 개별 LXC 생성 (Proxmox 호스트에서 root로 실행)

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):

# 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):

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)

# 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에 접속한 후:

# 스크립트 다운로드
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로 변경:

./vm/install_php.sh 8.4

5 LXC (MariaDB) 설정

LXC에서 Root로 로그인한 후:

# 스크립트 다운로드
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 비활성화

실행:

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

실행:

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 버전 확인:

php -v
php-fpm -v

'lxc/setup_mariadb.sh' - MariaDB 설정

MariaDB 10.6을 설치하고 사용자/DB를 생성합니다.

설치 항목:

  • MariaDB Server 10.6
  • 외부 접속 허용 (모든 인터페이스 바인드)
  • Firewall 3306 포트 개방
  • 초기 보안 설정 (테스트 DB/계정 제거)

실행:

chmod +x lxc/setup_mariadb.sh
./lxc/setup_mariadb.sh

대화형 입력:

  1. Linux 사용자 이름 (권장: 첫 번째 설정한 사용자)
  2. Linux 사용자 비밀번호
  3. DB 계정 통합 여부 (권장: Y)
  4. Database 이름 (예: 'testdb')

접속 확인 (VM에서):

# 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에 설치

curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled

# 가입 및 네트워크 등록
sudo tailscale up

접속

# 각 호스트의 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: 비활성화 (테스트 환경용)

프로덕션 권장사항

# 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' 수정:

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' 수정:

max_connections = 200
innodb_buffer_pool_size = 512M

문제 해결

Apache 403 Forbidden

# 웹 루트 권한 확인
ls -ld ~/www
# 예상: drwxr-x--- (750)

# Apache 실행 사용자 확인
ps aux | grep apache

# SELinux 컨텍스트 확인
ls -Z ~/www

PHP-FPM 연결 실패

# PHP-FPM 상태 확인
sudo systemctl status php-fpm

# 소켓 파일 확인
ls -l /run/php-fpm/.sock

# Apache에서 PHP 핸들러 설정 확인
grep -r "proxy_fcgi" /etc/httpd/conf.d/

MariaDB 연결 실패

# 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. 입력값 입력 (사용자, 비밀번호 등)

파일 권한

스크립트 실행 가능 권한 설정:

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

Description
카페24용 테스트서버 구축 스크립트
Readme 204 KiB
Languages
Shell 96.3%
Vim Script 3.7%