본문 바로가기

리눅스

[WIP] CentOS 7에서 Apache Tomcat를 설치하고 인스턴스를 자동으로 구성하는 방법

728x90

CentOS 7에서 Apache Tomcat(apache-tomcat)를 설치하고 인스턴스를 자동으로 구성하는 방법

사전 준비

Java 설치 확인

java -version
openjdk version "17.0.6"

또는 Azul JDK 사용 시

/usr/local/java/bin/java -version

Tomcat 설치 스크립트 작성

다운로드 경로

- https://downloads.apache.org/tomcat/tomcat-10/v10.1.7/bin/

apache_tomcat

script.sh 생성

vim script.sh
#!/bin/bash

# root 계정 확인
if [ "$(id -u)" -ne 0 ]; then
    echo "This script must be run as root."
    exit 1
fi

# 변수 설정
tomcat_home="/apps/tomcat"
tomcat_version="10.1.7"

# tomcat 계정 생성
if ! id -u tomcat >/dev/null 2>&1; then
    useradd --system --shell /bin/false --home-dir "${tomcat_home}" tomcat
fi

# 다운로드 URL
tomcat_url="https://downloads.apache.org/tomcat/tomcat-10/v${tomcat_version}/bin/apache-tomcat-${tomcat_version}.tar.gz"
tomcat_file="apache-tomcat-${tomcat_version}.tar.gz"

# 설치 디렉토리
initial_tomcat="${tomcat_home}/apache-tomcat-${tomcat_version}"
mkdir -p ${initial_tomcat}

# 다운로드
wget -q "${tomcat_url}" -P /tmp/

# 압축 해제
tar -xzf "/tmp/${tomcat_file}" -C "${initial_tomcat}" --strip-components=1

# 인스턴스 생성
cp -r "${initial_tomcat}" "${tomcat_home}/instance1"

# 포트 변경
cp "${tomcat_home}/instance1/conf/server.xml" \
   "${tomcat_home}/instance1/conf/server.xml.bak"

sed -i 's/8080/8081/g' "${tomcat_home}/instance1/conf/server.xml"

# 테스트 JSP 생성
mkdir -p "${tomcat_home}/instance1/webapps/ROOT"

cat <<'EOF' > "${tomcat_home}/instance1/webapps/ROOT/test.jsp"
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<head><title>Tomcat Test</title></head>
<body>
<h1>Tomcat 정상 동작</h1>
<p>현재 시간 : <%= new java.util.Date() %></p>
<p>세션 ID : <%= session.getId() %></p>
<p>서버명 : <%= request.getServerName() %></p>
<p>클라이언트 IP : <%= request.getRemoteAddr() %></p>
</body>
</html>
EOF

# 권한 설정
chown -R tomcat:tomcat "${tomcat_home}"
chmod +x "${tomcat_home}/instance1/bin/"*.sh

# 버전 확인
"${tomcat_home}/instance1/bin/version.sh"

# 정리
rm -f /tmp/${tomcat_file}

echo "Install Complete"

systemd 서비스 등록

더보기

---

Tomcat 서비스 등록하는 스크립트

vim tomcat-service.sh
#!/bin/bash

tomcat_home="/apps/tomcat/instance1"

cat <<EOF > /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 10
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment=JAVA_HOME=/usr/local/java
Environment=CATALINA_PID=${tomcat_home}/temp/tomcat.pid
Environment=CATALINA_HOME=${tomcat_home}
Environment=CATALINA_BASE=${tomcat_home}
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server'

ExecStart=${tomcat_home}/bin/startup.sh
ExecStop=${tomcat_home}/bin/shutdown.sh

Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable tomcat
systemctl start tomcat

실행 권한 부여

chmod +x tomcat-service.sh

서비스 등록 실행

bash tomcat-service.sh

서비스 상태 확인

systemctl status tomcat

---

실행 권한 부여

chmod +x script.sh

설치 실행

bash script.sh
$ bash script.sh
Creating Tomcat user...
Downloading and extracting Tomcat 10.1.7...
Creating a Tomcat instance...
Configuring Tomcat instance...
Setting Tomcat permissions...
Verifying Tomcat installation...
Using CATALINA_BASE:   /apps/tomcat/instance1
Using CATALINA_HOME:   /apps/tomcat/instance1
Using CATALINA_TMPDIR: /apps/tomcat/instance1/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /apps/tomcat/instance1/bin/bootstrap.jar:/apps/tomcat/instance1/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Server version: Apache Tomcat/10.1.7
Server built:   Feb 27 2023 20:25:27 UTC
Server number:  10.1.7.0
OS Name:        Linux
OS Version:     3.10.0-1160.76.1.el7.x86_64
Architecture:   amd64
JVM Version:    17.0.6+10-LTS
JVM Vendor:     Azul Systems, Inc.

Tomcat starting...
/apps/tomcat/instance1/bin/startup.sh

tomcat 인스턴스 실행(startup.sh)

$ /apps/tomcat/instance1/bin/startup.sh
Using CATALINA_BASE:   /apps/tomcat/instance1
Using CATALINA_HOME:   /apps/tomcat/instance1
Using CATALINA_TMPDIR: /apps/tomcat/instance1/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /apps/tomcat/instance1/bin/bootstrap.jar:/apps/tomcat/instance1/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

프로세스 확인

$ ps -ef | grep -v grep | grep tomcat
root      9612     1 15 14:01 pts/2    00:00:09 /usr/local/java/bin/java -Djava.util.logging.config.file=/apps/tomcat/instance1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED -classpath /apps/tomcat/instance1/bin/bootstrap.jar:/apps/tomcat/instance1/bin/tomcat-juli.jar -Dcatalina.base=/apps/tomcat/instance1 -Dcatalina.home=/apps/tomcat/instance1 -Djava.io.tmpdir=/apps/tomcat/instance1/temp org.apache.catalina.startup.Bootstrap start

포트 확인

$ netstat -nlpt | grep java
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      9612/java           
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      9612/java

웹 브라우저 테스트

http://tomcat_server_ip:8081/test.jsp

test.jsp

 

728x90