블로그로 돌아가기

Ubuntu 20.04에 LEMP 스택(Linux, Nginx, MySQL PHP)을 설치하는 방법

Ubuntu 20.04에 LEMP 스택(Linux, Nginx, MySQL PHP)을 설치하는 방법

소개

인터넷 세상에서는 여러 기술이 결합하여 인터넷 사용자가 월드 와이드 웹에서 동적 콘텐츠에 액세스할 수 있도록 하는 솔루션을 형성합니다. LEMP 스택은 이러한 솔루션 중 하나입니다. 이는 고성능 및 동적 웹사이트를 위한 완전한 서버 솔루션을 만드는 네 가지 기술을 결합합니다. LEMP는 Linux, Nginx, MySQL, PHP의 약어입니다. Linux는 서버 운영 체제입니다. Nginx(Engine-X로 발음되므로 약어에서 문자 E를 차지함)는 웹 서버 소프트웨어입니다. 다음으로 MySQL은 웹사이트와 사용자 데이터를 저장하는 데이터베이스 시스템입니다. PHP는 동적 처리를 위한 서버 측 스크립팅 언어입니다.

이 튜토리얼에서는 LEMP 스택을 설치 및 구성하고 모든 것이 예상대로 실행되는지 확인하는 방법을 안내합니다. 시작해 보겠습니다!

1단계: Ubuntu 20.04로 서버 구성하기

Ubuntu 20.04는 Linux 기반 운영 체제입니다. 여러 개의 Linux 기반 서버 운영 체제가 존재하며, 여기에는 무료 및 프리미엄이 포함됩니다. 이 가이드의 초점은 무료이자 오픈 소스인 Ubuntu 20.04에 맞춰져 있습니다. 이 단계는 LEMP 스택 약어의 첫 번째 요구 사항인 L을 처리합니다. 후속 단계를 진행하려면 VPS에 실제 Ubuntu 20.04가 설치되어 있어야 합니다. 다음 가이드를 따르셔도 좋습니다: Ubuntu 서버 설정하기. 선택 사항으로, 로컬 컴퓨터에서 이 가이드를 따르려면 Ubuntu 20.04 서버 설치 이미지를 다음에서 직접 다운로드할 수 있습니다: Ubuntu 웹사이트. sudo 권한이 필요한 몇 가지 명령을 실행할 것이므로 sudo 권한이 있는 일반 non-root 사용자를 구성해야 합니다.

2단계: Nginx 서버 설치 및 구성

웹 서버는 웹사이트 방문자에게 웹 페이지와 같은 콘텐츠를 제공할 수 있게 해줍니다. Nginx는 널리 사용되는 웹 서버로, 개발자들이 선호하는 상위 5대 오픈 소스 웹 서버 중 하나입니다. 이 단계는 LEMP 스택의 두 번째 요구 사항인 Nginx의 E를 처리합니다. Ubuntu에는 이 가이드에서 사용할 패키지를 가져올 기본 패키지 저장소가 있습니다. Ubuntu는 패키지 관리를 위해 apt 또는 dpkg를 사용하는 Debian을 기반으로 합니다. 기본 저장소의 패키지에는 apt를 사용합니다.

기본적인 규칙으로, Linux 시스템에서 설치를 시작하기 전에 업데이트 명령을 실행해야 합니다. 터미널에 다음 명령을 입력하여 시작하십시오:

업데이트가 완료되면 이제 다음 명령으로 Nginx를 설치할 수 있습니다:

설치가 완료되면 Nginx가 자동으로 실행되기 시작합니다. 다음 단계는 트래픽이 통과할 수 있도록 방화벽을 구성하는 것입니다. Ubuntu는 방화벽 구성을 위해 ufw (Uncomplicated Firewall) 패키지를 사용합니다. 설치 후 Nginx는 ufw에 서비스로 자신을 등록합니다. Ubuntu는 시스템 부팅 시 방화벽 서비스를 자동으로 시작하지만, 확실히 하기 위해 다음 명령을 입력하여 활성화하십시오:

