LEMP 설치 · 7 min read · Sep 10, 2025

Ubuntu 24.04에 LEMP 스택 (Linux, Nginx, PHP 및 MariaDB) 설치하는 방법

LEMP 스택 (Linux, Nginx, MySQL/MariaDB 및 PHP)은 PHP 웹 애플리케이션을 호스팅하고 개발하기 위한 무료 오픈 소스 소프트웨어 애플리케이션 그룹입니다. LEMP 스택은 정적 및 동적 웹 애플리케이션 모두를 배포하는 데 사용할 수 있습니다.

이 가이드는 Ubuntu 24.04 “Noble Numbat”에 LEMP 스택 (Linux, Nginx, MySQL/MariaDB 및 PHP)을 설치하는 방법을 보여줍니다. 또한 MariaDB 서버를 보호하고 웹사이트 또는 도메인 이름을 호스팅하기 위한 Nginx 서버 블록 구성을 만드는 방법도 보여줍니다.

전제 조건

시작하기 전에, 루트 사용자 또는 sudo/관리자 권한이 있는 비루트 사용자로 Ubuntu 24.04 “Noble Numbat”가 설치되어 있는지 확인하십시오. 또한 UFW (Uncomplicated Firewall)가 실행 중이고 활성화되어 있는지 확인하십시오.

Nginx 웹 서버 설치

Nginx 또는 engine-x는 인터넷에서 가장 인기 있는 웹 서버입니다. Nginx는 최소한의 시스템 리소스로 동시에 높은 트래픽을 처리할 수 있기 때문에 인기를 얻었습니다. 이 첫 번째 단계에서는 Ubuntu 서버에 Nginx 웹 서버를 설치합니다.

패키지를 설치하기 전에 다음 명령어로 Ubuntu 패키지 목록을 업데이트하고 새로 고칩니다.

sudo apt update

update repo

아래 명령어로 Ubuntu 머신에 Nginx 웹 서버를 설치합니다. 설치를 확인하라는 메시지가 표시되면 Y를 입력하여 설치를 확인하십시오.

sudo apt install nginx

install nginx

설치가 완료되면 Nginx 서비스가 시스템에서 실행되고 활성화되어 있어야 합니다. 아래 명령어로 Nginx 서비스를 확인하십시오.

sudo systemctl is-enabled nginx  
sudo systemctl status nginx

Nginx 서비스가 ‘ enabled ‘로 표시되고 현재 상태가 ‘ active (running) ‘이어야 합니다.

check nginx service

Nginx에 접근하기 전에, Ubuntu 서버에서 UFW (Uncomplicated Firewall)를 통해 HTTP 및 HTTPS 포트를 모두 열어야 합니다.

다음 ‘ ufw ‘ 명령어를 실행하여 ‘ Nginx Full ‘ 프로필을 활성화하여 HTTP 및 HTTPS 접근을 허용하십시오.

sudo ufw allow 'Nginx Full'

이제 다음 명령어로 UFW 규칙을 확인하십시오. ‘ Nginx Full ‘ 프로필이 상태 ‘ALLOW’로 활성화되어 있는지 확인하십시오.

sudo ufw status

setup nginx ufw

마지막으로, 선호하는 웹 브라우저에서 http://192.168.5.30/를 방문하여 Nginx 설치에 접근하십시오. 성공하면 다음과 같은 기본 ‘ index.html ‘ 페이지를 볼 수 있어야 합니다:

nginx index

MariaDB 서버 설치

Nginx를 설치한 후, Ubuntu에 MariaDB 서버를 설치합니다. 이 예제에서는 Ubuntu 저장소를 통해 MariaDB를 설치한 다음, ‘ mariadb-secure-installation ‘ 유틸리티를 통해 MariaDB 설치를 보호합니다.

Ubuntu에 MariaDB 서버를 설치하려면 다음 ‘ apt install ‘ 명령어를 실행하십시오. Y를 입력하고 ENTER를 눌러 프로세스를 진행하십시오.

