Server & OS

리눅스에서 Apache+PHP+MySql 설치

페이지 정보

본문

MySQL + Apache + PHP4 + IMAP + Zend Optimizer 설치하기
설치환경
Model: LG IBM eServer X200
CPU : Intel Pentium III 866Mhz
RAM: 256M
HDD: SCSI IBM 9G*2
OS: Redhat Linux 7.3
Kernel: 2.4.18

PHP Zend를 설치를 해보고 싶어하는 분들을 위해 이 글을 작성합니다.
가급적 초보분들을 위해 최대한 쉽게 설명하였으나 의문점이 있으면 저의 홈페이지 게시판 또는 메일을 이용하여 주세요.
그동안 이 글을 읽고 여러 가지 문제점을 지적해 주신 분들께 감사드립니다.

Apache는 'Chunked Encoding' 취약점으로 인하여 가급적 1.3.26버전 이상을 사용하시기를 권장합니다.

현재 출시되어 있는 RedHat 7.3에서 전체설치를 하면 php 4.1.2로 설치됩니다.
설치가 어렵게 느껴지는 분은 레드햇7.3의 기본 RPM패키지를 이용하셔도 무난할 것 같군요.
레드햇 이외의 배포판도 거의 비슷합니다.
RPM(Redhat Package Manager) 버전의 설치는 윈도우즈의 인스톨러처럼 자동으로 실행화일과 환경을 설정해주는 방법으로서 설치하는 시간과 방법이 아주 편리합니다.
여기서 설명하는 방법은 약간 번거로운 과정을 거쳐야 하지만 소스를 보거나 수정할 수 있고 자신의 시스템에 맞게 컴파일하여 성능을 높일 수 있습니다.
일반적인 소스컴파일의 순서는 다음과 같습니다. configure→ make→ make install
'configure'는 사용하는 OS또는 CPU 및 시스템 라이브러리, 그리고 컴파일시의 선택사항 등을 파악하여 그 결과를 컴파일(make)할 때 반영이 되도록 합니다.
'make install'은 컴파일된 파일들을 사용자가 원하는 위치에 복사하는 작업입니다.


설치순서
설치에 필요한 파일 다운받기
RPM으로 설치된 패키지 제거하기
IMAP, MySQL, Apache, PHP4, ZendOptimizer 바이너리 파일 압축풀기
IMAP 설치
MySQL 설치
Apache Configure(1)
PHP4설치
Apache Configure(2), 컴파일
환경설정 파일 편집
Test 하기
Zend Optimizer 설치


1. 설치에 필요한 파일 다운받기
설치에 필요한 파일들


