커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > Unix/Linux 처음 시작하기 도움말
검색 : 사이트 WHOIS 웹서버 종류

리눅스 배포판(배포본) (26)
OS 설치 (10, 글 4, 자료 8)
매뉴얼 / 맨페이지 (8, 자료 2)
FreeBSD, OpenBSD (*BSD) (17, 글 1, 자료 6)
GNU / GPL(General Public License) (4, 자료 3)
명령어 사용하기 (10, 글 5, 자료 12)
정규 표현식(정규식) (5, 자료 3)
FAQ / 리눅스,유닉스 일반 (4, 자료 4)
OS간 비교 / 대체 프로그램 비교 (9, 자료 3)

  Apache PHP Mysql 연동 작성일 : 2007/02/23 12:00
 
  • 글쓴이 : 류범룡
  • 조회수 : 10195
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      ======================================================================================
    관련 configure option은 필요한 옵션 확인하셔서 추가하셔야 한 다는걸 잊으시면 안됩니다.
    ======================================================================================
    커피닉스 싸이트에 APM 설치 관련 내용이 없더군요.
    아마도 APM은 특별하게 규정을 짓기가 애매한 사항이 많아서 그러리라 보여집니다.
    예전에 써 두었던 내용 그대로 올립니다.
    확인해 보세요. selinux가 올라가면서 신경써 줘야할 부분이 생기더군요.
    오랜만에 APM을 설치하면서 적어 두었던 부분입니다.
    (서버를 못 만지다 보니.. 심심할때.. 한번 해봤습니다.)

    ** worker.c 에서 '#define DEFAULT_SERVER_LIMIT 1024' 수정후 설치 추가 **



    Apache, PHP, Mysql 연동 설치

    작성자 : 류범룡
    작성일 : 2005년 1월 5일
    추가작성일 : 2005년 1월 12일
    추가수정일 : 2005년 12월 22일
                      2006년 11월 20일
                      - os version : redhat 9.0 -> fedora4
                      - apm version 변경
                      - 다운로드 path 변경.
                      - mysql : binary 설치에서 --> source 설치로 변경.
    설치 환경 : fedora 4
    설치 버젼 : apache 2.0.59 / php 5.2.0  / mysql 5.0.27


    다운로드
    apache -> http://apache.org

               -> # wget http://ftp.kaist.ac.kr/pub/Apache/httpd/httpd-2.0.59.tar.gz

    php -> http://php.net

               -> # wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/kr.php.net/mirror

    mysql -> http://mysql.com
               -> # wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.27.tar.gz/from/http://mysql.new21.com/


    # mysql 설치 #
    :mysql은 세가지 설치 방법이 있다. binary, rpm, source이 있다.

    - binary : binary는 해당 운영체제에 맞게 미리 컴파일된 것을 말한다. tar로 묶여 있으며, tar를 푸는것으로 곧바로 사용이 가능하다. 사용하기위한 내용은 tar를 풀고, 해당 디렉토리의 설치 문서를 읽으면 나온다.(해당 운영체제에 최적화 된거라고 한다. 대부분이 binary를 사용하는 추세이다.)

    - rpm (RedHat Package manager): rpm 패키지는 소스 패키지, 바이너리 패키지로 구분 되어 진다. 소스 패키지는 '.src.rpm' 로 끝나며, 바이너리 패키지(rpm 버젼)을 만들기 위해 사용되어진다. 바이너리 패키지는 '.i386.rpm'이나 '.noarch.rpm' 로 끝나며, 위의 바이너리와 같이 컴파일, 링크 완료, 실행파일들이 포함되어 있어서, 일일이 소스를 컴파일해주고, PATH 및 실행 파일을 옮겨줄 필요 없이 실행이 가능해진다. (다른 의문 사항은 rpm 을 찾아서 읽어보면 된다.)

    - source : source 말그대로 source 이며, 컴파일해서 사용하면 된다. 설치 방법은 source directory 안의 설치 문서를 읽어 보면 나온다.

    * mysql은 설치가 쉽고, 운용체제에 최적화된 binary를 사용한다.(모든 프로그램에서 binary로 설치하는것은 아니다.) mysql는 특별히 binary가 따로 존재하고, 다른 패키지에서 binary란, 흔히 rpm을 말한다. (이번 버젼에서는 source 설치를 합니다. )


    1. 기존에 설치되어 있는 rpm 패키지를 삭제해야합니다.(rpm으로 미리 설치도어 있는경우)
        --> rpm으로 설치시 기본적으로 server, client, dev 가 설치된다.

              (server,client 는 설명이 필요하지 않으며, dev는 development 를 포함하는것이다.)


    # rpm -qa | grep mysql                <-- rpm으로 설치 되어 있는지 확인.
    # rpm -e --nodeps mysql-devel-xxx        <-- 존재 하면 삭제
    # rpm -e --nodeps mysql-server-xxxx      <-- 존재 하면 삭제
    # rpm -e --nodeps mysql-client-xxxx        <-- 존재 하면 삭제


    * 삭제할 패키지는 정해져 있는게 아닙니다. rpm -qa 를 통해 확인후 지우시면 됩니다.


    2. 다운 로드

    # cd /usr/local/src
    # wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.27.tar.gz/from/http://mysql.new21.com/


    * # wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.27.tar.gz/from/http://mysql.new21.com/ 에서 다운로드 받으시면 됩니다. 원하시는 버젼을 mysql -> http://mysql.com에서 확인후 받으세요! 다운로드는 "/usr/local/src/mysql" 받습니다. 임의로 변경하셔도 무방합니다.



    3. 사용자 추가 / DB 생성 / DB 구동 (설치 문서 " /usr/local/src/INSTALL-SOURCE ")

    # groupadd mysql
    # useradd -g mysql mysql

    # cd /usr/local/src/

    # wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.27.tar.gz/from/http://mysql.new21.com/

    # tar xvfz mysql-5.0.27.tar.gz

    # cd mysql-5.0.27
    # ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr --with-pthread --enable-thread-safe-client
    # make ; make install
    # ./support-files/my-medium.cnf /etc/my.cnf
    # cd /usr/local/mysql
    # bin/mysql_install_db --user=mysql
    # chown -R root .
    # chown -R mysql data
    # chgrp -R mysql .
    # bin/mysqld_safe --user=mysql &

    # cd /usr/local/src/mysql-5.0.27
    # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    # chkconfig --add mysqld
    # chkconfig --level 3 mysqld on
    # chkconfig --level 5 mysqld on
    # chkconfig --list mysqld



    ** 설치 옵션의 "--enable-thread-safe-client" 는 꼭 붙여 줘야 한다. apache compile시 기본적으로 thread mode로 설치가 되기 때문에 위의 옵션을 주지 않을 경우 연동이 되지 않고, php configure 시에 mysql-client 에러가 발생한다." **



    * mysql은 기본적으로 mysql 이라는 사용자로 구동되어집니다. 그래서 mysql이란 사용자를 만들어주고, 그에 맞춰서 실행해 주는것이죠. root로 실행 하고자 하신다면
    # bin/mysql_install_db --user=mysql &<-- Db 생성을 해 줘야 합니다. /usr/local/mysql/data 폴더가 생성됩니다.
    # bin/mysqld_safe --user=root & (root로 실행 하려고 할때, 아무것도 없을 때에는 mysql user로 구동되는 겁니다.)


    * mysql 사용자를 사용 안 하실경우에는 " #useradd mysql " 을 하실 필요가 없습니다.

    확실히 아셔야 할것은 " # bin/mysqld_safe & " 여기서는 mysql을 기준으로 합니다. "bin/mysqld_safe & " 만 하신다면, default로 mysql 계정으로 실행(bin/mysqld_safe --user=mysql &)하는거와 동일합니다.




    4. /etc/my.cnf 작성

    http://dev.mysql.com/doc/mysql/en/Server_options.html 에 가면 확인 가능하다.



    5. 보안을 위한 mysql 사용자 막기!

    # usermod -s /bin/nologin mysql
    # passwd -l mysql

    * fedora 4 에서는 /bin/nologin 라는 빈 shell이 있다. 이 빈 파일을 사용자 shell로 지정하는것이죠. 로깅이 불가능하겠죠? shell을 부여 받지 못하는것이니까요. 추가적으로 password에 lock을 걸어서 사용을 못하게 막았습니다. 명령 설명을 man page를 참조하세요! 무한한 파워의 man page!!


    6. 부팅시 자동으로 실행하기

    # cp /usr/local/src/mysql-5.0.27/support-files/mysql.server /etc/rc.d/init.d/mysqld
    # chkconfig --add mysqld
    # chkconfig --level 3 mysqld on
    # chkconfig --level 5 mysqld on
    # chkconfig --list mysqld

    * 혹 다른 위치에 mysql 설치 디렉토리를 설치 했다면, vi /etc/init.d/mysqld 를 열고, basedir= 부분에 그 경로를 적어 주셔야합니다. 위 처럼 /usr/local/mysql 이라면, 고치실 필요는 없습니다.


    참고
    /usr/local/src/mysql-5.0.27/INSTALL-SOURCE

    < 모든 설치 관련 내용은 다운 받으신 소스 파일안의 install 문서나 README 파일에 다 들어 있습니다. 이 점 꼭 기억하세요! >


    # Apache 설치 #


    1. 기존에 설치된 rpm 제거 <-- fedora 4 설치시 설치 하셨다면, 삭제 하세요!

    # rpm -qa | grep httpd     <-- rpm으로 설치가 되어 있는지 확인
    # rpm -e --nodeps httpd-devel-xxxx    <-- 있으면 삭제
    # rpm -e --nodeps httpd-xxxx       <-- 있으면 삭제

    * 없으면 당연히 삭제할 필요도 없다. 두개가 꼬이는 경우가 발생하기때문에 필히 삭제해줘야 한다.


    2. apache 소스 다운 로드
    # cd /usr/local/src
    # wget http://ftp.kaist.ac.kr/pub/Apache/httpd/httpd-2.0.59.tar.gz

    * wget http://ftp.kaist.ac.kr/pub/Apache/httpd/httpd-2.0.59.tar.gz에서 다운 받을수 있다. /usr/local/src에 임의로 다운 받았다. 사용자 편의에 의해 바꾸어도 상관 없다.


    3. 압축풀고, 설치하기
    # cd /usr/local/src

    # wget http://ftp.kaist.ac.kr/pub/Apache/httpd/httpd-2.0.59.tar.gz
    # tar xvfz httpd-2.0.59.tar.gz
    # cd httpd-2.0.59
    # cd server/mpm/worker
    # vi worker.c       <-- #define DEFAULT_SERVER_LIMIT 16  --> 1024 로 수정!
    # ./configure --prefix=/usr/local/apache --enable-mods-shared=most --with-mpm
    # make ; make install

    *위의 내용중 어려운것은 없을것이다. 옵션에 대한 궁금증은 가지고 있을것이다. 이에 대한 설명을 곁들이겠다. 옵션 설명에 앞서 여타 다른 문서에서 적어 주는 옵션을 먼저 적어 보겠다.

    # ./configure --prefix=/usr/local/apache --enable-rule=SHARED_CORE --enable-modules=so --enable-so --with-mpm  <-- 흔히 많이 적어 놓는 옵션이다.

    로써 --enable-rule=SHARED_CORE 와 --enable-modules=so --enable-so 라는 옵션이 있음이 보일것이다. 사뭇 다른 옵션들땜에 이상하다 생각하셨을지 모르나, 기존 문서와 여타 다른 문서는 옵션이 중복되어 있다. 아파치 2.0 이상 부터는 DSO를 사용하기 위해 --enable-so 만 붙여 주면 된다. 얘기가 길어질거 같다. 기존의 옵션은 쓸모 없는 옵션들이라는것이다. --enable-rule=SHARED_CORE 는 아파치 1.3 버젼에서 DSO modules 인 mod_so 를 올리기 위한 옵션이었고, --enable-modules=so 는 동적(DSO)가 아닌 정적으로 mod_so 모듈을 올리겠다는 말이다. mod_so는 core 와 함께 정적으로 올라가야하는 모듈이다. 아파치 2.0에서는 enable-so 라는 옵션으로 mod_so 모듈을 올려준다. 즉, --enable-rule=SHARED_CORE는 더이상 필요치 않는 옵션이며,(2.0 에서 ./configure --help 하고 보라. 없어졌음을 알수 있을것이다.) --enable-modules=so는 --enable-so 라는 옵션으로 쓸모가 없어졌다고 볼수 있다. 그러면 범룡이가 쓴 옵션에서는 왜 enable-so가 없느냐? 그건 간단하다. --enable-mods-shared=most 옵션(동적으로 올릴거 지정해준다.)을 붙이면 --enable-so 가 자동으로 붙기 때문이다. 즉, --enable-mods-shared=most 하나면 다 해결 되는것이다. DSO 란 LoadModule 를 이용해서 동적으로 모듈을 올리는걸 말한다. --enable-mods-shared=most 이 옵션을 적어 주면, 대부분의 apache 옵션들이 LoadModule 문법에 의해 동적으로 올라가 있다.(httpd.conf 를 확인해 보아라.)
    --with-mpm 옵션은 더이상 설명하기가 벅차다.(지금 1월6일 새벽 4시 50분이다. 딴짓하다가 새벽에 완성중) 아파치 메뉴얼에서 mpm을 참조하라 이건 특별한 설명도 필요치 않다. 자세하게 나와 있기 때문이다. http://httpd.apache.org/docs-2.0/mpm.html를 읽어 보라.


    4. library PATH 잡아주기

    # echo "/usr/local/apache/lib" >> /etc/ld.so.conf
    # echo "/usr/local/apache/modules" >> /etc/ld.so.conf
    # ldconfig

    * 명령어나 프로그램에서 라이브러리가 필요할때 찾는 PATH를 기록해줘야한다. 기존에는 /usr/local/apache/lib 라는 경로가 지정되어 있지 않기 때문에 못 찾는 수가 발생한다. 미연에 방지 하기 위해서 적어주는 습관을 들이는게 좋다. APM 설치시에는 발생하지 않지만, 실질적으로 그러한 문제가 발생하고 있다. 프로그램 설치후 꼭 ld 에 library 경로를 적어주기 바란다.


    5. 자동 실행

    # vi /etc/rc.d/rc.local
    -------------------------------------
    # apache start |
    /usr/local/apache/bin/apachectl start |
    -------------------------------------
    을 추가 시켜라.

    * 부팅 과정에서 rc 맨 마지막으로 rc.local의 내용을 수행한다. 즉, 부팅때 자동으로 apachectl start 명령어가 run 하게 된다.


    # php 설치 #

    1. php 다운 받기

    # cd /usr/local/src
    # wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/kr.php.net/mirror
    * wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/kr.php.net/mirror 에서 다운 받을수 있다. /usr/local/src 에 다운 받았다.


    2. 압축 풀고, 설치 하기,


    # cd /usr/local/src
    # tar xvfz php-5.2.0.tar.gz
    # cd php-5.2.0
    # ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/apache/conf --with-gd --with-zlib

    # make ; make install
    # cp php.ini-dist /usr/local/apache/conf/php.ini



    * 옵션이 간단하다. 기존에 나와 있는 여러 문서의 옵션들 또한 중복된것이 많다. 자세한것은 질문이 올라온다면 올리겠고, (배쨈정신) 간단히 여기에 지정된 옵션만을 설명하겠다.
    --with-apxs2
    이 옵션은 외부 모듈인 php가 컴파일시 apache에 동적으로(DSO - mod_so modules)로 올라가기 위해 apxs 라는 명령어를 사용하여야 한다. apache내의 모듈의 경우에는 apxs 명령어가 필요 없지만, 아파치 외의 모듈을 올리기 위해서는 apxs 라는 명령어가 있어야 한다. 즉, php에게 apxs 위치를 지정해주는것이라고 보면 된다.
    --with-config-file-path
    이 옵션은 php의 config file의 위치를 지정해주는것이다. php.ini 위치를 지정해주는것이다.
    --with-gd
    이 옵션은 gd지원을 포함한다.gd는 동적인 그래픽을 지원하는것.

    --with-zlib
    이 옵션은 zlib지원을 포함한다. 파일압축알고리즘이다.

    --with-iconv  : 5.2.0에서는 default 로 올라간다. 옵션을 제외 시켰다.
    이 옵션은 character 변환 라이브러리이다. 유니코드로 변환하는것을 말하며, 이는 개발자이 개발함에 있어 꼭 필요한 사항이다. 유니코드로 변환되는 시점에서 필히 해줘야하는 서비스중 하나이다.


    * 혹, gd / zlib / iconv / zend / freetype 등을 최신걸로 사용하기를 바란다면, 따로 설치후 ./configure 시 지정해주면 된다. 강좌 요청이 있으면 올리겠다.  




    ** APM 연동시 libphp5.so 가 selinux 때문에 load 되지 않는다.

    ** # chcon /usr/local/apache/modules/libphp5.so -t shlib_t  <-- 꼭 해줘라.




    3. 설치 확인 및 httpd.conf 와 php.ini

    # cd /usr/local/apache/modules
    # ls -al libphp5.so
    # vi /usr/local/apache/conf/httpd.conf
    ---------------------------------------------------
    LoadModule 문법 맨 뒤에
    LoadModule php5_module modules/libphp5.so
    존재여부 확인후 없으면 추가 시킨다.(있을것이다.)
    AddType 문법 뒤에
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps
    를 추가 시킨다.
    ---------------------------------------------------
    # cp /usr/src/APM/php-5.0.3/php.ini-dist /usr/local/apache/conf/php.ini
    # vi /usr/local/apache/htdocs/index.php
    ---------------------------------------
    <?
    phpinfo();
    ?>
    ---------------------------------------

    http://localhost/index.php

    화면이 뜨는가? 성공 하였다.

    * 생각해 볼것. DSO와 apxs의 관계? DSO는 동적 공유 객체 이다. 즉, 정적인것이 아니라, 확장자 so를 가지며(다른 여타의 확장자도 가능하기는하다), 실행중인 서버에 모듈을 로딩 시킬수 있는 장점이 있다. 즉, 제 3자가 만든 모듈을 실행중에 로드 시킬수 있도록 가능하게 해주는것이 DSO이고,apxs는 확장 모듈을 컴파일하고, 설치하는도구이다. 즉, 위의 apache에서는 제3자의 모듈(php)을 로드시키기 위해 DSO를 enable 시켰고, php에서는 apxs를 지정해줘서, 컴파일시 libphp.so를생성준다. 즉, 생성된 libphp.so는 apache configure file(hpptd.conf)에 LoadModule로서 로딩시켜주게 되는것이다.
    (관련 주소 http://httpd.apache.org/docs-2.1/ko/programs/apxs.html) <-- DSO와 apxs의 관계


    * 간단하게 APM 연동이 이루어졌다. 테스트를 해 보기 바란다. 필요한 옵션이 없다고, 힘들어 하지마라. 다시 컴파일 해주면 되지
    않는가? 재 컴파일하는건 어렵지 않다. 위의 옵션들은 최소의 필요 옵션이라고 보면 된다. 물론, 최상이 될수도 있다.


    기존에 올렸던 APM 설치가 하도 오래 되어서.. 이번에 fedora 4로 해서 문서를 작성해 보았습니다.
    오류나 수정할 것이 있을시에는 언제든지 글 남겨 주세요.
      커피닉스 카페 최근 글
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Mobile 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Web Front 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Server 개발 팀장을 모십니다.
    [12/21] 브라우저별 SHA1 퇴출 시점
    [09/15] [구인] 시스템엔지니어 (경력)
    [08/05] Re: 칼리리눅스 텔넷관련
    [08/04] 칼리리눅스 텔넷관련
    [06/29] 또 다른 무료 SSL 인증서, Let's Encrypt
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~