ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로키 리눅스 Rocky8 / Nginx / Tomcat9 / Mariadb 설치
    서버/rocky8 linux 2024. 11. 13. 15:44

     

    Rocky 8 Linux 환경에서 Nginx / Tomcat 9 / MariaDB를 손쉽게 설치할 수 있도록 dnf 패키지 관리 프로그램을 이용하는 방법에 대해 소개하겠습니다. 각각의 소프트웨어는 웹 서비스 구축의 핵심 구성 요소로, dnf 명령어만으로 간편하게 설치할 수 있습니다.

    Rocky Linux 8을 기반으로 한 서버에서 이 세 가지를 함께 설치하면, 빠르게 웹 애플리케이션을 구동할 수 있는 환경을 마련할 수 있는데요. Rocky Linux 8을 기준으로, dnf 패키지 관리 도구를 활용해 빠르게 설치 및 설정을  진행하는 방법을 알아보겠습니다.

     

     

    1. EPEL Repository 활성화

        EPEL(Extra Packages for Enterprise Linux) 리포지토리를 활성화해야 Tomcat 관련 패키지를 쉽게 설치할 수 있습니다.

    sudo dnf install epel-release

     

    2. dnf로 Tomcat 9 설치

        EPEL 리포지토리를 통해 Tomcat 9를 설치합니다.

    sudo dnf install tomcat
    sudo dnf install tomcat-webapps tomcat-admin-webapps

     

    3. Tomcat 서비스

        시작 및 부팅 시 자동 실행 설정, 정상적으로 실행 중인지 확인합니다.

    sudo systemctl start tomcat
    sudo systemctl enable tomcat
    sudo systemctl status tomcat

     

     

    4. Nginx 설치

    sudo dnf install nginx

     

    Tomcat과 Nginx를 연동하려면, Nginx를 프록시 서버로 설정하여 외부에서 Nginx를 통해 Tomcat에 접근하도록 구성할 수 있습니다. 이를 통해 Nginx가 정적 콘텐츠를 처리하고, Tomcat은 동적 콘텐츠를 처리하게 하여 성능을 최적화할 수 있습니다.

     

    5. Nginx 설정 파일 수정

        Nginx가 Tomcat 서버로 요청을 전달하도록 nginx.conf 또는 사이트 설정 파일을 수정합니다.

        일반적으로 /etc/nginx/nginx.conf 파일 또는 /etc/nginx/conf.d/test_com.conf 파일을 수정합니다.     

        여기서 proxy_pass http://localhost:8080;는 Nginx가 Tomcat의 기본 포트(8080)로 요청을 전달하도록 설정한 것입니다.

        필자는 보안상 8080에서 10080으로 변경했음.

    server {
        listen 80;
        server_name test.com;
    
        location / {
            proxy_pass http://localhost:10080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

     

     

    6.Tomcat 설정 수정 (필요시)

       Tomcat이 기본적으로 8080 포트에서 실행되지만, 포트를 변경하고 싶다면 /etc/tomcat/server.xml 파일을

       수정하여 <Connector port="8080" protocol="HTTP/1.1" ... /> 항목의 포트를 변경할 수 있습니다.

    	<Connector port="10080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
                   maxParameterCount="1000"
                   />
                   
                   
    	<Server port="-1" shutdown="SHUTDOWN">

     

     

    ※ 보안을 위한 포트 변경 제안

    • HTTP 포트 (8080): 10000번대 포트는 잘 알려져 있지 않으면서도 접근성이 용이. 예) 10080
    • Shutdown 포트 (8005): Shutdown 포트는 Tomcat 종료 시에만 사용되므로, 외부 노출을 최소화하는 게 좋습니다.
      -1로 설정하면 Shutdown 포트를 비활성화할 수 있습니다. 
      혹은 포트를 사용해야 한다면 예) 9005, 9905와 같은 고유한 번호, 또는 비활성화(-1) 설정.
        <!--
        <Connector protocol="AJP/1.3"
                   address="::1"
                   port="8009"
                   redirectPort="8443"
                   maxParameterCount="1000"
                   />
        /-->

     

    Apache 웹 서버를 사용하지 않는 경우, AJP(Apache JServ Protocol) 설정은 필요하지 않으므로 주석 처리를 해줍니다.

    • Nginx와 연동하는 경우에도 AJP를 사용할 필요가 없습니다. Nginx는 proxy_pass 설정을 사용하여 HTTP 프로토콜로 Tomcat과 통신합니다.
    • 단독 Tomcat 서버로 사용하는 경우에도 AJP 설정이 필요하지 않으며, Tomcat이 사용하는 기본 HTTP 커넥터(일반적으로 8080 포트)만으로도 충분히 외부 요청을 처리할 수 있습니다.

     

    7. Tomcat 웹 애플리케이션 루트 디렉토리 설정

    sudo nano /path/to/tomcat/conf/server.xml

     

    server.xml 파일에서 <Host> 태그 안에 <Context> 태그를 추가합니다.

    예를 들어, 루트 경로(/)에 대해 /home/test 디렉터리를 지정하려면 다음과 같이 설정할 수 있습니다

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="/" docBase="/home/test" reloadable="true"/>
    </Host>

     

    • path="/": 루트 경로에 대해 설정하므로, 도메인으로 접근 시 /home/test 디렉터리가 사용됩니다.
    • docBase="/home/test": 애플리케이션의 실제 파일 경로를 지정합니다.
    • reloadable="true": 파일이 변경될 때 자동으로 리로드 하도록 설정합니다.

    8. 권한 설정 확인

        Tomcat이 /home/test 디렉터리에 접근할 수 있게 권한을 부여합니다.

    sudo chmod -R 755 /home/test

     

    9. Nginx와 Tomcat 서비스 시작 및 활성화

    sudo systemctl start nginx
    sudo systemctl enable nginx
    sudo systemctl restart tomcat

     

    8. 방화벽 설정

        Nginx가 사용하는 80 포트(HTTP)를 엽니다.

    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --reload

     

    9. MariaDB 설치

        Rocky Linux 8에는 기본적으로 MariaDB가 포함된 AppStream 리포지토리가 있습니다.

        이를 통해 MariaDB를 간단히 설치할 수 있습니다.

    sudo dnf install mariadb-server

     

    10. MariaDB 서비스 시작 및 부팅 시 자동 시작 설정

          MariaDB를 설치한 후, 서비스를 시작하고 서버가 재부팅될 때 자동으로 MariaDB가 시작되도록 설정합니다.

    sudo systemctl start mariadb
    sudo systemctl enable mariadb

     

    11. MariaDB 초기 보안 설정

          MariaDB 설치 후 기본 보안 설정을 적용합니다. 이를 통해 root 계정의 비밀번호 설정, 익명 사용자 제거,

          테스트 데이터베이스 삭제 등의 작업을 할 수 있습니다.

    sudo mysql_secure_installation

     

    보안 설정 과정에서는 다음과 같은 항목들을 설정할 수 있습니다.

    • root 계정의 비밀번호 설정 (Y)
    • 익명 사용자 제거 (Y)
    • 원격 root 로그인 비활성화 (Y)
    • 테스트 데이터베이스 삭제 (Y)

    각 항목에 설정을 위와 같이 설정을 해주시면 됩니다.

     

    12. MariaDB 상태 확인 및 접속 테스트

    sudo systemctl status mariadb
    mysql -u root -p

     

    암호 입력 후 MariaDB 프롬프트가 나타나면 설치가 완료된 것입니다.

     

    13. MariaDB와 tomcat 연동

          Tomcat과 MariaDB를 연동하려면 JDBC 드라이버를 설정하면 Tomcat 애플리케이션이 MariaDB와 연결할 수 있습니다.

    sudo wget https://dlm.mariadb.com/3934032/Connectors/java/connector-java-3.5.0/mariadb-java-client-3.5.0.jar

     

    다운로드한 파일을 아래의 경로에 복사해 줍니다.

    sudo cp mariadb-java-client-3.5.0.jar /usr/share/java/tomcat/

     

    또는 

    sudo cp mariadb-java-client-3.5.0.jar /usr/share/tomcat/lib/

     

    드라이버 파일 복사 후 Tomcat를 재시작하여 드라이버가 로드되도록 합니다.

    sudo systemctl restart tomcat

     

    14. MariaDB 방화벽 설정

          MariaDB가 사용하는 3306 포트(mysqld)를 엽니다.

    sudo firewall-cmd --permanent --add-port=3306/tcp
    sudo firewall-cmd --reload

     

    15. MariaDB 사용자 생성 및 권한 설정

     

    • MariaDB에 접속
    mysql -u root -p

     

    • 외부에서 접근할 사용자에게 권한을 부여합니다. 예를 들어, username test.com IP 주소에서 접근할 수 있도록 설정하려면 다음 명령어를 사용합니다.
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

     

    16. MariaDB 연동 테스트 코드

     

     사용자 계정 ( /home/test )에 아래의 코드를 jsp 파일로 만들어서 업로드 후 url 접속하여 연결이 잘 되었는지 확인하면 끝납니다.

    <%@ page import="java.sql.Connection, java.sql.DriverManager, java.sql.SQLException, java.io.StringWriter, java.io.PrintWriter" %>
    <html lang="ko">
    <head>
        <meta charset="utf-8">
        <title>MariaDB 연결 테스트</title>
    </head>
    <body>
        <h1>MariaDB 연결 테스트</h1>
    
        <%
            // MariaDB 연결 정보
            String url = "jdbc:mariadb://test.com:3306/your_database";
            String user = "your_username";
            String password = "your_password";
    
            Connection connection = null;
    
            try {
                // MariaDB에 연결 시도
                connection = DriverManager.getConnection(url, user, password);
                out.println("<p>MariaDB에 성공적으로 연결되었습니다.</p>");
            } catch (SQLException e) {
                out.println("<p>MariaDB 연결에 실패했습니다.</p>");
    
                // 예외 스택 트레이스를 문자열로 변환하여 출력
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw));
                out.println("<pre>" + sw.toString() + "</pre>");
            } finally {
                // 연결 해제
                if (connection != null) try { connection.close(); } catch (SQLException e) { /* ignored */ }
            }
        %>
    </body>
    </html>

    '서버 > rocky8 linux' 카테고리의 다른 글

    Rocky8 리눅스 시스템 날짜/시간 설정  (0) 2024.11.14
Designed by Tistory.