Update vm/install_php.sh

This commit is contained in:
2025-12-23 17:38:41 +09:00
parent 19f2c328ba
commit 2ce39c3120

View File

@ -1,13 +1,14 @@
#!/bin/bash #!/bin/bash
# Rocky Linux 9 - 테스트 서버용 공통 설치 스크립트 # Rocky Linux 9 - 테스트 서버용 공통 설치 스크립트
# Apache + FTP + Vim # Apache + FTP + Vim
# Forbidden 방지 (권한 + welcome.conf 제거) # WebRoot = /home/$USER/www
# Forbidden 방지 (권한 + SELinux + welcome.conf)
set -euo pipefail set -euo pipefail
WEB_USER="$USER" WEB_USER="$USER"
WEB_HOME="$(eval echo "~$WEB_USER")" WEB_HOME="$(eval echo "~$WEB_USER")"
WEB_ROOT="/var/www/html" WEB_ROOT="$WEB_HOME/www"
APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf" APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf"
PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf" PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf"
@ -19,8 +20,7 @@ cleanup() {
EXIT_CODE=$? EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then if [ $EXIT_CODE -ne 0 ]; then
echo "❌ 오류 발생 ($EXIT_CODE) Apache 설정 롤백" echo "❌ 오류 발생 ($EXIT_CODE) Apache 설정 롤백"
sudo rm -f "$APACHE_CONF" sudo rm -f "$APACHE_CONF" "$PHP_CONF"
sudo rm -f "$PHP_CONF"
sudo systemctl restart httpd 2>/dev/null || true sudo systemctl restart httpd 2>/dev/null || true
fi fi
exit $EXIT_CODE exit $EXIT_CODE
@ -51,39 +51,31 @@ sudo systemctl disable firewalld 2>/dev/null || true
if [ -f /etc/httpd/conf.d/welcome.conf ]; then if [ -f /etc/httpd/conf.d/welcome.conf ]; then
sudo mv /etc/httpd/conf.d/welcome.conf \ sudo mv /etc/httpd/conf.d/welcome.conf \
/etc/httpd/conf.d/welcome.conf.disabled /etc/httpd/conf.d/welcome.conf.disabled
echo "✓ Apache welcome.conf 비활성화" echo "✓ welcome.conf 비활성화"
fi fi
######################################## ########################################
# 웹 루트 생성 및 권한 (403 방지 핵심) # WebRoot 생성
######################################## ########################################
sudo mkdir -p "$WEB_ROOT" mkdir -p "$WEB_ROOT"
# Apache가 반드시 접근 가능해야 함
sudo chown -R apache:apache "$WEB_ROOT"
sudo chmod 755 "$WEB_ROOT"
# 디렉토리/파일 권한 정규화
sudo find "$WEB_ROOT" -type d -exec chmod 755 {} \;
sudo find "$WEB_ROOT" -type f -exec chmod 644 {} \;
######################################## ########################################
# 홈 디렉토리 심볼릭 링크 (~/www) # ★ 권한 설정 (403 방지 핵심)
######################################## ########################################
if [ -d "$WEB_HOME/www" ] && [ ! -L "$WEB_HOME/www" ]; then # 홈 디렉토리는 execute 권한 필요
rm -rf "$WEB_HOME/www" chmod 711 "$WEB_HOME"
fi
if [ ! -L "$WEB_HOME/www" ]; then # Apache가 webroot에 접근 가능해야 함
ln -s "$WEB_ROOT" "$WEB_HOME/www" chown -R apache:apache "$WEB_ROOT"
echo "✓ ~/www → /var/www/html" chmod 755 "$WEB_ROOT"
fi find "$WEB_ROOT" -type d -exec chmod 755 {} \;
find "$WEB_ROOT" -type f -exec chmod 644 {} \;
######################################## ########################################
# 기본 index.html 생성 (없을 경우) # 기본 index.html (없을 경우)
######################################## ########################################
if [ ! -f "$WEB_ROOT/index.html" ] && [ ! -f "$WEB_ROOT/index.php" ]; then if [ ! -f "$WEB_ROOT/index.html" ] && [ ! -f "$WEB_ROOT/index.php" ]; then
sudo tee "$WEB_ROOT/index.html" >/dev/null <<EOF tee "$WEB_ROOT/index.html" >/dev/null <<EOF
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -96,7 +88,7 @@ if [ ! -f "$WEB_ROOT/index.html" ] && [ ! -f "$WEB_ROOT/index.php" ]; then
</body> </body>
</html> </html>
EOF EOF
sudo chown apache:apache "$WEB_ROOT/index.html" chown apache:apache "$WEB_ROOT/index.html"
fi fi
######################################## ########################################
@ -119,7 +111,7 @@ sudo tee "$APACHE_CONF" >/dev/null <<EOF
EOF EOF
######################################## ########################################
# PHP 연동 설정 (php-fpm 설치 후 자동 활성) # PHP 연동 설정 (php-fpm 설치 후 사용)
######################################## ########################################
sudo tee "$PHP_CONF" >/dev/null <<'EOF' sudo tee "$PHP_CONF" >/dev/null <<'EOF'
<IfModule proxy_fcgi_module> <IfModule proxy_fcgi_module>
@ -130,9 +122,10 @@ sudo tee "$PHP_CONF" >/dev/null <<'EOF'
EOF EOF
######################################## ########################################
# SELinux 컨텍스트 복구 # SELinux 컨텍스트 (홈 디렉토리 웹 허용)
######################################## ########################################
sudo restorecon -Rv "$WEB_ROOT" sudo semanage fcontext -a -t httpd_sys_content_t "${WEB_ROOT}(/.*)?"
sudo restorecon -Rv "$WEB_HOME"
######################################## ########################################
# Apache / FTP 활성화 # Apache / FTP 활성화
@ -141,7 +134,7 @@ sudo systemctl enable --now httpd
sudo systemctl enable --now vsftpd sudo systemctl enable --now vsftpd
######################################## ########################################
# SELinux - Apache/PHP 통합 허용 # SELinux - Apache 통합 허용
######################################## ########################################
sudo setsebool -P httpd_unified 1 sudo setsebool -P httpd_unified 1
@ -152,16 +145,12 @@ IP_ADDR=$(hostname -I | awk '{print $1}')
echo "" echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ 테스트 서버 설정 완료 (Forbidden 해결)" echo "✅ 테스트 서버 설정 완료"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✔ WebRoot : $WEB_ROOT" echo "✔ WebRoot : $WEB_ROOT"
echo "✔ Welcome 페이지 제거됨" echo "✔ 홈 디렉토리 기반 웹 서비스"
echo "✔ Apache 접근 권한 정상" echo "✔ SELinux / 권한 / Forbidden 해결"
echo "" echo ""
echo "🌐 접속 주소" echo "🌐 접속 주소"
echo " http://$IP_ADDR/" echo " http://$IP_ADDR/"
echo "" echo ""
echo "📄 로그"
echo " /var/log/httpd/${WEB_USER}-access.log"
echo " /var/log/httpd/${WEB_USER}-error.log"
echo ""