블로그 이미지
BJcomm
bjcomm

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
12-22 00:00
마침 서비스 운영중 nginx + php + mysql + memcached 를 설치할 기회가 생겼기에, 글을 올린다.

<설치환경>
CentOs 5.7 64bit
nginx 1.0.11
php 5.2.17
php-5.2.17-fpm-0.5.14

## mysql 은 수동으로 설치 (경로 /usr/local/mysql 기준)

1. [NGINX 설치]

$ cd /usr/local/src
$ wget http://nginx.org/download/nginx-1.0.11.tar.gz
$ tar xvfzp nginx-1.0.11.tar.gz
$ cd /usr/local/src/nginx-1.0.11
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module
$ make
$ make install


설치가 완료 되었으면, 아래 스크립트를 받아서,
서버에 저장한 후, /etc/init.d/nginx 와 같이 세팅한다.


$ mv nginx.txt /etc/init.d/nginx
$ chmod 755 /etc/init.d/nginx


nginx 를 구동해보자.
$ /etc/init.d/nginx start
Starting nginx:

$ netstat -lnp
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 30164/nginx.conf


위와 같이 nginx 를 구동했을때 80포트가 보는것과 같이 나오면 된다.

인터넷브라우저 창에서, http://설치서버IP 를 입력해보면

Welcome to nginx!

위와 같이 나오는데, 이렇게 나오면, nginx 설치가 완료 된 것으로 보면 된다.

2. php + php-fpm 설치

$ cd /usr/local/src
$ wget http://kr2.php.net/get/php-5.2.17.tar.gz/from/this/mirror
$ wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
$ tar xvfzp php-5.2.17.tar.gz
$ gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
$ cd php-5.2.17


아래 configure 파일을 받아서, 동일하게 설치 한다.

$ make; make install
Installing PHP SAPI module: cgi
Installing PHP CGI binary: /usr/local/php-fpm/bin/
Installing FPM config: /usr/local/php-fpm/etc/php-fpm.conf
(installing as php-fpm.conf.default)
Installing init.d script: /usr/local/php-fpm/sbin/php-fpm
Installing PHP CLI binary: /usr/local/php-fpm/bin/
Installing PHP CLI man page: /usr/local/php-fpm/man/man1/
Installing build environment: /usr/local/php-fpm/lib/php/build/
Installing header files: /usr/local/php-fpm/include/php/
Installing helper programs: /usr/local/php-fpm/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php-fpm/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php-fpm/lib/php/
[PEAR] Archive_Tar - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util - installed: 1.2.1
[PEAR] PEAR - installed: 1.9.1
Wrote PEAR system config file at: /usr/local/php-fpm/etc/pear.conf
You may want to add: /usr/local/php-fpm/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/php-fpm/include/php/ext/pdo/

설치가 완료 되었으면, php.ini 를 복사한 후, php-fpm 을 심볼릭링크를 걸어, 위치에 저장한다.

$ cd /usr/local/src/php-5.2.17
$ cp -a php.ini-dist /usr/local/php-fpm/lib/php.ini
$ cd /etc/init.d/
$ ln -s /usr/local/php-fpm/sbin/php-fpm php-fpm
$ /etc/init.d/php-fpm start
Starting php_fpm Jan 04 10:01:30.274536 [ERROR] fpm_unix_conf_wp(), line 124: please specify user and group other than root, pool 'default'
................................... failed


php-fpm 을 구동실행 하였더니 다음과 같이 에러가 발생한다. 이는, 사용하는 user 와 group 이 정상적으로 설정되지 않았다는 의미 이다. php-fpm.conf 파일에 62번 ~66번 라인을 아래와 같이 수정한다.

$ vi /usr/local/php-fpm/etc/php-fpm.conf
<!-- Unix user of processes -->
<value name="user">nobody</value>

<!-- Unix group of processes -->
<value name="group">nobody</value>

수정 후, 다시 실행해 본다.

$ /etc/init.d/php-fpm start
Starting php_fpm done
$ netstat -lnp | grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 26544/php-cgi

정상적으로 php-fpm 이 구동된것이 확인 되었다.

3. zend 설치
지금 설치하는건 64bit 에 설치하는 것이기에, 64bit 를 다운로드 받았지만, 32bit 인 경우, 32bit 를 다운받으면 되겠다.

64bit 인 경우
$ cd /usr/local/src
$ wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

32bit 인경우
$ cd /usr/local/src
$ wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

압축을 해제하고, php 버전에 맞는 ZendOptimizer.so 파일을 복사한다.