sudo apt install mariadb-server

install mariadb server

설치가 완료되면 아래 명령어로 MariaDB 서비스를 확인하십시오. 이 명령어는 MariaDB 서비스의 상태를 보여줍니다.

sudo systemctl is-enabled mariadb  
sudo systemctl status mariadb

MariaDB 서비스는 ‘ enabled ‘로 표시되고 현재 상태는 ‘ active (running) ‘입니다.

check mariadb service

MariaDB 서버를 설치한 후, ‘ mariadb-secure-installation ‘을 통해 보안을 강화해야 합니다. 이를 통해 MariaDB 루트 비밀번호를 설정하고, 루트 사용자의 원격 인증을 비활성화하며, 불필요한 데이터베이스와 권한을 제거할 수 있습니다.

아래 ‘ mariadb-secure-installation ‘ 명령어를 실행하여 MariaDB 서버를 보호하십시오.

sudo mariadb-secure-installation

이제 다음 MariaDB 서버 구성에 대해 질문을 받게 됩니다:

MariaDB 루트 비밀번호를 입력하라는 메시지가 표시되면 ENTER를 누르십시오.

Enter current password for root (enter for none):  
OK, successfully used password, moving on...

unix_socket 인증으로 전환하라는 질문에 ‘ n ‘을 입력하십시오.

Switch to unix_socket authentication [Y/n] n  
 ... skipping.

MariaDB 루트 비밀번호를 구성하라는 질문에 Y를 입력하십시오. 그런 다음 새 비밀번호를 입력하고 반복하십시오.

Change the root password? [Y/n] Y  
New password:  
Re-enter new password:  
Password updated successfully!  
Reloading privilege tables..  
 ... Success!

MariaDB 서버 설치에서 기본 익명 사용자를 제거하라는 질문에 Y를 입력하십시오.

Remove anonymous users? [Y/n] Y  
 ... Success!

MariaDB 루트 사용자의 원격 로그인을 비활성화하라는 질문에 Y를 입력하십시오. 루트 사용자는 항상 localhost에서 연결해야 합니다.

Disallow root login remotely? [Y/n] Y  
 ... Success!

이제 기본 데이터베이스 테스트와 해당 권한을 MariaDB 서버에서 제거하라는 질문에 Y를 입력하십시오.

Remove test database and access to it? [Y/n] Y  
 - Dropping test database...  
 ... Success!  
 - Removing privileges on test database...  
 ... Success!

권한 테이블을 다시 로드하고 지금까지 변경한 모든 내용을 적용하라는 질문에 Y를 입력하십시오.

Reload privilege tables now? [Y/n] Y  
 ... Success!

완료되면 다음 메시지가 표시됩니다:

All done! If you've completed all of the above steps, your MariaDB  
installation should now be secure.  
  
Thanks for using MariaDB!

PHP-FPM 설치

PHP-FPM (FastCGI Process Manager)은 PHP에 대한 FastCGI 구현의 대안입니다. 주로 Nginx를 웹 서버로 사용하는 고트래픽 사이트에 사용됩니다. 이 섹션에서는 MySQL/MariaDB 드라이버에 대한 mysqli, 캐싱을 위한 opcache 및 APCu와 같은 추가 확장과 함께 PHP-FPM을 설치합니다.

다음 명령어로 Ubuntu 서버에 PHP-FPM을 설치하십시오. 프롬프트가 표시되면 Y를 입력하고 ENTER를 눌러 진행하십시오.

sudo apt install php-fpm php-mysql php-curl php-gd php-json php-intl php-bcmath php-opcache php-apcu php-mbstring php-fileinfo php-xml php-soap php-tokenizer php-zip

install php-fpm

설치가 완료되면 PHP-FPM 서비스가 실행 중이어야 합니다. 다음 명령어로 PHP-FPM 서비스 상태를 확인하십시오.

