<DBCP란?>

- 어플리케이션이 DB와 연결을 하기위한 Connection을 미리 만들어 둔 Pool을 의미한다.

- DB와 연결이 필요할 경우, Pool에 있는 Connection을 사용하고 종료 후 Pool에 반환한다.

- DBCP를 사용하는 이유 : DB와 커넥션을 맺고 끊는 작업은 리소스 소모가 크기에 보완하기 위함.

 

※ DBCP 참고URL

https://zzang9ha.tistory.com/376

https://choitaetae.tistory.com/99


[목차]

1. 테스트 DB 생성 + 테스트 Table 생성하기

2. Tomcat과 MariaDB 연동작업

3. DB연동 확인

 

※ 사전 준비사항

1) 아파치 + 톰캣 연동 완료 된 환경

2) MariaDB 설치 완료 된 환경


1. 테스트 DB 생성 + 테스트 Table 생성하기

# Test용 DB를 생성한다.
mysql -u root -p
Enter password: (암호 입력)

# DB 생성하기
MariaDB [(none)]> use mysql ;
MariaDB [mysql]> create database test1;

# 생성한 DB에 대한 권한 설정하기
MariaDB [mysql]> grant all privileges on *.* to 'root'@'%' identified by 'P@ssw0rd(=root의 패스워드)';
Query OK, 0 rows affected (0.001 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

# 생성한 DB로 이동
MariaDB [mysql]> use test1;
Database changed

# Table 생성하기
MariaDB [test1]> create table table1 (id varchar(20) primary key, pw varchar(20));
Query OK, 0 rows affected (0.031 sec)

# Table에 data 입력
MariaDB [test1]> INSERT INTO table1 (id, pw) VALUES ('admin', 'admin123');
Query OK, 1 row affected (0.001 sec)

# Table 내용 조회
MariaDB [test1]> SELECT * FROM table1;
+-------+----------+
| id    | pw       |
+-------+----------+
| admin | admin123 |
+-------+----------+

 

2. Tomcat과 MariaDB 연동작업

- MariaDB Connector를 Tomcat의 lib 디렉토리 안에 넣어주면 된다.

1) 아래 홈페이지 접속

https://mariadb.com/downloads/connectors/connectors-data-access/java8-connector

 

2) wget으로 MariaDB Connector 파일(jar)을 서버로 다운로드 한다.

# jar 파일 다운로드
wget https://dlm.mariadb.com/3418057/Connectors/java/connector-java-2.7.10/mariadb-java-client-2.7.10.jar

# jar 파일 복사
cp -arp mariadb-java-client-2.7.10.jar  /home/tomcat1/lib
cp -arp mariadb-java-client-2.7.10.jar  /home/tomcat2/lib

 

3. DB연동 확인

1) Tomcat 설치 경로 내 webapps/ROOT/index.jsp 파일 내용을 아래와 같이 수정한다.

<%-- index.jsp 내용 --%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body>
 
<%
Connection conn = null;
String url = "jdbc:mariadb://localhost:3306/(생성한 DB명을 여기 입력)";
String id = "root";							// 접속을 위한 계정의 ID
String pw = "(root 패스워드 여기 입력)";	// 접속을 위한 계정의 암호
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pw);
out.println("<h1>MariaDB DB 연결 성공</h1>");
%>
 
</body>
 
</html>

 

2) 브라우저에서 확인

- 아래와 같은 화면이 나오면 정상적으로 완료

 

 

※ 참고 URL

https://passing-story.tistory.com/entry/Linux-%EC%9A%B0%EB%B6%84%ED%88%AC-Tomcat9-MariaDB-%EC%97%B0%EB%8F%99-Ubuntu-Tomcat9-MariaDB-%EC%97%B0%EB%8F%99

[목차]

1. MariaDB 설치 진행

2. MariaDB 기본 설정(DB 기동 중 진행해야 함. mariadb-secure-installation)


1. MariaDB 설치 진행

