1. MariaDB 설치
공식 미러를 통한 Maria DB 설치
아래 명령을 실행하여 공식 Repository로 부터 Maria DB를 설치한다.
# apt install software-properties-common
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu xenial main'
키를 가져오고 저장소가 추가되었으면, 다음 명령으로 Maria DB를 설치한다.
# apt update
# apt install mariadb-server
Maria DB 보안 설정
설치 후 DB접속 전에 Maria DB의 보안을 설정한다. (익명 사용자 및 Test DB 제거)
# mysql_secure_installation
Maria DB 연결
Maria DB 인스턴스에 접속한다.
로컬 사용자 추가
mysql> create user 'user'@'localhost' identified by 'password';
로컬 및 원격 사용자 추가
mysql> create user 'user'@'%' identified by 'password';
DB권한 설정
grant all privileges on [DB_NAME].* to 'user'@'%'; //특정 DB
grant all privileges on *.* to 'user'@'%'; //모든 DB
flush privileges;
Character set UTF-8설정
다음 내용을 /etc/mysql/my.cnf 에 추가한다.
[client]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
Maria DB restart
# service mariadb restart
2. Tomcat 9 설치
관련 파일 다운로드
다음 파일을 다운로드 한다.
Tomcat 9.0 : http://tomcat.apache.org/download-90.cgi
Tomcat Native: http://tomcat.apache.org/download-native.cgi
Tomcat Connector : http://tomcat.apache.org/download-connectors.cgi
apr: http://apache.mirror.cdnetworks.com/apr/apr-1.6.2.tar.gz
사용자 추가
Tomcat 구동 사용자를 추가한다.
# useradd -s /bin/false -d /usr/local/tomcat tomcat
의존성 파일 설치
설치를 위해 아래 파일을 먼저 설치한다.
# apt install libssl-dev libexpat1-dev
APR 설치
# tar zxvf apr-1.6.2.tar.gz
# cd apr-1.6.2
# ./configure --prefix=/usr/local/apr
#make && make install
만약 cannot remove 'libtoolT': No such file or directory 에러 발생 시 아래 명령 후 다시 실행
cp -arp libtool libtoolT
JDK 설치
오라클 공식 Repository를 통해 JDK 를 설치한다.
# add-apt-repository ppa:webupd8team/java
# apt update
# apt install oracle-java9-installer
Tomcat 9.0 설치
tar xvzf apache-tomcat-9.0.0.M26.tar.gz
mv apache-tomcat-9.0.0.M26 /usr/local/
ln -s /usr/local/apache-tomcat-9.0.0.M26/ /usr/local/tomcat
Tomcat 사용자 권한 설정
chown -R tomcat:tomcat /usr/local/tomcat/
chmod -R g+r /usr/local/tomcat/conf
chmod g+x /usr/local/tomcat/conf
JAVA_HOME 확인
Tomcat Native 컴파일 시 JAVA_HOME을 지정해 주어야 한다. 다음 명령으로 확인한다.
update-java-alternatives -l
Tomcat Native 설치
tar xvzf tomcat-native-1.2.14-src.tar.gz
cd tomcat-native-1.2.14-src/native
./configure --with-apr=/usr/local/apr --with-java-home=/usr/lib/jvm/java-9-oracle
make && make install
환경파일 구성
/etc/profile 파일의 마지막에 다음 행 추가
export LD_LIBRARAY_PATH=/usr/local/apr/lib
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
설치내용 확인
# source /etc/profile
# java -version
************* 다음 내용이 출력되면 성공 ***************************
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
**********************************************************************
방화벽 포트 오픈
다음 명령으로 방화벽에서 8080 포트를 열어 준다.
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
# iptables-save > /etc/iptables.rules
/etc/network/interfaces 파일에 아래 라인 추가
pre-up iptables-restore < /etc/iptables.rules
Tomcat 시작
# /usr/local/tomcat/bin/startup.sh
Tomcat 동작 확인
웹브라우저에서 서버의 IP와 포트를 입력하여 접속되는 지 확인
http://server-ip:8080/
구동파일 생성
다음 명령으로 tomcat Service 파일 생성
# vi /etc/systemd/system/tomcat.service
/etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-9-oracle
Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=CATALINA_BASE=/usr/local/tomcat
Environment='CATALINA_OPTS=-Xms1024M -Xmx4096M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
구동파일 권한 설정
# chmod 755 /etc/systemd/system/tomcat.service
서비스 파일 reload
# systemctl daemon-reload
Tomcat 서비스 시작/종료
시작
# systemctl start tomcat
종료
# systemctl stop tomcat
부팅 시 Tomcat 서비스 시작
# systemctl enable tomcat
3. Apache 설치
관련 파일 다운로드
다음 파일을 다운로드 한다.
apr-iconv: http://apache.mirror.cdnetworks.com/apr/apr-iconv-1.2.1.tar.gz
apr-util: http://apache.mirror.cdnetworks.com/apr/apr-util-1.6.0.tar.gz
apache: http://apache.mirror.cdnetworks.com/httpd/httpd-2.4.27.tar.gz
pcre: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
apr-iconv 설치
# tar zxvf apr-iconv-1.2.1.tar.gz
# cd apr-iconv-1.2.1
# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
# make && make install
apr-util 설치
# tar zxvf apr-util-1.6.0.tar.gz
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
# make && make install
pcre 설치
# tar zxvf pcre-8.41.tar.gz
# cd pcre-8.41/
# ./configure --libdir=/usr/local/lib
# make && make install
사용자 추가
apache 구동 사용자를 추가한다.
# useradd -s /bin/false -d /usr/local/apache apache
Apache 설치
# tar xvzf httpd-2.4.27.tgz
# cd httpd-2.4.27
# ./configure --prefix=/usr/local/apache \
--enable-authn-alias \
--enable-cache \
--enable-file-cache \
--enable-mem-cache \
--enable-disk-cache \
--enable-mods-shared=most \
--enable-proxy=shared \
--enable-proxy-ajp=shared \
--enable-proxy-ajp=shared \
--enable-dav=shared \
--with-apr=/usr/local/apr/ \
--with-apr-util=/usr/local/apr-util/ \
--enable-ssl \
--enable-dav \
--enable-cgi \
--with-mpm=event \
--enable-cgid \
--enable-vhost-alias \
--enable-rewrite \
--enable-forward=shared \
--enable-proxy-connect=shared \
--enable-proxy-http=shared \
--enable-deflate=shared \
--enable-so \
--enable-headers=shared \
--enable-include=shared \
--enable-rewrite=shared
# make&&make install
make 도중 undefined reference to `XML_GetErrorCode' 에러 발생 시
vi build/config_vars.mk 파일 수정해서
AP_LIBS = 시작하는 라인을 찾아
-lexpat를 추가 후 다시 make
Apache 구동 사용자 설정
vi /usr/local/apache/conf/httpd.conf 로 아래처럼 사용자 수정
User apache
Group apache
Apache 시작
아래 명령으로 아파치 시작
# /usr/local/apache/bin/apachectl start
Apache 테스트
브라우저에서 서버에 접속 후 It works! 페이지가 표시 되는 지 확인
http://server-ip
구동 파일 설정
서버 실행 시 아파치 자동 실행을 위해 구동 파일을 설정한다.
vi /etc/systemd/system/httpd.service
[Unit]
Description=Apache Web Server
After=network.target
[Service]
Type=forking
#PIDFile=/run/httpd/httpd.pid
Environment=HTTPD_PID=/usr/local/apache/logs/httpd.pid
EnvironmentFile=/usr/local/apache/bin/envvars
ExecStart=/usr/local/apache/bin/apachectl -k start
ExecStop=/usr/local/apache/bin/apachectl -k graceful-stop
ExecReload=/usr/local/apache/bin/apachectl -k graceful
KillSignal=SIGCONT
PrivateTmp=true
LimitNOFILE=infinity
User=apache
Group=apache
[Install]
WantedBy=multi-user.target
구동파일 권한 설정
# chmod 755 /etc/systemd/system/httpd.service
서비스 파일 reload
# systemctl daemon-reload
실행파일 권한 설정
# chown -R apache:apache /usr/local/apache/bin/apachectl
# chown -R root:root /usr/local/apache/bin/httpd
# chmod +s /usr/local/apache/bin/httpd
Apache 서비스 시작/종료
시작
# systemctl start httpd
종료
# systemctl stop httpd
부팅 시 Apache 서비스 시작
# systemctl enable httpd
4. PHP 설치
관련 파일 다운로드
php7을 다운로드 한다.
http://php.net/downloads.php
의존성 패키지 설치
php에서 사용할 의존성 패키지를 설치한다.
apt install libxml2-dev libbz2-dev libcurl4-openssl-dev libldap2-dev libmysqlclient-dev pkg-config libssl-dev libsslcommon2-dev libjpeg-dev libpng-dev libfreetype6-dev libldb-dev libsasl2-dev
의존성 링크 설정
php에서 라이브러리 의존성을 위해 링크를 설정한다.
ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so
ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
libmcrypt 설치
PHP에서 암호화 해독 알고리즘인 mcrypt를 사용하기 위해서 설치해야 한다.
tar xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install --libdir=/usr/local/lib
make && make install
cd ../../
mhash 설치
hash 암호화 알고리즘.
tar xvzf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
mcrypt 설치
암호화 해독 알고리즘.
tar xvzf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
php 설치
php 를 설치한다.
tar xvzf php-7.1.10.tar.gz
cd php-7.1.10
./configure --prefix=/usr/local/php \
--with-libdir=lib \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=/usr/bin/mysql_config \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-pear=/usr/share/php \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-maintainer-zts \
--enable-opcache \
--with-curl \
--with-iconv=/usr/local \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-ldap \
--with-ldap-sasl \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-bz2 \
--enable-static \
--enable-intl \
--enable-exif \
--with-pdo-mysql=/usr \
--with-gettext
make && make install
make 도중 umachine.h:340:13: error: ‘char16_t’ does not name a type 에러 발생 시 Makefile 을 열어서 CXXFLAGS_CLEAN 항목에 -std=c++0x 구문을 추가 후 make
php.ini 생성
아래 명령으로 Php.ini 생성.
cp -f php.ini-production /usr/local/php/etc/php.ini
opcache 활성화
/usr/local/php/etc/php.ini 의 opcache 부분을 아래와 같이 변경.
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
/usr/local/php/etc/php.ini 의 맨 끝에 아래와 같이 추가.
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/opcache.so
5. PHP 확장모듈 설치
관련 파일 다운로드
ImageMagick 관련파일을 다운로드 한다.
https://www.imagemagick.org/download
http://pecl.php.net/package/imagick
의존성 패키지 설치
apt install autoconf libgtk2.0-dev
ImageMagicK 설치
ImageMagick은 TIFF, JPEG, GIF, PNG, PDF 및 기타 포토 CD 등 89가지 이상의 이미지의 읽기, 쓰기 및 처리하는 데 사용할 수 있는 개발 도구입니다.
# tar xvJf ImageMagick-7.0.7-4.tar.xz
# cd ImageMagick-7.0.7-4/
# ./configure --libdir=/usr/local/lib
# make && make install
# cd ..
imagick 설치
# tar xvzf imagick-3.4.3.tgz
# cd imagick-3.4.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
/usr/local/php/etc/php.ini 에 아래 라인 추가
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/imagick.so
php library 추가
# echo "/usr/local/php/lib" > /etc/ld.so.conf.d/php.conf
# ldconfig
php-cgi 프로세스 시작
# cd /usr/local/php/etc
# cp php-fpm.conf.default php-fpm.conf
# cp php-fpm.d/www.conf.default php-fpm.d/www.conf
www.conf 의 User와 Group 을 nobody --> apache 로 변경 후 php-fpm 실행
# /usr/local/php/sbin/php-fpm
Apache 에서 php 지원 추가
/usr/local/apache/conf/httpd.conf 파일을 열어서 php를 검색 후 아래 라인을 추가
AddType application/x-httpd-php .php .php3 .inc
AddType application/x-httpd-php-source .phps
Apache 재시작
service httpd restart
PHP 동작 테스트
# echo "<?php phpinfo(); ?>" > /usr/local/apache/htdocs/phptest.php
한 후 웹 브라우저에서 http://server-ip/phptest.php
해서 결과가 정상적으로 나오는 지 확인
6. Apache 와 Tomcat 통합
mod_jk 생성
tar xvzf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/
cd native
./configure --with-apxs=/usr/local/apache/bin/apxs
make
cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/
설정 파일 복사
cd ../conf
cp httpd-jk.conf /usr/local/apache/conf/mod_jk.conf
cp workers.properties /usr/local/apache/conf/
mod_jk.conf 설정
/usr/local/apache/conf/mod_jk.conf 파일에 아래 내용 추가
JkWorkersFile /usr/local/apache/conf/workers.properties
JkLogFile /usr/local/apache/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /servlet/* worker1
JkMount /*.jsp worker1
JkMount /application/* worker1
JkMount /*.do worker1
JkMount /*.class worker1
JkMount /*.jar worker1
설정 파일 해석
1. JkMount 위치는 Tomcat이 해석을 담당, JkUnMount는 반대임
2. JkMount /test/* worker1 의 의미는 test 디렉토리 아래는 Tomcat이 처리를 담당
3. jsp와servlet은 tomcat이 처리, 그 외 그림이나 정적 파일은 Apache가 처리
Tomcat 프로퍼티 설정
/usr/local/apache/conf/workers.properties 에 다음 내용 추가
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=127.0.0.1
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
Apache 설정파일 수정
/usr/local/apache/conf/httpd.conf 에 다음 내용 추가
Include /usr/local/apache/conf/mod_jk.conf
Tomcat 설정변경
/usr/local/tomcat/conf/server.xml에 다음 내용 수정 (docbase 경로는 원하는 위치로 변경)
<Host 를 찾음
(다음과 같음: <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">)
다음 줄에 다음 내용을 추가:
<Context path="" docBase="/usr/local/tomcat/webapps"
debug="0" reloadable="true" crossContext="true"/>
Apache / Tomcat 재시작
service httpd start
service tomcat restart
성공여부 확인
다음 명령으로 실행 여부 확인 해서 아래 메시지가 나오면 성공
# tail -f /usr/local/apache/logs/mod_jk.log
[Sun Oct 01 11:10:43 2017][22961:139625235212032] [info] init_jk::mod_jk.c (3595): mod_jk/1.2.42 initialized
연동 테스트
/usr/local/tomcat/webapps/test.jsp 파일에 다음 내용 추가 후
웹 브라우저에서 http://server-ip/test.jsp 해서 Hello World! 가 출력되면 성공
<html>
<h1>JSP test<hr>
<%out.println("Hello World!");%>
</html>
Tomcat port 차단
Apache를 통해 접속하므로 Tomcat 으로 직접 연결은 차단
/etc/iptables.rules 에서 8080 접속 관련 라인 삭제하고 아래 처럼 생성
*filter
:INPUT ACCEPT [377:27429]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [231:101581]
-A INPUT -i enp0s3 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i enp0s3 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i enp0s3 -j DROP
COMMIT
iptables rule reload
# iptables-restore < /etc/iptables.rules