라즈베리파이에 EMP (Nginx + MariaDB + PHP) 설치하기

   오늘은 라즈베리파이에 동적인 웹 서비스를 가동하는데 필요한 3종세트, 즉 웹서버 + 데이터베이스 서버 + PHP를 설치하고 기본적인 설정을 하는 방법에 대한 이야기를 해 보겠습니다.

1. 들어가는 말

   전통적으로 리눅스에는 Apache 웹 서버와 Mysql DB서버를 PHP에 연동시켜 사용해 왔습니다. 하지만 최근 경향을 보면 개인 서버나 소호, 중소기업의 경우 Apache 웹서버 보다는 설정이 보다 간편하고 적은 접속자 수에 적합한 Nginx의 사용을 더 선호하는 편이고, DB서버의 경우 Oracle에 편입된 Mysql의 미래에 대해 의구심을 가지는 개발자들이 이를 대체하는 MariaDB를 fork하여 그 사용자 기반을 넓혀가고 있지요. 이에 따라 데비안8 버전에 기반을 둔 Raspbian 운영체제가 설치되어 있는 라즈베리파이에도 Nginx, MariaDB, PHP를 서로 연동시킨 동적 웹서버를 구현해 보도록 하겠습니다.

   이 글에서는 우리의 라즈베리파이가 내부네트워크 192.168.0.2의 주소를 가지고 있다고 가정합니다.


2. 각 애플리케이션의 설치

(1) Nginx 설치

1
$ sudo apt-get install nginx 
cs

   아래와 같이 재부팅없이 nginx 웹서비스를 실행해 줍니다.

1

$ sudo systemctl start nginx.service 

cs

   데비안8의 nginx를 설치하면 기본 웹사이트의 위치는 /var/www/html 입니다.

   nginx가 잘 설치되었다면, 이 기본 웹사이트는 내부 네트워크 PC에 있는 웹브라우저 주소창에 192.168.0.2를 입력 시 아래와 같은 기본 환영 페이지로 보이게 됩니다.

 

(2) Mariadb 설치

1
$ sudo apt-get install mariadb-server mariadb-client 
cs

   위 명령을 실행하면 설치가 진행되면서 MariaDB의 root 암호를 처음 설정하는 파란색 대화창이 열립니다. 보안을 위해 운영체제 root 암호와는 다른 새 암호를 권장합니다. 새 암호를 입력하면, 다시 한번 root 암호를 확인 입력하는 화면에 동일한 암호를 입력합니다. 이후 나머지 설치과정을 마치게 됩니다.

 

(3) PHP 설치

1

$ sudo apt-get install php5-fpm 

cs

   위 명령의 실행으로 fastCGI를 지원하는 PHP-FPM (PHP FastCGI Process Manager)를 설치해 줍니다. PHP-FPM도 Nginx처럼 systemd에 의해 관리되는 서비스(대몬)입니다. FastCGI 서버죠.

 

3. 각 애플리케이션의 설정

(1) Nginx 설정

   아래와 같이 nginx의 설정파일을 editor로 엽니다.

sudo nano -w /etc/nginx/nginx.conf

1
$ sudo nano -w /etc/nginx/nginx.conf 
cs
 

   nano 에디터 화면에서

keepalive_timeout  65;

라는 라인을 찾아 숫자 65를 2로 바꾸어 줍니다.

   이번에는 default 사이트의 설정 파일을 바꿔줄 차례입니다.

1
$ sudo nanow -w /etc/nginx/sites-available/default 
cs

   여기서 다음과 같은 줄을 찾습니다.

 # Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

   여기 index로 시작하는 라인 제일 끝에 다음과 같이 index.php를 추가해 줍니다.

 index index.html index.htm index.nginx-debian.html index.php;

   이 파일의 좀 더 아래쪽으로 내려가서 다음과 같은 부분을 찾습니다.

 #location ~ \.php$ {
    #include snippets/fastcgi-php.conf;

#    # With php5-cgi alone:
#    fastcgi_pass 127.0.0.1:9000;
#    #With php5-fpm:
#    fastcgi_pass unix:/var/run/php5-fpm.sock;
#}

   윗 부분에서 일부 주석처리를 제거해 다음처럼 편집해 줍니다.

 location ~ \.php$ {
    include snippets/fastcgi-php.conf;

#    # With php5-cgi alone:
#    fastcgi_pass 127.0.0.1:9000;
     # With php5-fpm:
     fastcgi_pass unix:/var/run/php5-fpm.sock;
}

   마지막으로 다음과 같은 절차는 작동을 위해 반드시 필요하지는 않지만, 보안 강화를 위해 진행을 권장합니다.

   바로 아래 부분에서 다음과 같은 부분을 찾습니다.

 # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
    #deny all;
