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 재시작
$ 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 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!