구조 개선: 디렉토리 정리 및 스크립트 완성

- 디렉토리 구조 정리: vm/, lxc/, dotfiles/ 폴더 생성
- setup_db.sh  lxc/setup_mariadb.sh (기능 강화)
  * MariaDB 보안 초기화 추가
  * 외부 접속 설정 및 Firewall 포트 개방
  * dotfiles 다운로드 통합
  * 완료 메시지 개선
- vm/setup_common.sh (PHP-FPM Apache 연동)
  * Apache mod_proxy_fcgi 설정 추가
  * dotfiles 다운로드 에러 처리 강화
  * 오류 처리 및 설정 확인 로직 추가
  * 완료 메시지 개선
- vm/install_php.sh
  * PHP-FPM 풀 설정 개선 (apache 소유권)
  * 설치 확인 가이드 추가
  * 완료 메시지 상세화
- dotfiles/ 파일 추가 관리
  * vimrc: 기본 설정 포함
  * bashrc_addon: 한국어, 별칭, 함수 포함
- .gitignore 추가
- README.md 전면 개선
  * 구성도 및 디렉토리 구조 추가
  * 빠른 시작 가이드 강화
  * 문제 해결 섹션 추가
  * 보안 및 성능 튜닝 가이드 추가
This commit is contained in:
2025-12-23 11:44:12 +09:00
parent aadc6ed125
commit 0c471dea47
8 changed files with 713 additions and 218 deletions

27
.gitignore vendored Normal file
View File

@ -0,0 +1,27 @@
# IDE 및 편집기
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
# 임시 파일 및 로그
*.log
*.tmp
*.bak
.backup/
# OS 파일
Thumbs.db
.DS_Store
# 환경 파일
.env
.env.local
.env.*.local
# 프로젝트 임시 파일
*.tar.gz
*.zip
.cache/

455
README.md
View File

