
이번 내용에서는 nginx 를 활용해서 무중단 배포 환경을 만들어보자.
이를 위해서 먼저,
nginx-instance 로 해주었다.jenkins-instance 와 동일한 스펙으로 생성했다.application-instance-2 로 해주었다.application-instance-3 로 해주었다.application-instance-1 와 동일한 스펙으로 생성했다.👉 nginx-instance 에 NGINX 를 설치하자.
( ChatGPT 4o : 로키 리눅스에 nginx 설치하는 명령어 알려줘. )
sudo dnf updatesudo dnf install epel-releasesudo dnf install nginxsudo systemctl start nginxsudo systemctl enable nginx
sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --reload
👉 application-instance-2 , application-instance-3 두 애플리케이션 인스턴스에 각각 자바 애플리케이션을 띄워주기 위한 작업을 진행해야 한다.
application-instance-2 과 application-instance-3 에 기본으로 설치된 자바 버전은 8버전이다. 프로젝트의 jdk 버전은 17이므로 해당 버전으로 설치해야 한다.sudo dnf install java-17-openjdk-develsudo alternatives --config javajava -version 으로 기본 버전 확인Jenkins 에서 각 애플리케이션 인스턴스에 접근할 수 있도록 Jenkins 의 공개키를 각 애플리케이션 서버 authorized_keys 에 등록해줘야 한다.application-instance-1 에서 vi ~/.ssh/authorized_keys 경로에 넣어줬던 Jenkins 의 공개키를, application-instance-2 와 application-instance-3 에도 넣어주자.
👉 이번에는 Jenkins 배포 스크립트에서 application-instance-1 뿐만 아니라, 다른 두 애플리케이션 서버에도 배포를 해주도록 수정해야 한다.
2_1_1_pipeline_script 적용
application-instance-2 와 application-instance-3 에 실제로 애플리케이션이 떴는지 확인해보기 위해 8080 포트로 접속해보자.sudo firewall-cmd --zone=public --add-port=8080/tcp --permanentsudo firewall-cmd --reload
👉 이제 마지막으로 한 가지 더 해줘야 하는 작업이 있다.
클라이언트에서 각각의 애플리케이션에 대해서 직접 8080 포트로 접속하는게 아니라, NGINX 를 통해서 접속을 하도록 만들어야 한다.
따라서 클라이언트에서 NGINX 로 접속을 했을 때, 애플리케이션 서버로 연결되도록 만들어보자.
vi /etc/nginx/nginx.conf
sudo nginx -tsudo systemctl reload nginx
tail -f /var/log/nginx/error.logPermission Denied 관련 로그가 나온다.setsebool -P httpd_can_network_connect 1
✔️ 참고) Host key verification failed (08:50)
2_1_0_pipeline_script 과 2_1_1_pipeline_script 의 내용이 다르지만, 강의 자료에서는 내용이 같아보인다. (강사님의 업로드 착오로 보인다.)2_1_0_pipeline_script 적용 후 Host key verification failed 관련 오류가 발생해서 2_1_1_pipeline_script(StrictHostKeyChecking 옵션 적용) 로 수정한 것.2_1_0_pipeline_script 에는 StrictHostKeyChecking 옵션이 없어야 함. Host key verification failed 문제 참고)https://hellorennon.tistory.com/20
✔️ 참고) 배포 스크립트 개선 - 2_2_pipeline_script
sleep 202_2_pipeline_script 보다 이전의 스크립트 로직을 보면, 그렇게 될 시 result 가 0이 아니므로, 에러쪽으로 빠져서, 배포가 실패했다라고 간주가 될 것이다.강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 이준형 강사님께 있습니다.