Ubuntu 서버 14.04에 LEMP 스택 설치하기 (Nginx, MySQL, PHP)

업데이트: Nginx 1.8, MySQL 5.7, PHP 7.0 기준으로 업데이트 되었습니다.

LEMP 소프트웨어 스택은 동적 웹 어플리케이션을 구현하기 위해서 필요한 Linux + Nginx + MySQL + PHP를 모아서 부르는 말이라고 합니다. (LNMP가 아니고 LEMP인게 특이하네요.) Nginx 서버 대신에 Apache 서버로 구성된 LAMP 스택도 있습니다.

이 포스팅에서는 Ubuntu 14.04 서버에 LEMP 스택을 설치하는 방법에 대해서 소개합니다. 이후 작업을 위해서 다음 사항들이 준비되어야 합니다. Ubuntu 서버 14.04 초기설정 가이드를 참고하셔서 필요한 사항들을 세팅하실 수 있습니다.

  • Ubuntu 14.04 서버
  • root 계정이 아니면서 sudo 권한을 가지고 있는 사용자 계정
  • SSH 서비스

업데이트: Ubuntu 16.04 버전의 경우 이곳을 참고하시기 바랍니다.

출처: DigitalOcean


1단계. Nginx 웹 서버 설치하기

Apache 서버의 대안으로 떠오르고 있는 Nginx 서버를 설치해보도록 하겠습니다. Apache와의 성능을 비교했을때 확실한 우위를 가지고 있고 많은 관점에서 모던함이 묻어나는 프로젝트입니다.

apt-get 명령어를 통해 설치할 수 있습니다. Ubuntu 14.04 LTS에 포함되어 있는 기본 패키지는 구버전(1.4)이기 때문에 최신 버전 설치를 위해 다음과 같이 repository를 추가해주니다.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get install nginx

Nginx는 설치만으로도 Ubuntu 14.04에서 바로 실행할 수 있습니다. 서버를 설치한 직후라 IP 주소를 알 수 없다면 다음과 같이 입력해서 알아내실 수 있습니다.

$ sudo apt-get install curl
$ curl http://icanhazip.com

브라우저 창에 다음과 같이 주소를 입력하시면 아래와 같이 기본 환영화면을 보실 수 있습니다.

http://{server_domain_name_or_IP}

Welcome to Nginx

혹시 이전에 ufw를 활성화한 상태라면 다음과 같이 Nginx Full을 추가해서 http 포트와 ssl 포트를 방화벽 예외처리해야 합니다.

$ sudo ufw allow "Nginx Full"

2단계. MySQL 설치하기

이제 웹 서버의 데이터를 저장할 수 있는 MySQL 데이터베이스를 설치해보도록 하겠습니다. (최신 버전의 설치를 위해서는 다음을 확인하세요.) 설치를 위해서 다음과 같이 입력합니다.

$ sudo apt-get update
$ sudo apt-get install mysql-server

설치 화면이 진행되고, MySQL root 계정의 비밀번호를 입력하는 화면이 나옵니다. 사용하실 비밀번호를 입력합니다.

보안 강화를 위해서 기본값들을 변경해주는 스크립트를 다음과 같이 실행합니다.

$ sudo mysql_secure_installation 

root 계정의 비밀번호를 입력하고, 이후에 물어보는 몇 가지 질문에 대해 답을 합니다.

  • MySQL root 비밀번호 변경: N + [Enter]

3단계. PHP 설치하기

Nginx 서버와 MySQL 데이터베이스를 연결해주는 스크립팅 런타임이 필요합니다. Nginx는 다른 웹서버와 같이 PHP를 네이티브로 지원하지 않기 때문에 fastCGI process manager(FPM)으로 구현되어 있는 php7.0-fpm을 설치해야 합니다.

PHP 7.0에 따라 다음과 같이 최신 repository를 추가하고 설치해 줍니다. 5.x 버전과 비교, 특정 부분에서 2-3배의 속도 향상이 있다고 합니다.

$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get install php7.0-fpm
$ sudo apt-get install php7.0-mysql

이제 PHP가 설치되었습니다. 보안을 위해서 몇 가지 단계를 더 진행해야 합니다. /etc/php/7.0/fpm/php.ini 파일을 열어서 cgi.fix_pathinfo 부분을 찾아서 주석처리를 해제하고, 다음과 같이 값을 0으로 변경합니다.

cgi.fix_pathinfo=0

저장한 후 종료하고 다음과 같이 입력하여 php5-fpm 서비스를 다시 시작합니다.

sudo service php7.0-fpm restart

4단계. PHP를 위한 Nginx 서버 설정하기

이제 필요한 모든 컴포넌트는 설치되었습니다. 이제 Nginx 서버 설정에서 .php 파일을 처리해주는 부분만 적용하면 됩니다. /etc/nginx/sites-available/default 파일을 열었을 때 주석을 제외하면 다음과 같이 되어 있을 것입니다.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}

다음 사항을 수정합니다.

  • index.html 앞에 index.php를 추가합니다.
  • server_name을 도메인 이름이나 IP 주소로 변경합니다.
  • 에러처리 루틴을 주석 해제합니다.
  • 실제적인 PHP 프로세싱을 위해 필요한 부분을 주석 해제합니다. try_files 부분도 추가해서 잘못된 요청이 전달되지 않도록 합니다.
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_buffers 256 4k;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

업데이트: Ubuntu 14.10 버전에서 cgi가 동작하지 않는 경우 include fastcgi_params; 다음 줄에 다음과 같이 추가합니다. (얄리얄리얄라셩님 제보 감사 드립니다.)

include fastcgi.conf;

위의 사항을 모두 반영했다면 Nginx 서버를 재시작합니다.

$ sudo service nginx restart

5단계. PHP 정상동작 테스트

이제 LEMP 스택이 모두 설치되었고 정상 동작하고 있습니다. 확인을 위해서 nginx 서버 루트 디렉토리(기본적으로 /usr/share/nginx/html에 위치합니다)에 info.php 파일을 만들고 다음과 같이 입력합니다.

<?php
    phpinfo();
?>

입력을 마친 후 주소창에 다음과 같이 입력합니다.

http://{server_domain_name_or_IP}/info.php

다음과 같은 (비슷한) 화면이 표시된다면 LEMP 스택을 성공적으로 설치한 것입니다.

PHP Info

이 파일을 그대로 두는 것은 보안적으로 좋지 않기 때문에, 테스트를 완료한 후 파일을 지우도록 합니다.


6단계. PHPMyAdmin 설치

$ sudo apt-add-repository ppa:nijel/phpmyadmin
$ sudo apt-get update
$ sudo apt-get install phpmyadmin

참고: VULTR를 통한 가상서버(VPS) 호스팅

comments powered by Disqus