Update vm/setup_common.sh
This commit is contained in:
@ -1,107 +1,133 @@
|
||||
#!/bin/bash
|
||||
# 테스트 서버용 공통 설치 스크립트 (Rocky Linux 9)
|
||||
# Apache + FTP + Vim + Bash 설정, DocumentRoot를 /var/www/html로 고정
|
||||
# Rocky Linux 9 - 테스트 서버용 공통 설치 스크립트
|
||||
# Apache + FTP + Vim + 기본 보안 완화
|
||||
# PHP는 별도 스크립트에서 설치됨
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
WEB_USER=$USER
|
||||
WEB_HOME=$(eval echo "~$WEB_USER")
|
||||
WEB_USER="$USER"
|
||||
WEB_HOME="$(eval echo "~$WEB_USER")"
|
||||
WEB_ROOT="/var/www/html"
|
||||
|
||||
# 오류 처리 함수
|
||||
APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf"
|
||||
PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf"
|
||||
|
||||
########################################
|
||||
# 오류 발생 시 Apache 설정만 롤백
|
||||
########################################
|
||||
cleanup() {
|
||||
EXIT_CODE=$?
|
||||
if [ $EXIT_CODE -ne 0 ]; then
|
||||
echo "❌ 에러 발생 ($EXIT_CODE). 변경사항을 롤백합니다..."
|
||||
sudo rm -f /etc/httpd/conf.d/${WEB_USER}.conf
|
||||
sudo rm -f /etc/httpd/conf.d/10-php-${WEB_USER}.conf
|
||||
echo "❌ 에러 발생 ($EXIT_CODE) – Apache 설정 롤백"
|
||||
sudo rm -f "$APACHE_CONF"
|
||||
sudo rm -f "$PHP_CONF"
|
||||
sudo systemctl restart httpd 2>/dev/null || true
|
||||
echo "변경사항이 롤백되었습니다. 처음부터 다시 실행하세요."
|
||||
fi
|
||||
exit $EXIT_CODE
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "설치 사용자: $WEB_USER"
|
||||
echo "웹 루트: $WEB_ROOT"
|
||||
echo "▶ 설치 사용자 : $WEB_USER"
|
||||
echo "▶ 웹 루트 : $WEB_ROOT"
|
||||
|
||||
# 시스템 업데이트
|
||||
sudo dnf update -y
|
||||
########################################
|
||||
# 시스템 업데이트 및 필수 패키지
|
||||
########################################
|
||||
sudo dnf -y update
|
||||
sudo dnf -y install \
|
||||
vim curl wget tar \
|
||||
httpd vsftpd \
|
||||
policycoreutils-python-utils
|
||||
|
||||
# 필수 패키지 설치
|
||||
sudo dnf install -y vim curl wget tar httpd vsftpd
|
||||
|
||||
# firewalld 비활성화
|
||||
########################################
|
||||
# firewalld 비활성화 (외부 방화벽 사용)
|
||||
########################################
|
||||
sudo systemctl stop firewalld 2>/dev/null || true
|
||||
sudo systemctl disable firewalld 2>/dev/null || true
|
||||
|
||||
# /var/www/html 생성 및 권한 설정
|
||||
########################################
|
||||
# 웹 루트 생성 및 Apache 기준 권한
|
||||
########################################
|
||||
sudo mkdir -p "$WEB_ROOT"
|
||||
sudo chown $WEB_USER:$WEB_USER "$WEB_ROOT"
|
||||
sudo chmod 750 "$WEB_ROOT"
|
||||
|
||||
# 홈 디렉토리에 심볼릭 링크 생성 (기존 www 디렉토리 제거 후 링크로 교체)
|
||||
# Apache가 반드시 접근 가능해야 함
|
||||
sudo chown -R apache:apache "$WEB_ROOT"
|
||||
sudo chmod 755 "$WEB_ROOT"
|
||||
|
||||
########################################
|
||||
# 홈 디렉토리 심볼릭 링크 (~/www)
|
||||
########################################
|
||||
if [ -d "$WEB_HOME/www" ] && [ ! -L "$WEB_HOME/www" ]; then
|
||||
rm -rf "$WEB_HOME/www"
|
||||
fi
|
||||
|
||||
if [ ! -L "$WEB_HOME/www" ]; then
|
||||
ln -s "$WEB_ROOT" "$WEB_HOME/www"
|
||||
echo "✓ ~/www → /var/www/html 심볼릭 링크 생성 완료"
|
||||
echo "✓ ~/www → /var/www/html 심볼릭 링크 생성"
|
||||
fi
|
||||
|
||||
# Apache 활성화
|
||||
sudo systemctl enable --now httpd
|
||||
|
||||
# VirtualHost 설정
|
||||
APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf"
|
||||
APACHE_PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf"
|
||||
|
||||
sudo bash -c "cat > $APACHE_CONF" <<EOF
|
||||
########################################
|
||||
# Apache VirtualHost
|
||||
########################################
|
||||
sudo tee "$APACHE_CONF" >/dev/null <<EOF
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot $WEB_ROOT
|
||||
|
||||
<Directory $WEB_ROOT>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/httpd/${WEB_USER}-error.log
|
||||
CustomLog /var/log/httpd/${WEB_USER}-access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
|
||||
sudo bash -c "cat > $APACHE_PHP_CONF" <<EOF
|
||||
########################################
|
||||
# PHP 연동 설정 (php-fpm 설치 후 활성)
|
||||
########################################
|
||||
sudo tee "$PHP_CONF" >/dev/null <<'EOF'
|
||||
# PHP 설치 스크립트에서 php-fpm.sock 생성 후 자동 사용됨
|
||||
<IfModule proxy_fcgi_module>
|
||||
<FilesMatch "\.php$">
|
||||
SetHandler "proxy:unix:/run/php-fpm/${WEB_USER}.sock|fcgi://localhost"
|
||||
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
<IfModule rewrite_module>
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^ index.php [QSA,L]
|
||||
</IfModule>
|
||||
EOF
|
||||
|
||||
sudo systemctl restart httpd
|
||||
########################################
|
||||
# SELinux 컨텍스트 (읽기 전용)
|
||||
########################################
|
||||
sudo restorecon -Rv "$WEB_ROOT"
|
||||
|
||||
# vsftpd 활성화
|
||||
########################################
|
||||
# Apache / FTP 활성화
|
||||
########################################
|
||||
sudo systemctl enable --now httpd
|
||||
sudo systemctl enable --now vsftpd
|
||||
|
||||
# SELinux 컨텍스트 설정
|
||||
sudo chcon -R -t httpd_sys_content_t "$WEB_ROOT"
|
||||
########################################
|
||||
# SELinux: PHP/Apache 통합 허용 (테스트 서버)
|
||||
########################################
|
||||
sudo setsebool -P httpd_unified 1
|
||||
|
||||
########################################
|
||||
# 완료 메시지
|
||||
########################################
|
||||
IP_ADDR=$(hostname -I | awk '{print $1}')
|
||||
|
||||
echo ""
|
||||
echo "✅ 테스트 서버용 공통 설정 완료!"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "✓ Apache + FTP + Vim + Bash 환경 구성됨"
|
||||
echo "✓ 웹 루트: $WEB_ROOT"
|
||||
echo "✓ ~/www → /var/www/html 심볼릭 링크"
|
||||
echo "✅ 테스트 서버 공통 설정 완료"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "✔ Apache 정상 동작 (403 없음)"
|
||||
echo "✔ SELinux 유지"
|
||||
echo "✔ 웹 루트 : $WEB_ROOT"
|
||||
echo "✔ 심볼릭 : ~/www"
|
||||
echo ""
|
||||
echo "📌 다음 단계"
|
||||
echo " 1. PHP 설치 스크립트 실행"
|
||||
echo " 2. http://$IP_ADDR/ 접속 확인"
|
||||
echo " 3. 로그 : /var/log/httpd/${WEB_USER}-*.log"
|
||||
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