1) mariadb 홈페이지에서 다운받을 버전을 선택한다.

- 해당 포스팅에서는 10.6.15 버전을 다운로드 함

- https://mariadb.org/download/?t=repo-config에 방문하여, OS 및 버전 선택

2) repository 설정

- 홈페이지에 있는대로 repo 설정을 넣는다.

 

cd /etc/yum.repos.d

vi MariaDB.repo

# MariaDB 10.6 RedHatEnterpriseLinux repository list - created 2023-10-25 05:54 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/10.6/rhel/$releasever/$basearch
baseurl = https://tw1.mirror.blendbyte.net/mariadb/yum/10.6/rhel/$releasever/$basearch
module_hotfixes = 1
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://tw1.mirror.blendbyte.net/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1


yum clean all
yum repolist all

 

3) yum 설치

- MariaDB 10.6.15 버전 설치되는것 확인

yum install MariaDB-server MariaDB-client

systemctl status  mariadb

 


2. MariaDB 기본 설정(DB 기동 중 진행해야 함. mariadb-secure-installation)

 

- mariadb-secure-installation 명령어 실행

mariadb-secure-installation

(중략)

Enter current password for root (enter for none):(엔터)
OK, successfully used password, moving on...

(중략)

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!

(중략)

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

(중략)

Remove anonymous users? [Y/n] y
 ... Success!

(중략)

Disallow root login remotely? [Y/n] y
 ... Success!

(중략)

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

(중략)

Reload privilege tables now? [Y/n] y
 ... Success!

(중략)

- Mariadb 접속

mysql -u root -p
mariadb -u root -p <<< 이것도 가능


MariaDB [(none)]> status  <<<<< 상태 확인
--------------
mariadb  Ver 15.1 Distrib 10.6.15-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:          15
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.6.15-MariaDB MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8mb3
Conn.  characterset:    utf8mb3
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 57 min 13 sec

Threads: 1  Questions: 30  Slow queries: 0  Opens: 21  Open tables: 14  Queries per second avg: 0.008

3. 

[사전 준비사항]

1. 톰캣 연동

- apache와 연동 https://jparkk.tistory.com/15

- nginx와 연동

 

2. 톰캣 로드밸런싱 적용

- 아파치와 로드밸런싱 https://jparkk.tistory.com/42

- nginx와 로드밸런싱


※ 톰캣 세션 클러스터링의 목적 ※

1) 톰캣 간에 세션 정보를 공유하는 것.

2) 인스턴스에 장애가 발생하더라도 다른 인스턴스가 세션 정보를 갖고 있기에 유지된다.

ex) tomcat1로 세션 연결됨 → tomcat1 장애 발생 → tomcat2가 갖고 있는 세션 정보를 이용해 유지

※ 설명 참고 : https://12bme.tistory.com/467

 

 

[목차]

1. server.xml에 내용 추가

2. web.xml에 내용 추가

3. (옵션-apache와 연동했을때 진행) workers.properties에 내용 추가

4. tomcat의 index.jsp 내용을 수정하여 관찰

5. 세션클러스터링 작동 Test 진행


1. server.xml에 아래 내용 추가하기

- jvmRoute 설정

- 각 톰캣별로 다르게 지정, workers.properties에 지정한 노드명대로 넣기

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

 

※ 톰캣이 여러개 일 때, Receiver 쪽 port번호가 겹치지 않도록 주의!

- 아래 내용은 conf/server.xml의 Cluster 쪽 아래에 넣는다.

vi server.xml

	# 아래 문장은 주석해제
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

	# 아래 내용은 추가해준다(Port 번호 안겹치게 주의)
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"     <<<<<<< 톰캣 별 포트 겹치면 안됨(ex. tomcat1-4001, tomcat2-4002)
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

 

2.  web.xml에 내용 추가

- 아래 내용은 Tomcat 설치경로 내 webapps/ROOT/WEB-INF/web.xml의 중간쯤 넣어준다.

