LEMP(ubuntu14.04 + nginx + mysql + php-fpm + memcached) 스택 설치방법 소개 > 서버관리자

서버관리자

서버관리자 모임 게시판 입니다.

LEMP(ubuntu14.04 + nginx + mysql + php-fpm + memcached) 스택 설치방법 소개 정보

LEMP(ubuntu14.04 + nginx + mysql + php-fpm + memcached) 스택 설치방법 소개

본문

모던 PHP의 새로운 방향을 제시하는 PHP: The Right Way 의 저자 조쉬 록하트가 추천하는 LEMP 스택을 설치해보았습니다.

 

기존에는 LAMP(linux + apache + mysql or mariaDB + php)의 방식이 많이 애용되고 있었지만, apache보다 nginx가 훨씬 가볍고 빠르다는게 입증되었고, php 또한 php-fpm이 FastCGI 프로세스를 효율적으로 관리하고 nginx와 쌍으로 조합을 하면 최고라는 소문에 한번 시도 해 보게 되었습니다. 거기에 file을 이용한 세션이 아닌 memcached를 사용해서 세션 I/O 속도를 업! 시켜 보았습니다.


 

  • 이 방법은 가상서버호스팅과 VM으로 올린 서버 이미지에서도 가능한 방법이었습니다.
  • 참고로 가상서버호스팅은 AWS EC2php스쿨 가상서버호스팅 2곳에서 테스트, 잘 작동했습니다.
  • nginx 가상호스팅을 설정하여 여러개의 도메인을 한 서버에서 작동하는 방식까지 보여드릴 예정입니다.
  • 특별한 튜닝이나 혼자만의 비법은 없습니다만 LEMP 스택을 한번도 접하지 않은 초보자를 위한 가이드임을 먼저 밝혀드립니다.
  • 몇몇 설정에 관해서는 Modern PHP (조시 록하트 저) 에서 인용한 부분이 있습니다.
  • 그리고 우분투 서버 정도는 혼자 설치 하실 수 있는 분을 대상으로 한 게시글입니다.
  • 모든 과정은 2시간 안에 끝날 정도로 빠르고 간편합니다.

 

 

1. Ubuntu 14.04 설치 업데이트

먼저 우분투가 설치 되어 있지 않은 VM 같은 경우에는 우분투에서 서버 이미지를 다운받아 설치를 합니다.

우분투 서버 설치는 매우 간단한 편입니다. 만약 설치가 힘드신 분은 아래의 참고 사이트에서 보시고 따라 하시면 됩니다.


VM에서 우분투 14.04 서버 설치 방법

 

만약 가상서버호스팅의 우분투 버전이 14.04가 아닐 때는 릴리즈 업그레이드를 실행해서 버전을 올리신 다음 실행해야합니다.

 

 do-release-upgrade;

 

주의 하셔야 할 점은 기존에 운영중인 서버에서는 절대 사용하지 마세요. 설정해놓으신 걸 전부 리셋하거나 망칠수 있으니 반드시 새로운 서버에서 테스트 하셔야 합니다. SSH 상태에서는 실행을 권하지 않는다는 경고는 살포시 무시해주어도 상관없이 잘 됩니다.


설치가 완료되면 시스템 업데이트를 실행합니다. 명령어는 항상 root 상태에서 작동되고 있습니다. 가끔 su 명령어로 특정 계정으로 바꾸면 바로 exit로 나오는 명령어까지 작성해두었습니다. 

 

$ sudo su;

$ apt-get update; 

$ apt-get upgrade;

 

그리고 한국어 시스템이 제대로 되지 않았을 가능성이 있으니 한국어 시스템을 설치해줍니다.

vim 사용법은 구글링을 하시면 잘 나와 있으니 참고 하시고 vim 명령어 후에 들여쓰기 된 부분은 해당 파일내에 작성해야 되는 내용입니다. '$' 기호는 커멘드 라인을 의미합니다.


$ apt-get install language-pack-ko language-pack-to-base -y;

$ vim /etc/default/locale;

LANG="ko_KR.UTF-8"