imap-2001a.tar.Z (ftp://ftp.cac.washington.edu/imap)
mysql-3.23.57.tar.gz (http://www.mysql.com/downloads/mysql-3.23.html)
apache_1.3.28.tar.gz (http://www.apache.org/dist/httpd/)
php-4.3.2.tar.gz (http://www.php.net/downloads.php)
ZendOptimizer-2.1.0b-Linux_glibc21-i386.tar.gz (https://www.zend.com/store/products/zend-optimizer.php)

해당 사이트 또는 미러사이트 등을 이용하여 파일을 다운로드 받습니다.
설치에 필요한 소스들의 경로는 조금씩 변경될 수도 있습니다. 직접 찾아보기 번거로우시면 저의 홈페이지(http://www.kernel.tv)에서 다운받으세요.

다운받은 파일들을 /usr/local/src/ 또는 적당한 위치에 저장을 합니다. root계정으로 로그온 되어 있고, 리눅스시스템에 익숙한 분은 어느곳에 두고 설치를 해도 상관없습니다.
하지만 소스파일들을 같은 디렉토리에 두세요.

2. RPM으로 설치된 패키지 제거하기
주의: 지금부터의 작업은 반드시 root의 권한으로 해야 합니다.

배포본 리눅스에 기본적으로 설치되어 있는 RPM 패키지를 제거.
[root@www root]# /etc/rc.d/init.d/httpd stop 아파치 데몬 종료.또는 killall httpd
[root@www root]# ps -ef | grep httpd httpd 데몬이 없는 것을 확인.
[root@www root]# /etc/rc.d/init.d/mysqld stop mysql 데몬을 종료.
[root@www root]# ps -ef | grep mysqld

[root@www root]# rpm -qa | grep apache 설치된 아파치 패키지를 검색합니다.
apache-1.3.23-11
apache-devel-1.3.23-11
................................

[root@www root]# rpm -e apache
error: removing these packages would break defendencies:
webserver is needed by mod_perl-1.24-6
webserver is needed by mod_php-4.0.4pl1-1
webserver is needed by mod_ssl-2.7.1-3
webserver is needed by mod_dav-1.0.2-2
webserver is needed by mod_python-2.7.6-5
.............................

아파치를 제거합시다. 그런데 에러메시지가 뜨죠? 의존성이 있는 패키지를 먼저 제거합니다.
rpm -e --nodeps apache와 같이 의존성 검사를 무시하고 지울 수도 있으나 꼭 필요하지 않는 것을 남겨두면 공간만 차지하고 시스템효율성을 떨어뜨릴 수 있으므로 본인판단하에 사용하지 않는 것은 과감히 지우시고 다음에 필요하면 설치하세요.
그리고 배포판 또는 설치환경에 따라 다소 패키지별로 차이가 있습니다.
실수로 잘못 지운 것은 배포판 CD가 있으면 다시 설치하면 그대로 됩니다.(예: rpm -ivh apache-1.3.23-11.i386.rpm)

[root@www root]# rpm -e mod_perl
[root@www root]# rpm -e php (php를 지울 때 의존성 문제가 뜨는 패키지도 같은 방법으로 지웁니다)
[root@www root]# rpm -e mod_ssl
[root@www root]# rpm -e mod_dav

의존성이 있는 패키지를 제거하고 아파치도 제거합니다.
[root@www root]# rpm -e apache
[root@www root]# rpm -e apache-devel (처음 아파치의 패키지 검사시에 보였던 패키지를 모두 지운다)

나머지 php, mysql, imap관련 패키지도 위와 같은 방법으로 지웁니다

[root@www root]# rpm -qa | grep php 설치된 php패키지를 검색 후 삭제
php-devel-4.1.2-7
...............................

[root@www root]# rpm -qa | grep mysql 설치된 mysql 패키지를 검색 후 삭제 (참고: 배포판에 따라 대소문자가 달라서 MySQL로 검색해야 할 경우도 있음.)
mysql-3.23.49-3
..............................

[root@www root]# rpm -qa | grep imap 설치된 imap 패키지를 검색 후 삭제
imap-2001a-10
imap-devel-2001a-10

배포판이 생성시킨 MySQL 데이터에 추가된 것이 없을 경우 지웁니다.
[root@www root]# rm -rf /usr/local/lib/mysql

/var/lib/mysql 은 MySQL을 RPM패키지로 설치했을 경우 DB파일이 저장되는 경로 입니다.

다시 한번 관련패키지를 덜 지운 것이 없는지 확인합니다. 많은 문제점 질문중 원인이 관련패키지가 남아 있는 상태에서 컴파일을 해서 생기는 문제입니다.

3. IMAP, MySQL, Apache, PHP4, Zend Optimizer 바이너리 파일 압축풀기

소스파일들이 /usr/local/src 디렉토리에 있다고 가정하고 설명합니다.

[root@www src]# tar zxvf imap-2001a.tar.Z
[root@www src]# tar zxvf mysql-3.23.57.tar.gz
[root@www src]# tar zxvf apache_1.3.28.tar.gz
[root@www src]# tar zxvf php-4.3.2.tar.gz
[root@www src]# tar zxvf ZendOptimizer-2.1.0b-Linux_glibc21-i386.tar.gz

4. IMAP 설치

[root@www src]# cd imap-2001a
[root@www imap-2001a]# make slx imap을 컴파일 한다

컴파일이 완료되면 imapd 디렉토리에 imapd가 ipopd디렉토리에는 ipop2d, ipop3d가 생성된다.
ipop2d는 잘 쓰지 않으므로 복사하지 않아도 됩니다.


[root@www imap-2001a]# cp imapd/imapd /usr/sbin 생성된 실행화일들을 복사.
[root@www imap-2001a]# cp ipopd/ipop3d /usr/sbin
[root@www imap-2001a]# cp ipopd/ipop2d /usr/sbin

이들은 xinetd 슈퍼데몬에 의해서 실행되므로 클라이언트 쪽에서 접속하여 사용할 수 있도록 하려면 환경설정을 수정해 주어야 한다.
배포판 레드햇6.2이하에서는 inetd 슈퍼데몬에 의해 실행되므로 환경설정이 조금 다릅니다.


[root@www imap-2001a]# vi /etc/xinetd.d/imapd imapd 실행을 위한 환경설정화일을 생성.

service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += HOST DURATION
log_on_failure += HOST
}

[root@www imap-2001a]# vi /etc/xinetd.d/ipop3d

service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += HOST DURATION
log_on_failure += HOST
}


[root@www imap-2001a]# vi /etc/services
......
pop3 110/tcp pop-3 # POP version 3
pop3 110/udp pop-3
......
imap 143/tcp imap2 # Interim Mail Access Proto v2
imap 143/udp imap2
......

보통 위의 내용이 있습니다. 찾아보고 있으면 주석처리가 되어 있지 않는지만 확인하고 그대로 두세요.


[root@www imap-2001a]# /etc/rc.d/init.d/xinetd restart 슈퍼데몬을 재가동.

Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]

telnet을 이용하여 로컬호스트 110포트(pop3)로 접속하여 테스트 합니다.

[root@www imap-2001a]# telnet localhost 110

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK POP3 localhost.localdomain v2001.78 server ready
user mhbaek
+OK User name accepted, password please
pass abc123
+OK Mailbox open, 0 messages
quit
+OK Sayonara
Connection closed by foreign host.


IMAP은 기본적으로 143 포트를 사용.

5. MySQL 설치
[root@www imap-2001a]# cd mysql-3.23.57
[root@www mysql-3.23.57]# ./configure --prefix=/usr/local/mysql --with-charset=euc_kr --localstatedir=/usr/local/lib/mysql

옵션과 옵션사이는 공백 하나만 있으면 됩니다.
위 옵션은 설치디렉토리를 지정하고 한글을 지원하도록 하고, --localstatedir 옵션은 DB파일을 저장할 디렉토리를 지정합니다.
혹시 실수로 환경설정을 다시 해야할 경우 make distclean 명령을 하세요.

이외에도 필요한 옵션에 대하여 알고 싶으면 ./configure --help 명령으로 살펴보세요.

Thank you for choosing MySQL! 이라는 메시지가 나온다면 MySQL을 컴파일할 준비가 다 되었다는 말입니다.

[root@www mysql-3.23.57]# make 컴파일 시작.
시스템 사양에 따라 시간 차이가 있으므로 사양이 낮은 컴퓨터는 조금 기다리세요. ^^


[root@www mysql-3.23.57]# make install MySQL을 설치.

[root@www mysql-3.23.57]# scripts/mysql_install_db MySQL의 데이터를 관리할 기초적인 DB와 테이블을 생성


주의할 점은 mysql_install_db은 반드시 한번만 실행시켜야 합니다.

최근의 MySQL에서 달라진 점은 MySQL이 mysql사용자 권한으로 실행됩니다.
해당유저가 없어서 파일소유자가 root인 경우 에러가 발생합니다.
따라서 다음과 같이 mysql 유저와 그룹을 생성합니다. 배포판에 따라 설치되었던 RPM버전에 의해 이미 생성되어 있을 수도 있습니다.


[root@www mysql-3.23.57]# groupadd mysql
[root@www mysql-3.23.57]# useradd -g mysql mysql
[root@www mysql-3.23.57]# chown -R mysql /usr/local/lib/mysql
[root@www mysql-3.23.57]# chgrp -R mysql /usr/local/lib/mysql
[root@www mysql-3.23.57]# cp support-files/my-medium.cnf /etc/my.cnf
[root@www mysql-3.23.57]# vi /usr/local/mysql/share/mysql/mysql.server

편집기로 열어서 safe_mysql이 실행되는 라인(107 line쯤)에 --language=korean 옵션을 추가.
참고로 mysql.server는 mysql이 정상적으로 실행되도록 짜여 있는 스크립트화일입니다.

$bindir/safe_mysqld --pid-file=$pid_file --datadir=$datadir --language=korean &

시스템 부팅시에 자동 실행되도록 해 줍니다.
[root@www /mysql-3.23.57]# cp -p /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

[root@www /mysql-3.23.57]# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S90mysqld
만일 Xwindows로 부팅할 경우를 위해 /etc/rc.d/rc5.d/ 디텍토리에도 링크를 만듭니다
[root@www /mysql-3.23.57]# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S90mysqld

이후에 ntsysv명령을 하면 시스템 부팅시에 자동실행될 데몬을 쉽게 지정할 수 있습니다.
[root@www /mysql-3.23.57]# ntsysv

mysql데몬의 시작과 종료 및 관련 명령어를 사용하기 편하게 하기위해서 시스템 부팅환경에 PATH를 지정해 둡니다.

[root@www /mysql-3.23.57]# vi /root/.bash_profile

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
BASH_ENV=$HOME/.bashrc
USERNAME="root"

시스템 부팅환경은 배포판마다 조금씩 다를 수 있으니 사용자의 환경에 맞게 적절히 설정하세요.

[root@www mysql-3.23.57]# /etc/rc.d/init.d/mysqld start
[root@www mysql-3.23.57]# ps -ef | grep mysql MySQL 프로세스 확인하기
[root@www mysql-3.23.57]# /etc/rc.d/init.d/mysqld stop MySQL 데몬 종료하기

6. Apache Configure(1)
[root@www mysql-3.23.57]# cd ../apache_1.3.28 초기에 아파치소스 압축을 풀어놓은 곳으로 이동.
[root@www apache_1.3.28]# ./configure --prefix=/usr/local/apache

7. PHP4설치
[root@www mod_python-2.7.8] cd ../php-4.3.2
[root@www php-4.3.2]# ./configure --with-config-file-path=/etc/httpd --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --with-imap=../imap-2001a --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.28 --with-gd=shared --with-ttf --with-jpeg --with-png --with-mm --with-mysql --with-gettext --with-gettext=/usr/bin/gettext --with-zlib --with-pspell --disable-debug --enable-track-vars --enable-inline-optimization --enable-bcmath --enable-ftp --with-xml --enable-safe-mode --enable-shared --with-charset=euc_kr

\\(역슬래시) 표시는 입력할 내용이 많을 경우 다음줄에서 보기 좋게 입력하도록 해 줍니다.
기타옵션에 대한 추가 설명은 PHP메뉴얼을 참고하기 바랍니다.
만약 PostgeSQL이나 mSQL을 사용한다면 --with-pgsql=디렉토리경로 --with-msql=디렉토리 경로와 같이 옵션을 사용하면 됩니다.
--enable-track-vars 옵션은 HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 들어 있는 GET, POST, cookie 변수들이 어디서 왔는지 기억하도록 합니다. 꼭 설정해 두세요.
--disable-debug 옵션은 Zend Optimizer 를 위한 옵션입니다.

위 옵션외 기타 옵션들을 모두 설치하실 필요는 없습니다.
사용하지 않는 옵션은 시스템 성능만 떨어뜨립니다.

[root@www php-4.3.2]#make 컴파일
[root@www php-4.3.2]#make install 인스톨

8. Apache Configure(2), 컴파일
[root@www php-4.3.2]# cd ../apache_1.3.28
[root@www apache_1.3.28]# ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --enable-module=so --enable-shared=max --sysconfdir=/etc/httpd/conf --datadir=/home/httpd --localstatedir=/var/httpd --htdocsdir=/home/httpd/html --logfiledir=/var/log/httpd

단골로 묻는 질문의 원인 중에 하나가 위의 옵션 때문입니다. 옵션을 줄 때 그냥 TAB key를 두드리지 말고 위 옵션을 잘 보고 입력하세요.

[root@www apache_1.3.28]# make 아파치를 컴파일.
[root@www apache_1.3.28]# make install 아파치 인스톨

[root@www apache_1.3.28]# cp ../php-4.3.2/php.ini-dist /etc/httpd/php.ini php환경설정 파일 복사

시스템 부팅시 자동실행이 되도록 하기 위하여 설정을 합니다.
[root@www apache_1.3.28]# cp -p /usr/local/apache/bin/apachectl /etc/rc.d/init.d/apachectl
[root@www apache_1.3.28]# ln -s /etc/rc.d/init.d/apachectl /etc/rc.d/rc3.d/S85httpd
[root@www apache_1.3.28]# ln -s /etc/rc.d/init.d/apachectl /etc/rc.d/rc5.d/S85httpd

시스템 종료 및 재부팅을 위하여....
[root@www apache_1.3.28]# ln -s /etc/rc.d/init.d/apachectl /etc/rc.d/rc0.d/K15httpd
[root@www apache_1.3.28]# ln -s /etc/rc.d/init.d/apachectl /etc/rc.d/rc1.d/K15httpd
[root@www apache_1.3.28]# ln -s /etc/rc.d/init.d/apachectl /etc/rc.d/rc6.d/K15httpd

9. 환경설정 파일 편집
아파치 환경설정화일을 열어서 다음과 같은 환경설정을 합니다.
[root@www apache_1.3.28]# vi /etc/httpd/conf/httpd.conf

404 라인쯤에 Default 시작페이지 설정을 수정해 줍니다


DirectoryIndex index.php index.php3 index.html index.htm


Section 2의 단락에서 아래 내용을 추가합니다.


................................

# And for PHP 4.x, use:
AddType application/x-httpd-php .php .php3 .inc .ph .htm
AddType application/x-httpd-php-source .phps

.................................



환경설정 수정후 저장을 합니다.
[root@www apache_1.3.28]# /usr/local/apache/bin/httpd -t 엔터를 두드리고 다음과 같은 메시지만 있으면 아파치 환경이 잘 설정되었습니다.
Syntax OK

만일 에러가 발생하였다면 몇 번째 라인에서 잘못되었다는 메시지를 보고 수정하세요.

[root@www apache_1.3.28]# /usr/local/apache/bin/apachectl start 아파치를 실행시킵니다. 중지는 stop 재시작은 restart 인수를 사용하면 됩니다.

아파치 관련 스크립트를 쉽게 실행하기 위한 환경설정을 합니다.
[root@www apache_1.3.28]# vi /root/.bash_profile

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/apache/bin
BASH_ENV=$HOME/.bashrc
USERNAME="root"

root 에서만 필요하므로 root의 PATH에 아파치의 디렉토리를 지정합니다. 다시 root로 로그인 하면 설정을 적용하여 사용할 수 있습니다.

10. Test 하기
테스트 화일을 만들어 확인을 해 보세요. 물론 홈페이지가 뜰 수 있는 디렉토리가 되어야 합니다.
메인 홈페이지 경로는 아파치 컴파일옵션(--htdocsdir=/home/httpd/html) 또는 아파치 환경설정파일 325라인 정도에서 DocumentRoot "/home/httpd/html"에 의해 설정된 경로입니다.

[root@www apache_1.3.28]#vi /home/httpd/html/phpinfo.php

테스트 화일을 만들어 에디터창에서 을 입력합니다.


저장을 하고 브라우저에서 http://localhost/test.php ;또는 홈페이지URL/test.php를 입력하여 어떤 내용이 출력되는지 봅시다.

다음과 같은 내용이 출력된다면 정상적으로 설치가 잘 되었습니다.

PHP Version 4.1.2



System Linux linux.ctrclab.go.kr 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
Build Date Jul 23 2002
Configure Command './configure' '--with-config-file-path=/etc/httpd' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--with-imap=../imap-2001a' '--with-mysql=/usr/local/mysql' '--with-apache=../apache_1.3.28' '--disable-debug' '--enable-track-vars' '--with-gd' '--enable-safe-mode'
Server API Apache
Virtual Directory Support disabled
Configuration File (php.ini) Path /usr/local/Zend/etc/php.ini
ZEND_DEBUG disabled
Thread Safety disabled

This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.1.1, Copyright (c) 1998-2001 Zend Technologies



11. Zend Optimizer 설치
[root@www apache_1.3.28]# cd ../ZendOptimizer-2.1.0b-Linux_glibc21-i386
[root@www ZendOptimizer-2.1.0b-Linux_glibc21-i386]# ./Install.sh

다음과 같은 화면이 뜨면 Enter! 후 아래와 같은 간단한 내용의 질문을 읽고 환경에 맞게 입력해줍니다.

Welcome to the Zend Optimizer 1.3.1 Installation Script!
For more information on this script, see the Installation
section in the Zend Optimizer User Guide.

Specify the location where to install Zend Optimizer

/usr/local/Zend

Confirm the location of your php.ini file

/etc/httpd

Are you using the Apache web server?

Yes

Specify the location of your Apache root directory

/usr/local/apache

Install has detected PHP version 4.1.2
Does this look correct?
Yes

Your php.ini is relocated to the /usr/local/Zend/etc directory
and symbolic link from the former place /etc/httpd/php.ini is created.
The installation completed successfully and your Zend Optimizer
is setup for use.


You must RESTART your Apache web server for the modifications to take effect

설치 완료 메시지 지시대로 아파치를 재시작 해줍니다.
[root@www apache_1.3.28]# /usr/local/apache/bin/apachectl restart

아까 띄웠던 테스트 화면을 다시 Reload 해보면 다음과 내용을 볼 수 있습니다.


This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.1.1, Copyright (c) 1998-2001 Zend Technologies
with Zend Optimizer v1.3.1, Copyright (c) 1998-2002, by Zend Technologies


속도 테스트

자신의 시스템에서 다음과 같은 PHP파일을 만들어 Optimizer 설치 전과 비교해 보세요.




참고로 저의 PC에서는 처음 7초가 나왔는데 Zend Optimizer를 설치하고 난후 3초가 나왔습니다.

이상으로 MySQL+Apache+PHP4+IMAP+Zend Optimizer 의 설정을 모두 마쳤습니다.

관련자료

등록된 댓글이 없습니다.
Today's proverb
절벽에서 떨어지고 있는 상황일지라도 아무것도 할 수 없는 것은 결코 아니다. 떨어지고 있으니까 하늘을 향해 날 수 있지 않은가? (로버트 슐러)