vi web.xml

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                      https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
  version="6.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  
  <distributable/>    <<<<<<<<<<<<<<<<<<<<<<< 여기 추가

</web-app>

 

3. (옵션-apache와 연동했을때 진행) workers.properties에 내용 추가

# worker list
worker.list=balancer

# balancer
worker.balancer.type=lb
worker.balancer.balance_workers=tomcat1,tomcat2
worker.balancer.sticky_session=true  <<<<<<<<<<<<< 추가해도 되고 안해도 됨

# tomcat1
worker.tomcat1.port=8109
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13

# tomcat2
worker.tomcat2.port=8209
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13

 

4. tomcat의 index.jsp를 수정하여 관찰

- 아래 내용을 tomcat 설치 경로 내/webapps/ROOT/index.jsp 파일 안에 넣는다.

<%@ page contentType="text/html; charset=UTF-8" %>
 <%

System.out.println( "Session ID : " + session.getId() );


 %>
<HTML>
<HEAD>
    <TITLE>Session Clustering Test</TITLE>

</HEAD>
<BODY>
<h1>Session Clustering Test</h1>
<%
    Integer ival = (Integer)session.getAttribute("_session_counter");

    if(ival==null) {
        ival = new Integer(1);
    }
    else {
        ival = new Integer(ival.intValue() + 1);
    }
    session.setAttribute("_session_counter", ival);
    System.out.println("here~~~~");
%>
Session Counter = [<b> <%= ival %> </b>]<p>
<a href="./sc.jsp">[Reload]</a>
<p>
Current Session ID : <%= request.getRequestedSessionId() %><br />


<center><h3>[ 세션 정보를 얻어오는 메소드를 사용한 예제 ]</h3></center>
<hr>
<%

String id_str=session.getId();

long lasttime=session.getLastAccessedTime();

long createdtime=session.getCreationTime();

long time_used=(lasttime-createdtime)/60000;

int inactive=session.getMaxInactiveInterval()/60;

boolean b_new=session.isNew();
%>

[1] 세션 ID는 [<%=session.getId()%>] 입니다.<br><hr>
[2] 당신의 웹사이트에 머문 시간은 <%=time_used%> 입니다.<br><hr>
[3] 세션의 유효시간은 <%=inactive%> 분입니다.<br><hr>
[4] 세션이 새로 만들어 졌나요?<br><hr>
<%
if(b_new)
 out.println("예 !! 새로운 세션을 만들었습니다.");
else
 out.println("아니오 !! 새로운 세션을 만들지 않았습니다.");
%>
<hr>


</BODY>
</HTML>

 

5. 세션클러스터링 작동 Test 진행

1) Session이 연결된 톰캣과 Session ID값을 확인하고, Session 카운터가 올라가는지 확인한다.

2) Session이 연결된 톰캣을 stop한다.

3) Session ID가 유지되면서 기존 Session카운터 숫자가 이어서 올라가는지 확인한다.

※ Nginx를 이용하여 세션클러스터링 한다면 아래 내용을 넣고 하면 된다.

https://jparkk.tistory.com/43

 

 

참고자료

https://www.didim365.com/blog/20200526-blog-2/

https://fliedcat.tistory.com/6

https://syhwang.tistory.com/83

'Infra > Tomcat' 카테고리의 다른 글

Tomcat 메모리 설정  (0) 2023.07.24

[사전작업]

- nginx 소스설치

https://jparkk.tistory.com/40


 [목차]

1. 톰캣 설치 및 각 톰캣의 port를 변경(server.xml)

2. nginx 연동 및 로드밸런싱 설정 및 기동


1. 톰캣 설치 및 각 톰캣의 port를 변경(server.xml)

- 여러개의 톰캣을 연동하기 위해서 포트를 변경해야 하고, 각 톰캣의 포트 번호를 아래와 같이 변경했다.

  HTTP 포트 셧다운 포트 AJP 포트
