2. 아파치 웹 서버 파워업!!
2.1. APM은 무엇인가?
2.1.1. APM, 혹은 마피아?
레드햇 리눅스에서 제공하는 아파치 웹 서버는 웹 서버 자체의 기능은 웹 페이지를 표시하는 데는 아무런 문제가 없지만 왠지 아쉬운 것이 사실입니다. 방명록이나 게시판이 없는 홈페이지가 과연 쓸만할까요? 웹 서버를 구축하긴 했지만 단순히 페이지를 표시하는 데 그치는 웹 사이트는 너무나 밋밋하여 마음에 들지 않습니다.
아파치 웹 서버에 덧붙여 방대한 자료를 처리하기 위한 데이터베이스, 웹 서버와 데이터베이스 사이의 연동을 위해 사용되는 PHP가 구축된다면 여러분도 동적인 홈페이지를 가질 수 있습니다. 이렇게 동적인 웹 페이지를 구축하는 데 필요한 아파치 웹 서버, 그크립트 언어인 PHP, 데이터베이스인 MySQL, 이 3인방의 첫 이니셜을 따서 APM이라고 부릅니다. 혹은 우리말의 첫 자만 모아 '마피아'라고 부르기도 하죠.
2.1.2. MySQL과 PHP
아파치에 대한 설명은 앞의 단원에서 했으므로 생략하고, 데이터베이스인 MySQL과 스크립트 언어인PHP에 대해서 간단히 설명해 드리겠습니다.
MySQL은 데이터베이스 서버입니다. 일반적으로 리눅스에서 많이 사용되는 데이터베이스죠. 다른 데이터베이스보다 속도가 훨씬 빠르다는 것이 큰 장점입니다. 게다가 무료로 사용할 수 있으니 일반 사용자가 사용하기에는 다른 데이터베이스의 추종을 불허하죠.
PHP는 서버에서 실행되는 스크립트 언어입니다. 웹 문서인 HTML파일에 포함되어 사용할 수 있는 프로그래밍 언어죠. C 언어와 유사한 형태를 가지고 있으며, PHP는웹 개발자들이 좀 더 빠르고 쉽게 동적인 웹 페이지를 만들기 위해 만들어졌습니다. 그래서 원래는 개인용 홈페이지 도구(Personal Home Page Tool)라는 이름으로 만들어졌죠. 그러다 보니 데이터베이스와의 연동에 대해서 쉽고 빠르다는 큰 장점을 발휘합니다.
2.1.3. APM은 어떻게 동작할까?
우리가 게시판이나 방명록에 있는 글들을 보려면 우선 웹 서버에 요청하게 됩니다. 그러면 웹 서버는 웹 페이지를 보여 주겠죠? 그렇지만 웹 페이지에는 보통의 HTML이 아닌 PHP코드가 섞여 있습니다.
PHP 코드에는 '리눅스 서버에 있는 데이터베이스인 MySQL에서 몇 번째 어디에 저장되어 있는 글을 빼와라.' 뭐 이런 식의 명령들이 포함되어 있습니다. 이런 명령을 내리면 우리가 요청한 글을 보게 되는 것이죠.
글을 남기는 것도 마찬가지압니다. 게시판에서 글을 다 쓰고 <저장> 단추를 클릭하면 PHP코드가 작동해서 데이터베이스 속으로 글이 저장되는 것입니다.
APM은 이제 정형화도니 공식입니다. 게시판 하나를 만들더라도 웹 서버에 활력을 불어넣기 위해서 PHP와 MySQL을 연동해서 사용할 필요가 있는 것이죠.
그럼 지금부터 이 세 가지를 함께 설치해 보도록 하겠습니다. 단 한 번에 설치하는 운 좋은 분도 있겠지만 여러 번 설치해도 계속 실패하는 분도 있을 것입니다. APM 설치는 아주 작은 설정 실수로 전체 설치를 실패할 수 있는 광장히 짜증나는 일입니다. 저 역시 며칠을 Q&A 게시판에서 헤맨 경험이 있거든요.
그렇지만 좀더 멋진 여러분의 홈페이지를 위해서 인내해야겠죠? 실패를 통해서 점점 완성되어 가는 설치 과정을 지켜보는 것도 기분 좋은 일이랍니다. 처음부터 하나씩 천천히 따라해 본다면 여러분도 APM 설치에 성공할 수 있을 것입니다.
여러분에게 행운이 있기를 바랍니다.
2.2. APM 다운로드하기
그럼 우선 아파치, PHP, MySQL을 차례로 다운받아 보겠습니다. 모질라 웹 브라우저를 잉요해서 다운받는 것이기 때문에 별다른 어려움이 있는 것은 아니지만, 내 시스템에 맞는 파일을 다운받아야 한다는 점을 잘 기억해 두기 바랍니다. 특히 아키텍처에 맞는 파일을 받는 것이 중요합니다.
1. 아파치 웹 서버부터 다운받아 보겠습니다. 아파치 웹 서버는 아파치 그룹 사이트(http://www.apache.org)에서 다운받을 수 있습니다.
2. 웹 브라우저의 세로 이동 막대를 아래로 내리면 다운받을 수 있는 링크를 찾을 수 있습니다. from a mirror 링크를 클릭합니다.
3. 미러 사이트의 링크 리스트를 클릭합니다.
4. 미러 사이트 목록에 있는 한국의 미러 사이트도 있군요. kr 링크를 클릭하면 우리나라에 있는 아파치 웹 서버의 미러 사이트를 방문할 수 있습니다.(http://mirror.apache-kr.org//httpd/)
5. 아파치 프로그램을 다운받기 위해서 httpd 디렉토리를 클릭합니다.
6. 다양한 버전, 다양한 방식으로 압축되어 있는 아파치를 확인할 수 있습니다. 리눅스에서 사용할 수 있또록 확장자 tar.gz의 최신 버전을 다운받도록 하겠습니다. 즉 우리가 다운받을 파일은 apache_최신버전.tar.gz 파일입니다. ---> httpd-2.4.1.tar.bz2
7. 파일을 다운로드합니다. 우선 / 디렉토리에 다운받도록 하죠.
8. 파일의 용량이 얼마 되지 않기 때문에 금방 다운받을 수 있습니다.
9. 다음은 PHP를 다운받겠습니다. PHP Net이라는 사이트(http://www.php.net)에서 다운받을 수 있습니다. downloads 링크를 클릭하세요.
10. PHP의 완전한 소스코드 파일을 다운받습니다.
11. 아파치 웹 서버를 저장한 곳에 파일을 다운받습니다.
12. 아파치 웹 서버와 마찬가지로 파일의 용량이 얼마 되지 않기 떄문에 금방 다운로드가 이루어집니다.
13. 다음은 MySQL을 다운받습니다. MySQL.org라는 사이트(http://www.mysql.org)에서 다운받을 수 있습니다. Downloads 링크를 클릭하세요.
14. MySQL의 안정 버전을 다운받도록 합니다.
15. 아파치와 PHP를 다운받은 곳에 파일을 함께 저장합니다.
16. 파일을 모두 다운받았으면 / 디렉토리에 제대로 받았는지 확인합니다. 파일 버전과 이름도 함께 확인하기 바랍니다.
2.3. 기존의 패키지 삭제
파일을 모두 다운받았지만 이미 동작하고 있는 아파치, 그리고 리눅스 설치를 통해서 설치되었을지도 모르는MySQL과PHP는 우리를 불안하게 만듭니다. 이들을 제대로 종료하교 삭제하지 않는다면 리눅스 서버에 APM을 연동해서 설치하고자하는 우리의 노력은 몽땅 도로아미타불입니다. 실행되고 있는 아파치 데문을 중지하고 리눅스 서버에 설치되어 있는 아파치, PHP, MySQL의 모든 흔적을 남김없이 없애 버리겠습니다.
1. 앞 단원에서 설정한 아파치 웹 서버는 리눅스를 부팅할 때부터 실행되도록 설정하였기 때문에 이미 실행되고 있는 아파치 데몬을 중지시켜야 합니다. 웹 서버가 어떻게 동작하고 있는지 ps 명령을 통해서 확인할 수 있습니다.
[root@comcodi root]# ps -ef | grep httpd ☜ root 1036 1 0 21:23 ? 00:00:01 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1039 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1040 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1041 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1042 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1043 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1044 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1045 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Dnobody 1046 1036 0 21:@3 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D -Droot 1542 1286 1 22:13 pts/0 00:00:00 grep httpd [root@comcodi root]# |
2. 웹 서버인 httpd의 프로세스를 종료시키겠습니다. 프로세스를 종료시키기 위해 kill 명령을 사용하는데, 종료시킬 프로세스가 실행되고 있는 번호 (PID)를 입력하면 됩니다.
프로세스를 모두 종료할 필요 없이 root 사용자가 실행시킨 부로 프로세스만 삭제하면 모든 프로세스가 종료됩니다. 예제에서는 1436번 프로세스가 부모 프로세스입니다.
[root@comcodi root]# kill 1436 ☜ |
3. 다시 프로세스를 확인하는 ps 명령을 내리면 모든 프로세스가 종료된 것을 확인 할 수 있습니다.
[root@comcodi root]# ps -ef | grep httpd ☜ root 1542 1286 1 22:13 pts/0 00:00:00 grep httpd [root@comcodi root]# |
4. 이제 아파치의 RPM 패키지를 삭제할 차례입니다. rpm 명령에서 -e 옵션을 사용하면 리눅스 서버에 설치되어 있는 RPM 패키지를 삭제할 수 있습니다.
그런데 다음과 같은 에러 메시지가 나타납니다. 이것은 패키지 의존성과 관계된 문제인데, 아파치 패키지를 함부로 제거하면 메시지에 나타난 다섯 개의 패키지들을 사용하는 데 문제가 생기기 때문에 이런 에러 메시지가 나타나는 것입니다.
[root@comcodi root]# rpm -e apache ☜ error: removing these packages would break dependencies: apache is needed by apacheconf-0.8.1-1 webserver is needed by mod_dav-1.0.2-6 webserver is needed by mod_perl-1.24_01-3 webserver is needed by mod_ssl-2.8.4-9 webserver is needed by webalizer-2.01_06-11 [root@comcodi root]# |
5. 의존 관계를 무시하고 모든 패키지를 삭제합니다. 아래의 에러 메시지는 전에 사용하던 아파치 웹 서버의 설정 파일은 /etc/httpd/conf/httpd.conf파일은 삭제 하지 않고 남겨 두었다는 의미입니다.
[root@comcodi root]# rpm -e --nodeps `rpm -qa | grep apache` ☜ warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave [root@comcodi root]# |
6. 새로 설치된 아파치를 위해서 가차없이 모두 없애 버립니다.
[root@comcodi root]# \rm /etc/httpd/conf/httpd.conf.rpmsave ☜ [root@comcodi root]# |
7. 이제 다시 아파치 웹 서버의 패키지를 확인해 보겠습니다. apache 패키지가 이미 삭제 되었기 때문에 다음과 같은 메시지가 나타납니다.
[root@comcodi root]# rpm -e apache ☜ error: package apache is not installed [root@comcodi root]# |
8. 리눅스를 설치할 때 특별히 개별 패키지 선택을 통해 설치하지 않는 한 MySQL의 패키지는 설치가 되지 않습니다. 패키지가 없기 때문에 프롬프트만 나타납니다.
[root@comcodi root]# rpm -qa | grep mysql ☜ [root@comcodi root]# |
9. 그러나 PHP의 경우는 얘기가 좀 다르군요. 게다가 PHP와 관계된 다섯 개의 패키지가 더 설치된 것을 확인할 수 있습니다. 미련 없이 몽땅 삭제하겠습니다.
[root@comcodi root]# rpm -qa | grep php ☜ php-pgsql-4.0.6-7 asp2php-0.75.17-1 php-4.0.6-7 php-ldap-4.0.6-7 asp2php-gtk-0.75.17-1 php-imap-4.0.6-7 [root@comcodi root]# |
10. PHP의 경우도 /etc/php.ini.rpmsave 파일을 남겨 두는데, 이것도 함께 제거 합니다.
[root@comcodi root]# rpm -e --nodeps `rpm -e | grep php` ☜ warning: /etc/php.ini saved as /etc/php.ini.rpmsave [root@comcodi root]# \rm /etc/php.ini.rpmsave ☜ [root@comcodi root]# |
11. 이제 PHP와 관련된 패키지들도 모두 청소했습니다. APM을 연동해서 설치할 준비가 된 것이죠.
[root@comcodi root]# rpm -qa | grep php ☜ [root@comcodi root]# |
2.4. MySQL 설치하기
이제부터 본격적으로 APM을 설치해 보겠습니다. 우선 APM 중에서 가장 먼저 설치할 것은 MySQL입니다. MySQL은 소스 파일의 압축을 풀고 컴파일하기 위한 스크립트인 mysql_install_db만 실행해 주면 끝나기 때문에 가장 쉽게 설치할 수 있습니다.
1. 먼저 MySQL을 다운받은 / 디렉토리에서부터 출발합니다.
[root@comcodi root]# cd / ☜ [root@comcodi root]# ls ☜ MySQL-5.5.21-1.linux2.6.i386.tar php-4.1.1.tar.gz apache_1.3.22.tar.gz [root@comcodi root]# |
2. tar 명령을 이용해서 mysql 파일의 압축을 풀어 줍니다. 굉장피 많은 파일들이 나타납니다.
[root@comcodi root]# tar xvf MySQL-5.5.21-1.linux2.6.i386.tar ☜ mysql-3.23.46-pc-linuxrpm -i MySQL-server-5.5.21-1.linux2.6.i386.rpm 오류: Failed dependencies: MySQL conflicts with mysql-5.1.61-1.el6_2.1.i686 MySQL-server conflicts with mysql-server-5.1.61-1.el6_2.1.i686 [root@comcodi src]# rpm -qa | grep My |
3. 실습1. Server를 DBMS 전용 서버로 운영
0. 시스템 부팅 및 root
접속
1. MySQL 설치
- MySQL 5.5 버전의 RPM 파일 다운
- http://www.mysql.com/
- 상단의 Downloads -> Downloads -> 왼쪽 MySQL
Community Server -> 5.5
- 스크롤을 내려
중간쯤의 Linux x86 generic RPM 선택
- Server와
Client Program 두개 다운(Pick a mirror 선택)
- 로그인 창이 나온다면, 'No thanks, just take me to the
downloads!' 선택
2. 설치
- 현재 받은 파일일
①
MySQL-server-5.5.0-0.glibc23.i386.rpm
②
MySQL-client-5.5.0-0.glibc23.i386.rpm
-
관련 패키지 설치
#yum -y install
perl-DBI
#cd 다운로드/
#pwd
(현재폴더:
/root/다운로드)
#ls
(다운받은 위의 파일 존재)
#rpm -Uvh --force --nodeps MySQL*.rpm
- 설치가 완료되면, mysql 서비스가 항상 가동되도록 체크 확인
#system-config-services (mysql 시작 수행)
#service mysql status (MySQL 서버 데몬의 가동
확인)
MySQL running (852) [ OK ]
- 외부에서 MySQL 서버를 사용할 수 있도록 포트 열어주기#system-config-firewall
그 외의 포트 -> 추가 -> 3306/tcp/mysql 선택 -> 적용
#exit (root 종료)
exit
- MySQL 클라이언트 프로그램을 이용해, MySQL 서버에 접속
#mysql
(프롬프트가 'mysql>' 로 나오면 정상적으로 접속된 것)
mysql> quit
실습2. MySQL의 기본적인 보안을 설정하고, Windows에서 리눅스 MySQL 서버에 접속해서 사용
1. 보안에 중요한 DB 사용자 'root'의 비밀번호를 지정
- mysqladmin 명령으로 DB 사용자 'root'의 비밀번호
변경
#mysqladmin -u root -p password
'1234'
#mysql
(이제, mysql 명령으로 접속 불가)
#mysql -u root -p
Enter password: (비밀번호 입력)
2. [Windows Client(=호스트OS)] MySQL 서버에 접속
- 서버에 접속하기 위해 MySQL 클라이언트 다운.
- http://www.mysql.com/
- Downloads -> Downloads -> MySQL Community
Server -> 5.5
- Windows ->
Windows downloads 부분의 'Windows Essential (x86)'을 다운로드
- 다운로드 한 파일을 설치
- Setup Type에서 Custom 선택 -> Custom Setup 화면에서 MySQL
Server 앞의 디스크 모양 선택 후
, 'This feature will not available 선택 해서 설치되지
않도록 설정.
- Client Programs -> Change를
눌러 설치할 경로를 C:\mysql\ 폴더로 변경하여 설치
3.
[Windows Client(=호스트OS)] Windows에서 리눅스의 MySQL 서버로 접속
- 명령 프롬프트에서...
> cd c:\mysql\bin
> mysql
(접속
가능?
접속이 안되는 이유.
mysql 명령의 아무런 옵션이 없이 실행하면 현재 클라이언트 프로그램이 설치된 컴퓨터에
MySQL 서버가 설치되어 있을 것이라고 생각하고 접속하게 되므로 접속이 되지
않음)
> mysql -h 192.168.111.100 -u
root -p
Enter password:
(비밀번호)
(접속 가능?
접속이 안되는 이유.
MySQL은 이메일 주소와 비슷한 형식으로 사용자 이름을 사용.
즉, 사용자이름@호스트이름또는IP
하지만, MySQL 서버에 접속이 허용된 DB 사용자는 'root@localhost'(또는
root@127.0.0.1)이고 'root@192.168.111.1'이라는 사용자는 존재하지 않으므로 접속이 거부됨.
- 먼저, ipconfig 명령으로 Windows Client의 IP주소를
확인
- Vmware 메뉴의 Edit -> Virtual
Network Editor -> Summery 탭의 'Vmnet8(Nat)' 부분의
192.168.xxx.0을 확인
4. [Fedora Server] Windows Clinet에서 접속할 사용자 생성 (winuser
사용자 생성-
winuser@192.168.xxx.1)
#mysql
MysqL의
사용자가 들어있는 테이블 확인 (SHOW DATABASES;)
mysql> use mysql;
mysql> SHOW TABLES;
mysql> EXPLAIN user;
mysql> SELECT user, host FROM user WHERE user not
like '';
(mysql DB에 있는 user 테이블의 user열과
host열을 조회)
mysql> GRANT ALL
PRIVILEGES ON *.* TO 'winuser'@'192.168.111.1' IDENTIFIED BY '암호'
mysql> SELECT user, host FROM user WHERE user not
like '';
(사용자 생성 확인)
5. [Windows Client(=호스트OS)] 명령 프롬프트에서 다시
접속
>cd c:\mysql\bin
>mysql -h 192.168.111.100 -u winuser
-p
Enter password: '암호'
7. MySQL 서버에 처음으로 접속합니다. 먼저 암호를 물어 보면 앞서 변경한 암호를 입력합니다.
[root@comcodi mysql]# ./bin/mysql -p mysql ☜ Enter password: ******** ☜ |
8. mysql>이라는 프롬프트가 나타나면 MySQL은 성공적으로 설치된 것입니다.
Reading table information for completion of table and column names You can turn off this feature to et a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 3.23.40 Type `help;` or `\h` for help. Type `\c` to clear the buffer. MySQL> |
9. status 명령을 입력하면 MySQL의 상태를 출력합니다.
MySQL> status -------------- ./bin/mysql Ver 11.15 Distrib 3.23.40, for pc-linux-gnu (i686) Connection id: 3 Current database: mysql Current user: root@localhost Current pager: stdout Using outfile: " Server version: 3.23.40 Protocol version: 10 Connection: Localhost via UXIX socket Client characterset: latin1 Server characterset: latin1 UNIX socket: /tmp/mysql.sock Uptime: 3 min 57 sec Threads: 1 Questions: 23 slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.097 -------------- mysql> |
10. 이제 사용 가능한 데이터 베이스를 확인합니다. show databases 명령을 내리고 반드시 ; 기호를 덧붙여 주어야 명령이 입력됩니다.
mysql> show databases; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.00 sec) mysql> |
11. MySQL이 제대로 설치되어 있는 상태라는 것을 확인했습니다. exit; 명령을 내리면 다시 리눅스의 명령 프롬프트로 나갑니다.
mysql> exit; Bye [root@comcodi mysql]# |
mysql_secure_installation 명령을 이용하면 더 간단히 설정할 수 도 있다.
[root@db2 ~]# /usr/bin/mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
Database 생성 및 사용자 생성
새로운 사용자 생성
CREATE USER wordpress@localhost IDENTIFIED BY "some_good_password_for_wordpress";
새로운 데이타베이스 생성
CREATE DATABASE wordpress_blog;
필요한 권한 설정
GRANT ALL ON wordpress_blog.* TO wordpress@localhost;
권한 설정 적용
FLUSH PRIVILEGES;
2.5. 아파치와 PHP 설치하기
APM을 연동해서 설치할 때는 이 부분이 가장 까다로운 부분입니다. 설치 메뉴얼이나 Q&A게시판에도 없는 에러 메시지가 자꾸날 수도 있고 설치하는 순서도 굉장히 복잡하기 때문에 주의를 기울여야 하는 과정입니다.
설치 순서는 아래와 같습니다. 이 순서를 지켜야 APM을 연동해서 설치할 수 있습니다.
1. 다운받은 아파치와 PHP 파일의 압축을 풀어준다. 2. 아파치 웹 서버의 설정 프로그램을 살짝 실행시킨다. 3. PHP를 설치한다. 4. 아파치 웹 서버를 설치한다. |
이것만 넘으면 완벽한 APM을 볼 수 있습니다. 고지가 바로 저기니까요~! 힘내세용~~!! ^^
1. 1단계부터 천천히 시작하죠. APM 파일들이 있는 / 디렉토리로 돌아오세요. 그리고 tar 명령으로 PHP의 압축을 풀어 줍니다. MySQL보다 더 방대한 파일들을 잠시 감상할 수 있습니다.
[root@comcodi mysql]# cd / ☜ [root@comcodi /]# tar zxvf php-4.1.1.tar.gz ☜ php-4.1.1/ php-4.1.1/build/ php-4.1.1/build/bad_makefile php-4.1.1/build/build.mk php-4.1.1/build/build2.mk php-4.1.1/build/buildcheck.sh php-4.1.1/build/dynlib.mk php-4.1.1/build/fastgen.sh php-4.1.1/build/genif.sh php-4.1.1/build/library.mk php-4.1.1/build/ltlib.mk php-4.1.1/build/mkdep.awk . . . php-4.1.1/TSRM/tsrm_win32.c php-4.1.1/TSRM/tsrm_win32.h php-4.1.1/configure php-4.1.1/acconfig.h php-4.1.1/generated_lists php-4.1.1/mkinstalldirs php-4.1.1/install-sh php-4.1.1/aclocal.m4 [root@comcodi /]# |
2. 아파치도 압축을 풀어줍니다.
[root@comcodi mysql]# cd / ☜ [root@comcodi /]# tar zxvf apache_1.3.22.tar.gz ☜ (---> tar jxvf httpd-2.4.1.tar.bz2) apache_1.3.22/ apache_1.3.22/cgi-bin/ apache_1.3.22/cgi-bin/printenv apache_1.3.22/cgi-bin/test-cgi apache_1.3.22/ABOUT_APACHE apache_1.3.22/Announcement apache_1.3.22/INSTALL apache_1.3.22/KEY apache_1.3.22/LICENSE apache_1.3.22/Makefile.tmpl apache_1.3.22/README . . . apache_1.3.22/src/support/rotatelogs.s apache_1.3.22/src/support/rotatelogs.c apache_1.3.22/src/support/rotatelogs.dep apache_1.3.22/src/support/rotatelogs.mak apache_1.3.22/src/support/split-logfile apache_1.3.22/src/support/suexec.s apache_1.3.22/src/support/suexec.c apache_1.3.22/src/support/suexec.h apache_1.3.22/src/Configuration [root@comcodi /]# |
3. 압축이 모두풀렸으면 ls 명령으로 / 디렉토리의 파일을 확인합니다. 아리처럼 php-4.1.1 디렉토리와 apache_1.3.22 디렉토리가 나타납니다.
[root@comcodi /]# ls ☜ anaconda-ks.cfg lcmake.txt php-4.1.1 apache_1.3.22 makeapache.txt php-4.0.6.tar.gz apache_1.3.22.tar.gz makeinstallphp.txt tarapache.txt apmbuild.txt makephp.txt tarmysql.txt image mysql-3.23.46-pc-linux-gnu-i686.tar.gz tarphp.txt [root@comcodi /]# |
4. mysql과 마찬가지로 이 두 디렉토리를 /usr/local 디렉토리로 옮깁니다.
[root@comcodi /]# mv php-4.0.6 /usr/local/php ☜ [root@comcodi /]# mv apache_1.3.22 /usr/local/apache ☜ [root@comcodi /]# |
5. /usr/local 디렉토리로 이동하고 파일들이 제대로 이사왔는지 확인해 보겠습니다. /usr/local 디렉토리 아래에 apache 디렉토리와 php 디렉토리가 만들어져 있습니다.
[root@comcodi /]# cd /usr/local ☜ [root@comcodi local]# ls ☜ apache bin doc etc games includes lib libexec mysql php sbin share src [root@comcodi local]# |
6. 먼저 아파치 디렉토리로 이동하고 2단계로 아파치 웹 서버의 설정 파일을 살짝 실행시킵니다. 설정 파일이란 configure 파일을 말합니다. 이때 아파치의 디렉토리는 /usr/local/apache에 있다는 --prefix 옵션을 합께 지정합니다.
[root@comcodi local]# cd apache ☜ [root@comcodi apache]# ./configure --prefix=/usr/local/apache2 ☜ Configuring for Apache, Version 1.3.22 + using installation path layout: Apache (config.layout) Creating Makefile Creating Configuration.apaci in src Creating Makefile in src + configured for Linux platform + setting C compiler to gcc + setting C pre-processor to gcc -E + adding selected modules + using system Expat + checking sizeof various data types + doing sanity check on compiler and options Creating Makefile in src/support Creating Makefile in src/regex Creating Makefile in src/os/unix Creating Makefile in src/ap Creating Makefile in src/main Creating Makefile in src/modules/standard [root@comcodi /]# |
7. 3단계 PHP 설치를 위해서 이제 PHP의 압축이 풀려 있는 /usr/local/php 디렉토리로 이동합니다.
[root@comcodi apache]# cd /usr/local/php ☜ [root@comcodi php]# |
8. PHP의 소스를 컴파일하기 전에 PHP의 환경을 설정해 줍니다. 아파치와 마찬가지로 ./configure라는 프로그램을 실행하는데, 이번에는 옵션을 더 추가합니다. 즉 아파치는 /usr/local/apache 디렉토리에 설치되어 있다는 --with-apache=/usr/local/apache 옵션, mysql은 /usr/local/mysql 디렉토리에 설치되어 있다는 --with-mysql=/usr/local/mysql 옵션, 그리고 컴파일할 때 라이브러리를 지정해 주기 위해서 --with=zlib=/usr 옵션을 지정합니다.
[root@comcodi php]# ./configure --with-apache=/usr/local/apache2 \ ☜ > --with-mysql=/usr/local/mysql \ ☜ > --with-zlib=/usr ☜ creating cache ./config.cache creating for a BSD compatible install... /usr/bin/install -c creating whether build environment is sane... yes creating whether make sets ${make}... yes creating for working aclocal... found creating for working autoconf... found creating for working automake... found creating for working autoheader... found creating for working makeinfo... found Updated php_version.h . . . |
9. 환경 설정에 긴 시간이 소요됩니다. 아래와 같이 라이센스 메시지를 볼 수 있다면 PHP를 컴파일하기 전에 환경 설정이 모두 끝난 것입니다.
. . . creating number.c creating number.h creating main/internal_functions.c +---------------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +---------------------------------------------------------------------------+ Thank you for using PHP # |
10. 이제 make 명령으로 PHP의 컴파일을 시작합니다.
# make ☜ Making all in Zend make[1]: 들어감 `/usr/local/php/Zend` 디렉토리 /bin/sh../libtool--silent--mode=linkgcc -g -02 -olibZend_c.la zend_language_scanner.lo zer . . . |
11. 컴파일 또한 상당히 오랜 시간이 걸립니다. 게다가 모니터에는 알 수 없는 메시지들만 계속 출력됩니다. 어쨌든 컴파일이 다 끝났습니다.
. . . make[1] 나감 `/usr/local/php` 디렉토리 Making all in pear make[1]: 들어감 `/usr/local/php/pear` 디렉토리 make[1]: 나감 `/usr/local/php/pear` 디렉토리 # |
12. 이제 본격적으로 PHP를 설치합니다. make install 명령을 내리면 PHP 설치가 시작됩니다.
# make install ☜ Making install in Zend make[1]: 들어감 `/usr/local/php/Zend` 디렉토리 make[2]: 들어감 `/usr/local/php/Zend` 디렉토리 make[2]: Nothing to be done for `install-exec-am`. make[2]: Nothing to be done for `install-exec-am`. make[2]: 나감 `/usr/local/php/Zend` 디렉토리 make[1]: 나감 `/usr/local/php/Zend` 디렉토리 Making install in main . . . |
13. 정신없이 설치가 이루어지고 설치가 끝나면 프롬프트가 나타납니다.
Installing program: pear Installing program: pearize Installing program: phptar Installing program: phpextdist make[2]: 나감 `/usr/local/php/pear` 디렉토리 make[1]: 나감 `/usr/local/php/pear` 디렉토리 # |
14. PHP의 설치가 모두 끝났으면 아파치 디렉토리 내에 PHP를 연동하기 위한 모듈이 설치되었는지 확인합니다. APM을 연동하기 위해서는 반드시 PHP의 모듈들이 아파치 디렉토리 안의 /usr/local/apache/src/modules에 있어야 합니다.
# cd /usr/local/apache/src/modules ☜ # ls ☜ Makefile README example experimental extra php4 proxy standard # |
15. php4 디렉토리에 들어가면 다음과 같은 PHP 모듈 파일들을 확인할 수 있습니다.
# cd php4 # ls Makefile.libdir libmodphp4.a mod_php4.c mod_php4.h mod_php4.o Makefile.tmpl libphp4.module mod_php4.exp mod_php4.lo # |
16. 마지막 4단계!! 아파치를 본격적으로 설치합니다. 압축이 풀린 아파치 디렉토리로 이동하고 아파치의 환경 설정 파일을 다시 동작합니다.
이번에는 2단계에서 살짝 실행했을 때와는 달리 한 가지 옵션을 덧붙여 줍니다. 이 파일은 PHP를 설치하면서 아파치와 연동하기 위해 만들어진 모듈입니다. 반드시 이 옵션을 덧붙여서 모듈을 인식시켜 줘야 합니다.
# cd /usr/local/apache ☜ # ./configure --prefix=/usr/local/apache \ ☜ > --activate-module=src/modules/php4/libphp4.a ☜ Configuring for Apache, Version 1.3.22 + using installation path layout: Apache (config.layout) + activated php4 module (modules/php4/libphp4.a) Creating Makefile Creating Configuration.apaci in src Creating Makefile in src + configured for Linux platform + setting C compiler to gcc + setting C pre-processor to gcc -E + checking for system header files + adding selected modules o php4_module uses ConfigStart/End + using system Expat + checking sizeof various data types + doing sanity check on compiler and option Creating Makefile in src/support Creating Makefile in src/os/unix Creating Makefile in src/ap Creating Makefile in src/main Creating Makefile in src/modules/standard Creating Makefile in src/modiles/php4 # |
17. 이제 make 명령을 실행하여 아파치를 컴파일합니다.
# make ☜ ===> src make[1]: 들어감 `/usr/local/apache` 디렉토리 make[2]: 들어감 `/usr/local/apache/src` 디렉토리 ===> src/os/unix gcc -c -I../../os/unix -I../../include -DLINUX=22 -I/usr/local/php -I/usr/local/php/main -I/usr/local/php/main -I/usr/local/php/Zend -I/usr/local/php/Zend -I/usr/local/php/TSRM -I/usr/lo cal/php/TSRM -I/usr/local/php -DNO_DL_NEEDED `../../apaci` os.c # |
18. 컴파일이 모두 끝났지요?
. . . al/php/main -I/usr/local/php/Zend -I/usr/local/php/Zend -I/usr/local/php/TSRM -I/usr/local/php/TSRM -I/usr/local/php -DNO_NEEDED `../apaci `%g` \ -e `s%@CFLAGS SHLIB@%%G` \ . . . make[2]: 나감 `/usr/local/apache/src` 디렉토리 <=== src/support make[1]: 나감 `/usr/local/apache` 디렉토리 <=== src # |
19. make install 명령으로 아파치 프로그램을 설치합니다.
# make install <=== [data] ===> [config: Installing Apache configuration files] ./src/helpers/install.sh -c -m 644 ./conf/httpd.conf-dist[*] /usr/local/apache/conf/httpd.conf.default ./src/helpers/install.sh -c -m 644 ./conf/httpd.conf-dist[*] /usr/local/apache/conf/httpd.conf ./src/helpers/install.sh -c -m 644 ./conf/access.conf-dist[*] /usr/local/apache/conf/access.conf.default . . . |
20. 아파치의 설치까지 모두 끝난 화면입니다.
<=== [config] make[1]: 나감 `/usr/local/apache` 디렉토리 +-----------------------------------------------------------------+ | You now have successfully built and installed the | | Apache 1.3 HTTP server. To verify that Apache actually | | works correctly you now should first check the | | (initially created or preserved) configuration files | | | | /usr/local/apache/conf/httpd.conf | | | | and then you should be able to iommedately fire up | | Apache the first time by running: | | | | /usr/local/apache/bin/apachectl start | | | | Thanks for using Apache. The Apache Group | | http://www.apahce.org/ | +-----------------------------------------------------------------+ # |
21. /usr/local/php 디렉토리에서 php.ini-dist 파일을 /usr/local/lib/ 디렉토리에 복사해 주면 APM 설치는 모두 끝납니다.
# cd /usr/local/php ☜ # cp ./php.ini-dist /usr/local/lib/php.ini ☜ # |
2.6. APM 연동 환경 설정과 시동 테스트하기
`정말 험난한 APM 설치를 마친 여러분 축하드립니다.` 하고 여기서 단원을 접고 싶은 마음이 굴뚝같지만 아파치 웹 서버의 설정을 새로 해야 하는 것 잊지 않으셨지요? APM을 연동해서 설치한 후 마지막 마무리 설정을 해보고, APM이 제대로 작동하는지 테스트해 보는 것으로 이번 장을 마치겠습니다.
1. 먼저 손을 대어야 할 곳은 아파치 설정 파일입니다. 먼저 있던 아파치를 삭제하고 새로 설치 했기 때문에 아파치의 설정 파일이 있는 디렉토리도 변경되었습니다. 새롭게 설치한 아파치 설정 파일은 /usr/local/apache/conf/httpd.conf에 있습니다.
# vi /usr/local/apache/conf/httpd.conf ☜ |
2. 아래와 같이 ServerRoot 항목이 변경된 것을 확인합니다. 우리가 새로운 아파치 프로그램 파일들을 이곳에 설치했기 때문에 /usr/local/apache라고 지정되어 있습니다.
. . . # # ServerRoot: The top of thd directory tree under which the server's # configuration, error, and log files are kept. # # Note! If you intend to place this on an NFS (or otherwise network) # mounted filesystem then please read the LockFile documentation # (available at URL:http://www.apache.org/docs/mod/core.html#lockfile); # you will save yourself a lot of trouble. # # Do NOT add a slash at the end of the directory path. # ServerRoot "/usr/local/apache" # . . . |
3. ServerName에 리눅스 서버의 내부 IP 주소인 192.168.0.1을 입력합니다.
그리고 다음에 있는 DocumentRoot 항목을 보면 HTML 문서가 저장될 디렉토리가 변경되었음을 알 수 있습니다. 즉 여러분이 윈도우 컴퓨터에서 만든 HTML 문서는 /usr/local/apache/htdocs 디렉토리에 있어야 웹 브라우저로 볼 수 있다는 것입니다.
# # 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your # machine always knows itself by this address. If you use Apache strictly for # local testing and evelopment, you may use 127.0.0.1 as the server name. # ServerName 192.168.0.1 # # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/usr/local/apahce/htdocs" # |
4. 다음과 같이 DirectoryIndex 항목을 변경합니다. 시작 페이지를 어떤 파일로 할것인지 설정해 주는 것입니다. 이전까지는 웹 브라우저의 주소 창에 웹 서버의 URL 주소만 지정하면 자도으로 index.html 파일을 보는 데 그쳤지만 이제부터는 PHP 파일로 만든 index.php 파일을 볼 수도 있어야 합니다.
# # DirectoryIndex: Name of the file or files to use as a pre-written HTML # directory index. Separate multiple entries with spaces. # (IfModule mod_dir.c) DirectoryIndex index.php index.php3 index.php4 index.html index.htm (/IfModule) # |
5. 아래로 주욱 내려가서 PHP 스크립트의 확장자를 등록합니다. 웹 서버에서 HTML 파일과 더불어 PHP와 관련된 파일들도 서비스 할 수 있도록 여기서 등록을 해주어야 합니다.
리눅스 서버에서 PHP 4가 구축되어 있기 때문에 이 부분의 주석 표시(#)를 제거해 주고 몇 가지 내용을 첨가합니다.
# AddType allows you to tweak mine.types without actually editing it, or to # make certain files to be certain types. # # For example, the PHP 3.x module (not part of the Apache distribution - see # http://www.php.net) will typically use: #AddType application/x-httpd-php3 .php3 #AddType application/x-httpd-php3-source .phps # # And for PHP 4.x, use; # AddType application/x-httpd-php .php .php3 .ph AddType application/x-httpd-php-source .phps AddType application/x-tar .tgz # |
6. 설정 파일을 저장하고 명령 프롬프트로 나갑니다. 이제 아파치 웹 서버를 새로 시동하겠습니다. 아파치가 소스 파일로부터 설치되었기 때문에 아파치를 실행하는 파일도 조금 복잡한 위치에 놓여 있습니다. /usr/local/apache/bin 디렉토리에 있는 apachectl 파일이 아파치 데몬의 실행 파일입니다. start 옵션을 주어 아파치 데몬을 시작합니다.
# /usr/loca/apache/bin/apachectl start ☜ /usr/local/apache/bin/apachectl start: httpd started # |
7. 아파치 데몬이 가동중인지 ps 명령으로 프로세스를 확인합니다.
# ps -ef | grep apache root 2171 0.0 1.4 4512 1812 ? s 01:23 0:00 /usr/local/apache nobody 2172 0.0 1.4 4568 1856 ? s 01:23 0:00 /usr/local/apache nobody 2173 0.0 1.4 4568 1856 ? s 01:23 0:00 /usr/local/apache nobody 2174 0.0 1.4 4568 1856 ? s 01:23 0:00 /usr/local/apache nobody 2175 0.0 1.4 4568 1856 ? s 01:23 0:00 /usr/local/apache nobody 2176 0.0 1.4 4568 1856 ? s 01:23 0:00 /usr/local/apache root 2192 1.0 0.5 2524 680 pts/3 s 01:26 0:00 grep apache # |
만약, 프로세스가 없는 경우,
/usr/local/apache/logs/error_log 를 확인하여 오류내역을 확인한 후,
필요에 따라 /usr/local/apache/conf/httpd.conf 의 오류가 발생하는 부분의 LoadModule 을 주석제거한 후, 저장하여
# /etc/init.d/httpd start 를 재수행하고,
# ps -ef|grep httpd 로 프로세스를 재확인한다.
8. 이번에는 웹 브라우저를 통해서 확인해 보겠습니다. 모질라 웹 브라우저의 주소에 리눅스 서버의 IP 주소인
192.168.0.1을 입력하면 레드햇 리눅스 7.2의 아파치 웹 서버 테스트 페이지와는 조금 다른 테스트 페이지를 볼 수 있습니다.
9. 여기서 끝난 게 아닙니다. PHP가 제대로 작동하고 있는지 알아봐야죠. 테스트를 위해서 웹 서버에 파일을 하나 올려 봅니다.
아까 DocumentRoot 항목으로 지정한 /usr/local/apache/htdocs 디렉토리에 PHP파일을 하나 만들어 보겠습니다. 파일 이름은 test.php로 하죠.
# vi /usr/local/apache/htdocs/test.php |
10. 파일 내용은 아래와 같이 단순합니다. PHP를 공부하면 더 잘 알 수 있겠지만 phpinfo() 함수는 PHP와 웹 서버에 관련된 모든 정보를 테이블 형식으로 보여 주는, 테스트용으로는 그만인 함수입니다.
<? echo "이글이 보이냐?"; phpinfo(); ?> |
11. 파일을 저장하고 모질라 웹 브라우저를 실행합니다. 주소 창에 다음과 같이 리눅스 서버의 IP 주소와 더불어 새로 생성한 test.php 파일을 입력합니다.
12. 클라이언트인 윈도우에서도 테스트합니다. 인터넷 익스플로러를 이용해서 리눅스 서버에서와 같은 방법으로 테스트 합니다.
13. 테스트가 성공적으로 끝났으면 리눅스를 부팅할 때마다 APM을 서비스하기 위해 아파치, MySQL 데몬을 띄어 주어야 합니다. 단골 손님인 ntsysv가 아닌 파일 편집을 이용합니다. 리눅스가 부팅할 때 반드시 반드시 읽어 내는 파일인 /etc/rc.d/rc.local 파일에 아파치와 MySQL 정보를 추가합니다.
# vi /etc/rc.d/rc.local ☜ |
14. 전에 IP 메스커레이드 기능을 활용하면서 ipchains 정보를 입력한 적이 있습니다. 여기에 아파치 시작 명령과 MySQL 실행 명령을 입력해 주면 다음 부팅할 때 부터는 자동으로 웹 서버 데몬과 MySQL 데몬이 실행될 것입니다.
#!bin/sh
#
# This script will be executed *after* all the other init scripts.
# you can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
/usr/local/apache/bin/apachectl start
cd /usr/local/mysql/
./bin/safe_mysql &
|
2.7. 자주 나오는 질문
1. APM 설치시 주의사항
APM을 연동해서 설치한다는 것은 결국 아파치, PHP, MySQL의 세 프로그램을 설치하면서 서로의 설치 위치를 인식 할 수 있도록 해 주는것을 말합니다.
그래서 설치 순서가 틀리거나 철자 하나를 잘못 입력하면 설치에 실패할 수 있습니다. 여러분이 더욱 주의를 기울여 설정할 필요가 있습니다.
2. ./script/mysql_install_db 명령을 입력할 때
Sorry, the host '___________' could not be looked up please configure the 'hostname' command to return a correct hostname
If you want to solve this at a later stage, restart this script with the --force option이라는 메시지와 함께 mysql이 설치되지 않으면 다음의 명령으로 hostname을 다시 정의해 주고 /script/mysql_install_db명령을 다시 입력하여 설치하면 됩니다.
3. mysql 설치가 안돼요
# ./safe_mysql & [1] 20873 # chonw: mysql: 잘못된 사용자 Starting mysqld daemon with databases form /apm/mysql/data 020221 16:56:09 mysqld ended . . . |
위와 같은 에러 메시지가 생기면 다음과 같이 사용자와그룹을 추가합니다.
# groupadd mysql # useradd -g mysql mysql # |
그런 다음 mysql의 data 디렉토리의 소유권과 그룹을 위에서 추가한 mysql로 변경합니다.
# chown -R root /usr/local/mysql # chown -R mysql /usr/local/mysql/data # chgrp -R mysql /usr/local/mysql # chown -R root /usr/local/mysql/bin # |
●참고로 mysql의 계정과 셀 계정의 루트는 독립적인 것입니다. mysql의 root 사용자는 mysql의 슈퍼 사용자와 권한을 갖지만 리눅스 서버의 root 권한을 갖는 것은 아닙니다.
이제 다음과 같이 입력하시면 mysql 데몬을 구동할 수 있습니다.
# ./bin/safe_mysqld --user=mysql & |
'Linux > CentOS' 카테고리의 다른 글
CentOS 6.3 APM 설치 (0) | 2012.03.07 |
---|---|
CentOS 6.2 APM ( http 2.2.22, mysql 5.5.20, php 5.3.10) 설치 (0) | 2012.03.07 |
웹서버 세팅에 관한 문서1 (0) | 2012.03.06 |
CentOS phpMyAdmin 설치 (0) | 2012.03.05 |
CentOS6 Apache+PHP+MySQL (0) | 2012.03.05 |