sudo systemctl is-enabled php8.3-fpm  
sudo systemctl status php8.3-fpm

아래와 같이 PHP-FPM이 ‘ active (running) ‘이고 시스템 부팅 시 ‘ enabled ‘로 표시됩니다:

check php-fpm service

Ubuntu에서 기본 PHP-FPM은 sock 파일 아래에서 실행됩니다. PHP-FPM sock 파일의 경로를 아는 것은 Nginx 웹 서버와의 통합에 중요합니다.

다음 명령어로 PHP-FPM sock 파일의 위치 경로를 확인하십시오.

ss -pl | grep php

다음 출력에서 PHP-FPM sock 파일이 ‘ /run/php/php8.3-fpm.sock ‘에 위치해 있음을 확인할 수 있습니다.

Nginx와 PHP-FPM 통합

이제 PHP-FPM을 설치했으므로 Nginx 웹 서버와 통합할 차례입니다. 이를 위해 PHP-FPM sock 파일의 경로를 정확히 알고 있어야 하며, 기본 Nginx 서버 블록 파일을 수정해야 합니다.

다음 nano 편집기 명령어를 사용하여 서버 블록 구성 ‘ /etc/nginx/sites-available/default ‘를 엽니다.

sudo nano /etc/nginx/sites-available/default

다음 줄의 주석을 제거하고 PHP-FPM sock 파일의 경로를 새 위치로 변경하십시오.

 # pass PHP scripts to FastCGI server  
 #  
 location ~ \.php$ {  
     include snippets/fastcgi-php.conf;  
  
     # # With php-fpm (or other unix sockets):  
     fastcgi_pass unix:/run/php/php8.3-fpm.sock;  
  
     # # With php-cgi (or other tcp sockets):  
     # fastcgi_pass 127.0.0.1:9000;  
 }

파일을 저장하고 편집기를 종료하십시오.

이제 아래 ‘ nginx ‘ 명령어를 실행하여 Nginx 구문을 확인하십시오. Nginx 구성 변경 후 이 명령어를 실행해야 합니다.

sudo nginx -t

올바른 Nginx 구문이 있으면 다음과 같은 확인 메시지가 표시됩니다:

integrate nginx and php-fpm

다음으로 아래 명령어를 실행하여 Nginx 서비스를 재시작하고 Nginx와 PHP-FPM 간의 통합을 적용하십시오.

sudo systemctl restart nginx

Nginx가 재시작되면 PHPINFO 파일을 통해 통합을 확인할 수 있습니다. 아래 명령어를 실행하여 기본 웹 루트 디렉토리 ‘ /var/www/html/ ‘에 PHPINFO 파일 ‘ info.php ‘를 생성하십시오.

echo "" > /var/www/html/info.php

마지막으로 웹 브라우저로 돌아가 http://192.168.5.30/info.php를 방문하십시오. Nginx와 PHP-FPM의 통합이 성공하면 다음과 같은 내용을 볼 수 있습니다:

PHP 8.3이 Nginx 웹 서버 아래에서 PHP-FPM 서버 API와 함께 실행되고 있음을 확인할 수 있습니다.

phpinfo

페이지를 아래로 스크롤하면 PHP mysqli/mysqlnd 확장도 설치되어 있음을 볼 수 있습니다.

php mysql enabled

마지막으로, PHP 설치에서 APC를 통한 캐싱이 활성화되어 있는 것도 확인할 수 있습니다.

php apc enabled

Nginx 서버 블록 (가상 호스트) 생성

서버 블록은 Nginx 웹 서버의 ‘가상 호스트’를 위한 또 다른 이름입니다. 이는 단일 서버에서 여러 웹사이트 또는 도메인 이름을 호스팅하는 데 사용됩니다. 이 섹션에서는 Nginx 서버 블록을 생성하는 방법을 배웁니다.

서버 블록 구성을 생성하기 전에 아래 명령어를 실행하여 새 웹 루트 디렉토리 ‘/var/www/newsite/public_html’ 및 사용자 정의 ‘index.html’ 페이지를 생성하십시오.

