본문 바로가기

Server

APM 완벽 가이드

APM : Apache + PHP + MySQL

[설치 순서]
MySQL → Apache → PHP

[APM]
 - Apache v2.2.4
 - Mysql-4.0.27
 - PHP v4.4.7

[Library]
- ZendOptimizer v3.2.8
- zlib v1.2.3
- libpng v1.2.16
- freetype v2.2.1
- jpegsrc.v6b
- gd v2.0.34
- libmcrypt v2.5.8
- curl v7.16.2
- mhash v0.9.9

Apache v2.2.x는 1.x대 보다 안정적이고 부가 기능 사용을 이유로 설치 하며, MySQL 4.1 이상의 버전에서 문자 세트 설정이나 처리 등의 복잡함 때문에, 4.0 버전에 대한 수요가 꽤 있다. 중요 웹 호스팅 업체에도 아직까지 4.0.22 버전을 쓰고 있는 추세이다.

[Library 설치]

(1) zlib 설치
tar xvfz zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
makemake install
(2) libpng 설치
tar xvfz libpng-1.2.16.tar.gz
cd libpng-1.2.16
cp scripts/makefile.linux makefile
make testmake install
(3) freetype 2 설치
tar xjvf freetype-2.2.1.tar.bz2
cd freetype-2.2.1
./configure
// 설치 오류가 잦음 확인 후 컴파일~
makemake install
(4) libjpeg 설치
tar xvfz jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --enable-shared --enable-static
makemake test
make install
(5) gd 설치
tar xvfz gd-2.0.34.tar.gz
cd gd-2.0.34
./configure
makemake install
(6) libmcrypt 설치
tar xzvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
makemake install
(7) libcurl 설치
tar xzvf curl-7.16.2.tar.gz
cd curl-7.16.2
./configure
makemake install
(8) mhash 설치
tar xzvf mhash-0.9.9.tar.gz
cd mhash-0.9.9
./configure
makemake install



[MySQL 설치]

tar xvfz mysql-4.0.27.tar.gz
cd mysql-4.0.27

CFLAGS="-static -O2 -march=i686 -funroll-loops" \
CXXFLAGS="-static -O2 -march=i686 -funroll-loops -felide-constructors -fno-exceptions -fno-rtti" \
 ./configure \
--prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data \
--disable-shared --enable-assembler \
--with-thread-safe-client --with-mysqld-user="mysql" \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-readline --without-debug \
--without-docs --without-bench \
--with-charset=euc_kr

ps. v4.1.0 이상 부터는 --with-charset=euckr

make
make install

[MySQL 환경 설정]
my-huge.cnf 1~2G
my-large.cnf 512M
my-medium.cnf 128M~ 256M
my-small.cnf 64M 이하

# 환경 파일 복사
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

# 기본 DB 생성
/usr/local/mysql/bin/mysql_install_db

# mysql 운영 사용자 생성
useradd -M mysql

# mysql 권한 설정 // 자동으로 설정이 안되면
chown -R mysql:mysql /usr/local/mysql/data

# 심볼릭 링크
ln -s /usr/local/mysql/bin/mysql /usr/bin/
ln -s /usr/local/mysql/bin/mysqldump /usr/bin/

# MySQL 구동
/usr/local/mysql/bin/mysqld_safe -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M -O max_connections=500 -O max_connect_errors=999999999 --language=korean &

# MySQL ROOT 패스워드 설정
/usr/local/mysql/bin/mysqladmin -u root password "암호"

# 불필요 DB 사용자 제거
mysql -uroot -p

drop database test;
use mysql;

DELETE FROM user WHERE Host='test';
DELETE FROM user WHERE User='test';
DELETE FROM user WHERE Host='localhost' and password='';
DELETE FROM db WHERE User='test';

# 관리 사용자 등록 // 필요에 따라
INSERT INTO `user` VALUES ('%','manager',password(''),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);

# MySQL 재시동 // 자주 안 치다 보니 항상 privileges 스펠링을 틀리곤 ㅡ.ㅡ;
flush privileges;

MySQL 로그 DB 파일이 필요 없다면, 주기적으로 지워 주는 것이 좋다.
crontab -e

# 익일 DB 로그 지우기
00 06 * * * find /usr/local/mysql/data -name "*.[0-9]*" -type f -mtime +3 -exec rm -f {} \;


