환경: (Amazon Linux 2023, Apache) public EC2  + EFS 구성


 

 

AMI 생성

EC2 내부 접속 후 아래 명령어를 통해 Apache 서버로 구성한다.

yum install httpd    # Apache 웹 서버 설치
systemctl start httpd   # Apache 서버 시작
systemctl status httpd  # 상태 확인
systemctl enable httpd  # 부팅 시 자동 시작 설정

 

http://public-ip/ 로 접속하면 기본 Apache Server 화면이 보이면 된다.

 

dnf install -y httpd amazon-efs-utils inotify-tools    # 필요한 패키지 설치
sudo mkdir -p /data    # EFS를 마운트할 디렉토리 생성
sudo mount -t efs -o tls fs-XXXX:/ /data    # EFS 마운트
df -hT | grep efs    # EFS 마운트 확인

EFS와 EC2 연결을 위해 명령어를 입력한다.

/data 경로를 생성하고 해당 폴더와 EFS를 연결했다.

 

fs-xxxx:/ /data efs _netdev,tls 0 0    # /etc/fstab에 추가

/etc/fstab 파일에 아래 명령어를 입력해 서버가 재부팅되어도 EFS가 자동으로 마운트 될 수 있게 추가한다.

 

 

sudo vi /etc/httpd/conf/httpd.conf

Apache 웹 서버는 기본적으로 /var/www/html을 DocumentRoot로 사용하지만, 이를 /data로 변경한다.

 

 

DocumentRoot "/data"
<Directory "/data">
    AllowOverride None
    Require all granted
</Directory>

파일에서 DocumentRoot를 /data로 변경하고, 아래와 같이 설정을 수정한다.

이후 /data/index.html 파일에 원하는 HTML 파일을 넣어 테스트하면 된다.

 

 

위의 설정을 완료한 후, EC2 인스턴스를 AMI로 생성한다. 생성된 AMI는 이후 Auto Scaling Group(ASG)에서 사용할 템플릿으로 활용될 예정!

 

ASG(AutoScaling Group) 생성

위에서 생성한 ami를 기반으로 시작템플릿을 구성한다.

 

#!/bin/bash
# EFS 마운트
mkdir -p /data
mount -t efs -o tls fs-xxxx:/ /data

# Apache 시작
systemctl start httpd
systemctl enable httpd

시작템플릿 구성할 때 UserData에 위의 코드를 삽입한다.

 

생성한 시작템플릿을 바탕으로 ASG 를 생성한다.

 

ASG의 인스턴스 중 하나에서 /data/index.html 파일을 수정하면, 다른 인스턴스들에도 해당 변경 사항이 반영되는 것을 확인할 수 있다. 이는 EFS에 파일을 저장하고 있기 때문에 모든 인스턴스에서 동일한 파일을 공유하고 있다는 걸 알 수 있다!


이 방식은 Apache 웹 서버를 EFS와 연동하여 파일을 자동으로 반영하는 방법을 보여준다.

CI/CD 환경을 구축하기 어려울 때, 이 방법을 활용하면 유용할 것이다.

하지만 실제 서비스 환경에서는 CI/CD 파이프라인을 구축하여 소스 코드 변경 사항을 자동으로 배포하는 시스템을 구현하는 게 제일 베스트일 것 같다!

 

미리 AWS 환경은 세팅해둔 상태! (external alb - web(ec2) - was(ec2))

직접 apache와 tomcat을 올려보기 위한 작업을 할 것이다...

 

왜 web - was 분리 구성을 하는가?

https://hwanchang.tistory.com/5


WEB 서버 구성(Apache)

  • Apache 설치 및 시작
yum install -y httpd
systemctl start httpd
  • alb 의 target group 상태검사 경로 변경 

  • index.html 생성
cd /var/www/html
vi index.html

# index.html
<html>
<body>WEB-A 서버입니다.</body>
</html>
  • health check: alb dns 주소를 통해 확인

  • health check: curl 명령어 활용

 

WAS 서버 구성(Tomcat)

  • java 다운로드 & tomcat 다운로드

https://www.oracle.com/java/technologies/downloads/

https://tomcat.apache.org/에서 다운로드

tar xvzf <파일명>
cp -R <디렉토리명> /usr/local/src
  • tomcat, jdk 경로 설정
vi /etc/profile

# 경로 확인
source /etc/profile
echo $JAVA_HOME
echo $CATALINA_HOME

  • tomcat 서비스 등록
cd /etc/init.d
vi tomcat

# tomcat file
#!/bin/bash
# Startup script for the Tomcat Server
# chkconfig : 345 50 50
# description: Tomcat is a Web application server.
# processname : java
# directory :
CATALINA_HOME=/usr/local/src/apache-tomcat-10.1.11
export JAVA_HOME=/usr/local/src/jdk-17.0.8
export CATALINA_HOME=/usr/local/src/apache-tomcat-10.1.11
case "$1" in
start)
echo "Starting tomcat: "
$CATALINA_HOME/bin/startup.sh
;;
stop)
echo "Shutting down tomcat: "
$CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo "Restarting tomcat: "
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
;;
*)
echo "Usage: service tomcat"
start|stop|restart
exit 1
esac
exit 0

chmod 755 tomcat
service tomcat start

  • EC2 SG에 8080 포트 오픈
  • WAS 서버 index.html 생성
cd /usr/local/src/apache-tomcat-10.1.11/webapps/ROOT
vi index.html

# index.html
<html>
<body>WAS-A 서버입니다.</body>
</html>

 

WEB 서버 - WAS 서버 연동

  • WEB 서버 내부에 httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf

###New Configuration
<VirtualHost *:80>
    ServerName <alb-dns주소>

    ProxyPass / http://<was-ip>:8080/
    ProxyPassReverse / http://<was-ip>:8080/
</VirtualHost>

systemctl restart httpd.service
  • WAS 서버
cd /usr/local/src/tomcat/bin
./shutdown.sh
./startup.sh
  • alb dns 접속 시 WAS 화면이 뜨면 성공 

 

 

참고: https://sweetysnail1011.tistory.com/57

 

❗java 다운받을 때 프로세서 확인 꼭 하기 uname -i 명령어 활용❗

'Computer Science > DevOps' 카테고리의 다른 글

[Monitoring] Monitoring vs Observability  (0) 2025.01.13
[Jenkins] 다양한 플러그인 활용  (0) 2023.07.24
[Jenkins] Jenkins Pipeline 구축  (0) 2023.07.03
[Jenkins] Jenkins 다뤄보기  (0) 2023.06.27
[OS] OS 모음집  (0) 2021.08.12

+ Recent posts