From 0c471dea4742f1e38326feb32767c339af0a8d90 Mon Sep 17 00:00:00 2001 From: KWON Date: Tue, 23 Dec 2025 11:44:12 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0:=20?= =?UTF-8?q?=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EC=A0=95=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=99=84?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 디렉토리 구조 정리: 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 전면 개선 * 구성도 및 디렉토리 구조 추가 * 빠른 시작 가이드 강화 * 문제 해결 섹션 추가 * 보안 및 성능 튜닝 가이드 추가 --- .gitignore | 27 ++ README.md | 455 ++++++++++++++++++++++------ dotfiles/bashrc_addon | 54 ++++ dotfiles/vimrc | 49 +++ setup_db.sh => lxc/setup_mariadb.sh | 95 ++++-- setup_common.sh | 87 ------ install_php.sh => vm/install_php.sh | 23 +- vm/setup_common.sh | 141 +++++++++ 8 files changed, 713 insertions(+), 218 deletions(-) create mode 100644 .gitignore create mode 100644 dotfiles/bashrc_addon create mode 100644 dotfiles/vimrc rename setup_db.sh => lxc/setup_mariadb.sh (58%) delete mode 100644 setup_common.sh rename install_php.sh => vm/install_php.sh (62%) create mode 100644 vm/setup_common.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00a7f72 --- /dev/null +++ b/.gitignore @@ -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/ diff --git a/README.md b/README.md index bad50bd..f5cafda 100644 --- a/README.md +++ b/README.md @@ -1,159 +1,424 @@ -# 테스트 서버 구축 가이드 (VM1/VM2 + LXC DB) +# 테스트 서버 구축 가이드 (Proxmox + Rocky Linux 9) -## 1. 목적 -- Cafe24 10G 자이언트플러스 환경과 최대한 동일한 테스트 서버 구성 -- VM1: PHP 8.2 + Apache -- VM2: PHP 8.4 + Apache -- LXC1: MariaDB 10.6 (VM1/VM2 공용) -- Tailscale을 통한 원격 테스트 접근 -- 테스트 서버용 최소 권한 설정 +## 개요 + +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 연동 (원격 접근) + + +` --- -## 2. VM 생성 (Proxmox VE) +## 디렉토리 구조 -### 권장 사양 (테스트 용) -- CPU: 1~2 Core -- RAM: 2GB -- Disk: 20GB -- OS: Rocky Linux 9 (Minimal ISO) +` +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 설정 +` -### VM 생성 예시 -```bash -# VM1 (PHP 8.2) +--- + +## 빠른 시작 + +### 1 Proxmox에서 VM 생성 + +#### VM1 (PHP 8.2) +`bash +# Proxmox 호스트에서 실행 qm create 101 \ --name vm1-php82 \ --memory 2048 \ - --cores 1 \ + --cores 2 \ --scsihw virtio-scsi-pci \ - --scsi0 local-lvm:20 \ + --scsi0 local-lvm:30 \ --net0 virtio,bridge=vmbr0 \ - --cdrom local:iso/Rocky-9.iso + --cdrom local:iso/Rocky-9.0-latest.iso qm start 101 +` -# VM2 (PHP 8.4) +#### VM2 (PHP 8.4) +`bash qm create 102 \ --name vm2-php84 \ --memory 2048 \ - --cores 1 \ + --cores 2 \ --scsihw virtio-scsi-pci \ - --scsi0 local-lvm:20 \ + --scsi0 local-lvm:30 \ --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) -### 테스트 사양 -- CPU: 1 Core -- RAM: 1GB -- Disk: 10GB -- OS: Rocky Linux 9 - -```bash -pct create 201 local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz \ +`bash +# LXC 생성 +pct create 201 \ + local:vztmpl/rocky-9-default_9.0-1_amd64.tar.gz \ -hostname lxc-db \ - -memory 1024 \ - -cores 1 \ - -rootfs local-lvm:10 \ + -memory 2048 \ + -cores 2 \ + -rootfs local-lvm:20 \ -net0 name=eth0,bridge=vmbr0,ip=dhcp 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` -- 홈 디렉토리 권한: 711 -- 웹 루트 권한: 750 +**설치/설정 항목:** +- Apache 2.4 (DocumentRoot: '/home//www') +- vsftpd (FTP 서버, localhost 바인드) +- Vim (마우스 비활성화) +- Bash (프롬프트, 별칭, 히스토리) +- SSH 강화 (Root 로그인 비활성화) +- SELinux 설정 (httpd 접근 허용) - firewalld 비활성화 -- SELinux httpd 접근 허용 -- FTP(vsftpd) 설치 -- Vim 설치 (visual mode 비활성화) -- Bash 가독성 설정 -실행: -```bash -chmod +x setup_common.sh -./setup_common.sh -``` +**실행:** +`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' --- -## 5. PHP 설치 +### 'vm/install_php.sh' - PHP 설치 -파일: `install_php.sh` +PHP 8.2 또는 8.4를 설치하고 PHP-FPM pool을 생성합니다. -```bash -# VM1 (PHP 8.2) -./install_php.sh 8.2 +**사전 요구사항:** +- 'vm/setup_common.sh' 실행 완료 -# 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 포함 -- Apache + PHP 테스트 환경 구성 +**실행:** +`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 +` --- -## 6. LXC DB 설치 +### 'lxc/setup_mariadb.sh' - MariaDB 설정 -파일: `setup_lxc_db.sh` -※ LXC 컨테이너 내부에서 실행 +MariaDB 10.6을 설치하고 사용자/DB를 생성합니다. -```bash -chmod +x setup_lxc_db.sh -./setup_lxc_db.sh -``` +**설치 항목:** +- MariaDB Server 10.6 +- 외부 접속 허용 (모든 인터페이스 바인드) +- Firewall 3306 포트 개방 +- 초기 보안 설정 (테스트 DB/계정 제거) -- MariaDB 10.6 설치 (10.6.5 계열) -- bind-address: 0.0.0.0 -- VM1/VM2에서 공용 DB 사용 가능 +**실행:** +`bash +chmod +x lxc/setup_mariadb.sh +./lxc/setup_mariadb.sh +` -접속 예시: -```bash -mysql -h -u root -``` +**대화형 입력:** +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 +` --- -## 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 +sudo systemctl enable --now tailscaled + +# 가입 및 네트워크 등록 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:///` -- 웹 루트: `/home/$USER/www` -- DB: VM → LXC IP 접속 -- FTP/SFTP: 사용자 홈 기준 +### 기본 설정 +- **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 +` --- -## 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 diff --git a/dotfiles/bashrc_addon b/dotfiles/bashrc_addon new file mode 100644 index 0000000..55db1c7 --- /dev/null +++ b/dotfiles/bashrc_addon @@ -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 diff --git a/dotfiles/vimrc b/dotfiles/vimrc new file mode 100644 index 0000000..b473d39 --- /dev/null +++ b/dotfiles/vimrc @@ -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 diff --git a/setup_db.sh b/lxc/setup_mariadb.sh similarity index 58% rename from setup_db.sh rename to lxc/setup_mariadb.sh index 1d7b473..b362eda 100644 --- a/setup_db.sh +++ b/lxc/setup_mariadb.sh @@ -2,11 +2,12 @@ # Rocky Linux 9 LXC - MariaDB 설치 및 초기 설정 # root 계정에서 실행 # Linux / DB 계정 통합 여부 선택 가능 -# vimrc / bashrc는 git에서 다운로드 +# dotfiles는 git에서 다운로드 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 초기 세팅 시작 ===" @@ -76,16 +77,27 @@ usermod -aG wheel "$LINUX_USER" USER_HOME="/home/$LINUX_USER" # ------------------------------------------------- -# 5. vim / bash 설정 (git에서 다운로드) +# 5. dotfiles 다운로드 (git에서) # ------------------------------------------------- -wget -qO "$USER_HOME/.vimrc" "$DOTFILES_BASE_URL/vimrc" -wget -qO "$USER_HOME/.bashrc" "$DOTFILES_BASE_URL/bashrc" +echo "dotfiles 다운로드 중..." +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 설치 # ------------------------------------------------- +echo "MariaDB 10.6 설치 중..." dnf module reset mariadb -y dnf module enable mariadb:10.6 -y dnf install -y mariadb-server @@ -93,45 +105,62 @@ dnf install -y mariadb-server systemctl enable --now mariadb # ------------------------------------------------- -# 7. MariaDB 외부 접속 허용 +# 7. MariaDB 보안 초기화 # ------------------------------------------------- +mysql -u root < /etc/my.cnf.d/50-server.cnf < -u $DB_USER -p $DB_NAME" +echo "VM에서 연결 문자열:" +echo " mysql -h -u $DB_USER -p" +echo "==========================================" diff --git a/setup_common.sh b/setup_common.sh deleted file mode 100644 index 002e5e8..0000000 --- a/setup_common.sh +++ /dev/null @@ -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" < - ServerAdmin webmaster@localhost - DocumentRoot $WEB_ROOT - - Options -Indexes +FollowSymLinks - AllowOverride All - Require all granted - - ErrorLog logs/${WEB_USER}-error.log - CustomLog logs/${WEB_USER}-access.log combined - -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 접근 가능" diff --git a/install_php.sh b/vm/install_php.sh similarity index 62% rename from install_php.sh rename to vm/install_php.sh index 6f4f2f5..878d073 100644 --- a/install_php.sh +++ b/vm/install_php.sh @@ -34,18 +34,35 @@ sudo bash -c "cat > $FPM_POOL" <' > ~/www/test.php # 웹 접속 테스트" +echo " 5. cat /var/log/httpd/${WEB_USER}-error.log # 에러 로그 확인" diff --git a/vm/setup_common.sh b/vm/setup_common.sh new file mode 100644 index 0000000..f240406 --- /dev/null +++ b/vm/setup_common.sh @@ -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' + + + SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 + + + SetHandler "proxy:unix:/run/php-fpm/WEB_USER.sock|fcgi://localhost" + + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^ index.php [QSA,L] + + +EOF + +# WEB_USER 치환 +sudo sed -i "s/WEB_USER/$WEB_USER/g" "$APACHE_PHP_CONF" + +# VirtualHost 설정 +sudo bash -c "cat > $APACHE_CONF" < + ServerAdmin webmaster@localhost + DocumentRoot $WEB_ROOT + + Options -Indexes +FollowSymLinks + AllowOverride All + Require all granted + + ErrorLog logs/${WEB_USER}-error.log + CustomLog logs/${WEB_USER}-access.log combined + +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"