#}

   이를 다음과 같이 주석 처리 제거를 해 줍니다.

 # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
    deny all;
}

   편집이 완료되었으면 Control+X키를 누르고 저장 여부를 확인하는 메세지에 y키를 눌러 저장 후 nano 에디터를 빠져 나옵니다.

   그리고 재부팅 없이 설정파일이 반영되도록 다음과 같이 nginx 서비스를 재시작해 줍니다.

1
$ sudo systemctl reload nginx.service 
cs

 

(2) PHP 설정 1 (웹서버와의 연동)

   이제 PHP-FPM의 설정파일을 다음과 같이 엽니다.

1

$ sudo nano -w /etc/php5/fpm/php.ini 

cs

   이 파일에서 아래와 같은 부분을 찾습니다.

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
;cgi.fix_pathinfo=1

   이 라인은 꽤 한참 아래로 내려가야 나오는데, 제 경우는 771번째 줄에 있었습니다. 이 설정을 아래와 같이 바꾸어 줍니다.

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

   cgi.fix_pathinfo의 설정값을 0으로 바꾸어 주는 것인데, 앞의 ; 주석을 제거해 주어야 합니다. 그렇지 않으면 PHP가 이 설정값을 기본값인 1로 인식합니다.

   자, 이제 PHP가 잘 작동하는지 PHP 상태 정보를 불러오는 php 페이지를 만들어 봅니다. 다음과 같이 새 php 페이지를 만들어 줍니다.

1
$ sudo nano -w /var/www/html/info.php 
cs

   이 파일에 아래 내용을 붙여 넣고 Ctrl+X키로 저장(y입력) 후 nano에디터를 나옵니다.

<?php
phpinfo();
?>

   자, 이제 네트워크 내의 PC에서 웹브라우져를 열고 주소창에 아래 주소를 입력해 봅니다.

   아래 그림과 비슷하게 PHP의 정보가 웹브라우져에 출력된다면 웹서버와 PHP가 잘 연동되도록 설정된 것입니다.

 

(3) PHP설정 2 (데이터베이스 서버와의 연동)

   Debian 패키지 시스템에서 PHP는 여러가지 기능이 모듈화되어 각각의 패키지 형태로 제공됩니다. 어떠한 모듈들이 있는지는 다음과 같은 명령으로 확인할 수 있습니다.

1
$ sudo apt-cache search php5 
cs

   이 중에서 본인이 어떤 웹서비스를 할 것인가에 따라 본인에게 필요한 모듈을 골라서 설치해 줄 수 있습니다. DB연동도 PostgreSQL, sybase/MSSQL Server 등에 대한 연동까지 가능합니다. MariaDB는 Mysql을 완전히 대체(drop-in replacement)하는 애플리케이션이므로 MariaDB와의 연동을 위해서도 php5-mysql 혹은 php5-mysqlnd를 설치해 주어야 합니다. 끝에 붙은 nd는 native driver의 약자로서, php5-mysqlnd의 사용이 더 권장된다고 하네요. 우리도 이 녀석을 설치해 봅니다.

1
$ sudo apt-get install php5-mysqlnd 
cs

   특별히 설정파일을 만질 필요 없이 설치 과정 중에 스크립트가 알아서 다 연동 시켜 주고요. 우리는 그냥 다시 한번 웹브라우저에서 php 정보를 다시 불러서 확인해 보면 됩니다.

 

   위 그림과 비슷하게 설정이 되었다면 PHP와 MariaDB가 잘 연동된 것입니다.

   자, 이제 모든 설정을 마쳤으면, 보안상 우리가 생성한 info.php 파일은 삭제하는 것을 권장합니다.

 

4. 나오는 말

   이상과 같이 데비안 리눅스가 돌아가고 있는 라즈베리파이에 Nginx 웹 서비스, PHP 동적페이지 서비스, MariaDB 데이터베이스 서비스를 서로 연동하여 설치하는 방법을 살펴 보았습니다. 저렴한 구매비용뿐 아니라, 전력 소모도 적고 소음도 없으며 공간 마저 거의 차지하지 않는 이 기특한 물건 덕분에, 개인이나 소호, 중소기업까지도 이 작은 보드에 LEMP를 설치하여 동적 웹 서비스를 하기에 무리가 없는 시대가 도래하였습니다. 이제 이 웹서버에 여러 유용한 웹 콘텐츠를 올려 유용하게 사용해 봅시다. [끝.]

신고
Posted by truerain