tomcat1 8180 8105 8109
tomcat2 8280 8205 8209

 

2.  nginx 연동 및 로드밸런싱 설정 및 기동

vi nginx.conf


(중략)
upstream backend				# tomcat1~2를 backend라는 단위로 묶는다.
        {
        server  localhost:8180;	# tomcat1의 포트
        server  localhost:8280;	# tomcat2의 포트
                }

server {
        listen 80;
        location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://backend;		# nginx가 받은 요청을 'backend'로 넘기는 설정
                }
                
(중략)

 

3. 로드밸런싱 확인 방법

- 브라우저에서 'http://(서버IP):80' 으로 확인

- tomcat 설치경로에 있는 logs 디렉토리 안에 access_logs가 안쌓인다.

- 각 tomcat별 webapps/ROOT/index.jsp 파일의 텍스트를 수정하여 구별 할 수 있게 만들었다.

- 아래와 같이 tomcat1/tomcat2의 화면이 번갈아 뜬다면, 성공이다.

 

 

※ 참고URL

https://jizard.tistory.com/308
https://jizard.tistory.com/306
https://developer88.tistory.com/299
https://tiqndjd12.tistory.com/181
https://st-soul.tistory.com/78
https://cornswrold.tistory.com/431
https://st-soul.tistory.com/78

'Infra > Nginx' 카테고리의 다른 글

Nginx에 Tomcat 연동(RHEL 7, RHEL 8)  (0) 2023.10.19
Nginx 소스설치(RHEL 7, RHEL 8)  (0) 2023.10.17

[목차]

1. 로드밸런싱 처리1 - tomcat 포트 설정

2. 로드밸런싱 처리2 - mod_jk 설정, workers.properties 설정


사전 준비사항

1) 아파치 설치(yum 설치 or 소스설치)

https://jparkk.tistory.com/39

2) 톰캣 연동

https://jparkk.tistory.com/15


1. 톰캣 설정파일에서(server.xml)에서 포트를 변경한다.

※ 포트가 겹치게 되면 정상적으로 작동하지 않음!!!!

- 여러개의 톰캣을 연동하기 위해서 포트를 변경해야 하고, 각 톰캣의 포트 번호를 아래와 같이 변경했다.

  HTTP 포트 셧다운 포트 AJP 포트
tomcat1 8180 8105 8109
tomcat2 8280 8205 8209

(기본적용 포트 번호 → ajp 8009, 셧다운포트 8005, 톰캣http포트 8080)

 

 

2. mod_jk 설정 넣기

vi mod_jk.conf

# mod_jk.so 로드
LoadModule jk_module modules/mod_jk.so

<ifModule jk_module>

		# 아파치가 받은 요청을 'balancer'로 넘긴다.
        JkMount /* balancer

		# workers.properties 파일의 경로를 지정
        JkWorkersFile conf/workers.properties

		# 연동 관련 로그파일 관련 설정
        JkShmFile logs/mod_jk.shm
        JkLogFile logs/mod_jk.log
		
        # 로그파일의 레벨 설정
        JkLogLevel error
        
        # 로그파일에 찍히는 타임스탬프의 포멧을 지정
        JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

        # (옵션) 아래 내용을 넣으면 어느 톰캣으로 넘기는지 알 수 있다.
        JkRequestLogFormat "%w %R %V %T %U %q"

</ifModule>

 

3. workers.properties 설정

vi workers.properties


# worker list
worker.list=balancer,tomcat1,tomcat2

# balancer
worker.balancer.type=lb
worker.balancer.balance_workers=tomcat1,tomcat2

# tomcat1
worker.tomcat1.port=8109		# 해당 tomcat의 ajp 포트번호
worker.tomcat1.host=localhost	
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1		# 가중치 설정

# tomcat2
worker.tomcat2.port=8209		# 해당  tomcat의 ajp 포트번호
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1		# 가중치 설정

 

※ 참고

- mod_jk 설정 내용 중, [JkRequestLogFormat "%w %R %V %T %U %q"]이 포함되어 있으면 아래와 같이 나온다.

[목차]

1. Nginx 소스설치

2. Tomcat 설치

3. Nginx - Tomcat 연동

 

1. Nginx 소스설치

- 아래 링크 참고

https://jparkk.tistory.com/40

 

Nginx 소스설치(RHEL 7, RHEL 8)

사용한 OS : RHEL 7, RHEL 8 [목차] 1. nginx 설치 전 패키지 설치(yum) 2. nginx-1.25.2 설치 3. 설치 확인 1. nginx 설치 전 패키지 설치(yum) 1-1. RHEL 7 에서 진행 할 때 yum install gcc gcc-c++ openssl-devel zlib 1-1. RHEL 8 에

jparkk.tistory.com

 

2. Tomcat 설치(Tomcat 10.1버전)

※ Tomcat Connector 다운 받을 필요 없음

# java 다운로드
yum install java-11-openjdk.x86_64 -y

# Tomcat 다운로드
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz

# Tomcat 파일 압축해제
tar zxvf apache-tomcat-10.1.15.tar.gz

 

3. Nginx - Tomcat 연동

1) nginx.conf 에서 내용 추가

vi nginx.conf

(중략)
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://localhost:8080;	<<<<<<  이 부분 추가!
(중략)


# nginx.conf 파일 문법체크 진행
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

 

2) Nginx, Tomcat 기동 및 연동 확인

- Nginx와 Tomcat 기동

- 브라우저에서 서버IP 80포트로 접속시 톰캣 화면 나오면 연동 완료

 

※ 참고자료

https://shine-yeolmae.tistory.com/28
https://velog.io/@sherlockid8/CentOS7-Nginx-Tomcat-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%97%B0%EB%8F%99

사용한 OS : RHEL 7, RHEL 8

 

[목차]

1. nginx 설치 전 패키지 설치(yum)

2. nginx-1.25.2 설치

3. 설치 확인

 

1. nginx 설치 전 패키지 설치(yum)

1-1. RHEL 7 에서 진행 할 때

yum install gcc gcc-c++ openssl-devel zlib

 

1-1. RHEL 8 에서 진행 할 때

- make 패키지를 반드시 설치!

yum install gcc gcc-c++ openssl openssl-devel make

 

2. Nginx 최신 버전 다운로드(wget)

1) https://nginx.org/download/  에서 다운로드 한다.

# 다운로드 받을 경로로 이동
cd /usr/local/src

# nginx 다운로드 & 압축 해제
wget https://nginx.org/download/nginx-1.25.2.tar.gz
tar zxvf nginx-1.25.2.tar.gz

 

2) 설치 진행

# 압축 해제한 경로로 이동
cd /usr/local/src/nginx-1.25.2

# makefile 생성
./configure

# 설치 진행
make && make install

 

3) nginx 실행

- make가 완료되면 /usr/local/nginx/ 경로가 생성된다.

- /usr/local/nginx/sbin에서 nginx 실행

# /usr/local/nginx/sbin 경로로 이동
cd /usr/local/nginx/sbin

# nginx 실행
./nginx

# nginx 명령어
./nginx			# 실행
./nginx -s stop		# 중지
./nginx -s reload	# 재기동
./nginx -t 			# 설정파일 문법체크

 

4) nginx 실행 확인

- nginx 프로세스 및 포트 올라왔는지 확인

 

- 브라우저에서 확인할 때

※ systemctl stop firewalld 하기!

 

- curl 명령어로 확인

 

※ 참고자료

https://talkme.tistory.com/entry/Centos7-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-nginx-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%B9%98-%EB%B0%8F-systmctl-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0

사용한 OS : RHEL 7, RHEL 8

 

[목차]

1. 아파치 설치 전 패키지 설치(yum)

2. 아파치 2.4.57 설치

3. 설치 확인

 


1. 아파치 설치 전 패키지 설치(yum)

1-1. RHEL 7 에서 진행 할 때

1) C, C++ 컴파일러 설치

- 소스 컴파일 하려면 gcc compiler 필요함

yum install -y gcc gcc-c++

2) XML parcer 라이브러리 설치

- 아파치 2.4 설치 할 때 apr, apr-util, pcre 패키지가 필요하다.

- apr, apr-util, pcre 패키지를 설치하려면 XML parser 라이브러리 설치해야한다.

yum install -y expat expat-devel expat-static

3) PCRE 설치

- wget으로 파일을 받아서 진행

- https://sourceforge.net/projects/pcre/files/pcre/ 에서 받는다.

 

1-2. RHEL 8에서 진행 할 때

make 패키지 설치해준다.(yum)

1) C, C++ 컴파일러 설치

- 소스 컴파일 하려면 gcc compiler 필요함

yum install -y gcc gcc-c++ make

2) XML parcer 라이브러리 설치

- 아파치 2.4 설치 할 때 apr, apr-util, pcre 패키지가 필요하다.

- apr, apr-util, pcre 패키지를 설치하려면 XML parser 라이브러리 설치해야한다.

yum install -y expat expat-devel

3) PCRE 설치

- wget으로 파일을 받아서 진행

- https://sourceforge.net/projects/pcre/files/pcre/ 에서 받는다.

 


2. Apache 2.4.57 설치

 

1) 아파치 설치에 필요한 파일 다운로드 (다운로드 파일 경로 : /usr/local/src)

- http

https://dlcdn.apache.org/httpd/

- apr / apr-utils

https://apr.apache.org/download.cgi

- pcre

https://sourceforge.net/projects/pcre/files/pcre/8.45/

$ cd /usr/local/src

# 아파치 다운로드 & 압축해제
wget https://dlcdn.apache.org/httpd/httpd-2.4.58.tar.gz
tar zxvf httpd-2.4.58.tar.gz

# apr 다운로드 & 압축해제
wget https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
tar zxvf apr-1.7.4.tar.gz

# apr-util 다운로드 & 압축해제
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
tar zxvf apr-util-1.6.3.tar.gz

# prce 다운로드 & 압축해제
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar zxvf pcre-8.45.tar.gz

 

2) 컴파일 설치 순서(의존성 문제 떄문에 아래와 같은 순서로 진행 필요함)

arp → arp-util → pcre → httpd

 

3)  apr설치

# arp 소스파일 있는 경로로 이동
cd /usr/local/src/apr-1.7.4

# apr makefile 생성
./configure --prefix=/usr/local/src/apr-1.7.4

# 설치
make && make install

 

4) apr-util 설치

# arp-util 소스파일 경로로 이동
cd /usr/local/src/apr-util-1.6.3

# arp-util makefile 생성 + 의존성 소스의 경로를 넣어준다.
./configure --prefix=/usr/local/src/apr-util-1.6.3 --with-apr=/usr/local/src/apr-1.7.4

# 설치
make && make install

 

5) pcre 설치

# pcre 경로로 이동
cd /usr/local/src/pcre-8.45

# makefile 생성 + apr / apr-util 의존소스 경로 넣어서 진행
./configure --prefix=/usr/local/src/pcre-8.45 --with-apr-util=/usr/local/src/apr-util-1.6.3  --with-apr=/usr/local/src/apr-1.7.4

# 설치
make && make install

 

6) Apache 설치 진행

# httpd 설치 경로로 이동
/usr/local/src/httpd-2.4.57

# makefile 생성 + 의존소스 파일 다 넣어주기
# pcre-config 파일의 경로를 넣어야 함 !!!!
./configure --prefix=/usr/local/src/httpd-2.4.57 --with-apr-util=/usr/local/src/apr-util-1.6.3  --with-apr=/usr/local/src/apr-1.7.4  --with-pcre=/usr/local/src/pcre-8.45/bin/pcre-config

# 설치
make && make install

# 설치 확인
$ /usr/local/src/httpd-2.4.57/bin/apachectl -V
Server version: Apache/2.4.57 (Unix)
Server built:   Oct 17 2023 15:10:06
Server's Module Magic Number: 20120211:127
Server loaded:  APR 1.7.4, APR-UTIL 1.6.3, PCRE 8.45 2021-06-15
Compiled using: APR 1.7.4, APR-UTIL 1.6.3, PCRE 8.45 2021-06-15
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_PROC_PTHREAD_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/src/httpd-2.4.57"
 -D SUEXEC_BIN="/usr/local/src/httpd-2.4.57/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

 

7)  Apache start

/usr/local/src/httpd-2.4.57/conf/httpd.conf 에서 ServerName을 넣어주고 start한다.

 


3. 아파치 설치확인

 

1) 브라우저에서 확인

브라우저로 확인 할 때, 방화벽(firewalld)의 활성화 여부를 꼭 체크하자

 

2) curl 명령어로 확인

curl localhost:80
<html><body><h1>It works!</h1></body></html>

 

8) 기타 - httpd, apachectl 명령어를 /bin에 복사해두면 편하게 쓸 수 있다.

cd /usr/local/src/httpd-2.4.57/
cp -arpv httpd /bin/

/usr/local/src/httpd-2.4.57/httpd/bin
cp -arpv apachectl /bin/

 

★ 참고 URL

https://anggeum.tistory.com/entry/Apache-HTTP-Server-v24-%EC%84%A4%EC%B9%98-Source-Compile
https://velog.io/@dongli/Web-%EC%84%9C%EB%B2%84-%EC%86%8C%EC%8A%A4-%EC%84%A4%EC%B9%98

[이전 내용 - RHEL 8 기본설정]

https://jparkk.tistory.com/34

 

[목차]

1. 패스워드 만료일 관련 설정

2. Root 계정 원격 접속 제한

3. 반복적인 로그인 실패시 계정 잠금 설정

4. 패스워드 복잡도 설정

 

1. 패스워드 만료일 관련 설정

vi /etc/login.defs

(중략)
PASS_MAX_DAYS   180		# 패스워드를 사용할 수 있는 기간
PASS_MIN_DAYS   1		# 패스워드 변경후 최소 사용기간
PASS_MIN_LEN    8		# 패스워드 최소 길이
PASS_WARN_AGE   7		# 패스워드 만료 알림 발생일
(중략)

2. Root 계정 원격 접속 제한

- /etc/ssh/sshd_config에서 설정

vi /etc/ssh/sshd_config

(중략)
PermitRootLogin no
(중략)

 

3. 반복적인 로그인 실패시 계정 잠금 설정

- /etc/pam.d/system-auth 에서 설정한다.

(추가예정)

 

 

4. 패스워드 복잡도 설정하기

- /etc/security/pwquality.conf 내용을 편집한다.

- 기본적으로 pwquality.conf안에 모든 내용이 주석처리 되어 있어서 주석해제 & 필요한 값으로 설정해야한다.

(중략)
minlen = 8			<< 암호 최소 8글자 이상 설정
(중략)
dcredit = -1		<< 숫자 최소 1개 이상 요구
(중략)
ucredit = -1		<< 영어 대문자 최소 1개 이상 요구
(중략)
lcredit = -1		<< 영어 소문자 최소 1개 이상 요구
(중략)
ocredit = -1		<< 특수문자 최소 1개 이상 요구
(중략)

 

[사전 준비 사항]

- 각 OS에 대한 ISO 파일 필요함

- Virtual Box에 ISO파일을 인식시켜야 함

 

1. RHEL 8

1) RHEL 8 ISO 파일을 인식시키기

2) 마운트 할 디렉토리를 만들고 ISO파일과 마운트 하기

ex) /local_repo 생성

[root@localhost /]# mkdir /local_repo
[root@localhost /]# mount /dev/sr0 /local_repo/
mount: /local_repo: WARNING: device write-protected, mounted read-only.

[root@localhost local_repo]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               383M     0  383M   0% /dev
tmpfs                  403M     0  403M   0% /dev/shm
tmpfs                  403M  5.5M  397M   2% /run
tmpfs                  403M     0  403M   0% /sys/fs/cgroup
/dev/mapper/myVG-root   19G  1.8G   17G  10% /
/dev/sda1              495M  199M  296M  41% /boot
tmpfs                   81M     0   81M   0% /run/user/1000
/dev/sr0                11G   11G     0 100% /local_repo

[root@localhost local_repo]# cd /local_repo
[root@localhost local_repo]# ll
합계 48
dr-xr-xr-x. 4 root root  2048  6월 28  2022 AppStream
dr-xr-xr-x. 4 root root  2048  6월 28  2022 BaseOS
dr-xr-xr-x. 3 root root  2048  6월 28  2022 EFI
-r--r--r--. 1 root root  8154  6월 28  2022 EULA
-r--r--r--. 1 root root 18092  6월 28  2022 GPL
-r--r--r--. 1 root root  1669  6월 28  2022 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root  5135  6월 28  2022 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root  1796  6월 28  2022 TRANS.TBL
-r--r--r--. 1 root root  1455  6월 28  2022 extra_files.json
dr-xr-xr-x. 3 root root  2048  6월 28  2022 images
dr-xr-xr-x. 2 root root  2048  6월 28  2022 isolinux
-r--r--r--. 1 root root   103  6월 28  2022 media.repo

 

3) /etc/yum.repo.d/ 밑에 repo 파일 만들기 ex) local.repo

[root@localhost yum.repos.d]# cat  /etc/yum.repo.d/local.repo
#name: repo 이름
#baseurl: package, repodata 위치
#enabled: repo 활성, 비활성 설정
#gpgcheck: GPG 서명 사용

[BaseOS]
name=RHEL8_BaseOS
baseurl=file:///local_repo/BaseOS
enabled=1
gpgcheck=1


[AppStream]
name=RHEL8_AppStream
baseurl=file:///local_repo/AppStream
enabled=1
gpgcheck=1

4) 아래 명령어로 레포지토리 등록 확인

yum clean all

yum repolist all

[root@localhost yum.repos.d]# yum clean all
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

13 파일이 삭제되었습니다
[root@localhost yum.repos.d]# yum repolist all
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

레포지터리 ID                                  레포지터리 이름                                  상태
AppStream                                      RHEL8_AppStream                                  사용
BaseOS                                         RHEL8_BaseOS                                     사용

 

5) 패키지 설치 해보기

모든 과정이 잘 되었다면 아래와 같이 패키지를 받을 수 있다.

 

※ 추가적인 방법

- ISO파일을 서버에 업로드 한다.

 

1) 업로드한 ISO파일과 마운트 할 디렉토리를 생성하고, ISO파일과 마운트 한다.

ex) mount rhel-8.6-x86_64-dvd.iso   /local_repo/

 

2) 마운트한 ISO파일 내용을 기반으로 repo파일을 생성한다.(BaseOS, AppStream에 대해서 repo 생성해야한다.)

ex) dnf config-manager --add-repo file:///local_repo/AppStream

echo "gpgcheck=0" >> /etc/yum.repos.d/local_repo_AppStream.repo

 

ex) dnf config-manager --add-repo file:///local_repo/BaseOS

echo "gpgcheck=0" >> /etc/yum.repos.d/local_repo_BaseOS.repo

 

3) repolist 출력

ex) dnf repolist

 

4) 원하는 패키지 다운받기

 

5) fstab에 등록하여 부팅시 자동으로 마운트 되도록 설정

vi /etc/fstab

/root/rhel-8.6-x86_64-dvd.iso   /local_repo   iso9660	auto	0	0

+ Recent posts