LANGUAGE="ko_KR:ko:en_US:en"


$ dpkg-reconfigure locales;


기본적으로 필요한 vsftp와 sendmail 정도도 설치해줍니다.


$ apt-get install sendmail;

$ apt-get install vsftpd;

$ vim /etc/vsfptd.conf;

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

file_open_mode=0644

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list 

 

$ vim /etc/vsftpd.chroot_list;

sir

 

vsftp 설정 같은 경우 공개 호스팅 용도로는 적합하지 않은 설정일 수 있으니 주의하셔서 설정하시기 바랍니다.


 

2. nginx 설치

먼저 저장소를 추가해줍니다. add-apt-repository 명령어가 실행 할 수 있게 필요한 의존 프로그램도 설치합니다.

 

$ apt-get install software-properties-common; 

$ add-apt-repository ppa:nginx/stable;

$ apt-get update;

$ apt-get install nginx;

 

정말 간단하게 설치가 끝나버립니다. 브라우저를 통해서 아이피나 도메인을 작성해 서버에 접근해 봅니다. nginx welcome 화면이 보이면 정상적으로 설치가 완료된 것입니다.

 

만약 서버에 html으로만 이루어진 사이트를 배포할 목적이라면 이대로도 세팅은 끝나고 사용하셔도 무관합니다. 하지만 우리는 php-fpm 를 이용하고 여러개의 도메인도 사용할 예정인 관계로 가상호스팅 설정을 하도록 합니다.

 

먼저 사용자 계정을 추가합니다. 편의상 sir로 하겠습니다.

 

$ adduser sir;

 

비밀번호만 정확하게 입력해주시고, 나머지 정보는 굳이 채우실 필요가 없습니다.

사용자 계정이 추가가 되면 home 디렉토리에 해당 계정명의 디렉토리가 생성되어있습니다. 그 하위에 document root 용 www 폴더와 로그를 기록할 log 폴더를 생성합니다.

 

$ su sir;

$ mkdir /home/sir/www;

$ mkdir /home/sir/log;

$ exit;

 

가상 호스트 설정파일 새로 생성해서 내용을 작성합니다.

 

$ vim /etc/nginx/sites-available/sir.conf;

server {

        listen 80;

        server_name sir.co.kr www.sir.co.kr;

        index index.php;

        client_max_body_size 50M;

        error_log /home/sir/log/error.log;

        access_log /home/sir/log/access.log;

        root /home/sir/www;

 

        location / {

                try_files $uri $uri/ /index.php$is_args$args;

        }

 

        location ~ \.php {

                try_files $uri =404;

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

                include fastcgi_params;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

                fastcgi_param SCRIPT_NAME $fastcgi_script_name;

                fastcgi_index index.php;

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                include fastcgi.conf;

        }

}

 

 

  • listen 수정하실 필요가 없는 부분입니다. http 포트를 받는 의미입니다. 만약 https 를 수신할때는 443을 설정합니다.
  • server_name  본인이 소유한 도메인 네임을 작성하는 부분입니다. 현재는 sir의 도메인이 되어있는데, 본인이 소유한 도메인을 작성하고 그 도메인의 A 레코드가 LEMP 서버 ip 로 설정되어 있어야 합니다.
  • index 는 document root 폴더에서 uri를 지정하지 않을시 처음 실행 할 파일명입니다.
  • client_max_body_size 이 가상 호스트에 대해 nginx가 수락하는 http 요청 본문의 최대 크기입니다. 요청 본문 크기가 이 값을 초과하는 경우 nginx는 4xx http 응답을 반환합니다.
  • error_log 가상 호스트 오류 로그 파일
  • access_log 가상 호스트 접근 로그 파일
  • root document root 디렉토리
  • location / { } uri와 일치하는 파일을 찾아서 매치하는 역할입니다.
  • location ~\.php { } 일치하는 파일중 확장자가 php 일 때, 작동하는 블럭입니다. php-fpm과 FastCGI 관련 설정이 적혀 있습니다.

 

해당 가상호스트를 활성화 시킵니다.

 

$ ln -s /etc/nginx/sites-available/sir.conf /etc/nginx/sites-enabled/sir.conf;

 

 

