웹마스터 팁
apache + php + mysql + Zend Optimizer + eAccelerator
2009.11.23 16:55
원문은 리눅스 서버 구축 입니다.
제로님께서 작성하신 거를 따라하면서 막힌 부분들을 적었습니다.
제가 작성한 문서를 따라하셔도 막힐 확률은 95% 일거라 생각합니다 -_-;;
그래도 많은 부분 보완하였으니... 제로님 문서 따라하다가 막히면 참고하시길 바랍니다.
*들어가기에 앞서.
- 제가 설치한 운영체제는 centos 5.4 입니다.
- 본문에 나오는 파일들은 제 블로그에 올렸습니다.
php5.2.11, php5.3.1 설치시 eAccelerator 혹은 Zend Optimizer 가 작동하지 않았습니다.
php 5.2.9 버전으로 설치하니 eAccelerator, Zend Optimizer 둘다 잘 됩니다.
리눅스 서버 구축
리눅스 OS에서 Apache, PHP, MySQL, Zend Optimizer, xCache 를 연동하여 XE가 동작할 수 있는 서버 환경을 구축하는 법을 소개드립니다.
이 서버 구축 방법은 XpressEngine 공식사이트에 적용된 방법이며 CentOS release 4.7 (Final)를 이용하였습니다.
사용된 패키지는 다음과 같고 모두 소스 컴파일을 통해서 설치를 하였습니다.
- apache 2.2.11
다운로드 : http://httpd.apache.org/ - php 5.2.9
다운로드 : http://php.net/ - mysql 5.0.77
다운로드 : http://mysql.com/
단, mysql은 성능 향상을 위해서 직접 컴파일 하지 않고 Intel C/C++ compiled 를 사용하였습니다. - Zend Optimizer 3.3.3
다운로드 : http://zend.com - xCache 1.2.2 (공식사이트 적용 결과 eAccelerator로 채택)
다운로드 : http://xcache.lighttpd.net/ - eAccelerator 0.9.5.3
다운로드 : http://bart.eaccelerator.net/source/0.9.5.3/
MySQL 5.0.77 설치
MySQL은 직접 컴파일하지 않고 성능향상을 위해 Intel C/C++ compiled 를 다운받아 설치합니다.
이 경우 서버에서 컴파일하지 않고 파일 복사를 하면 되고 glibc 버전등을 잘 고려하여 다운 받으시면 됩니다.
- 다운 받은 mysql-5.0.77-linux-i686-icc-glibc23.tar.gz 를 /usr/local/msyql-5.0.77-linux-i686-icc-glibc23.tar.gz 로 복사합니다.
파일 이름은 버전, glibc 버전에 따라 다를 수 있습니다.
/bin/cp msyql-5.0.77-linux-i686-icc-glibc23.tar.gz /usr/local - /usr/local 디렉토리로 이동합니다.
cd /usr/local - 압축 해제를 합니다.
tar xvfz msyql-5.0.77-linux-i686-icc-glibc23.tar.gz - mysql 버전 업그레이드시마다 디렉토리 명을 재지정하지 않기 위해 심볼릭 링크를 겁니다.
ln -s msyql-5.0.77-linux-i686-icc-glibc23 mysql
위와 같이 하면 차후부터 /usr/local/mysql 을 mysql의 경로로 지정하면 됩니다.
다만 /usr/local/mysql/data 디렉토리의 경우 잘 관리를 해주어야 합니다. - mysql에서 권장하는 데로 mysql 계정과 그룹을 생성하여 줍니다.
group add mysqlgroupadd mysql
useradd -g mysql mysql - mysql디렉토리에 권한을 부여합니다.
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql . - DB 인스톨을 합니다. (Intel C/C++ 컴파일 버전은 따로 컴파일 할 필요 없이 DB 생성을 하면 됩니다.
./script/mysql_install_db --user=mysql
./scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data - mysql 대몬을 시작합니다.
./bin/mysqld_safe --user=mysql &
./bin/mysqld --user=mysql& - 새롭게 MySQL을 설치한 경우 MySQL ROOT 비밀번호를 지정해주어야 합니다.
./bin/mysqladmin -u root password '비밀번호'
이제 mysql 설치는 끝났고 /usr/local/mysql/bin/mysql -u root -p 명령을 통해서 root 계정으로 접속 테스트를 하면 됩니다.
091122 2:38:19 [Warning] Can't create test file /var/lib/mysql/localhost.lower-test
091122 2:38:19 [Warning] Can't create test file /var/lib/mysql/localhost.lower-test
/usr/local/mysql/bin/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 2)
091122 2:38:19 [ERROR] Aborting
091122 2:38:19 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
# mkdir /var/lib/mysql && chown -R mysql /var/lib/mysql
Apache, PHP 컴파일 설치
PHP는 Apache의 모듈로 탑재되어 동작을 하기에 Apache과 PHP는 같이 설치를 하는 것이 일반적입니다.
여기 사용된 Apache, PHP파일은 다음과 같습니다.
- Apache : httpd-2.2.11.tar.gz
- PHP : php-5.2.9.tar
프로그램 버전에 따라 다른 이름을 가질 수 있습니다만 각 압축을 해제한 파일을 아래와 같은 위치에 두도록 합니다.
- Apache : /root/httpd
- PHP : /root/php
아래와 같은 순서로 컴파일 하시면 됩니다.
- 아파치
[root@localhost apache]# ./configure --prefix=/usr/local/apache --enable-so --enable-modules=so --with-mpm=worker --enable-rewrite
[root@localhost apache]# make
[root@localhost apache]# make install
다양한 옵션을 줄 수 있지만 최소한의 설치만을 위해서 위와 같이 enable so, enable rewrite 만 옵션으로 두고 컴파일을 합니다.
설치되는 경로는 /usr/local/apache 로 합니다.
/usr/local/apache/bin/apachectl start
위의 명령으로 웹서버를 실행하여 확인하실 수 있습니다.
noacceptable C compiler found in $PATH 에러가 나오는 경우
[root@localhost apache]# rpm -qa|grep gcc // gcc가 깔렸는지 확인
libgcc-4.1.2-46.le5[root@localhost apache]#
// gcc가 깔리지 않은 경우이다.
[root@localhost apache]# yum install gcc
//gcc 설치
libapr-1.la 오류1 // 에러의 경우
[root@localhost apache]# yum install libtool
[root@localhost apache]# make distclean - PHP
PHP의 경우 다양한 연동 프로그램이 필요할 수 있습니다.
예를 들어 XE에서 썸네일을 만들기 위해 GD Library가 필요하기도 하고 png, gif등을 다루기 위한 라이브러리가 필요하기도 합니다.
소개하고 있는 CentOS에서는 yum을 이용하여 관련 라이브러리들을 먼저 설치할 수 있고 다른 리눅스 OS도 비슷한 라이브러리 설치 도구를 제공할 것입니다.- 필요한 라이브러리 설치 (CentOS)
yum -y install libxml2 libjpeg libpng freetype - PHP 컴파일
컴파일전에 깔아줘야할 라이브러리입니다. (자세한 설명은 블로그 포스팅에 있습니다)
# yum install libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel libpng-devel freetype-devel gmp-devel mysql-devel ncurses-devel unixODBC-devel pspell-devel net-snmp-devel한줄 해결 yum install libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel libpng-devel freetype-devel gmp-devel mysql-devel ncurses-devel unixODBC-devel pspell-devel net-snmp-devel
1) Configure: error: xml2-config not found. Please check your libxml2 installation.
해결책 : #yum install libxml2-devel
2) Checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>
해결책 : #yum install openssl-devel
3) Configure: error: Please reinstall the BZip2 distribution
해결책 : # yum install bzip2-devel
4) Configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
해결책 : # yum install curl-devel
5) Configure: error: libjpeg.(also) not found.
해결책 : # yum install libjpeg-devel
6) Configure: error: libpng.(also) not found.
해결책 : # yum install libpng-devel
7) Configure: error: freetype.h not found.
해결책 : #yum install freetype-devel
8) Configure: error: Unable to locate gmp.h
해결책 : # yum install gmp-devel
9) Configure: error: Cannot find MySQL header files under /usr.
Note that the MySQL client library is not bundled anymore!
해결책 : # yum install mysql-devel
10) Configure: error: Please reinstall the ncurses distribution
해결책 : # yum install ncurses-devel
11) Checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!
해결책 : # yum install unixODBC-devel
12) Configure: error: Cannot find pspell
해결책 : # yum install pspell-devel
13) Configure: error: snmp.h not found. Check your SNMP installation.
해결책 : # yum install net-snmp-devel
# mv php-5.2.9 /root/php
# cd /root/php
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --enable-magic-quotes --disable-dmalloc --enable-bcmath --enable-gd-native-ttf --enable-sysvsem --enable-sysvshm --enable-inline-optimization --enable-mbstring --enable-mbregex --enable-gd-native-ttf --enable-ftp --with-jpeg-dir --with-freetype-dir --with-curl --with-zlib --with-gd --with-ttf --with-iconv --disable-debug
# make
# make install - PHP의 make install 시에 libmysqlclient.so.15 를 찾을 수 없다는 에러가 나오면 다음과 같이 해당 파일을 symbolic link로 처리할 수 있습니다.
ln -s /usr/local/mysql/lib/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15
다시 make install 하면 됩니다. - php.ini 파일 복사/ 설정
php 구동시 기본 설정을 읽는 php.ini 파일을 여기서는 /usr/local/php/lib/php.ini로 복사 합니다.
cp php.ini-dist /usr/local/php/lib/php.ini
위 파일을 열고 아래 부분을 수정합니다.
register_globals = Off
post_max_size = 200M
file_uploads = On
upload_tmp_dir = /tmp
uplaod_max_filesize = 200M
allow_url_fopen = Off
allow_url_include = Off
위의 설정중 이미 동일하게 설정된 것도 있을 수 있습니다.
post_max_size는 post되는 정보의 사이즈를 설정하는 것이고 upload_max_filesize는 업로드 가능한 최고용량이니 서비스에 맞게 적절히 수정하시면 됩니다.
- 필요한 라이브러리 설치 (CentOS)
- Zend Optimizer 설치
PHP의 기본 상태로 사용시 성능이 매우 저조한데 이를 위해 Zend Optimizer를 설치합니다.
다운로드 받은 Zend Optimizer 압축 해제후 아래와 같이 실행하면 자동으로 설치 됩니다.
./install
위 스크립트를 실행하면 설치 스크립트가 자동으로 위치를 읽어서 진행을 하게 됩니다.
Zend Optimizer를 설치하면 /etc/php.ini 는 /usr/local/Zend/etc/php.ini 로 대체됩니다.
관련문서1 관련문서2 - Apache에 PHP 설정하기
아파치 설정파일에 PHP 실행을 연동하기 위한 설정을 합니다.
/usr/local/apache/conf/httpd.conf 파일을 열어서 아래와 같은 부분을 변경합니다.
LoadModule php5_module modules/libphp5.so
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
<IfModule mime_module>
...
AddType application/x-httpd-php .php
...
</ifModule> xCache 연동 (eAccelerator로 대체)xCache는 php 프로그램을 더욱 빠르게 실행할 수 있게 도와줍니다.
다운받은 xCache의 압축을 해제하고 풀려진 폴더로 들어간 후 아래와 같이 하세요.
export PATH="$PATH:/usr/local/php/bin/"
phpize
./configure --enable-xcache
make && make install
그리고 /usr/local/Zend/etc/php.ini 파일을 열어서 Zend Optimizer 문 위에 아래와 같은 내용을 입력하세요.
[xcache-common]
zend_extension_ts=/usr/local/php/lib/php/extensions/no-debug-zts-20060613/xcache.so
[xcache.admin]
xcache.admin.enable_auth=On
xcache.admin.user="admin"
xcache.admin.pass="f0c435f983d0ed728cb915c701e85e50"
[xcache]
xcache.shm_scheme="mmap"
xcache.size=64M
xcache.count=4
xcache.slots=8K
xcache.ttl=0
xcache.gc_interval=0
xcache.var_size=64M
xcache.var_count=4
xcache.var_slots=8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval=300
xcache.test=Off
xcache.readonly_protection=Off
xcache.mmap_path="/dev/zero"
xcache.coredump_directory=""
xcache.cacher=On
xcache.stat=On
xcache.optimizer=On
xcache.coverager=Off
xcache.coveragedump_directory=""
참고로 xcache.admin.pass는 md5 문자열로 xcache 웹모니터링을 위한 도구의 인증 정보가 됩니다.- eAccelerator 설치
bash: phpize: command not found
# yum install php-devel
- 관련문서 PHP - eAccelerator 설치*압축풀기 명령어 tar xfvj
bash: phpize: command not found
yum install php-devel
- 관련문서 PHP - eAccelerator 설치
phpize
configure --enable-accelerator
make
make install
# tar xvfj eaccelerator-0.9.5.3.tar.bz2
# cd eaccelerator-0.9.5.3
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
# make && make install
그리고 /usr/local/Zend/etc/php.ini 파일을 열어서 Zend Optimizer 문 위에 아래와 같은 내용을 입력하세요.
zend_extension_ts="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.log_file="/var/log/eaccelerator.log"
* /var/cache/eaccelerator 디렉토리를 생성하셔야 합니다.
# mkdir /var/cache/eaccelerator
# chown nobody /var/cache/eaccelerator
# chmod 700 /var/cache/eaccelerator
정상적으로 설치 되었다면 위와 같이 eAccelerator, Zend Optimizer 둘다 보여야 합니다.
본문에 처음에 나와 있듯이 centos + apm + Zend Opt. + eAccelerator 는 XE 공식 홈페이지에 적용된 방법이라고 합니다.
속도는... 맘에 듭니다 -_-;b
좀 있으면 보스(?)께서 이보다 더 보완된 메뉴얼을 내놓으실거라 믿습니다 :)
댓글 8
-
엘카
2009.11.23 17:13
-
獨立軍
2009.11.24 09:39
rpm으로 설치한 서버에서는 eAccelerator를 어떻게 설치해야 하는지 궁금합니다..
안내 말씀 부탁드립니다..
-
lattente
2009.11.25 14:33
설명해주신부분과 크게 다른 부분은 없을겁니다. configure 옵션에 php 환경설정 경로만 제대로 지정해주시면 될테구요.
zend optimizer와 충돌 날경우는 php.ini 상에서 zend_extension 위치가 영향을 미치기도 합니다.
-
sol
2009.11.24 10:04
apc 도 추천 드립니다.
-
엘카
2009.11.25 17:21
mysql 하고 cubrid 속도차가 어떻게 되는지 궁금하다는^^;;
-
뽀칠이
2009.11.29 11:34
32bbit 나 64bit는 동일한 설정인지 궁금합니다.?
-
엘카
2009.11.30 14:00
파일, 디렉토리가 달라질걸요.
안해봐서 잘 모르겠습니다. (32비트 감당하기도 벅참 ㅠㅠ)
-
아카스
2010.02.03 14:39
최근의 zend optimizer3.3.9는 다운받아 압축을 풀고 ZendOptimizer.so 파일을 apache/modules에 카피한후 ...
php.ini에서
[Zend]
zend_optimizer.version=3.3.9
zend_extension=/usr/local/httpd/modules/ZendOptimizer.so이런식으로 입력하고 아파치 재시동하면 됩니다.. 예전처럼 자동설치가 아니라 수동설치이며 php.ini변경도 없습니다.. 참조하시길
/usr/local/apache/conf/httpd.conf 파일에서 AllowOverride None 을 AllowOverride All 으로 수정해줘야 XE에서 URL Rewrite 가 작동합니다.
보안에는 어떤 영향을 미치는지 모르겠습니다.