구조 개선: 디렉토리 정리 및 스크립트 완성
- 디렉토리 구조 정리: 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:
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal 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
455
README.md
@ -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
54
dotfiles/bashrc_addon
Normal 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
49
dotfiles/vimrc
Normal 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
|
||||||
@ -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 "=========================================="
|
||||||
@ -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 접근 가능"
|
|
||||||
@ -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
141
vm/setup_common.sh
Normal 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"
|
||||||
Reference in New Issue
Block a user