3. php-fpm 설치

먼저 설치 의존 도구와 소스 저장소를 추가하고 php-fpm과 모듈들을 함께 설치합니다.

 

apt-get install python-software-properties;

$ add-apt-repository ppa:ondrej/php5-5.6;

$ apt-get update;

$ apt-get install php5-fpm php5-cli php5-curl php5-gd php5-json php5-mcrypt php5-mysqlnd php5-memcached memcached;

 

더 필요한 모듈이 있으면 함께 설치하시면 됩니다. 그누보드나 영카트를 운용함에 있어서 필수적인 모듈은 다 있으니 본인이 계획한 php 앱에 맞춰서 설치하시면 됩니다.

 

제대로 설치가 되었다면

 

$ php --version;

 

실행하면 설치된 버전을 확인 할 수있는 출력이 뜹니다.

5.5.9 5.6.1 등 5.5 이상의 버전이 설치된 것을 확인 하셨다면 php-fpm 설정을 합니다. 

 

$ vim /etc/php5/fpm/php-fpm.conf;

emergency_restart_threshold = 10

 

emergency_restart_interval = 1m

 

 

  • emergency_restart_threshold 자식 프로세스의 최대 실패 횟수며 정해신 시간 동안 이 횟수만큼 자식 프로세스가 실패하면 마스터 php-fpm 프로세스가 정상적으로 재시작합니다.
  • emergency_restart_interval emergency_restart_threshold 설정을 한정하는 시간 범위입니다.

 

만약에 부적절한 PHP 코드등으로 프로세스가 정상적으로 작동하지 않을 때, 발동되는 조건입니다. 성능상 튜닝의 부분은 아닙니다.

 

다음은 php.ini를 설정하는 부분입니다. 

 

$ vim /etc/php5/fpm/php.ini

opcache.memory_consumption = 64

opcache.interned_strings_buffer = 16

opcache.max_accelerated_files = 4000

opcache.validate_timestamps = 1

opcache.revalidate_freq = 0

opcache.fast_shutdown = 1

file_uploads = On

upload_max_filesize = 10M

max_file_uploads = 2

max_execution_time = 5

session.save_handler = ‘memcached’

session.save_path = ’127.0.0.1:11211’

output_buffering = 4096

implicit_flush = false

realpath_cache_size = 64k

 

 

  • opcache 관련 부분은 php를 실행할 때마다 컴파일 하는게 아니라 컴파일 된 소스를 미리 cache에 두고 요청이 있을 때 바로 제공해주는 역할을 합니다.
  • 현재 설정은 개발 단계일 때 매번 새로운 php 소스를 확인 하는 설정이지만 개발이 완성 된 상태라면 opcache.validate_timestamps = 0 으로 비활성화 해주시면 됩니다.
  • session 관련 부분은 memcached를 사용 하실 때 변경하시는 부분입니다. 원래는 files 라고 되어 있고 save_path는 주석으로 처리되어 있습니다.
  • 그 외 기본적인 php.ini 설정은 구글링을 통하시면 훨씬 상세하고 좋은 튜닝법들이 나와 있습니다.

 

 

4. mysql 설치

mysql을 설치합니다. 의존성 도구가 따로 필요하지 않습니다. mysql을 리셋하고 보안관련 패치를 더 해줍니다.

 

$ apt-get install mysql-server;

 

$ mysql_install_db;

$ mysql_secure_installation;

 

보안 패치시에 첫번째 질문(root 비밀번호 바꿀껀지)만 N로 답하시고 나머지는 그냥 엔터를 치시면 됩니다.

 

mysql utf-8 언어셋 설정을 추가합니다. 원래는 스웨덴 언어(latin1_swedish_ci)가 기본인건 다들 아시죵?^^ my.cnf 에는 다른 설정들이 많이 있습니다만, [mysqld] 항목 아래에 추가해주시면 됩니다.

 

$ vim /etc/mysql/my.cnf;

[mysqld]

character-set-server = utf8

collation-server = utf8_general_ci

init_connect = set collation_connection = utf8_general_ci

