웹마스터 팁

Apache1.3.27 + PHP 4.3.1 + MySQL 4.0.12

안녕하세요? FriZeX입니다.

저도 실력이 미숙하지만 어려움을 겪고 계신 여러분들을 위해 글을 남깁니다.

사용된 배포판 버젼은 Redhat 8.0이며 update -uv 명령어로 kernel을 제외한 모든 패키지들이

패치가 완료된 상태에서 진행하였습니다.

Redhat 8.0이 비록 불안정한 버젼이긴 하지만 제 컴퓨터에서 8.0버젼을 이용하는 관계로 8.0을 사용하게 되었습니다.

그리고 root로 작업하시길 부탁드립니다.

#와같은 #는 root shell을 의미하는 기호입니다. 직접 입력하실때 #는 입력하지 않으셔야 합니다.

먼저, Apache와 PHP, 그리고 MySQL을 받으셔서 아무 디렉토리에 넣어두시기 바랍니다.

제가 이용한 파일은 아래와 같습니다. (시간이 지남에 따라 구 버젼이 될 수도 있음을 양지하여 주시기 바랍니다.)

Apache1.3.27 [ http://apache.kr.net/dist/apache_1.3.27.tar.gz ]

PHP4.3.1 [ http://www.php.net/get/php-4.3.1.tar.bz2/from/a/mirror ]

MySQL4.0.12 [ http://www.mysql.com ]
MySQL-Server [ http://www.mysql.com/downloads/download.php?file=Downloads%2FMySQL-4.0%2FMySQL-server-4.0.12-0.i386.rpm&mirror=http%3A%2F%2Fmysql.holywar.net%2F
]
MySQL-Clients [ http://www.mysql.com/downloads/download.php?file=Downloads%2FMySQL-4.0%2FMySQL-client-4.0.12-0.i386.rpm&mirror=http%3A%2F%2Fmysql.holywar.net%2F ]
MySQL-Libraries & header [ http://www.mysql.com/downloads/download.php?file=Downloads%2FMySQL-4.0%2FMySQL-devel-4.0.12-0.i386.rpm&mirror=http%3A%2F%2Fmysql.holywar.net%2F
  ]
MySQL-Client-libraries [
http://www.mysql.com/downloads/download.php?file=Downloads%2FMySQL-4.0%2FMySQL-shared-4.0.12-0.i386.rpm&mirror=http%3A%2F%2Fmysql.holywar.net%2F
  ]
MySQL-Embedded server [ http://www.mysql.com/downloads/download.php?file=Downloads%2FMySQL-4.0%2FMySQL-embedded-4.0.12-0.i386.rpm&mirror=http%3A%2F%2Fmysql.holywar.net%2F
  ]

Zend Optimizer [ http://www.zend.com , http://zend.com/store/getfreefile.php?pid=13&zbid=548 ]

저는 저 파일들을 다운받아서 /root/apm/ 안에 모두 넣었습니다.

인스톨 순서는 Apache - MySQL - PHP 혹은 MySQL - Apache - PHP 가 가능합니다만..

저는 후자의 방법을 이용하도록 하겠습니다. 순서만 바뀌었을 뿐 큰 차이는 없는걸로 압니다.


1. MySQL 설치하기
MySQL을 다운 받으실 때 제가 제공한 링크를 클릭하셨다면 못 보셨겠지만,

직접 mysql.com 으로 들어가셔서 다운받으셨다면 아래와 같은 현란한 주황색 문구를 보신 분도 계실 겁니다.

<For maximum stability and performance, we recommend that you use the binaries we provide.>

간단하게 해석하면..

"최대한의 Perfomance와 Stabillty를 위해서, 우리는 우리가 주는 바이너리들을 당신이 사용할 것을 추천한다."

라는 뜻이겠지요..

즉, 소스 컴파일을 하지 말고 MySQL社에서 제공하는 바이너리를 이용하라는 의미입니다.

이미 많은 리눅스그룹에서 언급이 된 문제이고 하니, 저도 설치가 간편하면서도 최대한의 Perfomance를

발휘할 수 있다는 RPM으로 설치하도록 하겠습니다.

1-1. MySQL 패키지들을 설치합니다.

RPM 설치를 많이 해보셨다면 익숙한 작업이시라 생각됩니다.

다운받은 MySQL이 있는 디렉토리로 이동합니다. (저의 경우에는 /root/apm/)
[root@localhost]# cd /root/apm

RPM들을 설치합니다.
[root@localhost]# rpm -Uvh MySQL-server-4.0.12-0.i386.rpm

rpm -Uvh MyS까지만 입력하시고 <Tab>키를 누르시면 뒷 파일 목록이 뜬답니다. 많아서 안뜨는 경우에는
Tab 키를 두번 누르시면 됩니다.

- server를 설치하게 될 경우 자동으로 MySQL이 실행되는데
#service mysql stop 이라고 입력하여 MySQL실행을 중지시키거나
#ps aux|grep sql  하여 MySQL의 PID를 확인하고,
#killall sql 하셔서 SQL을 중지시키십시요.
- 중지하셨으면 계속 진행하세요.

[root@localhost]# rpm -Uvh MySQL-devel-4.0.12-0.i386.rpm

- 엥.. 여기서 에러가 나네요?
오류: Failed dependencies:
        MySQL-client is needed by MySQL-devel-4.0.12-0
위와 같은 에러 메세지를 만나셨을 겁니다.. 왠 날벼락일까요..

그대로 해석하면

오류 : 의존성 실패
              MySQL-client는 MySQL-devel-4.0.12-0을 필요로 한다.

정도로 번역이 가능합니다. 리눅스에서 패키지를 설치할때는 의존성이란 것이 있습니다.
예를 하나 들어볼까요..

여러분이 영화를 볼려고 합니다. 그래서 아드레날린 플레이어를 설치하려고 하는데,
"Media Player가 없습니다. Media Player를 설치하신 후 다시 시도하여 주십시오."
라는 오류 메세지와 함께 설치가 중단되어 버렸습니다.
그래서 Media Player를 설치한 후 아드레날린을 설치하니 잘 되어서 즐겁게 영화를 보았습니다.


위의 예와 같이.. 어떤 프로그램이 어떤 프로그램을 필요로 하는것이 의존성입니다.

의존성을 해결하기 위해서는 필요로 하는 프로그램을 설치해 주어야겠지요.

저기서 원하는 MySQL-client을 먼저 설치해줍시다.

[root@localhost]# rpm -Uvh MySQL-client-4.0.12-0.i386.rpm

MySQL-Client가 성공적으로 설치되었다면.. 아까 실패했던 MySQL-devel을 다시 설치해줍니다.

[root@localhost]# rpm -Uvh MySQL-devel-4.0.12-0.i386.rpm
오.. 이제 의존성에러없이 잘 설치되죠?

그리곤, embedded와 shared를 설치해줍니다.

[root@localhost]# rpm -Uvh MySQL-embedded-4.0.12-0.i386.rpm
[root@localhost]# rpm -Uvh MySQL-shared-4.0.12-0.i386.rpm

한번에 여러개의 패키지를 설치를 하는 것도 가능하지만, 실수를 방지하기 위해 따로 따로 입력을 해서
패키지를 설치하였습니다.

1-2. MySQL 설정을 합니다.

vi 에디터로 /etc/init.d/mysql 을 엽니다. (#vi /etc/init.d/mysql)
134라인 부근에 보시면 $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file &라는 줄이 있는데요..
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --language=korean&과 같이 수정(수정시에는 Insert키를 누르고 하

시면 됩니다.)하세요.

기본적으로 MySQL DB는 /var/lib/mysql에 저장되도록 되어있습니다만, 다른 디렉토리로 변경하시길 원하신다면

47라인 부근에 datadir=/var/lib/mysql 라는 줄이 있는데 /var/lib/mysql 부분을 원하시는 디렉토리로 변경하시면 됩니다.

MySQL DB디렉토리를 만드실때는 원하는 디렉토리를 만드신 후 퍼미션을 적절(일반유저는 보지못하게)하게 수정하시고

해당 디렉토리의 바로 윗 디렉토리로 가셔서

#chown -R mysql.mysql DB디렉토리명

과 같이 실행하여 주세요. -R 옵션은 디렉토리안의 모든파일에도 적용한다는 뜻입니다.

다 하셨으면, ESC키를 누르시고 :wq 라고 쓰신 후 엔터를 누르셔서 저장하고 빠져 나오세요.

모두 설치가 완료되었다면,

#service mysql start

와 같이 입력하여 MySQL 서비스를 실행해봅니다.
종료하려면 start대신에 stop을 넣으시면 됩니다.


이제 MySQL을 설치하였으니 필히 MySQL의 root비밀번호를 설정하여 주어야 합니다.
#mysql

이라고 입력합니다. 비밀번호도 물어오지 않고 바로 root로 로그인되죠? 이제 비밀번호 설정을 합시다.

use mysql;이라고 입력합니다. (사용자 정보가 mysql DB에 저장되기 때문입니다. root도.. 마찬가지로..)

update user set password=password('웃흥') where user='root';

웃흥 부분에 비밀번호를 넣으시면 됩니다.
예를들어 비밀번호를 웃흥웃흥으로 한다면,

update user set password=password('웃흥웃흥') where user='root';

와 같이 적으시고 엔터를 치시면 됩니다. 웃흥 양옆에 있는 문자와 root 양옆에 있는 문자는 "가 아니라 '입니다.

제일 끝부분에 있는 세미콜론도 주의하시고 띄어쓰기도 주의하세요!

제대로 되었다면 아래와 같은 메세지가 뜰겁니다.

Querk OK, 2 rows affected (0.00 sec)
Rows matched : 2 Changed : 2 Warnings : 0

이것이 MySQL에 적용될려면 재시작을 해주거나 Reload를 해줘야 하는데, 아래와 같이 입력합니다.

FLUSH PRIVILEGES;

이제 root 비밀번호 설정은 모두 완료되었습니다. 제대로 동작되나 한번 테스트해봅시다.

quit 라고 쳐서 mysql프롬포트로부터 빠져나온 뒤 셸에서 아까와 같이 #mysql 이라고 입력해봅니다.

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

어엇.. 안되는군요..

앞으로 MySQL에 접속하실려면 #mysql -uroot -p라고 쳐서 패스워드를 물어오면 대답해줍니다. 그러면 MySQL프롬프트가 뜰것입니다.

뽀너스->

간략하게 간추려 봤습니다.^^

백업관련 : MySQL란의 이휘은님
유저DB추가 : MySQL란의 정인배님
--------------------
[유저DB]

백업 :
[frizex@localhost]$ mysqldump -ufrizex -p12345 frizex > /home/frizex/frizex.sql
-ufrizex : -u다음은 자신의 MySQL ID
-p12345 : -p다음은 자신의 MySQL Password
frizex > frizex.sql : frizex라는 DB를 /home/frizex 안에 frizex.sql라는 이름으로 저장하라는 뜻

복구 :
(만약에 frizex라는 DB가 없다면 mysql에 접속해서 생성한 후)
[frizex@localhost]$ mysql -ufrizex -p12345 frizex < /home/frizex/frizex.sql


[모든DB]

백업 :
[root@localhost]# mysqldump -uroot -p12345 -A > /root/backup.sql

복구 :

1. DB폴더 안에 있는 파일들을 모조리 지운다.
2. [root@localhost]# mysql -uroot -p12345 -A < /root/backup.sql
3. mysql 재시작 :
#service mysql restart

[유저DB만들어주기]

[root@localhost]# mysql -uroot -p
(비밀번호를 물어오면 답변해줍니다)

mysql>create database zboard;  // DB만들기. MySQL DB Name에 해당하는 사항입니다. 예시는 zboard이네요.
mysql>GRANT ALL PRIVILEGES ON zboard.* TO zman@localhost IDENTIFIED BY 'zpass' WITH GRANT OPTION;
(zboard는 사용자에 할당할 DB네임(MySQL DB Name), zpass는 사용자 비밀번호(MySQL Password), zman은 사용자 ID(MySQL ID))

* 계정등록확인
mysql>use mysql;          // 참고로 mysql 은 사용자가 등록되는 DB 입니다.root 도 여기등록 됩니다.
mysql>select * from user; // 위에서 만든 zman 이 사용자에 보여야 합니다.

[더블 보너스-_-;]
테이블 검사 : isamchk
테이블 구조 : describe TABLENAME  (TABLENAME은 테이블구조를 볼 테이블이름)
DB목록보기  : show databases;
테이블목록보기: show tables;
리로드 : FLUSH PRIVILEGES;
DB생성 : create database DB이름
DB삭제 : drop database DB이름
사용자삭제 : DELETE FROM user where user='사용자이름';

2. Apache 설치하기.
제가 생각하기에는 Apache의 설치법은 비교적 간단하지 않나 싶습니다.
Apache_1.3.27.tar.gz 파일이 있는 폴더로 이동합니다. (저의 경우 /root/apm)

#cd /root/apm

tar로 묶은 다음에 gz로 압축되어 있군요.. 한방에 압축을 풀어버립시다.
여기서도 Tab키를 이용한다면 타이핑 글자를 줄일 수 있겠지요?
#tar xvzf Apache_1.3.27.tar.gz

압축이 풀렸습니다..
압축이 풀린 디렉토리로 이동합시다.

#cd ./apache_1.3.27

디렉토리 이동이 되었으면 아래와 같이 입력합니다.

./configure
--prefix=/usr/local/apache
--enable-module=so


(는 긴 문장을 실수없이 쓰게 도와줍니다. 한 문장을 여러 문장으로 나누어 쓸 수 있습니다.
위 문장을 원래대로 복원하면 ./configure --prefix=/usr/local/apache --enable-module=so 가 됩니다.)

여기서 --prefix는 프로그램이 설치될 디렉토리를 뜻하며
--enable-module=so 는 DSO방식으로 컴파일 할 수 있게 해줍니다. (DSO방식으로 컴파일을 하면 모듈을 붙였다 떼었다 할 수 있습니다.
아파치가 설치된 후에도 PHP를 붙일 수 있는거죠.)
쭉.. 설정이 되고 있고.. 완료 되었다면...

#make; make install
과 같이 입력하여 Apache가 설치되길 기다립시다.

맛있는거 하나 먹고오면 다 되있을겁니다^^;

그럼 Apache가 제대로 동작하나 테스트를 해봅시다.

#/usr/local/apache/bin/apachectl start

httpd start란 메세지가 뜨십니까? 제대로 동작하는지 확인하기 위해 웹브라우져에서 127.0.0.1 혹은 해당 컴퓨터 IP를 입력해봅니다.

제가 할 때는 Test Page와 함께 아파치 로고가 뜨더군요^^;

제대로 동작되는거 같으면 다시 아파치를 끕시다.

#/usr/local/apache/bin/apachectl stop

그런데.. 입력하기가 너무 길어서 힘들다구요?

심볼릭링크를 활용하면 됩니다. 윈도우의 바로가기와 비슷한 개념입니다.

#ln -s /usr/local/apache/bin/apachectl /usr/bin/apachectl

위 명령어를 입력하면 /usr/bin/apachectl 파일이 생성되는데, /usr/local/apache/bin/apachectl로 연결되어 있습니다.

앞으로는 #apachectl start 만 입력해도 서버가 실행됩니다.

아파치 설치는 성공하셨군요.. 축하드립니다~

3. PHP 설치

역시나 /root/apm 디렉토리로 이동합니다.

#cd /root/apm

제가 받았을때는 PHP가 php-4.3.1.tar.bz2 라는 이름으로 압축되어 있더군요.

tar xvjf php-4.3.1.tar.bz2명령어로 압축해제가 가능합니다.

참고로 말씀드리면, bz2는 BZIP2의 약자로써 GZIP포맷보다 압축률이 높습니다.

#tar xvjf php-4.3.1.tar.bz2

압축이 쭉 풀리고... 다 풀리셨으면 풀린 디렉토리에 들어갑니다.

#cd php-4.3.1

들어가서는 아래와 같은 명령을 실행합니다.

#./configure
--prefix=/usr/local/php
--enable-ftp
--enable-magic-quotes
--enable-sockets
--with-mysql=/usr/
--with-language=korean
--with-charset=euc_kr
--enable-track-vars
--with-apxs=/usr/local/apache/bin/apxs
--with-zlib
--with-png
--with-jpeg
--with-gd
--with-freetype
--enable-zend-multibyte
--with-ttf
--enable-exif
--with-config-file-path=/usr/local/apache/conf


와... 옵션이 눈돌아가게 많군요.
일단 prefix명령어는 설명했으니 생략하고..
중요한것만 설명하겠습니다;
--enable-ftp     FTP를 연동해주는겁니다. (구체적으로 알아보시려면 각 리눅스그룹에 가보셔요^^;)
--with-mysql=/usr/    MySQL을 연동해주는겁니다. 필수적인 옵션이겠지요^^; 제 강좌대로 하셨다면 /usr/ 로 하시면 됩니다.
--with-language=korean    Korean지원.
--with-charset=euc_kr    이것도...
--with-apxs=/usr/local/apache/bin/apxs   APXS를 이용하여 APACHE와 연동하게 해주는겁니다. 빠지면 절대 안되는 옵션이겠지요.
--with-zlib   ZLIB를 사용할 수 있게 해줍니다.
--with-png   PNG를 사용할 수 있게.... (포토샵의 PNG포맷 아시죠?)
--with-jpeg   JPEG를 사용할 수 있게...-_-;;;;
--with-gd    GD Library를 사용할 수 있게..;;
--with--freetype    Freetype을 사용할 수 있게.. (제가봐도 참 무책임한 설명이군요-_-;)
--enable-zend-multibyte   저도 이 옵션에 대해서 잘 모릅니다만... ZEND에서 멀티바이트를 지원하게 해주는 무언가인거 같군요..
한글은 2Byte문자이니 한번 옵션을 켜 봤습니ㅏ.
--with-ttf   ttf는 Truetype폰트 형식이죠..
--enable-exif    요즘 갤러리들을 보면 디지털카메라 정보를 출력해 주는게 있는데.. EXIF를 이용한겁니다.
--with-config-file-path=/usr/local/apache/conf    설정파일경로



Configure를 해줍니다...
png 라이브러리등이 없는 경우 에러를 출력하면서 configure가 종료될텐데..
귀찮으시면 과감하게 제거해버리시고 (아마 GD랑 freetype도 없애야할겁니다)
시간적여유가 있으시면  http://rpmfind.net  에서 다운받아서 설치하세요..

Configure가 다 되면 Make을 해 줘야 할텐데...

아파치나 MySQL이 실행중이라면, (MySQL은 꼭 종료할 필요는 없지만)
#apachectl stop
#service mysql stop

하여 종료해줍니다.

그런 다음 #make; make install명령으로 컴파일을 합니다.

PHP는 컴파일하는데 시간이 쫌 걸리더군요^^;

따뜻한 커피말고 뜨거운 커피 4컵정도 불어가면서 마시면 인스톨이 다 되어 있을겁니다.

자.. 그러면..^^;

아파치를 실행하기 전에..

3-1. 설정하기

vi /usr/local/apache/conf/httpd.conf하여서 보시면..

791라인 부근에.. #To use server-parsed HTML files 라는 주석이 있는데.. 그 밑 라인에
AddType application/x-httpd-php .php .php3 .php4 .PHP .html .htm .inc
AddType text/htm .shtml
AddHandler Server-parse .shtml
라고 적어주고,
259라인 부근에 ServerAdmin root@aaaaaaaaa 와 같이 되어있는곳을 자신의 메일주소로 수정합니다.

이제 MySQL과 Apache를 실행하여 볼까요^^
#service mysql start
#apachectl start


명령어로 MySQL과 Apache를 실행해주고,
Apache의 인덱스 디렉토리(저의 경우 /usr/local/apache/htdocs) 안에 들어가셔서
#cat > phpinfo.php하신 다음

<?
phpinfo();
?>
라고 입력하신 후 CTRL+D 를 누릅니다.

그러면 phpinfo.php 파일이 생성되는데..

http://127.0.0.1/phpinfo.php 와 같이..(원격조종이라면 127.0.0.1은 대상IP)

웹브라우져로 열어서 PHP가 제대로 동작하는지 봅니다^^

자.. 이제 마지막...

4. Zend Optimizer 설치하기

php.ini-dist 파일을 /usr/local/apache/conf 안에 php.ini라는 이름으로 넣어줘야 합니다.
php.ini-dist 파일이 어디있는지 모르므로

#find /root/php-4.3.1 -name php.ini*
명령을 실행해 봅시다^^

결과가 뜨겠죠.. 그 중 php.ini-dist 라는 파일이 있는데...

mv /root/php-4.3.1/경로/php.ini-dist /usr/local/apache/conf/php.ini

와 같이 해주세요. 경로 부분은 자기가 찾은 경로를...

그런 다음 젠드 압축을 푸세요.

젠드의 압축풀린 디렉토리에 들어가서,

#./install 이라고 칩니다.

그러면 TUI의 인스톨 화면이 뜨는데요..

첫번째 질문은 Zend를 어디에 설치할까 입니다.

Default인 /usr/local/Zend로 두고 넘깁시다.

두번째 질문은 php.ini가 어디있느냐...

/usr/local/apache/conf 로 바꿔주고 OK를 누릅니다.

세번째 질문.. Apache web server를 이용하느냐.. 당연히 yes 선택~

네번째 질문.. Apache의 Config파일의 위치... 자동으로 잡아주더군요^^;

/usr/local/apache/conf 로 하고 OK를 누릅니다.

다섯번째 질문.. PHP Version이 오른쪽에 출력되고 맞느냐고 물어오는데 맞으면 Yes..

여섯번째 질문.. Apache의 Binary Directory가 어디냐고 물어오네요..

/usr/local/apache/bin 으로 해줍시다.

그러면 Complete 이라고 나오면서.. 아파치를 리스타트 할꺼냐고 물어오는데..

Yes 해줍시다.. 참 친절하군요^^;;

이제 Zend가 인스톨 되었으니.. 제대로 되었나 확인해 봐야겠죠..

아까 만들어뒀던 phpinfo.php 파일을 또 호출해서 Powerd By Zend 밑의 버젼이 2.1.0 이면 성공하신겁니다^^~

읽어주셔서 감사드립니다. 성급하게 작성한거라 잘못된 부분이 많을것 같습니다. 글 쓰고 다시 읽어보지도 않았거든요..

잘못된 부분은 댓글로 지적해주세요.

-Written By FriZeX