서버 APM setup
apache 1.3.x 모듈 디렉토리 /usr/local/apache/libexec
apache 1.3.x 웹루트 디렉토리 /usr/local/apache/htdocs
apache 1.3.x CGI 웹루트 디렉토리 /usr/local/apache/cgi-bin
apache 1.3.x 실행파일 디렉토리 /usr/local/apache/bin
APM1을 삭제하지 않고 옮겨놓는 방법으로 진행
# mkdir APM2
# cd APM2 <--여기에 APM2파일을 업로드
# mkdir oldAPM1
# /etc/init.d/mysqld stop mysql 중지명령
# apachectl stop apachet 중지명령
# mv /usr/local/mysql oldAPM1/
# mv /usr/local/apache/ oldAPM1
# mv /usr/local/php oldAPM1
# mv /etc/my.cnf oldAPM1
# mv /etc/init.d/mysqld oldAPM1
# rpm -q cmake -q옵션을 cmake가 있는지 확인
---cmake----
2-3. cmake 압축해제
# tar xzf cmake-3.0.1.tar.gz
2-4. cmake 환경설정
- bootstrap 을 실행해도 된다.
# cd cmake-3.0.1
# ./configure
2-5. cmake 컴파일
# make
2-6. cmake 설치
# make install
2-7. cmake 설치 확인
- 설치된 파일들을 확인한다.
# ls /usr/local/bin
ccmake cmake cpack ctest
# ls /usr/local/doc
cmake-3.0
# ls /usr/local/share
... cmake-3.0 ...
2.8 부분은 세팅이 되어있다면 할 필요가 없다
---mysql 설치---
cd APM2 디렉토리에서
3-1. mysql 필요 패키지 설치
- ncurses-devel 패키지가 없다면 설치한다.
# rpm -q ncurses-devel
# yum -y install ncurses-devel(ncurses-devel 패키지나 출력되면 생략)
3-3. mysql 압축해제
# tar xzf mysql-5.5.28.tar.gz
# cd mysql-5.5.28
3-4. mysql 환경설정
- 환경설정이 configure -> cmake 로 변경되어서 cmake 를 이용한다.
cmake \
-DCMAKE_INSTALL=/usr/local/mysql \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306
3-5. mysql 컴파일
# make
3-6. mysql 설치
# make install
3-7. mysql 설치 확인
# ls /usr/local/mysql
# ls /usr/local/mysql/bin
3-8. mysql 세팅
- 소스파일에는 support-files 디렉토리에 설정파일 및 스크립트 파일을 제공하므로 이를 이용해서 시스템에 복사한다.
# cd support-files
- mysql 설정파일을 /etc/my.cnf 에 복사한다.
- 설정내용은 수정해서 넣고 자신의 메모리에 맞는 설정파일을 넣어둔다.
- 메모리 내용은 파일에 명시되어 있다.
# cp my-huge.cnf /etc/my.cnf
- 설정파일을 심볼릭 링크한다. (옵션)
# ln -s /etc/my.cnf /etc/mysql.conf
- 실행스크립트를 복사한다.
# install -m 700 mysql.server /etc/init.d/mysqld
- 부팅시 mysql 데몬을 자동으로 실행할 수 있도록 등록하고 확인한다.
# chkconfig --add mysqld
# chkconfig --list mysqld
- mysql 을 구동시킬 사용자를 생성한다.
- cmake 옵션의 경로를 맞추어 줘야 한다.
-DMYSQL_DATADIR=/usr/local/mysql/data \
# useradd -r -M -u 27 -d /usr/local/mysql/data -s /bin/false mysql
- MySQL DBMS의 실행파일들을 실행하기 위해 심볼릭링크를 생성
# ln -sf /usr/local/mysql/bin/* /usr/bin
- DataBase 초기화 작업을 한다.
- --datadir 의 경로는 cmake 옵션의 경로에 설정한 값으로 해야 한다.
- -DMYSQL_DATADIR=/usr/local/mysql/data
# /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
- 생성된 데이터 디렉토리의 모든 파일들을 mysql 사용자의 권한으로 모두 변경한다.
- 경로는 cmake 옵션의 경로에 설정한 값으로 해야 한다.
-DMYSQL_DATADIR=/usr/local/mysql/data
# chown -R mysql.mysql /usr/local/mysql/data
- mysql 데몬을 실행한다.
# /etc/init.d/mysqld start
- mysql 포트(3306)를 확인한다.
# netstat -nltp | grep 3306
- mysql 접속을 한다.
# rm -f ~/.my.cnf
# mysql
--apache---
# tar xzf openssl-1.0.1i.tar.gz
# cd openssl-1.0.1i
# ./config \
--prefix=/usr/local/openssl \
--openssldir=/usr/local/openssl \
threads zlib shared
# make
# make test
# make install
# vi /etc/ld.so.conf
-- /etc/ld.so.conf --
/usr/local/openssl/lib
-- /etc/ld.so.conf --
- ldconfig 를 실행해 공유라이브러리를 인식시킨다.
# ldconfig
- 아래 내용이 출력되면 된다.
# strings /etc/ld.so.cache | grep openssl
- pcre 설치
- 여기서는 옵션없이 설치하고 아래 옵션은 확인해볼 것
--enable-pcregrep-libz link pcregrep with libz to handle .gz files
--enable-pcretest-libreadline
--enable-utf enable UTF-8/16/32 support (incompatible with --enable-utf)
# wget http://sourceforge.net/projects/pcre/files/latest/download?source=files
# tar xjf pcre-8.35.tar.bz2
# cd pcre-8.35
# ./configure
# make
# make install
# ls /usr/local/bin
... pcre-config pcregrep pcretest
4-2. apache 소스 다운로드
4-3. apr 설치
# tar xzf apr-1.5.1.tar.gz
# cd apr-1.5.1
# ./configure
# make
# make install
# vi /etc/ld.so.conf
-- /etc/ld.so.conf --
/usr/local/openssl/lib
/usr/local/apr/lib
-- /etc/ld.so.conf --
# ldconfig
- apr 이 설치된 디렉토리를 확인한다.
# ls /usr/local/apr/
4-4. apr-util 설치
# tar xzf apr-util-1.5.3.tar.gz
# cd apr-util-1.5.3
# ./configure --with-apr=/usr/local/apr
# make
# make install
# ldconfig
4-5. apache 압축해제
# tar xzf httpd-2.4.10.tar.gz
# cd httpd-2.4.10
4-6. apache 환경설정
# ./configure \
--prefix=/usr/local/apache \
--enable-mods-shared=all \
--enable-module=so \
--with-mpm=prefork \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-module=ssl \
--with-ssl=/usr/local/openssl \
--enable-ssl
4-7. apache 컴파일
# make
4-8. apache 설치
# make install
4-9. apache 설치 확인
# tree /usr/local/apache | more
- (mod_so) 모듈을 확인한다.
# /usr/local/apache/bin/httpd -l
4-a. apache 세팅
- 아파치의 실행파일들을 PATH 설정된 /usr/bin 에 복사한다.
# ln -s /usr/local/apache/bin/* /usr/bin
- /etc/httpd 로 빠르게 접근하기 위해서 / yum 으로 설치할때 맞춰주기 위해서 심볼릭 링크를 건다.
# ln -s /usr/local/apache /etc/httpd
- 부팅시 활성화 시키기 위해서 심볼릭 링크를 건다.
# ln -s /usr/local/apache/bin/apachectl /etc/init.d/httpd
- 설정파일을 /etc/httpd.conf 로 심볼릭 링크를 건다. (접근하기 쉽게)
# ln -s /usr/local/apache/conf/httpd.conf /etc/
# vi /etc/init.d/httpd
-- /etc/init.d/httpd --
#!/bin/sh
# chkconfig: 2345 65 35
# description: apache web server
:
:
(중략)
-- /etc/init.d/httpd --
- 서비스가 정확히 등록이 되었는지 확인한다.
# chkconfig --add httpd
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:of
- 아파치 웹서버를 실행한다. (3가지 모두 동일하다)
# apachectl start
or
# /etc/init.d/httpd start
or
# service httpd start
- 80 번 포트를 확인한다.
# netstat -nltp | grep 80
- 여기서는 임시로 세팅하는 것이므로 방화벽을 잠시 중지시킨다.
- 실무에서는 방화벽을 올리는 것이 맞는 것이다.
# iptables -F
- Host OS 의 브라우저에서 Linux 의 Guest OS 로 접속시 (httpd://192.168.56.101)
- It works! 가 출력되면 웹서버가 잘 설치된 것이다.
# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 08:00:27:37:94:FD
inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0
- 샘플 페이지 생성하기
- Host OS에서 httpd://192.168.56.101/ 접속해서 Hello~ webserver 가 출력되면 성공이다.
# echo "<center> Hello~ webserver </center>" > /usr/local/apache/htdocs/index.html
############################
## 5. GD library 설치하기 ##
############################
# yum -y install gd gd-devel libjpeg libjpeg-devel \
#####################
## 6. php 설치하기 ##
#####################
6-0. php 필요 패키지 설치
---------------------
- libxml2-devel 설치
---------------------
- libxml2-devel 관련 패키지를 설치해야 한다.
- 설치가 안되면 configure 에서 아래와 같은 오류가 나서 configure 가 중지된다.
- onfigure: error: xml2-config not found. Please check your libxml2 installation.
# yum -y install libxml2-devel
---------------------
- curl-devel 설치
---------------------
- configure 할때 --with-curl 옵션을 주었으므로 curl-devel 관련 패키지를 설치해야 한다.
- 설치가 안되면 configure 에서 아래와 같은 오류가 나서 configure 가 중지된다.
- configure: error: Please reinstall the libcurl distribution -
- easy.h should be in <curl-dir>/include/curl/
# yum -y install curl-devel
---------------------
- bison 설치
---------------------
다운로드 : http://www.gnu.org/software/bison
2014.9.28 최신버전 : bison-3.0.tar.xz
- 설치가 안되면 php-5.5.17 설치시 bison 쪽에서 에러가 발생되므로 bison을 소스로 설치했다.
-- bison 을 rpm 으로 설치하면 2.3 버전으로 설치되고 php 소스에서도 인식하지 못했다.
-- 그래서 2.3 rpm 버전을 삭제하고 bison 을 소스로 설치했다.
-- bison의 최신 버전인 bison-3.0 을 설치시 configure 쪽에서 bison 버전을 인식하지 못했다.
-- 그래서 다시 2.7 의 마지막 버전인 2.7.1 을 마이그레이션해서 설치했더니 인식을 했다.
-- 3.0 설치시 php 소스에서 인식하지 못한 메세지
-- checking for bison version... invalid
-- configure: WARNING: bison versions supported for regeneration
-- of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 2.3).
-- 2.7.x 설치시 php 소스에서 인식한 메세지
-- checking for bison... bison -y
-- checking for bison version... 2.7 (ok)
# yum remove bison-devel
# yum remove bison
# yum remove byacc-devel <-- 이 패키지는 없다.
# rpm -ql byacc
# ls -l /usr/bin/byacc
# yum remove byacc
# tar xzf bison-2.7.1.tar.gz
# cd bison-2.7.1
# ./configure
# make
# make install
# make installcheck
---------------------
- rec2 설치
---------------------
다운로드 : http://sourceforge.net/projects/re2c/files/re2c/0.13.7.5/
-- yum 으로는 설치가 안되서 소스로 설치했다.
-- 설치가 안되면 php-5.5.17 설치시 re2c 쪽에서 에러가 발생되므로 re2c를 소스로 설치했다.
-- re2c 가 설치가 안되었을 때 php 소스에서 인식하지 못한 메세지
-- checking for re2c... no
-- configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
-- re2c 가 설치 후 php 소스에서 인식한 메세지
checking for re2c... re2c
checking for re2c version... 0.13.7.5 (ok)
# tar xzf re2c-0.13.7.5.tar.gz
# cd re2c-0.13.7.5
# vi README
# ./configure
# make
# rm -f scanner.cc
# make install
--------------------------------------------------------------------
6-1. php 소스 다운로드
- 파일이 변조여부를 체크한다. (파일의 무결성)
# md5sum php-5.5.15.tar.gz
6-2. php 압축해제
# tar xzf php-5.5.15.tar.gz
# cd php-5.5.15
6-3. php 환경설정
-- php 를 설치하기 전에 반드시 gd 라이브러리를 설치한다.
-- --enable-maintainer-zts 옵션은 Apache2.4 에 Event MPM 모델을 위해서 필요한 것이다.
-- 만약 Apache2.4 가 Prefork 로 동작한다면 PHP를 재컴파일 해야한다.
# ./configure \
--prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-jpeg-dir \
--with-png-dir \
--with-curl \
--with-zlib-dir \
--with-gd \
--with-freetype-dir \
--with-iconv \
--with-zlib \
--with-openssl \
--with-pcre-regex \
--with-pear \
--enable-sockets \
--disable-debug \
--enable-ftp \
--enable-sysvsem=yes \
--enable-sysvshm=yes \
--enable-bcmath \
--enable-exif \
--enable-zip \
--enable-gd-native-ttf \
--enable-mbstring
6-4. php 컴파일
# make
6-5. php 테스트
# make test
6-6. php 설치
- --prefix 에 설정된 디렉토리에 설치한다.
# make install
6-7. php 설치 확인
- --prefix 에 설정된 디렉토리를 확인한다.
- 아파치 디렉토리에 php 관련 모듈(libphp5.so) 을 확인한다.
# ls /usr/local/php
# ls /usr/local/apache/modules/libphp5.so
6-8. php 세팅
- 실행파일을 PATH 경로에 설정된 디렉토리로 심볼릭 링크를 건다.
# ln -s /usr/local/php/bin/* /usr/bin
- php 설정파일 복사
- 설정파일은 2개가 존재한다. php.ini-development, php.ini-production
- 두 개의 내용은 약간 차이점이 있고 아래 명령어로 확인이 가능하다.
- # vimdiff php.ini-development php.ini-production
- 여기서는 php.ini-development 로 복사한다.
- 만약 예전 버전인 php 5.2.x 대로 설치한다면 설정파일이 php.ini-dist
- 로 되어있고 버전이 최선 버전일 경우에는 아래를 사용하면 된다.
# cp php.ini-development /usr/local/php/lib/php.ini
# ln -s /usr/local/php/lib/php.ini /etc/php.conf
- timezone 을 설정한다.
- phpinfo() 함수에서 확인하면 에러가 발생하므로 지역을 세팅해야 된다.
# vi /etc/php.conf
or
# vi /usr/local/php/lib/php.ini
-- /usr/local/php/lib/php.ini --
date.timezone = Asia/Seoul
-- /usr/local/php/lib/php.ini --
- 웹서버 설정파일에서 php 모듈이 올라왔는지 확인한다.
# vi /etc/httpd.conf
or
# vi /usr/local/apache/conf/httpd.conf
-- /usr/local/apache/conf/httpd.conf --
:
:
LoadModule php5_module modules/libphp5.so <-- 확인 (163번 라인)
:
:
(중략)
- index 페이지를 추가한다.
<IfModule dir_module>
DirectoryIndex index.html index.php <-- index.php 부분추가 (263번 라인)
</IfModule>
:
:
(중략)
- php로 인식할 확장자를 추가한다.
- 이 밑에 아래 내용을 추가 (391번 라인)
- phps 는 php 를 소스로 인식하는 설정인데 보안상 안쓰므로 주석만 처리한다
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .html <-- 추가
# AddType application/x-httpd-php-source .phps <-- 추가
-- /usr/local/apache/conf/httpd.conf --
- apachectl configtest 를 이용해서 웹서버 설정파일의 구문 오류를 검사한다.
- 아래와 같은 메세지가 출력되면 두가지 중 하나를 선택한다.
- usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
1. setup 을 해서 보안 설정을 중지시킨다.
- Firewall configuration =>
- Security Level: Disabled
- SELinux: Disabled
2. libphp5.so 의 권한을 변경한다. (생략)
* 해결책
shell> restorecon -R -v /usr/local/apache/modules
* 안될경우
shell> cd /usr/local/apache/modules
shell> restorecon -v libphp5.so
shell> chcon -t texrel_shlib_t libphp5.so
# /etc/init.d/httpd configtest
# /etc/init.d/httpd stop <-- restart 하면 php 파일이 다운로드 될 수 있으므로
- 웹서버를 재시작 한다.
# /etc/init.d/httpd start <-- stop 하고 start 한다.
- php Test Page 를 생성한다.
- 보안상 index.html에 추가하지 않고 abcd.html에 추가한다.
# cd /usr/local/apache/htdocs
# vi abcd.html
<?php
phpinfo();
?>
- Guest OS 의 IP 주소를 확인한다.
# ifconfig eth1
- Host OS에서 브라우저로 확인한다.
http://192.168.56.101/abcd.html
- phpinfo 페이지를 확인 후 Test Page를 삭제한다.
# rm -f abcd.html
- php 모듈을 확인한다.
# php -m
############################
## 7. phpmyadmin 설치하기 ##
############################
7-2. phpmyadmin 압축해제
- 파일을 웹루트 디렉토리에 압축을 해제하고 디렉토리명을 변경한다.
- 향후 디렉토리명을 외부에서 유추할 수 없도록 어렵게 변경한다.
# cd /usr/local/apache/htdocs/
# unzip phpMyAdmin-4.2.9-all-languages.zip
# mv phpMyAdmin-4.2.9-all-languages phpmyadmin
- Host OS에서 브라우저로 확인한다.
- 이때 undefined function 이라고 하면 php 에서 관련 모듈을 넣고 컴파일한다.
7-3. phpmyadmin 설정파일 복사 및 오류 메세지 해결
- 오류 메세지 해결 1
- 샘플 파일을 복사하면 로그인시 아래 오류 문구가 없어진다.
- "이제 설정 파일은 암호화 문자열(blowfish_scret) 을 필요로 합니다"
# cd phpmyadmin
# cp config.sample.inc.php config.inc.php
- 오류 메세지 해결 2
- 설정 파일에 $cfg['PmaNoRelation_DisableWarning'] = TRUE; 를 추가하면 오류 문구가 없어진다.
- "phpMyAdmin 설정 스토리지가 완전히 설정되지 않아, 일부 확장 기능들이 비활성화 된 상태입니다. "
# vi config.inc.php (확인)
-- config.inc.php --
:
:
/* Authentication type */
$cfg['PmaNoRelation_DisableWarning'] = TRUE;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
:
:
-- config.inc.php --
7-4. phpmyadmin 로그인
<SERVER>">http://<SERVER IP>/phpmyadmin/
- 관련 문서는 아래 URL을 참고한다.
http://phpmyadmin.net/home_page/docs.php
##################################
## 8. mysqli 동적 모듈 설치하기 ##
##################################
1. php 소스의 mysqli 디렉토리로 이동한다.
# cd APM2
# cd php-5.5.15/ext/mysqli
2. phpize를 실행한다.
# ls -l /usr/local/php/bin/phpize
-rwxr-xr-x 1 root root 4534 8월 19 16:40 /usr/local/php/bin/phpize
# /usr/local/php/bin/phpize
3. 환경설정을 한다.
# ./configure \
--with-php-config=/usr/local/php/bin/php-config \
--with-mysqli=/usr/local/mysql/bin/mysql_config
4. 컴파일을 한다.
# make test
# make
5. 모듈을 설치한다.
- modules 디렉토리를 만들고 모듈 파일을 복사해 준다.
# mkdir /usr/local/php/modules
# cp modules/mysqli.* /usr/local/php/modules
6. 설정파일을 등록한다.
- php.ini 에 아래처럼 수정하고 추가한다.
- extension_dir 의 위치는 719번이다.
# vi /usr/local/php/lib/php.ini
-- /usr/local/php/lib/php.ini --
:
:
;extension_dir = "./"
extension_dir=/usr/local/php/modules
extension=mysqli.so
:
:
-- /usr/local/php/lib/php.ini --
7. 아파치를 재시작한다.
# /etc/init.d/httpd restart
tomcat 연동시 APM2로 인해 업그레이드
connector 다시설치
# wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
# tar xzf tomcat-connectors-1.2.40-src.tar.gz
# cd tomcat-connectors-1.2.40-src
# cd native/
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install
# ll /usr/local/apache/libexec/mod_jk*
[root@localhost native]# ll /usr/local/apache/libexec/mod_jk* (mod_jk*의 위치 찾을수 없음)
ls: /usr/local/apache/libexec/mod_jk*: No such file or directory
[root@localhost native]# ll /usr/local/apache/modules/mod_jk* (mod_jk*의 위치 변경)
-rwxr-xr-x 1 root root 510603 Oct 16 13:39 /usr/local/apache/modules/mod_jk.so
#vi /usr/local/apache/conf/httpd.conf 에 들어가서
LoadModule jk~ modules/mod_jk*로 변경
ip 접속시 hello server 뜨면
# cd /usr/local/apache/htdocs
# rm -fv index.html
ip 주소접속시 forbidden 뜨면
# cd /home/tomcat
# vi /usr/local/apache/conf/httpd.conf 에 들어가서
215 <Directory />
216 AllowOverride none
217 Require all granted
# apachectl restart