mkdir -p /var/www/newsite/public_html  
echo "Welcome to newsite.com" > /var/www/newsite/public_html/index.html

이제 아래 명령어를 실행하여 ‘ /var/www/newsite ‘ 디렉토리의 소유권을 사용자 ‘ www-data ‘로 변경하십시오. Ubuntu 시스템에서 Nginx 웹 서버는 ‘ www-data ‘ 사용자로 실행됩니다.

sudo chown -R www-data:www-data /var/www/newsite

다음으로 아래 nano 편집기 명령어를 실행하여 새 서버 블록 구성 ‘/etc/nginx/sites-available/newsite’을 생성하십시오.

sudo nano /etc/nginx/sites-available/newsite

아래 구성을 삽입하고 server_name 옵션을 도메인 이름으로 변경하고 웹 루트 디렉토리를 ‘ /var/www/newsite/public_html ‘와 같은 새 경로로 변경하십시오.

server {  
   listen 80;  
   server_name newsite.com;  
  
   root /var/www/newsite/public_html;  
   index index.html;  
  
   location ~ \.php$ {  
     include snippets/fastcgi-php.conf;  
     fastcgi_pass unix:/run/php/php8.3-fpm.sock;  
   }  
  
   location / {  
     try_files $uri $uri/ =404;  
   }  
}

완료되면 파일을 저장하고 종료하십시오.

이제 아래 명령어를 실행하여 서버 블록 구성 ‘ newsite ‘을 활성화하십시오. 이 명령어로 ‘ /etc/nginx/sites-available/newsite ‘ 파일의 새 심볼릭 링크를 ‘ /etc/nginx/sites-enabled/ ‘ 디렉토리에 생성합니다.

sudo ln -s /etc/nginx/sites-available/newsite /etc/nginx/sites-enabled/

서버 블록이 활성화되면 아래 ‘ nginx ‘ 명령어를 실행하여 Nginx 구문을 확인하십시오.

sudo nginx -t

오류가 없으면 ‘ … syntax is ok / … test is successful ‘라는 출력을 받아야 합니다.

마지막으로 아래 명령어를 실행하여 Nginx 웹 서버를 재시작하고 새 서버 블록 구성을 적용하십시오. 이렇게 하면 서버 블록 구성이 로컬 머신에서 접근 가능해집니다.

sudo systemctl restart nginx

create server block

서버 블록 구성 테스트

Nginx 서버 블록 구성이 성공적인지 확인하기 위해 로컬 컴퓨터에서 서버 블록 구성의 도메인 이름에 접근할 것입니다. 공개 도메인 이름을 사용하는 경우 도메인 이름에 직접 방문하십시오. 그러나 로컬 도메인 사용자의 경우 로컬 컴퓨터에서 ‘hosts’ 파일을 편집하십시오.

  • Linux 및 MacOS 사용자는 루트/관리자 권한으로 ‘ /etc/hosts ‘ 파일을 편집하십시오.
  • Windows 사용자는 관리자 권한으로 ‘ C:\Windows\System32\drivers\etc\hosts ‘ 파일을 편집하십시오.

서버 IP 주소와 도메인 이름을 다음과 같이 추가하십시오:

192.168.5.30 newsite.com

파일을 저장하고 종료하십시오.

이제 웹 브라우저를 열고 http://newsite.com/을 방문하십시오. Nginx 서버 블록 구성이 성공적이라면, 생성한 사용자 정의 ‘index.html’ 페이지를 볼 수 있어야 합니다:

nginx server block

결론

축하합니다! 이제 Ubuntu 24.04 “Noble Numbat”에 LEMP 스택 (Linux, Nginx, MySQL/MariaDB 및 PHP)을 설치했습니다. 또한 MariaDB 서버 설치를 보호하고 여러 웹사이트를 호스팅하기 위한 Nginx 서버 블록을 생성했습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.