Ubuntu 22.04 + Nginx + PHP 8.2 서버 구축 + Mariadb로 웹 서버를 구축하는 방법을 단계별로 설명해드리겠습니다. 참고로 이 글은 제 워드프레스 첫 글입니다.
우리가 뭘 하더라도 일단 서버 업데이트는 되도록 해주세요.
sudo apt update && sudo apt upgrade -y
Introduction
웹 서버를 선택할 때 대표적인 두 가지 옵션으로 Apache2와 Nginx가 있어요. 둘 다 강력하지만, 특징과 사용 목적이 조금 달라서 상황에 따라 선택하면 됩니다.
간단 비교:
- Apache2: 설정 쉬움, 유연성 높음, 소규모 사이트에 적합.
- Nginx: 속도 빠름, 리소스 효율적, 대규모 트래픽에 강함.
📊 Apache2 vs Nginx 성능 비교
🔍 분석 결과
1️⃣ 초당 요청 처리 수 (Requests/sec)
💡 Nginx는 초당 1500개의 요청을 처리할 수 있지만, Apache2는 300개만 처리 가능. 즉, Nginx가 약 5배 빠른 성능을 보여줌.
2️⃣ 메모리 사용량 (Memory Usage)
💡 Apache2는 700MB의 메모리를 사용하지만, Nginx는 250MB만 사용. 따라서 리소스가 제한된 서버에서는 Nginx가 더 적합.
3️⃣ CPU 사용량 (CPU Usage)
💡 Apache2는 CPU 사용량이 80%로 높지만, Nginx는 40% 정도만 사용. 고부하 환경에서는 Nginx가 더 안정적.
✅ 결론
- 트래픽이 많은 웹사이트는 Nginx가 더 적합
- 리소스가 충분하고 .htaccess 등의 기능이 필요하면 Apache2도 고려
- CPU 부하와 메모리 사용량이 중요한 경우 Nginx가 우세
목차
- 서버 환경 설정 및 패키지 업데이트
- Nginx 웹 서버 설치
- PHP 8.2 설치 및 설정
- MariaDB 데이터베이스 설치 및 설정
- 스왑 메모리 설정 (RAM 부족 시)
- Nginx + PHP + MariaDB 연동 및 테스트
🚀 1. 서버 환경 설정 및 패키지 업데이트
먼저 서버를 최신 상태로 유지하고 필요한 패키지를 업데이트합니다.
sudo apt update && sudo apt upgrade -y
기본적으로 필요한 유틸리티도 설치합니다.
sudo apt install -y curl unzip software-properties-common
⏰ 서버 시간(Timezone) 설정
서버의 기본 시간대는 UTC로 설정되어 있습니다. 한국 또는 원하는 지역의 시간대로 변경하려면 다음 명령어를 실행하세요.
현재 서버 시간을 확인합니다.
timedatectl
시간대를 변경하려면 다음 명령어를 실행합니다. (예: 한국 시간)
sudo timedatectl set-timezone Asia/Seoul
변경이 적용되었는지 확인합니다.
timedatectl
출력에서 Asia/Seoul (KST, +0900)이 표시되면 정상적으로 설정된 것입니다. 🎉
다음은 Nginx 웹 서버를 설치하는 과정입니다!
🌐 2. Nginx 웹 서버 설치
Ubuntu 22.04에서 최신 Nginx를 설치하려면 다음 명령어를 사용하세요.
sudo apt install -y nginx
Nginx 서비스를 실행하고, 부팅 시 자동 실행되도록 설정합니다.
sudo systemctl start nginx
sudo systemctl enable nginx
방화벽을 설정하여 웹 트래픽을 허용합니다.
sudo ufw allow 'Nginx Full'
이제 서버 IP를 웹 브라우저에서 입력하면 Nginx 기본 페이지가 보입니다. 🎉
🐘 3. PHP 8.2 설치 및 설정
PHP 8.2를 설치하기 위해 먼저 PPA 저장소를 추가합니다.
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
PHP 8.2 및 필수 확장 모듈을 설치합니다.
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-cli php8.2-curl php8.2-mbstring php8.2-xml php8.2-zip php8.2-gd php8.2-bcmath
설치 완료 후 PHP 버전을 확인하세요.
php -v
🗄 4. MariaDB 데이터베이스 설치 및 보안 설정
MariaDB를 설치하려면 다음 명령어를 사용하세요.
sudo apt install -y mariadb-server mariadb-client
MariaDB 서비스를 실행하고, 부팅 시 자동 시작되도록 설정합니다.
sudo systemctl start mariadb
sudo systemctl enable mariadb
보안 강화를 위해 설정 마법사를 실행합니다.
sudo mysql_secure_installation
새로운 데이터베이스와 유저를 생성하는 방법:
sudo mysql -u root -p
CREATE DATABASE mydb;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
💾 5. RAM 부족 시 스왑(Swap) 메모리 설정
RAM이 부족할 경우, 스왑 메모리를 추가하여 서버 성능을 개선할 수 있습니다. 스왑 메모리는 RAM이 부족할 때 디스크를 임시 메모리처럼 활용하는 기능입니다.
아래 명령어를 실행하여 자동으로 스왑 파일을 추가합니다.
wget -q https://raw.githubusercontent.com/laelbe/linux-simple-scripts/main/_server_tools/add_swapfile -O /root/add_swapfile
bash /root/add_swapfile 1
설정이 완료된 후 스왑 메모리 상태를 확인합니다.
free -m
📌 RAM 크기에 따른 스왑 메모리 설정
일반적으로 RAM 크기의 1.5배 ~ 2배 크기로 스왑을 설정하는 것이 권장됩니다. 하지만 RAM이 8GB 이상이라면, 스왑을 RAM 크기와 동일하게 설정하는 것이 일반적입니다.
RAM 크기 | 추천 스왑 크기 | 설정 명령어 |
---|---|---|
1GB | 2GB | bash /root/add_swapfile 2 |
2GB | 4GB | bash /root/add_swapfile 4 |
4GB | 6GB ~ 8GB | bash /root/add_swapfile 6 또는 bash /root/add_swapfile 8 |
8GB 이상 | 8GB ~ 16GB | bash /root/add_swapfile 8 또는 bash /root/add_swapfile 16 |
🧐 내 RAM 크기에 맞는 스왑 메모리 설정하기
현재 사용 중인 RAM 크기를 확인하려면 다음 명령어를 실행하세요.
free -m | grep Mem | awk '{print $2 "MB"}'
출력된 값이 RAM의 크기입니다. 예를 들어 “2048MB”가 출력되면, 2GB RAM이 장착된 것입니다. 해당 크기에 맞는 스왑 메모리를 위 표를 참고하여 설정하세요.
이제 적절한 크기의 스왑 파일을 생성하여 서버 성능을 최적화하세요! 🚀
🔄 6. Nginx + PHP 연동 및 테스트
이제 Nginx 설정을 수정하여 PHP와 연동합니다.
sudo nano /etc/nginx/sites-available/default
아래 내용을 찾아 수정하세요.
server {
listen 80;
server_name your_domain_or_ip;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
변경 후 Nginx를 다시 시작하세요.
sudo systemctl restart nginx
PHP 테스트 페이지를 생성합니다.
sudo nano /var/www/html/info.php
<?php
phpinfo();
?>
웹 브라우저에서 http://서버IP/info.php로 접속하여 PHP 정보가 나오면 정상 작동합니다. 🎉
테스트가 끝나면 보안을 위해 해당 파일을 삭제하세요.
sudo rm /var/www/html/info.php
🎯 마무리
이제 Ubuntu 22.04에서 Nginx + PHP 8.2 + MariaDB 서버가 완벽하게 구축되었습니다! 🚀
다음에는 Mysql, php, nginx 최적화에 대해서 작성하도록 하곘습니다. 작성 완료 후 아래에 링크를 걸어놓을께요.