@ -1,159 +1,424 @@
# 테스트 서버 구축 가이드 (VM1/VM2 + LXC DB) # 테스트 서버 구축 가이드 (Proxmox + Rocky Linux 9)
## 1. 목적 ## 개요
- Cafe24 10G 자이언트플러스 환경과 최대한 동일한 테스트 서버 구성
- VM1: PHP 8.2 + Apache Cafe24 10G 자이언트플러스 환경과 최대한 동일한 테스트 서버 구성을 위한 완전 자동화 스크립트 모음입니다.
- VM2: PHP 8.4 + Apache
- LXC1: MariaDB 10.6 (VM1/VM2 공용) ### 구성도
- Tailscale을 통한 원격 테스트 접근 `
- 테스트 서버용 최소 권한 설정
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 연동 (원격 접근)
`
--- ---
## 2. VM 생성 (Proxmox VE) ## 디렉토리 구조
### 권장 사양 (테스트 용) `
- CPU: 1~2 Core maketestserver/
- RAM: 2GB README.md # 이 파일
- Disk: 20GB dotfiles/ # git 관리 설정 파일
- OS: Rocky Linux 9 (Minimal ISO) 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 설정
`
### VM 생성 예시 ---
```bash
# VM1 (PHP 8.2) ## 빠른 시작
### 1 Proxmox에서 VM 생성
#### VM1 (PHP 8.2)
`bash
# Proxmox 호스트에서 실행
qm create 101 \ qm create 101 \
--name vm1-php82 \ --name vm1-php82 \
--memory 2048 \ --memory 2048 \
--cores 1 \ --cores 2 \
--scsihw virtio-scsi-pci \ --scsihw virtio-scsi-pci \
--scsi0 local-lvm:20 \ --scsi0 local-lvm:30 \
--net0 virtio,bridge=vmbr0 \ --net0 virtio,bridge=vmbr0 \
--cdrom local:iso/Rocky-9.iso --cdrom local:iso/Rocky-9.0-latest.iso
qm start 101 qm start 101
`
# VM2 (PHP 8.4) #### VM2 (PHP 8.4)
`bash
qm create 102 \ qm create 102 \
--name vm2-php84 \ --name vm2-php84 \
--memory 2048 \ --memory 2048 \
--cores 1 \ --cores 2 \
--scsihw virtio-scsi-pci \ --scsihw virtio-scsi-pci \
--scsi0 local-lvm:20 \ --scsi0 local-lvm:30 \
--net0 virtio,bridge=vmbr0 \ --net0 virtio,bridge=vmbr0 \
--cdrom local:iso/Rocky-9.iso --cdrom local:iso/Rocky-9.0-latest.iso
```
설치 과정에서 일반 사용자 계정을 생성합니다 (예: firstgarden). qm start 102
`
--- **Rocky Linux 9 설치 시 주의:**
- 설치 중 일반 사용자 생성 (예: 'firstgarden')
- Root 비밀번호 설정
- 기본 네트워크 설정
## 3. LXC 생성 (MariaDB 전용) ### 2 Proxmox에서 LXC 생성 (MariaDB)
### 테스트 사양 `bash
- CPU: 1 Core # LXC 생성
- RAM: 1GB pct create 201 \
- Disk: 10GB local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz \
- OS: Rocky Linux 9
```bash
pct create 201 local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz \
-hostname lxc-db \ -hostname lxc-db \
-memory 1024 \ -memory 2048 \
-cores 1 \ -cores 2 \
-rootfs local-lvm:10 \ -rootfs local-lvm:20 \
-net0 name=eth0,bridge=vmbr0,ip=dhcp -net0 name=eth0,bridge=vmbr0,ip=dhcp
pct start 201 pct start 201
pct enter 201 pct enter 201 # LXC 진입
``` `
### 3 VM1 (PHP 8.2) 설정
SSH로 VM1에 접속한 후:
`bash
# 스크립트 다운로드
cd ~
git clone https://github.com/yourusername/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://github.com/yourusername/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 이름
--- ---
## 4. 공통 설정 스크립트 (VM용) ## 스크립트 상세 설명
파일: `setup_common.sh` ### 'vm/setup_common.sh' - 공통 설정
- Apache 설치 및 설정 **설치/설정 항목:**
- DocumentRoot: `/home/$USER/www` - Apache 2.4 (DocumentRoot: '/home//www')
- 홈 디렉토리 권한: 711 - vsftpd (FTP 서버, localhost 바인드)
- 웹 루트 권한: 750 - Vim (마우스 비활성화)
- Bash (프롬프트, 별칭, 히스토리)
- SSH 강화 (Root 로그인 비활성화)
- SELinux 설정 (httpd 접근 허용)
- firewalld 비활성화 - firewalld 비활성화
- SELinux httpd 접근 허용
- FTP(vsftpd) 설치
- Vim 설치 (visual mode 비활성화)
- Bash 가독성 설정
실행: **실행:**
```bash `bash
chmod +x setup_common.sh chmod +x vm/setup_common.sh
./setup_common.sh ./vm/setup_common.sh
``` `
**생성되는 디렉토리:**
- '~/www' - 웹 루트 (권한: 750)
- '~' - 홈 디렉토리 (권한: 711)
**설정 파일:**
- Apache: '/etc/httpd/conf.d/.conf'
- PHP-FPM: '/etc/php-fpm.d/.conf'
--- ---
## 5. PHP 설치 ### 'vm/install_php.sh' - PHP 설치
파일: `install_php.sh` PHP 8.2 또는 8.4를 설치하고 PHP-FPM pool을 생성합니다.
```bash **사전 요구사항:**
# VM1 (PHP 8.2) - 'vm/setup_common.sh' 실행 완료
./install_php.sh 8.2
# VM2 (PHP 8.4) **설치 항목:**
./install_php.sh 8.4 - PHP CLI & FPM (NTS 빌드)
``` - 필수 확장: mysqlnd, pdo, mbstring, xml, gd, curl, opcache, soap, intl, zip, bcmath, bz2, imagick
- Remi Repository 사용 **실행:**
- PHP-FPM 포함 `bash
- Apache + PHP 테스트 환경 구성 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
`
--- ---
## 6. LXC DB 설 ### 'lxc/setup_mariadb.sh' - MariaDB 설
파일: `setup_lxc_db.sh` MariaDB 10.6을 설치하고 사용자/DB를 생성합니다.
※ LXC 컨테이너 내부에서 실행
```bash **설치 항목:**
chmod +x setup_lxc_db.sh - MariaDB Server 10.6
./setup_lxc_db.sh - 외부 접속 허용 (모든 인터페이스 바인드)
``` - Firewall 3306 포트 개방
- 초기 보안 설정 (테스트 DB/계정 제거)
- MariaDB 10.6 설치 (10.6.5 계열) **실행:**
- bind-address: 0.0.0.0 `bash
- VM1/VM2에서 공용 DB 사용 가능 chmod +x lxc/setup_mariadb.sh
./lxc/setup_mariadb.sh
`
접속 예시: **대화형 입력:**
```bash 1. Linux 사용자 이름 (권장: 첫 번째 설정한 사용자)
mysql -h <LXC_IP> -u root 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
`
--- ---
## 7. Tailscale 설치 (선택) ## dotfiles (설정 파일)
원격 테스트 접근용: 각 스크립트에서 필요한 설정 파일들입니다. Git에서 관리되며 curl로 자동 다운로드됩니다.
```bash ### '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 curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled
# 가입 및 네트워크 등록
sudo tailscale up sudo tailscale up
``` `
- Tailscale IP로 Apache, SSH, FTP 접근 가능 ### 접속
`bash
# 각 호스트의 Tailscale IP 확인
tailscale ip
# SSH 접속 (Tailscale IP 사용)
ssh firstgarden@100.x.x.x
# MySQL 접속
mysql -h 100.x.x.x -u firstgarden -p
`
--- ---
## 8. 테스트 확인 ## 보안 설정
- 웹: `http://<VM_IP>/` ### 기본 설정
- 웹 루트: `/home/$USER/www` - **Root 로그인:** 비활성화 (SSH)
- DB: VM → LXC IP 접속 - **패스워드 인증:** 활성화 (공개키 권장)
- FTP/SFTP: 사용자 홈 기준 - **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
`
--- ---
## 9. 주의사항 ## 성능 설정
- 본 구성은 **테스트 전용** ### 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

54
dotfiles/bashrc_addon Normal file
View File

@ -0,0 +1,54 @@
# 테스트 서버용 Bash 추가 설정
# 이 파일은 기존 .bashrc 파일에 추가됩니다
# ----- 환경 변수 설정 -----
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
# ----- 프롬프트 커스터마이제이션 -----
export PS1='[\u@\h \W]\$ '
# ----- 히스토리 설정 -----
export HISTCONTROL=ignoreboth
export HISTSIZE=10000
export HISTFILESIZE=20000
# ----- 색상 설정 -----
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# ----- 편의 별칭 -----
alias ll='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias cd..='cd ..'
alias clear='clear'
# ----- PHP 관련 별칭 (PHP 설치된 경우) -----
if command -v php &> /dev/null; then
alias php-v='php -v'
alias php-l='php -l' # PHP 문법 검사
fi
# ----- 유용한 함수 -----
# 디렉토리 생성 및 진입
mcd() {
mkdir -p "$1" && cd "$1"
}
# 파일 권한 설정 편의 함수
f755() {
chmod 755 "$@"
}
f644() {
chmod 644 "$@"
}
# ----- 로컬 설정 (필요시) -----
if [ -f ~/.bashrc.local ]; then
source ~/.bashrc.local
fi

49
dotfiles/vimrc Normal file
View File

@ -0,0 +1,49 @@
" Vim 설정 파일 - 테스트 서버용
" Vi 호환성 비활성화
set nocompatible
" 기본 설정
set number " 줄 번호 표시
set ruler " 커서 위치 표시
set showcmd " 명령어 표시
set showmatch " 괄호 매칭 표시
set incsearch " 검색 중 하이라이트
set hlsearch " 검색 결과 하이라이트
" 들여쓰기 설정
set autoindent " 자동 들여쓰기
set smartindent " 스마트 들여쓰기
set expandtab " 탭을 스페이스로 변환
set tabstop=4 " 탭 너비 (표시)
set shiftwidth=4 " 들여쓰기 너비
" 색상 및 UI
set background=dark
syntax on " 문법 강조
" 마우스 비활성화 (VI 순수성 유지)
set mouse=
" 하단 상태 표시줄
set laststatus=2
" 인코딩 설정
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,euc-kr
" 백업 및 스왑 파일 설정
set nobackup
set noswapfile
set nowritebackup
" 검색 시 대소문자 무시
set ignorecase
set smartcase
" 줄 길이 안내선
set colorcolumn=80
highlight ColorColumn ctermbg=darkgray
" 개행 시 자동 주석 비활성화
autocmd FileType * setlocal formatoptions-=o

View File

@ -2,11 +2,12 @@
# Rocky Linux 9 LXC - MariaDB 설치 및 초기 설정 # Rocky Linux 9 LXC - MariaDB 설치 및 초기 설정
# root 계정에서 실행 # root 계정에서 실행
# Linux / DB 계정 통합 여부 선택 가능 # Linux / DB 계정 통합 여부 선택 가능
# vimrc / bashrc는 git에서 다운로드 # dotfiles는 git에서 다운로드
set -e set -e
DOTFILES_BASE_URL="https://git.siane.kr/firstgarden/cafe24-testserver/main" # dotfiles 저장소 (실제 URL로 변경 필요)
DOTFILES_BASE_URL="https://raw.githubusercontent.com/yourusername/cafe24-testserver/main/dotfiles"
echo "=== LXC MariaDB 초기 세팅 시작 ===" echo "=== LXC MariaDB 초기 세팅 시작 ==="
@ -76,16 +77,27 @@ usermod -aG wheel "$LINUX_USER"
USER_HOME="/home/$LINUX_USER" USER_HOME="/home/$LINUX_USER"
# ------------------------------------------------- # -------------------------------------------------
# 5. vim / bash 설정 (git에서 다운로드) # 5. dotfiles 다운로드 (git에서)
# ------------------------------------------------- # -------------------------------------------------
wget -qO "$USER_HOME/.vimrc" "$DOTFILES_BASE_URL/vimrc" echo "dotfiles 다운로드 중..."
wget -qO "$USER_HOME/.bashrc" "$DOTFILES_BASE_URL/bashrc" curl -fsSL -o "$USER_HOME/.vimrc" "$DOTFILES_BASE_URL/vimrc"
curl -fsSL -o "$USER_HOME/.bashrc_addon" "$DOTFILES_BASE_URL/bashrc_addon"
chown "$LINUX_USER:$LINUX_USER" "$USER_HOME/.vimrc" "$USER_HOME/.bashrc" # 기존 .bashrc 백업 및 추가 설정 적용
if [ -f "$USER_HOME/.bashrc" ]; then
cp "$USER_HOME/.bashrc" "$USER_HOME/.bashrc.bak"
fi
# 새 설정 추가
cat "$USER_HOME/.bashrc_addon" >> "$USER_HOME/.bashrc"
rm "$USER_HOME/.bashrc_addon"
chown "$LINUX_USER:$LINUX_USER" "$USER_HOME/.vimrc" "$USER_HOME/.bashrc" "$USER_HOME/.bashrc.bak" 2>/dev/null || true
# ------------------------------------------------- # -------------------------------------------------
# 6. MariaDB 10.6 설치 # 6. MariaDB 10.6 설치
# ------------------------------------------------- # -------------------------------------------------
echo "MariaDB 10.6 설치 중..."
dnf module reset mariadb -y dnf module reset mariadb -y
dnf module enable mariadb:10.6 -y dnf module enable mariadb:10.6 -y
dnf install -y mariadb-server dnf install -y mariadb-server
@ -93,45 +105,62 @@ dnf install -y mariadb-server
systemctl enable --now mariadb systemctl enable --now mariadb
# ------------------------------------------------- # -------------------------------------------------
# 7. MariaDB 외부 접속 허용 # 7. MariaDB 보안 초기화
# ------------------------------------------------- # -------------------------------------------------
mysql -u root <<MYSQL_INIT
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
MYSQL_INIT
# -------------------------------------------------
# 8. DB 사용자 및 데이터베이스 생성
# -------------------------------------------------
echo "DB 사용자 및 데이터베이스 생성 중..."
mysql -u root <<MYSQL_CREATE
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PW';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';
CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
FLUSH PRIVILEGES;
MYSQL_CREATE
# -------------------------------------------------
# 9. MariaDB 외부 접속 허용 설정
# -------------------------------------------------
echo "MariaDB 외부 접속 허용 설정 중..."
cat > /etc/my.cnf.d/50-server.cnf <<EOF cat > /etc/my.cnf.d/50-server.cnf <<EOF
[mysqld] [mysqld]
bind-address = 0.0.0.0 bind-address = 0.0.0.0
skip-name-resolve port = 3306
character-set-server = utf8mb4 max_connections = 100
collation-server = utf8mb4_unicode_ci
EOF EOF
systemctl restart mariadb systemctl restart mariadb
# ------------------------------------------------- # -------------------------------------------------
# 8. DB / 사용자 생성 # 10. Firewall 설정 (3306 포트 개방)
# ------------------------------------------------- # -------------------------------------------------
mysql <<EOF echo "Firewall 설정 중..."
CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` systemctl enable firewalld
DEFAULT CHARACTER SET utf8mb4 systemctl start firewalld
COLLATE utf8mb4_unicode_ci; firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PW}';
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'%';
FLUSH PRIVILEGES;
EOF
# ------------------------------------------------- # -------------------------------------------------
# 9. 기본 보안 정리 (테스트 기준) # 11. 완료 메시지
# ------------------------------------------------- # -------------------------------------------------
mysql <<EOF
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
EOF
echo "" echo ""
echo "=== LXC MariaDB 설정 완료 ===" echo "=========================================="
echo "Linux 사용자 : $LINUX_USER (sudo 가능)" echo "=== MariaDB 설정 완료 ==="
echo "DB 이름 : $DB_NAME" echo "=========================================="
echo "DB 사용자 : $DB_USER" echo "Linux 사용자: $LINUX_USER"
echo "DB 사용자: $DB_USER"
echo "DB 이름: $DB_NAME"
echo "바인드 주소: 0.0.0.0 (모든 인터페이스)"
echo "포트: 3306"
echo "" echo ""
echo "접속 예시:" echo "VM에서 연결 문자열:"
echo "mysql -h <LXC_IP> -u $DB_USER -p $DB_NAME" echo " mysql -h <LXC_IP> -u $DB_USER -p"
echo "=========================================="

