Ubuntu 서버 14.04에 LEMP 스택 설치하기 (Nginx, MySQL, PHP)
업데이트: Nginx 1.8, MySQL 5.7, PHP 7.0 기준으로 업데이트 되었습니다.
LEMP 소프트웨어 스택은 동적 웹 어플리케이션을 구현하기 위해서 필요한 Linux + Nginx + MySQL + PHP를 모아서 부르는 말이라고 합니다. 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}
혹시 이전에 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 스택을 성공적으로 설치한 것입니다.
이 파일을 그대로 두는 것은 보안적으로 좋지 않기 때문에, 테스트를 완료한 후 파일을 지우도록 합니다.
6단계. PHPMyAdmin 설치
$ sudo apt-add-repository ppa:nijel/phpmyadmin
$ sudo apt-get update
$ sudo apt-get install phpmyadmin
Originally published at https://blog.shako.net on August 19, 2014.