init_connect = set names utf8

character-set-client-handshake=TRUE

skip-character-set-client-handshake

 

5. 서비스 재시작

이제 모든 서비스의 설치가 완료 되었습니다. 이제까지 설치한 모든 서비스의 재시작을 수행합니다.

 

$ service nginx restart;

$ service php5-fpm restart;

$ service mysql restart;

$ service vsftpd restart;

 

번외. 가상 호스트 추가

만약 sir 이 외의 가상호스트를 추가하고 싶다고 가정하고 한번 더 복습 하는 차원에서 적어 드립니다. DB에 쉽게 접근할 수 있는 phpmyadmin을 설치하는 과정을 통해서 가상호스트의 원리와 방법을 익히도록 합니다.

 

먼저 유저를 추가합니다.

 

$ adduser phpmyadmin;

 

비밀번호만 중요하고 나머지는 그냥 공백으로 두셔도 됩니다. 그럼 /home/phpmyadmin 이라는 디렉토리가 생성 됩니다. su 명령을 통해서 계정권한을 바꾼 뒤 document root 폴더를 생성합니다. 로그 폴더는 필요에 따라서 설치하셔도 안하셔도 됩니다만, 딱히 볼 일이 없으니 저는 그냥 생략한 체로 진행 하겠습니다.

 

$ su phpmyadmin;

$ mkdir /home/phpmyadmin/www;

$ exit;

 

phpmyadmin 계정으로 ftp에 접근을 할 수 있어야 하기 때문에 접근 권한을 줍니다. 이 때 모든 계정 마지막 줄에 phpmyadmin을 추가 해줘야 합니다.

 

$ vim /etc/vsftpd.chroot_list;

phpmyadmin

 

$ service vsftpd restart;

 

다음 단계는 아시다시피 가상 호스트 추가

 

$ vim /etc/nginx/sites-available/phpmyadmin.conf;

server {

        listen 80;

        server_name phpmyadmin.내도메인.com;

        index index.php;

        client_max_body_size 50M;

        root /home/phpmyadmin/www;

 

        location / {

                try_files $uri $uri/ /index.php$is_args$args;

        }

 

        location ~ \.php {

                try_files $uri =404;

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

                include fastcgi_params;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

                fastcgi_param SCRIPT_NAME $fastcgi_script_name;

                fastcgi_index index.php;

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                include fastcgi.conf;

        }

}

 

앞에 설명 드렸던 가상 호스트에서 서버네임 부분이 변경 된걸 확인 하시면 됩니다.

 

$ ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/phpmyadmin.conf;

$ service nginx restart; 

 

가상호스트 활성화를 한 후 nginx를 리스타트 하면 준비는 끝!

 

ftp 프로그램을 통해서 phpmyadmin을 /home/phpmyadmin/www 디렉토리에 업로드 합니다. phpmyadmin.net 에서 소스를 다운 받으실 수 있습니다.

 

$ cd /home/phpmyadmin/www;

$ tar -xvf *.tar

 

압축을 풀고 http://phpmyadmin.내도메인.com 가상호스트에 설정한 주소로 접속을 하면 실행이 완료! 수고하셨습니다.

 

참 쉽죠? ^^

공감
0

댓글 4개

추천이 없는게 아쉅습니다...^-^

다른 소스들을 보면 확장자가 inc 이거나,
html 안에 php 코드가 있는 경우도 있어서

1) vim /etc/php5/fpm/php-fpm.conf; 에서
    security.limit_extensions = .php .php3 .php4 .php5 .html .htm.inc 로 수정
 
2) sites-available 안의 파일들에서
    location ~ \.php ---> location ~ \.(php|php3|php4|php5|html|inc|htm) 
    로 변경


https://gist.github.com/gshn/ab75a2562c467a6cd047db9c5648b9f8
너무 오래된 내용이네요. 이것도 완전 최신은 아니지만 예전 것 보다는 좋습니다.
전체 2 |RSS

회원로그인

진행중 포인트경매

  1. 참여6 회 시작24.04.25 20:23 종료24.05.02 20:23
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT