[CentOS] 16. WEB(Apache) + WAS(Tomcat) + DB(MariaDB)

Date:     Updated:

카테고리:

태그:


🔔 WEB 구성요소


www

구성요소 설명
WEB 서버 정적인 컨텐츠(문자, 그림, 오디오, 비디오 등)를 처리하는 서버
WAS 서버 동적인 컨텐츠(사용자의 입력 값을 기반으로 프로그램의 동작이 달라 짐)를 처리하는 서버
DB 서버 데이터베이스를 생성, 관리, 사용, 제어하는 서버


02) 서버 정보


333223

3213


03) 서버 구성



a) WAS Server - JAVA, Tomcat install

# /etc/hosts에 서버 IP 주소 정보 추가
$ cat <<EOF >> /etc/hosts

192.168.219.100 web
192.168.219.111 was01
192.168.219.200 db
EOF
# JAVA install - https://jdk.java.net/
$ yum -y install wget 

$ { 
    wget https://download.java.net/openjdk/jdk8u43/ri/openjdk-8u43-linux-x64.tar.gz
    tar xvzf openjdk-8u43-linux-x64.tar.gz
    mkdir /usr/local/jvm
    mv java-se-8u43-ri /usr/local/jvm/
}

$ cat <<EOF >> /etc/profile

JAVA_HOME=/usr/local/jvm/java-se-8u43-ri/
export JAVA_HOME
PATH=\$PATH:\$JAVA_HOME/bin
export PATH
EOF

$ source /etc/profile

# 확인
$ java -version
# Tomcat install - https://tomcat.apache.org/
$ {
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat-9.0.82.tar.gz
    tar xvzf apache-tomcat-9.0.82.tar.gz
    mv apache-tomcat-9.0.82 /usr/local/tomcat9
}

$ cat <<EOF > /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat9
After=network.target syslog.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/jvm/java-se-8u43-ri/
User=root
Group=root

ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh

UMask=0007
RestartSec=10
Restart=always

SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
EOF

# SELinux는 ExecStart에서 사용할 수 있는 바이너리를 system_u:object_r:bin_t:s0 속성이 설정된 경로(/usr/bin, /usr/sbin, /usr/libexec, /usr/local/bin)로 제한한다.
# 이 디렉토리 중 하나로 스크립트를 이동하거나 systemd가 원하는 바이너리를 사용하려면 selinux 정책을 변경해야 한다. (SELinux 비활성화하면 편함...)
# 참고 - https://serverfault.com/questions/1032597/selinux-is-preventing-from-execute-access-on-the-file-centos
$ chcon -R -t bin_t /usr/local/tomcat9/bin/

$ systemctl enable --now tomcat

$ netstat -anlp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2039/java

# 방화벽 설정
$ {
    firewall-cmd --add-service=http
    firewall-cmd --add-port=8080/tcp
    firewall-cmd --add-port=8009/tcp
    firewall-cmd --add-port=3306/tcp
    firewall-cmd --runtime-to-permanent
    # Apache가 SELinux를 통해 원격 데이터베이스에 연결하도록 허용
    setsebool -P httpd_can_network_connect_db 1
}


b) WEB Server - Apache install and configuration

# /etc/hosts에 서버 IP 주소 정보 추가
$ cat <<EOF >> /etc/hosts

192.168.219.100 web
192.168.219.111 was01
192.168.219.200 db
EOF
# Tomcat Connectors (mod_jk) Downloads
# https://tomcat.apache.org/download-connectors.cgi
$ {
    yum -y install httpd httpd-devel gcc gcc-c++ wget redhat-rpm-config make
    wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.49-src.tar.gz
    tar xvzf tomcat-connectors-1.2.49-src.tar.gz
    cd tomcat-connectors-1.2.49-src/native/
    ./configure --with-apxs=/bin/apxs
    make && make install
}
# Apache 설정
$ vim /etc/httpd/conf/httpd.conf

# line 58
LoadModule jk_module modules/mod_jk.so

<VirtualHost *:80>
        ServerName localhost
        JkMount /*.jsp tomcat1
</VirtualHost>

$ cat <<EOF > /etc/httpd/conf.modules.d/mod_jk.conf
<IfModule jk_module>
    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>
EOF

$ cat <<EOF > /etc/httpd/conf/workers.properties
worker.list=tomcat1

worker.tomcat1.type=ajp13
worker.tomcat1.host=192.168.219.111
worker.tomcat1.port=8009
EOF


c) WAS Server - tomcat configure

$ vim /usr/local/tomcat9/conf/server.xml

# line 115 
<Connector protocol="AJP/1.3"
           address="0.0.0.0"
           secretRequired="false"
           port="8009"
           redirectPort="8443" />

# line 131 "jvmRoute=tomcat1" add
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

# line 150 - tomcat home directory 
<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true">

    <Context path="" docBase="source" reloadable="true" />

$ mkdir /usr/local/tomcat9/webapps/source

$ cat << EOF > /usr/local/tomcat9/webapps/source/index.jsp
Hello World
EOF
$ systemctl restart tomcat

$ netstat -anlp | grep 8080

$ netstat -anlp | grep 8009


d) WEB Server - 서비스 재시작 및 방화벽 설정

$ {
    systemctl restart httpd
    cat /var/log/httpd/mod_jk.log
    firewall-cmd --add-service=http
    firewall-cmd --add-port=8080/tcp
    firewall-cmd --add-port=8009/tcp
    firewall-cmd --runtime-to-permanent
    # Apache가 네트워크 연결을 수행할 수 있도록 허용
    setsebool -P httpd_can_network_connect on
}

# SELinux가 활성화 되어있는 경우, 위 설정 후 'systemctl restart httpd' 명령을 실행하면 httpd 서비스가 실행되지 않는다.

# /var/log/message 로그 파일을 보면, SELinux가 /var/log/httpd/jk-runtime-status 파일에 대한 httpd의 쓰기 액세스를 차단하고 있음을 알려준다.
SELinux is preventing /usr/sbin/httpd from write access on the file /var/log/httpd/jk-runtime-status.1630. 

# 해당 문제를 해결하기 위해서는 다음과 같은 명령을 수행해야 한다.
# /var/log/httpd/ 디렉토리와 그 하위 디렉토리의 SELinux 보안 컨텍스트를 httpd_sys_rw_content_t로 변경
# 즉, httpd 웹 서버가 쓰기 권한을 가지는 로그 파일에 대한 적절한 보안 컨텍스트를 제공
chcon -R -t httpd_sys_rw_content_t /var/log/httpd/

$ systemctl restart httpd


e) DB Server - MariaDB Install

# MariaDB 설치
$ yum -y install mariadb-server mariadb
# 서비스를 활성화하고 시작(start)하도록 지정
$ systemctl enable --now mariadb

# 방화벽 허용
$ firewall-cmd --add-port=3306/tcp
# MariaDB 설정
$ mysql_secure_installation
# test 용 DB 생성
$ mysql -u root -p

$ create database test;

# 외부 접근 허용
$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'PASSWORD';

$ exit;


f) WAS Server - DB Connectation Check

# https://downloads.mysql.com/archives/c-j/
{ 
    wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-8.0.26.tar.gz
    tar xvzf mysql-connector-java-8.0.26.tar.gz
    cd mysql-connector-java-8.0.26
    cp mysql-connector-java-8.0.26.jar /usr/local/tomcat9/lib/
}
systemctl restart tomcat

netstat -anlp | grep 8080

netstat -anlp | grep 8009
vim /usr/local/tomcat9/webapps/source/db.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DB Connection Test</title>
</head>
<body>
        <%
                String DB_URL = "jdbc:mysql://192.168.219.200:3306/test";
                String DB_USER = "root";
                String DB_PASSWORD= "1234";

                Connection conn;
                Statement stmt;

                try {
                        Class.forName("com.mysql.jdbc.Driver");
                        conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
                        stmt = conn.createStatement();
                        conn.close();
                        out.println("MySql jdbc test: connect ok!!");
                } catch(Exception e) {
                        out.println(e.getMessage());
                }
        %>
</body>
</html>

CENTOS 카테고리 내 다른 글 보러가기

댓글 남기기