Ubuntu 24.04 LTS에서 Nginx + PHP 8.3 + MySQL로 워드프레스 설치하는 완벽 가이드
Ubuntu 24.04 웹서버 구축을 시작하게 된 계기는 정말 단순했습니다. 회사에서 새로운 프로젝트를 진행하는데 안정적인 개발 환경이 필요했거든요. 처음엔 클라우드 서비스만 사용하려고 했는데, 비용도 비용이고 직접 서버를 구축해보고 싶다는 생각이 들었어요.
솔직히 말하자면 Ubuntu 22.04 버전은 좀 아쉬웠습니다. 많은 변경사항들이 있었는데 오히려 혼란만 가중시키는 느낌이었거든요. 하지만 24.04 LTS 버전은 정말 안정적이에요. 실제 사업체에서도 충분히 사용할 수 있을 정도로 검증된 환경을 제공합니다.
이 글에서는 10년 넘게 Ubuntu 서버를 운영해온 경험을 바탕으로, 실무에서 바로 활용할 수 있는 Nginx + PHP + MySQL 웹서버 구축 방법을 알려드리겠습니다.
솔직히 말하자면 Ubuntu 22.04 버전은 좀 아쉬웠습니다. 많은 변경사항들이 있었는데 오히려 혼란만 가중시키는 느낌이었거든요. 하지만 24.04 LTS 버전은 정말 안정적이에요. 실제 사업체에서도 충분히 사용할 수 있을 정도로 검증된 환경을 제공합니다.
이 글에서는 10년 넘게 Ubuntu 서버를 운영해온 경험을 바탕으로, 실무에서 바로 활용할 수 있는 Nginx + PHP + MySQL 웹서버 구축 방법을 알려드리겠습니다.
목차
- 1) 시스템 준비 및 기본 설정
- 2) Nginx 웹서버 설치 및 구성
- 3) PHP 8.3 설치 및 최적화
- 4) MySQL 데이터베이스 서버 구축
- 5) 보안 설정 및 SSL 인증서
- 6) 워드프레스 설치 및 배포
1시스템 준비 및 기본 설정
서버를 구축하기 전에 가장 중요한 건 바로 기초 작업이에요. 아무리 급해도 이 부분은 꼼꼼히 해야 합니다. 저도 처음엔 이런 걸 건너뛰고 바로 웹서버부터 설치했다가 나중에 문제가 생겨서 처음부터 다시 해야 했던 경험이 있거든요.
1.1 터미널 색상 설정 (선택사항)
echo ‘export PS1=”\e[32m\u@\h\e[0m:\e[34m\w\e[0m\$ “‘ >> ~/.bashrc
source ~/.bashrc
사용자명은 초록색, 경로는 파란색으로 변경됩니다.
1.2 운영체제 버전 확인
lsb_release -d
1.3 CPU 정보 확인
lscpu | grep “Model name”
1.4 메모리 상태 확인
free -h
1.5 디스크 용량 확인
df -h /
1.6 시간대 설정
sudo timedatectl set-timezone Asia/Seoul
timedatectl
1.7 SWAP 메모리 설정 (2GB)
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab && free -h
2GB swap 파일을 생성하고 활성화한 후 메모리 상태를 확인합니다.
1.8 시스템 업데이트 및 재부팅 확인
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && if [ -f /var/run/reboot-required ]; then echo “재부팅이 필요합니다”; else echo “재부팅이 필요하지 않습니다”; fi
2Nginx 웹서버 설치 및 구성
이제 본격적으로 웹서버를 설치해보겠습니다. Nginx는 Apache보다 메모리 사용량이 적고 동시 접속 처리가 뛰어난 웹서버예요. 특히 정적 파일 서비스와 리버스 프록시 성능이 훌륭합니다.
2.1 Nginx 설치
sudo apt install nginx -y
2.2 Nginx 서비스 시작 및 자동 시작 설정
sudo systemctl start nginx
sudo systemctl enable nginx
2.3 Nginx 상태 확인
sudo systemctl status nginx
2.4 Nginx 버전 확인
nginx -v
2.5 Nginx 설정 파일 편집 (보안 및 성능 최적화)
sudo nano /etc/nginx/nginx.conf
다음 항목들을 찾아서 주석을 제거하고 활성화하세요:
편집할 내용:
1. server_tokens off; 찾아서 앞의 # 제거
2. gzip on; 찾아서 앞의 # 제거
3. gzip_vary on; 찾아서 앞의 # 제거
4. gzip_comp_level 6; 찾아서 앞의 # 제거
1. server_tokens off; 찾아서 앞의 # 제거
2. gzip on; 찾아서 앞의 # 제거
3. gzip_vary on; 찾아서 앞의 # 제거
4. gzip_comp_level 6; 찾아서 앞의 # 제거
2.6 설정 파일 문법 검사
sudo nginx -t
“syntax is ok”와 “test is successful” 메시지가 나타나면 정상입니다.
2.7 Nginx 설정 다시 로드
sudo systemctl reload nginx
2.8 웹서버 접속 확인
웹브라우저에서 http://서버IP 로 접속하여 “Welcome to nginx!” 페이지가 표시되는지 확인하세요.
3PHP 8.3 설치 및 필수 모듈 구성
이제 PHP를 설치해보겠습니다. PHP 8.3은 성능이 크게 향상되었고 새로운 기능들도 많이 추가되었어요. 특히 JIT 컴파일러와 개선된 타입 시스템 덕분에 이전 버전보다 훨씬 빠릅니다.
3.1 패키지 목록 업데이트
sudo apt update
3.2 소프트웨어 저장소 관리 도구 설치
sudo apt install software-properties-common -y
3.3 PHP 8.3 저장소 추가
sudo add-apt-repository ppa:ondrej/php -y
3.4 저장소 정보 업데이트
sudo apt update
3.5 PHP 8.3 및 필수 모듈 설치
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-gd php8.3-curl php8.3-xml php8.3-zip php8.3-bcmath php8.3-imagick php8.3-opcache php8.3-intl -y
3.6 PHP-FPM 서비스 시작 및 활성화
sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm
3.7 PHP-FPM 상태 확인
sudo systemctl status php8.3-fpm
3.8 OPcache 설정 파일 생성
sudo bash -c ‘cat > /etc/php/8.3/fpm/conf.d/10-opcache.ini << EOF
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
EOF'
3.9 CLI용 OPcache 설정 디렉토리 생성
sudo mkdir -p /etc/php/8.3/cli/conf.d/
3.10 CLI용 OPcache 설정 파일 생성
sudo bash -c ‘cat > /etc/php/8.3/cli/conf.d/10-opcache.ini << EOF
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
EOF'
3.11 OPcache 모듈 활성화
sudo phpenmod opcache
3.12 PHP 메인 설정에 OPcache 확장 추가
echo “zend_extension=opcache” | sudo tee -a /etc/php/8.3/cli/php.ini
echo “zend_extension=opcache” | sudo tee -a /etc/php/8.3/fpm/php.ini
3.13 PHP-FPM 재시작 (OPcache 적용)
sudo systemctl restart php8.3-fpm
3.14 PHP 버전 확인
php -v
3.15 설치된 PHP 모듈 확인
php -m | grep mysql
php -m | grep gd
php -i | grep opcache.enable
“opcache.enable => On => On” 출력되면 OPcache가 정상 활성화된 것입니다.
3.16 Nginx FastCGI 매개변수 추가
sudo bash -c ‘echo “fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;” >> /etc/nginx/fastcgi_params’
3.17 FastCGI 설정 확인
grep SCRIPT_FILENAME /etc/nginx/fastcgi_params
위 명령어에서 “fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;” 출력되면 정상입니다.
PHP 8.3 설치 완료!
✅ PHP 8.3 및 필수 확장 모듈 설치
✅ OPcache 성능 최적화 설정
✅ PHP-FPM 서비스 활성화
✅ Nginx와 PHP 연동 준비 완료
이제 데이터베이스 서버를 설치해보겠습니다.
✅ PHP 8.3 및 필수 확장 모듈 설치
✅ OPcache 성능 최적화 설정
✅ PHP-FPM 서비스 활성화
✅ Nginx와 PHP 연동 준비 완료
이제 데이터베이스 서버를 설치해보겠습니다.
4MySQL 8.0 데이터베이스 서버 구축
이제 데이터베이스 서버를 설치해보겠습니다. MySQL 8.0은 성능과 보안이 크게 향상되었어요. 워드프레스의 모든 데이터가 여기에 저장되므로 정말 중요한 구성 요소입니다.
4.1 MySQL 서버 및 클라이언트 설치
sudo apt install mysql-server mysql-client -y
4.2 MySQL 서비스 시작 및 활성화
sudo systemctl start mysql
sudo systemctl enable mysql
4.3 MySQL 상태 확인
sudo systemctl status mysql
4.4 MySQL 보안 설정 실행
sudo mysql_secure_installation
대화형 설정 가이드:
• 비밀번호 검증 플러그인: Y (권장)
• 비밀번호 강도: 2 (강함)
• root 비밀번호: 강력한 비밀번호 설정
• 익명 사용자 제거: Y
• root 원격 접속 차단: Y
• test 데이터베이스 제거: Y
• 권한 테이블 다시 로드: Y
• 비밀번호 검증 플러그인: Y (권장)
• 비밀번호 강도: 2 (강함)
• root 비밀번호: 강력한 비밀번호 설정
• 익명 사용자 제거: Y
• root 원격 접속 차단: Y
• test 데이터베이스 제거: Y
• 권한 테이블 다시 로드: Y
4.5 MySQL 관리자로 접속
sudo mysql -u root -p
위에서 설정한 root 비밀번호를 입력하세요.
4.6 워드프레스용 데이터베이스 생성
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MySQL 콘솔에서 실행하세요.
4.7 워드프레스용 사용자 생성
CREATE USER ‘wpuser’@’localhost’ IDENTIFIED BY ‘강력한비밀번호설정’;
⚠️ 중요: 비밀번호가 강력하지 않으면 오류가 날 수 있습니다!
MySQL 8.0 비밀번호 정책 요구사항:
• 최소 8자 이상
• 대문자, 소문자, 숫자, 특수문자 모두 포함
• 사전 단어 사용 금지
✅ 올바른 비밀번호 예시:
• SecureDB#2024Pass
• MyWordPress2024!
• WebServer@2024DB
❌ 잘못된 비밀번호 예시:
• password123 (너무 단순)
• gusn3063^&* (특수문자 구문오류)
• 12345678 (숫자만 사용)
MySQL 8.0 비밀번호 정책 요구사항:
• 최소 8자 이상
• 대문자, 소문자, 숫자, 특수문자 모두 포함
• 사전 단어 사용 금지
✅ 올바른 비밀번호 예시:
• SecureDB#2024Pass
• MyWordPress2024!
• WebServer@2024DB
❌ 잘못된 비밀번호 예시:
• password123 (너무 단순)
• gusn3063^&* (특수문자 구문오류)
• 12345678 (숫자만 사용)
4.8 기존 사용자 삭제 (오류 발생시)
DROP USER IF EXISTS ‘wpuser’@’localhost’;
권한 부여 오류가 발생했다면 이 명령어로 사용자를 먼저 삭제하세요.
4.9 사용자 재생성 및 권한 부여
CREATE USER ‘wpuser’@’localhost’ IDENTIFIED BY ‘SecureDB#2024Pass’;
GRANT ALL PRIVILEGES ON wordpress.* TO ‘wpuser’@’localhost’;
4.10 권한 설정 적용
FLUSH PRIVILEGES;
4.11 MySQL 콘솔 종료
EXIT;
4.12 데이터베이스 연결 테스트
mysql -u wpuser -p wordpress
비밀번호 입력: SecureDB#2024Pass
성공적으로 접속되면 EXIT; 명령어로 나가세요.
성공적으로 접속되면 EXIT; 명령어로 나가세요.
MySQL 데이터베이스 구축 완료!
✅ MySQL 8.0 서버 설치 및 보안 설정
✅ 워드프레스용 데이터베이스 생성
✅ 전용 사용자 계정 생성 및 권한 부여
✅ 연결 테스트 완료
이제 보안 설정 및 SSL 인증서를 구성해보겠습니다.
✅ MySQL 8.0 서버 설치 및 보안 설정
✅ 워드프레스용 데이터베이스 생성
✅ 전용 사용자 계정 생성 및 권한 부여
✅ 연결 테스트 완료
이제 보안 설정 및 SSL 인증서를 구성해보겠습니다.
5보안 설정 및 SSL 인증서
서버 보안은 웹사이트 운영에서 가장 중요한 부분입니다. 실제로 해킹 시도는 서버를 구축한 순간부터 시작되거든요. 저도 처음에는 보안 설정을 대충 했다가 몇 번 고생한 경험이 있어서, 이제는 반드시 처음부터 철저하게 설정하고 있습니다.
5.1 UFW 방화벽 기본 설정
sudo ufw enable
방화벽 활성화 확인 메시지에서 ‘y’를 입력하세요.
5.2 SSH 포트 허용
sudo ufw allow OpenSSH
5.3 웹서버 포트 허용
sudo ufw allow ‘Nginx Full’
5.4 방화벽 상태 확인
sudo ufw status
5.5 Let’s Encrypt SSL 도구 설치
sudo apt install certbot python3-certbot-nginx -y
5.6 SSL 인증서 발급 (도메인이 있는 경우)
sudo certbot –nginx -d yourdomain.com -d www.yourdomain.com
중요: ‘yourdomain.com’ 부분을 실제 도메인으로 변경하세요!
도메인이 없다면 이 단계는 건너뛰고 나중에 도메인을 연결한 후 설정하시면 됩니다.
5.7 SSL 자동 갱신 설정
sudo systemctl enable certbot.timer
5.8 SSL 갱신 테스트
sudo certbot renew –dry-run
5.9 Nginx 보안 헤더 설정 (SSH 명령어로 자동 처리)
sudo tee -a /etc/nginx/sites-available/default > /dev/null << 'EOF'
# 보안 헤더 추가
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
EOF
5.10 Nginx 설정 검사 및 재시작
sudo nginx -t
5.11 Nginx 서비스 재시작
sudo systemctl reload nginx
5.12 보안 설정 확인
curl -I http://localhost
SSL 인증서가 설정되었다면: curl -I https://yourdomain.com
보안 설정 완료!
✅ UFW 방화벽 활성화
✅ 필요한 포트만 선택적 허용
✅ Let’s Encrypt SSL 인증서 설치
✅ SSL 자동 갱신 설정
✅ Nginx 보안 헤더 적용
이제 웹사이트가 HTTPS로 안전하게 보호됩니다. 다음 단계에서는 워드프레스를 설치해보겠습니다.
6워드프레스 설치 및 배포
드디어 워드프레스를 설치할 차례입니다! 최신 한국어 버전을 설치하고 Nginx와 연동하여 완전한 웹사이트 환경을 구축해보겠습니다.
6.1 워드프레스 다운로드 및 설치
cd /tmp
wget https://ko.wordpress.org/latest-ko_KR.tar.gz
tar -xzf latest-ko_KR.tar.gz
sudo cp -R wordpress/* /var/www/html/
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
6.2 Nginx 가상 호스트 설정 (SSH 명령어로 자동 처리)
sudo tee /etc/nginx/sites-available/wordpress > /dev/null << 'EOF'
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
6.3 사이트 활성화 및 Nginx 재시작
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
6.4 워드프레스 설정 파일 생성
sudo -u www-data cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
6.5 워드프레스 설정 파일 자동 구성 (SSH 명령어로 자동 처리)
# 보안 키 생성 및 설정 파일 자동 구성
SALT_KEYS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)
sudo tee /var/www/html/wp-config.php > /dev/null << EOF
중요: ‘your_password_here’를 이전 단계에서 설정한 MySQL 비밀번호로 변경하세요!
6.6 MySQL 비밀번호 자동 적용 (선택사항)
# MySQL 비밀번호를 직접 입력하여 자동 적용
read -p “MySQL wpuser 비밀번호를 입력하세요: ” -s MYSQL_PASSWORD
echo
sudo sed -i “s/your_password_here/$MYSQL_PASSWORD/g” /var/www/html/wp-config.php
sudo chown www-data:www-data /var/www/html/wp-config.php
6.7 워드프레스 설치 완료!
웹브라우저에서 다음 주소로 접속:
echo “http://$(curl -s ifconfig.me)”
# 또는 로컬에서: http://localhost
워드프레스 설치 마법사가 나타나면 다음 정보를 입력:
• 사이트 제목: 원하는 웹사이트 이름
• 사용자명: admin 외의 고유한 이름
• 비밀번호: 강력한 비밀번호
• 이메일: 관리자 이메일 주소
축하합니다! Ubuntu 24.04 LTS에서 Nginx + PHP 8.3 + MySQL 8.0 + 워드프레스 환경이 완성되었습니다. 이제 안전하고 빠른 웹사이트를 운영할 수 있습니다.
완성된 서버 환경:
✅ Ubuntu 24.04 LTS (안정적인 운영체제)
✅ Nginx (고성능 웹서버)
✅ PHP 8.3 + OPcache (최신 PHP + 성능 최적화)
✅ MySQL 8.0 (안전한 데이터베이스)
✅ Let’s Encrypt SSL (무료 HTTPS)
✅ 워드프레스 최신 한국어판
✅ 보안 설정 완료