APM이 뭐지?
Apache + Php + Mysql을 말한다. 솔직히 여기서 Mysql 대신에 Oracle 이 들어갈 수도 있고, Php 대신 JSP가 들어갈 수도 있겠지만, APM이라고 부르는 이유는 저 3개의 프로그램이 궁합이 잘 맞아서 인 것 같다.
APM 설치는 리눅스 서버에 있어서 아주 기본적이다. 아주 간단한 개인 홈페이지에서 부터 웹 호스팅에 이르기까지 활용의 범위가 넓기 때문이다.
여기서는 기본적으로 APM설치를 해보고 간단한 설정을 알아볼 것이다. 좀더 세부적인 설정을 원한다면, 관련서적이나 관련 사이트를 참고하기 바란다.
준비운동하기
참고로 이 문서는 Redhat 9 를 기준으로 작성하였다.
아래의 사이트에서 필요한 프로그램을 다운받는다.
설치하기
설치는 Mysql → Apache → Php 순으로 한다.
Mysql 설치
옛날 버전에는 바로 설치가 가능했지만, 요즘들어서 mysql 라는 계정이 있어야 제대로 설치가 된다. 아마도 보안문제 때문이 아닌가 한다.
#groupadd mysql #useradd -M -s /bin/false -g mysql mysql #tar xzvf mysql-4.0.17.tar.gz #cd mysql-4.0.17 #./configure --prefix=/usr/local/program/mysql \ --localstatedir=/usr/local/program/mysql/data \ --disable-maintainer-mode \ --with-mysqld-user=mysql \ --enable-large-files \ --without-comment \ --without-debug \ --without-docs \ --without-bench \ --with-charset=euc_kr #make #make install
설치를 했으면, mysql 기본 DB를 만들기 위해서 다음의 스크립트를 실행시킨다.
#/설치디렉토리/scripts/mysql_install_db
Mysql 설치된 디렉토리와 DB 파일이 저장될 Data 디렉토리의 권한을 바꿔준다. 반드시 바꾸어주어야 한다. 그렇지 않으면, 나중에 제대로 동작하지 않는다.
#chown -R root:mysql /usr/local/program/mysql #chown -R mysql:mysql /usr/local/program/mysql/data
라이브러리에 등록한다.
#echo "/usr/local/program/mysql/lib/mysql" >> /etc/ld.so.conf #ldconfig -v | grep libmysqlclient
서버를 재시작했을때 자동으로 실행시키기 위해서 다음과 같이 합니다.
#cp /소스디렉토리/support-files/mysql.server /etc/rc.d/init.d #chmod +x /etc/rc.d/init.d/mysql.server #cd /etc/rc.d/rc3.d #ln -s /etc/rc.d/init.d/mysql.server S89mysqld #cd /etc/rc.d/rc0.d #ln -s /etc/rc.d/init.d/mysql.server K89mysqld
Mysql 데몬이 실행할 때 앞에서 만든 mysql 권한으로 실행되기 위해 –user=mysql 을 추가시킨다.
#vi /etc/rc.d/init.d/mysql.server
또한 한글 데이터 처리를 위해서 –language=korean 을 추가한다.
#Give extra arguments to mysqld with the my. file. this script may #be overwritten at next upgrade. $bindir/safe_mysql --user=mysql --language=korean --datadir=$datadir --pid-file=$pid_file &
RUNLEVEL 3에서 mysql.server 가 자동으로 실행하기 위해 등록한다.
#chkconfig --level 3 mysql.server
이젠 위에서 만든 mysql.server 가 제대로 실행되는지 테스트 해보자!
#/etc/rc.d/init.c/mysql.server start #ps -ax|grep mysql 1510 ? S 0:00 /bin/sh /usr/local/program/mysql/bin/mysqld_safe --user=mysql \ --language=korean --datadir=/usr/local/program/mysql/data \ --pid-file=/usr/local/program/mysql/data/localhost.localdomain.pid 1541 ? S 0:01 [mysqld] 4094 pts/0 S 0:00 grep mysql
Mysql을 설치하면 root 패스워드가 설정되어 있지 않다. 여기서 말하는 root는 시스템에서의 root가 아니다. Mysql에서의 root 이다. 혼동하면 안된다. root 패스워드을 지정하자.
#/usr/local/mysql/bin/mysql mysql mysql>update user set password=password('패스워드') where user="root"; mysql>FLUSH privieges; quit;
지정했으면, 제대로 설정이 되었는지 테스트한다.
#/usr/local/mysql/bin/mysql -u root -p Enter password: ****** (사실 보이지 않는다)
제대로 로그인이 되면, Apache 설치로 넘어가자!
Apache 설치
Apache는 비교적 설치가 간단하다. 따로 건드려 줄 부분이 없기 때문이다. 바로 설치해보자!
#tar xzvf apache_1.3.29.tar.gz #cd apache_1.3.29 #./configure --prefix=/usr/local/apache \ --enable-shared=max \ --enable-module=so #make #make install
다음에는 Php 이다.
Php 설치
PHP 역시 비교적 설치가 간단하다. 설치할 때 유의할 점은 많은 옵션을 선택할 수 있는 데, 몇 개는 라이브러리에 의존합니다. 옵션에 대한 더 자세한 정보는 PHP website documentation을 참고하기 바란다.
#cd /usr/local/src/php-4.3.4 #./configure --with-apxs=/usr/local/program/apache/bin/apxs \ --with-mysql=/usr/local/program/mysql \ --enable-track-vars \ --disable-debug \ --enable-ftp \ --with-trans-sid \ --enable-session \ --enable-xml #make #make install #cp /소스디렉토리/php.ini-dist /usr/local/lib/php.ini
방금 위에서 복사한 php.ini 파일이 php의 핵심파일이라고 할 수 있다. 추후에 php설정을 건드려줄 일이 있다면, 이 파일을 건드려주어야 한다.
이제는 웹 서버에서 php 파일을 볼 수 있도록 설정해주어야 한다.
#vi /usr/local/program/apache/conf/httpd.conf
다음의 부분을 찾아 주석을 풀어주거나, 없다면 추가한다.
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
index.php가 디렉토리 인덱스 파일로 설정되도록 한다.
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.html </IfModule>
이번에는 위의 설정이 제대로 적용이 되었는지 테스트할 .php 파일을 하나 만든다.
#vi /usr/local/program/apache/htdocs/test.php
아래의 내용을 입력한다.
<?phpinfo()?>
자~아 이제 테스트를 위한 모든 준비는 끝났다. Apache 데몬을 동작시키고, 웹 브라우저로 http://localhost/test.php 열어보자!
PHP 마크가 나오면서, 여러가지 환경변수들이 출력된다면, 제대로 연동이 된 것이다.
그 외
Apache를 자동으로 시작되게 설정하기
Apache 실행파일을 init.d 아래에 복사하고, 런 레벨을 등록해주면 된다.
#cp /usr/local/program/apache/bin/apachectl /etc/rc.d/init.d #chmod +x /etc/rc.d/init.d/apachectl #cd /etc/rc.d/rc3.d #ln -s /etc/rc.d/init.d/apachectl S90httpd #cd /etc/rc.d/rc0.d #ln -s /etc/rc.d/init.d/apachectl K90httpd
데이터베이스 보안을 위한 database와 user 추가하기
root 계정말고 일반 계정을 추가하고, DB에 퍼미션을 주는 방법이다.
#/usr/local/mysql/bin/mysqladmin create DB이름 #/usr/local/mysql/bin/mysql mysql mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on DB이름.* to user이름@localhost identified by '패스워드‘; mysql>FLUSH privileges; mysql>quit;
차후 버전들에서 변경된 것들
위의 문서들은 예전 버전의 설치 방법을 설명했었다. 여기서는 현재(2007.8.5) 최신의 APM 설치방법을 설명한다. 바뀐 부분을 중점적으로 기술하겠다.
내가 설치하려는 패키지들은 다음과 같다.
- httpd-2.2.4.tar.gz
- mysql-5.0.45.tar.gz
- php-5.2.3.tar.gz
Mysql 설치
여기서 따로 언급하지 않는 것은 위와 동일하다. 참고로 redhat 9 를 기반에서 설치한 것이다.
#./configure --prefix=/usr/local/program/mysql \ --localstatedir=/usr/local/program/mysql/data \ --with-mysqld-user=mysql \ --without-comment \ --without-debug \ --without-docs \ --with-charset=euckr # 변경됨
디비 생성시에 'mysql_install_db –user=mysql' 로 실행한다.
설치 후, mysql 데몬 시작 시에 아래와 같은 에러가 발생한다면,
#./mysqld_safe & [1] 24365 [root@localhost bin]# Starting mysqld daemon with databases from /usr/local/program/mysql/data STOPPING server from pid file /usr/local/program/mysql/data/localhost.localdomain.pid 090111 11:46:33 mysqld ended
localhost.localdomain.pid 파일을 열어서 에러 메세지를 확인한다.
090111 11:46:29 mysqld started 090111 11:46:29 InnoDB: Operating system error number 13 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. InnoDB: File name ./ibdata1 InnoDB: File operation call: 'create'. InnoDB: Cannot continue operation. 090111 11:46:29 mysqld ended
위와 같다면, 다음과 같이 실행한다.
#./mysql_install_db --user=mysql
Apache 설치
위와 동일하다
Php 설치
configure 에서 에러가 발생한다. redhat 9 버전에 설치된 libxml2, libxml2-devel 버전이 낮기 때문이다. http://rpmfind.net 에서 최신버전을 다운 받으면 된다.
여기서는 필자는 둘다 모두, 2.6.14-2 를 받았다. (libxml2-2.6.14-2.i386.rpm, libxml2-devel-2.6.14-2.i386.rpm)
#rpm -Uvh libxml2-*
설치 후에 다시 configure 를 실행한다. 이번에는 apache 와 연동되는 apxs 에 대한 에러이다. 위에서 설치한 apache 는 1.3.x 이고, 여기서 설치한 apache 는 2.x 이기 때문에 apxs 가 다르다.
#./configure --with-apxs2=/usr/local/program/apache/bin/apxs \ # 수정됨 --with-mysql=/usr/local/program/mysql \ --disable-debug \ --enable-ftp \ --enable-session \ --enable-xml \ --with-gettext
이제는 에러없이 수행될 것이다.
httpd.conf 수정
php 문법을 인식시키기 위해 설정파일을 수정해야 한다.
ServerName develop # 호스트 이름을 적어줌 ... ... <IfModule dir_module> DirectoryIndex index.php index.html </IfModule> ... ... AddType application/x-httpd-php .php AddType application/x-httpd-php .html # 추가됨 AddType application/x-httpd-php-source .phps ... ...
Ubuntu 및 Debian 에서 설치하기
데비안 기반의 배포판들이 그렇듯 너무나 간단하게 APM 을 설치할 수 있다. 옛날처럼 성능을 위해서 일일이 손 컴파일하는 시대는 지났다. 하드웨어 성능은 좋아지고, 상대적으로 가격은 저렴해졌다. 몇 번의 명령만으로 APM 을 설치해보자!
# apt-get install apache2 // apache 설치 # apt-get install libapache2-mod-auth-mysql // mysql 인증을 위한 모듈 설치 # apt-get install mysql-server mysql-client // mysql 설치 # apt-get install php5-common php5 libapache2-mod-php5 // php 설치 # apt-get install php5-mysql // php 와 mysql 연동을 위한 모듈 설치
이제 제대로 설정이 되었는지 확인을 해보자.
# /etc/init.d/apache2 restart # netstat -tap | grep mysql tcp 0 0 localhost.localdo:mysql *:* LISTEN 3909/mysqld
'phpinfo()' 를 이용하여 PHP 연동이 제대로 되었는지 확인한다.