![[Next Step] 12.8 웹서버 도입을 통한 서비스 운영(p458) 정리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRpnUo%2Fbtsz8oF1HSc%2FYKBcIAHriuAvKjoeRJ0msK%2Fimg.png)

4-1. nginx 설치 및 설정 디렉토리
$ apt-get install -y nginx
$ sudo service nginx start
$ netstat -tnlp
서버 아이피 접속시(80포트) nginx default 페이지 확인 가능하다
80/tcp 접근 되지 않을 경우 ufw 방화벽 설정 확인해보기
주요 디렉토리
- /etc/nginx/sites-available
- /etc/nginx/sites-enabled
참고. 강의
https://www.youtube.com/watch?v=7GlCo6RHBns
4-2. nginx 와 tomcat 서버 연동
nginx 와 tomcat 연결 설정
$ cd /etc/nginx/sites-availabe
$ sudo vim jwp-basic
# 아래 내용 작성 후 저장 - tomcat 8090 포트로 연결한 부분만 주의
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://localhost:8090;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
참고.
[Nginx] Nginx와 SpringBoot 내장 Tomcat 연동
프로젝트를 빌드하여 빌드 산출물을 ec2 서버에 전송하여 톰캣을 통해 배포했다고 해보자. 그럼 서비스 배포가 완료된 것일까? 그렇지 않다.왜냐하면 http는 기본적으로 80포트로 통신하기 때문에
velog.io
심볼릭 링크 설정 후 nginx 재시작
$ cd ../sites/enabled
$ sudo rm -rf default
$ sudo ln -s ../sites-available/jwp-basic jwp-basic
$ sudo nginx -s reload
tomcat 재시작
$ cd ~/tomcat/bin
$ startup.sh
4-3. nginx 점검 페이지 설정
배포시 임의 점검 페이지로 변경하고, 배포 완료시 톰캣으로 변경하도록 하려한다
1. 탬플릿 업로드
- 학습 중인 강의에 404 page 만들어 둔 게 있어 활용
- 테스트 용도이기 때문에 온라인 상의 무료 탬플렛 사용 추천
# 파일 업로드 - 현재 경로의 zip 파일을 ubunut1 container에 /home/ubuntu/download 디렉토리로 업로드
$ zip -r 404Page.zip Chapter2
$ scp 404Page.zip ubuntu@172.19.0.11:/home/ubuntu/download
2. container 접속, 압축 풀기
- 172.19.0.11은 직접 지정한 container ip
# 컨테이너 접속
$ docker exec -it ubuntu1 /bin/bash
또는
$ ssh ubuntu@172.19.0.11
# 압축 풀기
$ cd /home/ubuntu/download
$ unzip 404Page.zip
$ mv Chapter2 404Page
$ mv 404Page/ ../repositories
3. 권한 부여 (Trouble Shooting)
nginx를 root 권한으로 실행시키기 때문에 문제없이 ubuntu 디렉토리에 접근가능할거라 생각했다
결과는.. 에러 로그가 확인되었다 ($ sudo tail -500f /var/log/nginx/error.log)
Nginx 재실행시
- 디렉토리 접근 및 실행권한이 없어 에러가 발생
- /home/ubuntu/repositories/404Page 경로에서 권한 잘못된 것을 찾아 수정
- 이번의 경우 ubuntu 폴더 권한 문제였다 (변경전 750, 변경 후 755)
$ sudo chmod -R 644 /home/ubuntu
4. nginx 설정 파일 생성, 심볼릭 링크 변경
$ cd /etc/nginx/sites-availabe
$ sudo vim jwp-basic-pm
# 아래 내용 중 root가 default 경로이고, index ~ index.nginx-debian.html까지 file search
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/ubuntu/repositories/404Page;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
심볼릭 링크 변경해주고, 화면이 나오는지 확인
$ cd ../sites-enabled
$ sudo rm -rf jwp-basic
$ sudo ln -s ../sites-available/jwp-basic-pm jwp-basic
$ sudo nginx -s reload
*IP 접속시 정상 연결 확인
4-4. 쉘 스크립트를 활용한 배포 및 점검 자동화
- 책에서는 script 파일을 만들어 수동으로 swap 하는 내용까지만 설명한다
- 빌드 배포시 /heartbeat와 같은 요청을 보내 원하는 결과값이 확인되면 swap되도록 한다면 script 자동화가 될 것이다
(추후 테스트 후 추가 예정)
1. deploy.sh 수정
빌드 전 점검 페이지 바라보도록 심볼릭 링크 수정 후 nginx reload 한다
NGINX_HOME=/etc/nginx
cd $NGINX_HOME/sites-enabled
sudo rm -rf jwp-basic
sudo ln -s ../sites-available/jwp-basic-pm jwp-basic
sudo nginx -s reload
deploy.sh
#!/bin/bash
REPOSITORY_DIR=~/repositories/jwp-basic
TOMCAT_DIR=~/tomcat
RELEASE_DIR=~/releases/jwp-basic
NGINX_HOME=/etc/nginx
cd $NGINX_HOME/sites-enabled
sudo rm -rf jwp-basic
sudo ln -s ../sites-available/jwp-basic-pm jwp-basic
sudo nginx -s reload
cd $REPOSITORY_DIR
pwd
git pull
mvn clean package -DskipTests
$TOMCAT_DIR/bin/shutdown.sh
rm -rf $TOMCAT_DIR/webapps/ROOT
pwd
cd target
pwd
C_TIME=$(date +%s)
echo "time : $C_TIME"
mv $REPOSITORY_DIR/target/jwp-basic $RELEASE_DIR/$C_TIME
ln -s $RELEASE_DIR/$C_TIME $TOMCAT_DIR/webapps/ROOT
$TOMCAT_DIR/bin/startup.sh
2. deploy_finish.sh
배포가 완료 되었으므로 다시 심볼릭 링크 원래대로 변경 후 reload 한다
$ cd ~/scripts
$ vim deploy_finish.sh
# 권한 변경 후 실행
$ chmod -R 755 deploy_finish.sh
$ ./deploy_finish.sh
deploy_finish.sh
#!/bin/bash
NGINX_HOME=/etc/nginx
cd $NGINX_HOME/sites-enabled
sudo rm -rf jwp-basic
sudo ln -s ../sites-available/jwp-basic jwp-basic
sudo nginx -s reload
echo "server start finished"
정상적으로 톰캣 연결된 것을 확인가능했다
'독서 > 📚' 카테고리의 다른 글
[Next Step] 5장 웹 서버 리팩토링, 서블릿 컨테이너와 서블릿의 관계 (0) | 2023.11.16 |
---|---|
[Next Step] 3~4장 HTTP 웹서버 구현을 통해 HTTP 이해하기(No Framework) (0) | 2023.11.15 |
[Next Step] 10.4 배포 자동화를 위한 쉘 스크립트 개선 (p362) 정리 (0) | 2023.11.10 |
[Next Step] 6.6 쉘 스크립트를 활용한 배포 자동화(p218) 정리 (0) | 2023.11.03 |
무료 전자 도서관 이용 후기 (with 교보문고 전자 도서관 앱) (0) | 2023.11.03 |

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!