[Apache 설치]

tar xzvf httpd-2.2.4.tar.gz
cd httpd-2.2.4

# Apache 최적화
vi server/mpm/prefork/prefork.c
#define DEFAULT_SERVER_LIMIT 1280
vi server/mpm/worker/worker.c
#define DEFAULT_SERVER_LIMIT 20

./configure \
 --prefix=/usr/local/apache \
 --enable-so \
 --enable-module=so \
 --enable-shared=max \
 --enable-module=rewrite \
 --enable-shared=rewrite

mod_rewrite는 필요 없으면 빼도 무관
ps. 테터툴즈같은 경우는 mod_rewrite 사용

make && make install

vi /usr/local/apache/conf/httpd.conf
# ServerName은 넣어 주는 것이 관례
ServerName localhost

# DocumentRoot 를 바꾸려면
DocumentRoot "/work/index/html"
<Directory "/work/index/html">

# 최적화된 로그만 남기기 - 그림 파일 및 프래쉬 파일 로그 남기지 않게 설정
방문자 수가 많아지면 웹로그가 엄청 쌓이게 되고, 그 로그는 크기가  2G를 넘게 되면 웹페이지에 이상현상이 생긴다. 로그를 안 남길 수는 없는 것이고, 이미지 파일들은 로그남기는 것에서 제외
CustomLog logs/access_log common
->
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache/logs/access_log common env=!IMAGE


[PHP 설치]

tar xzvf php-4.4.7.tar.gz
cd php-4.4.7
CFLAGS="-O3 -march=i686 -funroll-loops -fomit-frame-pointer" \
./configure \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-language=korean \
--with-charset=euc_kr \
--disable-debug \
--disable-posix \
--disable-rpath \
--enable-safe-mode \
--enable-magic-quotes \
--disable-dmalloc \
--enable-bcmath \
--enable-dio \
--enable-gd-native-ttf \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--enable-versioning \
--enable-pic \
--enable-inline-optimization \
--enable-memory-limit \
--enable-mbstring \
--enable-mbregex \
--enable-mbstr-enc-trans \
--enable-track-vars\
--enable-ftp \
--enable-track-vars=yes \
--enable-gd-native-ttf \
--enable-dl \
--with-config-file-path=/usr/local/lib \
--with-jpeg-dir \
--with-freetype-dir \
--with-imap=shared \
--with-imap-ssl=/usr/lib \
--with-kerberos \
--with-mhash \
--with-mcrypt=/usr/local/lib\
--with-curl=/usr/local/lib \
--with-zlib \
--with-gd \
--with-ttf \
--with-png \
--with-expat-dir=/usr \
--with-gmp \
--with-xml \
--with-mhash \

ps. 혹 MySQL을 RPM으로 설치 하였다면 "--with-mysql=shared" 로 변경

make && make install
cp php.ini-dist /usr/local/lib/php.ini

[ZendOptimizer 설치]
tar xzvf ZendOptimizer-3.2.8-linux-glibc21-i386.tar.gz
cd ZendOptimizer-3.2.8-linux-glibc21-i386
./install.sh


이제 기본적인 APM이 모두 설치 되었다.
남은건 서로 연동 시켜 주는 것과 시스템 구동시 자동 실행 하도록 설정 하는 것이다.

[Apache PHP 연동]

vi /usr/local/apache/conf/httpd.conf

DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .php .phtml .php3 .html .htm
AddType application/x-httpd-php-source .phps

vi /usr/local/apache/conf/mime.types
application/x-httpd-php  php ph inc
application/x-httpd-php-source phps

[업로드 관련]
vi /usr/local/apache/conf/httpd.conf
default_socket_timeout = 600
post_max_size = 20M
memory_limit = 20M
upload_max_filesize = 20M
vi /usr/local/lib/php.ini
default_socket_timeout = 600
post_max_size = 20M
memory_limit = 20M
upload_max_filesize = 20M

[시스템 구동시 자동 데몬 실행]
vi /etc/rc.d/rc.local

#Mysql
/usr/local/mysql/bin/mysqld_safe -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M -O max_connections=500 -O max_connect_errors=999999999 --language=korean & \
#Apache
/usr/local/apache/bin/apachectl start