View File

@ -1,87 +0,0 @@
#!/bin/bash
# 테스트 서버용 공통 설치 스크립트 (Rocky Linux 9)
# Tailscale 호환, 외부 미노출 아님, 최소 권한, Apache + FTP + Vim + Bash 설정
# 홈 디렉토리 권한 문제 해결 포함
WEB_USER=$USER
WEB_HOME=$(eval echo "~$WEB_USER")
WEB_ROOT="$WEB_HOME/www"
echo "설치 사용자: $WEB_USER"
echo "웹 루트: $WEB_ROOT"
# 1. 시스템 업데이트
sudo dnf update -y
# 2. firewalld 비활성화
sudo systemctl stop firewalld
sudo systemctl disable firewalld
echo "firewalld 비활성화 완료"
# 3. 홈 디렉토리 권한 조정 (Apache가 진입 가능하도록)
chmod 711 "$WEB_HOME"
# 4. www 폴더 생성, 소유자/권한 제한
mkdir -p "$WEB_ROOT"
chmod 750 "$WEB_ROOT"
chown $WEB_USER:$WEB_USER "$WEB_ROOT"
# 5. Apache 설치
sudo dnf install -y httpd
sudo systemctl enable --now httpd
# Apache DocumentRoot 설정
APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf"
sudo bash -c "cat > $APACHE_CONF" <<EOF
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot $WEB_ROOT
<Directory $WEB_ROOT>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/${WEB_USER}-error.log
CustomLog logs/${WEB_USER}-access.log combined
</VirtualHost>
EOF
sudo systemctl restart httpd
# 6. FTP 설치 및 설정 (vsftpd)
sudo dnf install -y vsftpd
sudo systemctl enable --now vsftpd
# FTP 설정
sudo sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
sudo sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf
sudo bash -c "echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf"
sudo bash -c "echo 'listen_address=127.0.0.1' >> /etc/vsftpd/vsftpd.conf"
sudo systemctl restart vsftpd
# 7. SSH 설정 강화
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
# 8. Vim 설치 및 Visual 모드 비활성화 (줄 번호 제거)
sudo dnf install -y vim
echo "set mouse=" >> "$WEB_HOME/.vimrc"
chown $WEB_USER:$WEB_USER "$WEB_HOME/.vimrc"
# 9. Bash 가독성 향상 설정
BASHRC="$WEB_HOME/.bashrc"
echo "" >> $BASHRC
echo "# --- Bash 가독성 설정 ---" >> $BASHRC
echo "export PS1='[\u@\h \W]\$ '" >> $BASHRC
echo "alias ll='ls -alF --color=auto'" >> $BASHRC
echo "alias la='ls -A --color=auto'" >> $BASHRC
echo "alias l='ls -CF --color=auto'" >> $BASHRC
echo "export HISTCONTROL=ignoreboth" >> $BASHRC
chown $WEB_USER:$WEB_USER $BASHRC
# 10. SELinux 웹 루트 접근 허용
sudo chcon -R -t httpd_sys_content_t "$WEB_ROOT"
echo "테스트 서버용 공통 설정 완료! Apache + FTP + Vim + Bash 환경 구성됨."
echo "VM IP로 접속 시 Forbidden 문제 없이 /home/$USER/www 접근 가능"

