====== APM 구축하기 ====== ===== APM이 뭐지? ===== Apache + Php + Mysql을 말한다. 솔직히 여기서 Mysql 대신에 Oracle 이 들어갈 수도 있고, Php 대신 JSP가 들어갈 수도 있겠지만, APM이라고 부르는 이유는 저 3개의 프로그램이 궁합이 잘 맞아서 인 것 같다. APM 설치는 리눅스 서버에 있어서 아주 기본적이다. 아주 간단한 개인 홈페이지에서 부터 웹 호스팅에 이르기까지 활용의 범위가 넓기 때문이다. 여기서는 기본적으로 APM설치를 해보고 간단한 설정을 알아볼 것이다. 좀더 세부적인 설정을 원한다면, 관련서적이나 관련 사이트를 참고하기 바란다. ===== 준비운동하기 ===== 참고로 이 문서는 Redhat 9 를 기준으로 작성하였다. 아래의 사이트에서 필요한 프로그램을 다운받는다. - APACHE http://httpd.apache.org/download.cgi - PHP http://kr.php.net/downloads.php - MYSQL http://www.mysql.com/downloads/index.html ===== 설치하기 ===== 설치는 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가 디렉토리 인덱스 파일로 설정되도록 한다. DirectoryIndex index.php index.html index.html 이번에는 위의 설정이 제대로 적용이 되었는지 테스트할 .php 파일을 하나 만든다. #vi /usr/local/program/apache/htdocs/test.php 아래의 내용을 입력한다. 자~아 이제 테스트를 위한 모든 준비는 끝났다. 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 # 호스트 이름을 적어줌 ... ... DirectoryIndex index.php index.html ... ... 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 연동이 제대로 되었는지 확인한다. ---- {{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(about|guestbook|todays)$/ }} ----