라즈베리파이에 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를 설치하여 동적 웹 서비스를 하기에 무리가 없는 시대가 도래하였습니다. 이제 이 웹서버에 여러 유용한 웹 콘텐츠를 올려 유용하게 사용해 봅시다. [끝.]
'셈틀 이야기 > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 팩스서버에서 Avantfax 웹애플리케이션 운용하기 (0) | 2016.11.14 |
---|---|
라즈베리파이에 팩스서버 설치하기 (12) | 2016.11.10 |
Raspberry Pi를 OpenVPN 서버로 만들기 (제3부) (11) | 2016.10.12 |
Raspberry Pi를 OpenVPN 서버로 만들기 (제2부) (2) | 2016.10.11 |
Raspberry Pi를 OpenVPN 서버로 만들기 (제1부) (1) | 2016.10.10 |