View File

@ -34,18 +34,35 @@ sudo bash -c "cat > $FPM_POOL" <<EOF
user = $WEB_USER user = $WEB_USER
group = $WEB_USER group = $WEB_USER
listen = /run/php-fpm/$WEB_USER.sock listen = /run/php-fpm/$WEB_USER.sock
listen.owner = $WEB_USER listen.owner = apache
listen.group = $WEB_USER listen.group = apache
pm = dynamic pm = dynamic
pm.max_children = 10 pm.max_children = 10
pm.start_servers = 2 pm.start_servers = 2
pm.min_spare_servers = 1 pm.min_spare_servers = 1
pm.max_spare_servers = 5 pm.max_spare_servers = 5
chdir = $WEB_ROOT chdir = $WEB_ROOT
php_value[display_errors] = Off
php_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT
EOF EOF
# PHP-FPM 서비스 활성화 및 재시작 # PHP-FPM 서비스 활성화 및 재시작
sudo systemctl enable --now php-fpm sudo systemctl enable --now php-fpm
sudo systemctl restart php-fpm sudo systemctl restart php-fpm
echo "PHP $PHP_VERSION 설치 완료! PHP-FPM pool: $WEB_USER" # Apache와 PHP-FPM 연동 설정 (setup_common.sh에서 이미 설정됨)
# Apache 재시작
sudo systemctl restart httpd
# 설치 확인
echo ""
echo "=== PHP $PHP_VERSION 설치 완료! ==="
echo "✓ PHP-FPM 풀: $WEB_USER"
echo "✓ PHP-FPM 소켓: /run/php-fpm/$WEB_USER.sock"
echo ""
echo "확인 방법:"
echo " 1. php -v # PHP 버전 확인"
echo " 2. php-fpm -v # PHP-FPM 버전 확인"
echo " 3. php -m | grep -E '(pdo|mysql)' # DB 모듈 확인"
echo " 4. echo '<?php phpinfo(); ?>' > ~/www/test.php # 웹 접속 테스트"
echo " 5. cat /var/log/httpd/${WEB_USER}-error.log # 에러 로그 확인"