$ tar xvfzp ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
$ cd ZendOptimizer-3.3.9-linux-glibc23-x86_64/data
$ ls -al
drwxr-xr-x 2 root root 4096 Aug 24 2009 4_2_0_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 4_2_x_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 4_3_x_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 4_4_x_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 5_0_x_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 5_1_x_comp
drwxr-xr-x 2 root root 4096 Aug 24 2009 5_2_x_comp


현재 설치 한 php 버전은 5.2.17 이기때문에 가장밑에 있는 5_2_x_comp 폴더에 있는 ZendOptimizer.so 를 사용할것이다.

$ cp -a /usr/local/src/ILAYA/SOURCE/ZendOptimizer-3.3.9-linux-glibc23-x86_64/data/5_2_x_comp/ZendOptimizer.so /usr/local/php-fpm/lib/


Zend 설치가 완료 되었으면, php.ini 에 Zend 경로를 저장한다.

$ vi /usr/local/php-fpm/lib/php.ini
가장 하단에 아래 내용 추가
[Zend]
zend_extension=/usr/local/php-fpm/lib/ZendOptimizer.so

저장이 완료 되었으면, 이제 nginx 와 php-fpm 을 연동한다.

$ vi /usr/local/nginx/conf/nginx.conf
약 63 라인정도에 주석으로 있는 옵션들이 있는데, 주석내용은 지워도 무방하며, 파일 내용에 아래 옵션을 추가한다.
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param scRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}


추가가 완료 되면, 이제 nginx 와 php-fpm 을 재구동해준다.

$ /etc/init.d/php-fpm stop;/etc/init.d/nginx stop
$ /etc/init.d/php-fpm start;/etc/init.d/nginx start

실제 연동이 되었는지 테스트를 해보자.
nginx 의 기본 홈경로는 /usr/local/nginx/html 이다, (아파치의 경우는 /usr/local/apache/htdocs)
해당 경로에 기본 phpinfo 파일을 생성한다.

$ cd /usr/local/nginx/html
vi test.php
< ?
phpinfo
?>

위의 내용 추가

브라우저창에서 확인해본다. (mysql 연동까지 확인)

 

위와 같이 되었으면 정상적으로 연동 된것이다.

4. memcache 설치

memcached 는 메모리를 캐시로 사용하는 분산 솔루션으로 서버부하가 많은 사이트에 운영하면, 효과를 볼 수 있다.

1) libevent 설치

$ cd /usr/local/src
$ wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
$ tar xvfzp libevent-1.4.13-stable.tar.gz
$ cd libevent-1.4.13-stable
$ ./configure ; make ; make install

2) memcached 설치

$ cd /usr/local/src
$ wget http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
$ tar xvfzp memcached-1.4.10.tar.gz
$ cd memcached-1.4.10
$ LDFLAGS='-Wl,--rpath /usr/local/lib' ./configure --prefix=/usr/local --enable-64bit
$ make
$ make install
$ cd scripts
$ cp -a memcached.sysv /etc/init.d/memcached
$ chown root.root /etc/init.d/memcached
$ chmod 755 /etc/init.d/memcached
$ vi /etc/init.d/memcached
PORT=11211
USER=root
MAXConN=1024
CACHESIZE=512
OPTIonS=""
PATH="/usr/local/bin:$PATH"

위와 같이 추가된 PATH 의 경우, memcached 가 설치되어 있는경로를 "whereis memcached" 를 입력하여 찾아낸 값

$ mkdir /var/run/memcached
$ /etc/init.d/memcached start
$ netstat -lnp
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 24933/memcached

memcached 가 정상적으로 올라왔는지 확인.

14:41:22 $ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
stats
STAT pid 24933
STAT uptime 2618
STAT time 1325655685
STAT version 1.4.10
STAT libevent 1.4.13-stable
STAT pointer_size 64
STAT rusage_user 0.000999
STAT rusage_system 0.011998
STAT curr_connections 5
STAT total_connections 7
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 29
STAT bytes_written 1040
STAT limit_maxbytes 536870912
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END



3) memcached client 설치

$ cd /usr/local/src
$ wget http://pecl.php.net/get/memcache-2.2.6.tgz
$ tar xvfzp memcache-2.2.6.tgz
$ cd memcache-2.2.6
$ /usr/local/php-fpm/bin/phpize
$ ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
$ make
$ make install
$ vi /usr/local/php-fpm/lib/php.ini
extension_dir = "/usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20060613"
extension="memcache.so"
값 추가
$ /etc/init.d/php-fpm stop
$ /etc/init.d/nginx stop
$ /etc/init.d/php-fpm start
$ /etc/init.d/nginx start

작업이 완료 되었으면, phpinfo 상에 memcache 가 정상적으로 올라와있는지 확인한다.

 


위와 같이 나오면 정상적으로 된 것이다.