ufw가 허용하는 애플리케이션 구성을 나열하려면 다음 명령을 입력하십시오:

아래는 위 명령의 출력을 보여주는 스크린샷입니다:

ufw app list

보시다시피 Nginx는 이미 ufw에 등록되어 있으며 아래에 설명된 대로 세 가지 프로필이 있습니다:

  • Nginx Full – 80번 포트와 443번 포트를 모두 엽니다. 80번 포트는 일반/암호화되지 않은 트래픽(즉, HTTP)용입니다. 443번 포트는 TLS/SSL 암호화된 트래픽(즉, HTTPS)용입니다.
  • Nginx HTTP – 80번 포트만 엽니다 – 암호화되지 않은 트래픽.
  • Nginx HTTPS – 443번 포트만 엽니다 – TLS/SSL 암호화된 트래픽.

Nginx가 ufw에 자동 등록되지만, 직접 허용하기 전까지는 서버로의 트래픽이 허용되지 않습니다. 모든 프로필 또는 일부 프로필을 허용하도록 선택할 수 있지만, 웹 서버에 대해 구성한 트래픽을 계속 허용하면서도 가장 제한적인 프로필을 허용하는 것이 좋습니다. 이 튜토리얼에서는 SSL을 구성하지 않았으므로 80번 포트의 HTTP 트래픽만 허용합니다. 궁금한 점이 있다면 Certbot을 사용하여 Let's Encrypt에서 Nginx 서버에 SSL을 구성하는 가이드가 준비되어 있습니다.

다음 명령어를 입력하여 80번 포트의 트래픽을 허용해 보겠습니다:

변경 사항이 성공적으로 적용되었는지 확인하려면 다음 명령어를 입력하세요:

check status

위의 명령어 실행 결과는 이제 HTTP 트래픽이 허용되었음을 보여줍니다. 브라우저에서 도메인 또는 서버의 공인 IP에 접속하여 서버가 실행 중인지 확인할 수 있습니다. 도메인 이름을 구성하지 않았고 서버의 공인 IP 주소를 잘 모르는 경우, 다음을 사용하여 찾을 수 있습니다: curl (다음 명령어를 실행하여):

위 명령어의 출력 결과(공인 IP 주소)를 복사하여 브라우저의 주소창에 붙여넣으세요. 페이지를 로드하면 기본 Nginx 랜딩 페이지가 표시됩니다:

nginx start page

위 페이지는 Nginx가 성공적으로 설치되었음을 나타냅니다.

3단계: MySQL 데이터베이스 관리 시스템 설치

데이터 관리는 모든 동적 웹사이트의 중요한 부분입니다. MySQL은 웹사이트의 데이터를 저장하고 관리하는 데이터베이스 관리 시스템입니다. 이 단계에서는 LEMP 스택의 세 번째 요구 사항인 M을 처리합니다. MySQL을 설치하려면 다음 명령어를 입력하세요:

MySQL 설치가 완료되면 사용하기 전에 구성해야 합니다. 구성의 일부에는 데이터베이스 서버의 보안 설정이 포함됩니다. MySQL에는 비밀번호를 설정하고 보안을 강화하는 데 도움이 되는 스크립트가 포함되어 있습니다. 다음 명령어는 스크립트를 시작합니다:

mysql secure installation

스크립트는 VALIDATE PASSWORD 구성 요소를 설정할지, 아니면 아무 키나 눌러 구성 요소를 활성화하지 않고 진행할지 묻습니다.

VALIDATE PASSWORD 구성 요소는 데이터베이스 서버의 특정 사용자에 대해 입력한 비밀번호가 특정 기준과 일치하는지 확인하는 데 사용되는 기능입니다. 길이, 숫자 문자, 대문자 또는 소문자 사용 가능 여부 등을 확인하도록 구성할 수 있습니다. 활성화하지 않으면 원하는 비밀번호를 자유롭게 구성할 수 있습니다. 그러나 활성화하는 경우 지정한 기준에 맞는 비밀번호를 사용해야 합니다. 이를 활성화하면 Ubuntu용 phpMyAdmin 패키지와 같이 MySQL 사용자 자격 증명을 자동으로 구성하는 패키지에서 문제가 발생할 수 있습니다. 활성화 여부는 개인의 선택입니다. 활성화하지 않더라도 강력하고 고유한 비밀번호를 사용한다면 데이터베이스는 여전히 안전합니다.

구성 요소를 활성화하기 위해 Y를 누르면, 스크립트에서 비밀번호 검증 수준을 선택하라는 메시지가 표시됩니다:

password strength

스크립트는 3가지 수준의 비밀번호 검증을 제공합니다. LOW 수준은 비밀번호가 8자 이상이어야 합니다. MEDIUM 수준은 대문자, 소문자, 특수문자가 혼합된 8자 이상의 비밀번호여야 합니다. STRONG 수준은 대문자, 소문자, 특수문자, 단어가 혼합된 8자 이상의 복잡한 비밀번호여야 하며, 일반적인 사전 단어를 기반으로 해서는 안 됩니다. 그렇지 않으면 오류가 발생합니다. 여기서는 Low 수준으로 진행하기 위해 0을 입력하고 엔터를 누르겠습니다.

스크립트에서 비밀번호를 입력하고 다시 입력하라는 메시지가 표시됩니다:

set password

y를 입력하고 엔터를 눌러 입력한 비밀번호를 root 비밀번호로 수락합니다. 이후의 프롬프트는 MySQL 서버의 보안을 개선하기 위한 것입니다. 모든 MySQL 설치에 기본적으로 포함되어 있는 익명 사용자를 제거하고, 원격 접속에서의 root 로그인을 비활성화하며, 테스트 데이터베이스를 제거하는 것부터 시작합니다. 마지막 프롬프트는 명령어가 적용되도록 권한 테이블을 다시 로드할지 묻습니다. 모든 프롬프트에 y를 입력하고 엔터를 누르세요:

mysql secure installation

초기 보안 구성이 완료되었습니다.

다음 명령어를 실행하여 설치된 MySQL 버전을 확인할 수 있습니다:

이 튜토리얼에서 사용하는 버전은 다음과 같습니다:

mysql version

MySQL 5.7 이상 버전을 실행하는 Ubuntu 시스템의 경우, root 사용자는 비밀번호가 아닌 auth_socket 플러그인을 사용하여 인증하도록 설정되어 있습니다. 이는 더 강력한 보안을 보장하지만, phpMyAdmin 패키지와 같은 외부 패키지에서 문제가 될 수 있습니다. auth_socket 플러그인을 계속 사용하려면 4단계로 이동하십시오.

대신 비밀번호를 사용하여 연결하려면 인증 방법을 mysql_native_password를 사용하도록 구성해야 합니다.

다음 명령어를 입력하여 MySQL 프롬프트를 시작합니다:

MySQL에는 여러 기본 데이터베이스가 함께 제공됩니다. 터미널에 다음 쿼리를 입력하여 기본 데이터베이스 목록을 볼 수 있습니다:

mysql dbs LEMP stack

mysql이라는 데이터베이스에는 여러 MySQL 관련 구성이 저장됩니다. 이 데이터베이스에는 사용자 세부 정보와 각 사용자의 인증 방법이 포함된 users라는 테이블이 있습니다. 우리는 SQL 쿼리를 사용하여 테이블에서 정보를 검색, 변경 및 삭제할 수 있습니다. 터미널에 다음 쿼리를 입력하여 각 사용자가 사용하는 인증 방법에 대한 세부 정보를 확인하십시오:

user authentication check

위의 출력은 root 사용자가 실제로 auth_socket 플러그인을 사용하여 인증함을 보여줍니다. root 사용자의 인증 방법을 변경하려면 터미널에 다음 명령문을 입력하십시오. 이전 단계에서 설정한 중간 수준의 비밀번호 강도에 맞게 변경해야 하며, 그렇지 않으면 오류가 발생합니다:

쿼리가 성공적으로 실행되면 변경 사항이 즉시 적용되도록 flush privileges 명령을 실행합니다:

변경 사항이 적용되었는지 확인하기 위해 아래의 select 문을 다시 실행합니다:

updated user authentication check

출력 결과에서 root 사용자는 이제 mysql_native_password를 사용하여 인증하게 됩니다. exit를 입력하고 엔터를 누르면 mysql 프롬프트를 종료할 수 있습니다.

다음 명령어를 입력하여 설정한 비밀번호로 로그인을 시도할 수 있습니다:

프롬프트에서 비밀번호를 요구할 것입니다. 비밀번호가 일치하면 MySQL 프롬프트가 표시됩니다. MySQL로 서버를 성공적으로 설정했습니다. 다음으로 MySQL 프롬프트를 종료합니다.

4단계: PHP 설치 및 PHP 프로세서를 사용하도록 Nginx 설정하기

PHP는 PHP: Hypertext Preprocessor의 약자입니다. 웹사이트 및 웹 애플리케이션을 위해 널리 사용되는 오픈 소스 서버 측 스크립트 언어입니다. PHP는 LEMP 스택의 네 번째 요구 사항을 처리합니다. PHP는 웹사이트에서 동적 콘텐츠를 생성하는 데 도움을 줍니다. 웹페이지와 데이터베이스 시스템 사이의 중개자 역할을 할 수 있습니다. 데이터베이스에서 데이터를 읽어 웹사이트 방문자에게 보여줍니다. 또한 데이터베이스에서 데이터를 삽입, 업데이트 및 삭제할 수 있습니다.

Nginx는 다른 웹 서버와 달리 자체 PHP 처리 플러그인이 없으므로, Nginx의 요청을 PHP로 전달하여 처리하기 위해 php-fpm을 설치해야 합니다. 먼저 Ubuntu 커뮤니티에서 관리하는 무료 오픈 소스 소프트웨어가 포함된 Ubuntu universe 저장소를 추가합니다. 터미널에 다음 명령어를 입력하십시오:

그런 다음, PHP가 MySQL과 통신할 수 있도록 php-fpm 패키지와 php-mysql 헬퍼 패키지를 함께 설치합니다. 다음 명령어를 사용하십시오:

이 가이드를 작성하는 시점에 위 명령어로 설치되는 PHP 버전은 7.2.24입니다. 따라서 php-fpm7.2 패키지가 설치됩니다. 서버 블록을 업데이트할 때 이 점을 염두에 두고 올바른 버전을 입력해야 합니다. 그렇지 않으면 페이지가 로드되지 않습니다.

다음 명령어를 입력하여 PHP 버전을 확인할 수 있습니다:

php version

이 시점에서 모든 LEMP 스택 구성 요소가 설치되었습니다. 다음으로 해야 할 일은 Nginx가 요청을 PHP 프로세서로 전달하도록 구성하는 것입니다. Nginx에서 구성은 서버 블록 내에서 수행됩니다. 서버 블록은 Apache의 가상 호스트와 동일합니다. 자세한 내용은 Nginx 서버 블록에 대한 자습서를 참조하십시오.

이 자습서에서는 동일한 이름의 test.com 도메인에 대한 서버 블록을 만들어 보겠습니다. 원하는 이름을 자유롭게 선택할 수 있습니다. 서버 블록은 /etc/nginx/sites-available/ 디렉토리에 있습니다. 다음 명령을 입력하여 nano를 사용해 서버 블록 파일을 생성합니다:

파일에 다음 스크립트를 입력합니다:

각 지시어의 기능에 대한 간략한 설명은 다음과 같습니다:

  • listen – Nginx가 수신 대기할 포트를 정의합니다. 기본 포트는 80포트이지만, SSL을 설정한 경우 443을 입력합니다.
  • root – 사이트 디렉토리가 저장될 디렉토리를 포함합니다.
  • index – 요청 시 index.php 파일이 있는 경우 해당 파일을 우선적으로 제공하도록 Nginx에 지시합니다.
  • server_name – 서버 블록의 이름을 정의하며, 서버의 공인 IP 주소 또는 도메인 이름을 가집니다.
  • location/ – 첫 번째 location 블록에는 try_files 지시어가 있습니다. URI 요청과 일치하는 파일이 있는지 확인하고, 찾을 수 없으면 404 오류를 반환합니다.
  • location ~ \.php$ – 이 지시어는 Nginx 요청을 fastcgi-php.conf 파일과 php-fpm에 연결할 소켓을 정의하는 php7.2-fpm.sock 파일을 통해 전달하여 PHP 처리를 처리합니다. 이 명령은 php-fpm의 상태를 확인하며, 여기서는 설치된 버전인 7.2를 지정합니다. 설치된 버전에 맞게 확인하십시오:
php status

  • location ~ /\.ht – 이 지시어는 Nginx에서 처리되지 않는 .htaccess 파일을 처리합니다. deny all 지시어는 방문자에게 htaccess 파일이 제공되지 않도록 합니다.

test.com 파일에 스크립트를 추가한 후 Ctrl + O를 누른 다음 Enter 키를 눌러 파일을 저장합니다. Ctrl + X를 입력하여 편집기를 닫습니다.

그런 다음, /etc/nginx/sites-enabled에 심볼릭 링크를 생성하는 다음 명령을 입력하여 서버 블록을 활성화해야 합니다:

그런 다음, 다음 명령어를 입력하여 sites-enabled에서 기본 서버 블록의 링크를 해제합니다:

다음 명령어를 입력하여 새 구성을 테스트합니다:

구문(syntax)에 문제가 없다면, 다음 명령어로 Nginx를 재로드합니다:

이 단계에서 LEMP 스택의 설치 및 구성이 완료되었습니다. 다음 단계에서는 다양한 구성 요소가 잘 연결되는지 확인하기 위해 테스트 파일을 생성합니다.

5단계: LEMP 스택 테스트를 위한 PHP 파일 생성

이 단계에서는 .php 파일을 생성하고 Nginx 서버에서 실행하여 제대로 작동하는지 확인합니다. 전역 phpinfo() 함수를 사용하여 사용 가능한 php 패키지를 확인할 것입니다. 다음 명령어를 입력하여 nano에서 .php 파일을 엽니다:

nano 편집기에서 다음 코드 스니펫을 입력합니다:

파일을 저장하고 닫습니다. 브라우저에서 방금 생성한 페이지에 접속하려면, 도메인 또는 IP 주소를 찾아 다음과 같이 이동합니다:

PHP 정보 페이지를 볼 수 있어야 합니다:

php info page

위 페이지는 Nginx가 성공적으로 설정되었음을 보여줍니다. 테스트를 위해 생성한 파일에는 서버에 대한 자세한 세부 정보가 포함되어 있으므로, 반드시 삭제해야 합니다. 다음 명령어를 입력하여 파일을 삭제합니다:

 

향후 구성을 다시 테스트해야 하는 경우, 언제든지 파일을 다시 생성할 수 있습니다.

결론

이 튜토리얼에서는 현재 사용 가능한 가장 강력한 웹 애플리케이션 개발 스택 중 하나인 Ubuntu 20.04에 LEMP 스택을 구성했습니다. 이제 거의 모든 웹사이트, 웹 앱 또는 모바일 애플리케이션용 서버 사이드 로직을 호스팅할 수 있습니다. 웹사이트가 안전한 SSL 연결을 통해 콘텐츠를 제공하도록 하려면, Nginx 서버에서 SSL 인증서를 구성하는 방법에 대한 튜토리얼을 살펴보시는 것을 권장합니다.

즐거운 컴퓨팅 되세요!

author

Akshay Nagpal

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.