141
vm/setup_common.sh Normal file
View File

@ -0,0 +1,141 @@
#!/bin/bash
# 테스트 서버용 공통 설치 스크립트 (Rocky Linux 9)
# Tailscale 호환, 외부 미노출 아님, 최소 권한, Apache + FTP + Vim + Bash 설정
# 홈 디렉토리 권한 문제 해결 포함
WEB_USER=$USER
WEB_HOME=$(eval echo "~$WEB_USER")
WEB_ROOT="$WEB_HOME/www"
echo "설치 사용자: $WEB_USER"
echo "웹 루트: $WEB_ROOT"
# 1. 시스템 업데이트
sudo dnf update -y
# 2. firewalld 비활성화
sudo systemctl stop firewalld
sudo systemctl disable firewalld
echo "firewalld 비활성화 완료"
# 3. 홈 디렉토리 권한 조정 (Apache가 진입 가능하도록)
chmod 711 "$WEB_HOME"
# 4. www 폴더 생성, 소유자/권한 제한
mkdir -p "$WEB_ROOT"
chmod 750 "$WEB_ROOT"
chown $WEB_USER:$WEB_USER "$WEB_ROOT"
# 5. Apache 설치
sudo dnf install -y httpd
sudo systemctl enable --now httpd
# Apache DocumentRoot 및 PHP-FPM 설정
APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf"
APACHE_PHP_CONF="/etc/httpd/conf.modules.d/10-php-${WEB_USER}.conf"
# PHP-FPM 프록시 설정
sudo bash -c "cat > $APACHE_PHP_CONF" <<'EOF'
<IfModule mod_proxy_fcgi.c>
<IfModule mod_setenvif.c>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php-fpm/WEB_USER.sock|fcgi://localhost"
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>
</IfModule>
EOF
# WEB_USER 치환
sudo sed -i "s/WEB_USER/$WEB_USER/g" "$APACHE_PHP_CONF"
# VirtualHost 설정
sudo bash -c "cat > $APACHE_CONF" <<EOF
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot $WEB_ROOT
<Directory $WEB_ROOT>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/${WEB_USER}-error.log
CustomLog logs/${WEB_USER}-access.log combined
</VirtualHost>
EOF
# Apache 모듈 활성화
sudo a2enmod proxy_fcgi setenvif rewrite 2>/dev/null || sudo dnf install -y mod_proxy_fcgi
sudo systemctl restart httpd
# 6. FTP 설치 및 설정 (vsftpd)
sudo dnf install -y vsftpd
sudo systemctl enable --now vsftpd
# FTP 설정
sudo sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
sudo sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf
sudo bash -c "echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf"
sudo bash -c "echo 'listen_address=127.0.0.1' >> /etc/vsftpd/vsftpd.conf"
sudo systemctl restart vsftpd
# 7. SSH 설정 강화
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
# 8. Vim 및 Bash 설정 파일 다운로드 (git에서)
# 주의: 아래 URL을 실제 git 저장소 URL로 변경하세요
DOTFILES_BASE_URL="https://raw.githubusercontent.com/yourusername/cafe24-testserver/main/dotfiles"
if command -v curl &>/dev/null; then
echo "dotfiles 다운로드 중..."
curl -fsSL -o "$WEB_HOME/.vimrc" "$DOTFILES_BASE_URL/vimrc" 2>/dev/null || echo "경고: .vimrc 다운로드 실패"
# .bashrc_addon 다운로드
if curl -fsSL -o "$WEB_HOME/.bashrc_addon" "$DOTFILES_BASE_URL/bashrc_addon" 2>/dev/null; then
# 기존 .bashrc 백업
if [ -f "$WEB_HOME/.bashrc" ]; then
cp "$WEB_HOME/.bashrc" "$WEB_HOME/.bashrc.bak"
fi
# 추가 설정 병합
cat "$WEB_HOME/.bashrc_addon" >> "$WEB_HOME/.bashrc"
rm "$WEB_HOME/.bashrc_addon"
fi
else
echo "경고: curl이 설치되어 있지 않습니다. dotfiles 수동 설정 필요"
fi
# 파일 소유권 설정
sudo chown $WEB_USER:$WEB_USER "$WEB_HOME/.vimrc" "$WEB_HOME/.bashrc"
# 10. SELinux 웹 루트 접근 허용
sudo chcon -R -t httpd_sys_content_t "$WEB_ROOT"
# 11. 오류 처리 확인
if ! sudo systemctl is-active --quiet httpd; then
echo "에러: Apache 서비스가 실행 중이 아닙니다."
sudo systemctl status httpd
exit 1
fi
if ! sudo systemctl is-active --quiet php-fpm; then
echo "경고: PHP-FPM이 설치되지 않았습니다. install_php.sh 실행 필요"
fi
echo "=== 테스트 서버용 공통 설정 완료! ==="
echo "✓ Apache + FTP + Vim + Bash 환경 구성됨"
echo "✓ 웹 루트: $WEB_ROOT (권한: 750)"
echo "✓ 홈 디렉토리: $WEB_HOME (권한: 711)"
echo ""
echo "다음 단계:"
echo " 1. PHP 설치: ./install_php.sh 8.2 또는 8.4"
echo " 2. 웹 접속: http://$(hostname -I | awk '{print $1}')/"
echo " 3. 로그 확인: tail -f /var/log/httpd/${WEB_USER}-*.log"