# 테스트 서버 구축 가이드 (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) 참고 --- ### 📖 방법 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 -u -p # 또는 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