아래 블로그를 통해 리눅스 환경에서 spring server을 무중단 배포하는 기술을 적용해봤다. 너무 친절하게 포스팅이 되어 있어서, 따라하는데 큰 어려움은 없었다.
https://wbluke.tistory.com/39?category=418851
내가 해당 작업을 진행하면서 만난 문제점들과 해결방법을 기록하기 위해 해당 포스터를 작성한다.
분명 패키지 목록에는 nginx가 설치되어 있는데, 디렉터리를 아무리 찾아도 /etc/nginx/nginx.conf
를 찾지 못했다. 리눅스 서버에서 nginx와 관련된 폴더 및 설정 파일까지 모두 삭제했다가, apt-get
으로 재설치하니 .conf파일을 찾을 수 있었다.
설정 파일을 찾을 수 없는 경우에는 아래 명령어를 통해 관련 파일까지 모두 삭제 후 재설치해보자.
sudo apt-get remove nginx nginx-common # config files을 제외하고 삭제
sudo apt-get purge nginx nginx-common # 전체다 삭제
sudo apt-get autoremove #종속성 관련 페키지 삭제
rm -rf /etc/nginx
위에 링크한 블로그에서는 /etc/nginx/nginx.conf
에 스크립트를 추가한다.
하지만 OS나 nginx 버전에 따라서 수정해야 할 파일이 다르다. /etc/nginx/nginx.conf
또는 /etc/nginx/sites-enabled/default
에 아래와 같이 스크립트를 추가하자.
...
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
include /etc/nginx/conf.d/service-url.inc;
location / {
proxy_pass $service_url;
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;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
...
스프링부트 grade 플로그인 2.5 버전 부터는 gradle 필드 시 JAR 파일이 2개 생성된다.
스크립트 명령어나 직접실행할 때 java -jar ..{생략}../build/libs/*
과 같이 하면, ~-plain.jar
이 실행될 수도 있다. 의존성 파일을 포함하지 않는 실행 파일이므로, java -jar
명령어로 실행 시 에러가 발생한다.
해결 방법은 2가지이다. gradle에서 plain.jar 생성 방지 코드를 넣던가, 아예 명령어를 명확하게 넣던가.
1. gradle에서 생성 방지 코드 넣기
/*
build.gradle
*/
jar {
enabled = false
}
2. 파일명 정보를 더욱 명확하게 명시
java -jar ..{생략}../build/libs/*SNAPSHOT.jar
물론 큰 들의 코드들은 맞지만, 짜잘하게 디렉터리명 등이 나에게 맞게 세팅해야 한다. 명령어 자체가 어렵지 않으니, 반드시 모든 라인을 이해하자.
블로그에 있는 3개의 스크립트 파일들이 역할은 다음과 같다.
필자는 말하는 감자 학부생이므로 nginx를 깊이 알지못한다. 에러 로그만 보고 모든 문제를 해결할 능력이 없다. 따라서 에러가 생기면 아래 명령어를 통해서 점검 및 nginx를 재시작해주자.
nginx -t -c /etc/nginx/nginx.conf
: nginx의 설정 파일을 테스트할 수 있다.
sudo service nginx restart
: 서비스 재시작
systemctl status nginx.service
: 오류로 인해 재시작이 되지 않는다면, 이 명령어로 로그를 확인해보자
sudo service nginx status
: 현재 서비스가 어떤 상태인지 확인하자
sudo lsof -i :5555
: 특정 포트 확인하기
4번과 비슷한 맥락이다. 블로그 내용을 필자처럼 아무 생각없이 복붙만 한다면 에러만 뿜어낸다. 파일 내용을 내 상황에 맞게 바꿔주자. 예를 들면 permissions.ower
또는 permissions.group
등은 내 리눅스 서버 상황에 맞게 바꿔야 한다.
선하신 많은 분의 블로그 덕분에, 다양한 기술을 습득하고 적용하는 데 큰 어려움 없이 진행할 수 있었다. 하지만 무식하게 블로그 내용을 복붙하면 안된다. 왜 그런 코드가 짜였는지, 왜 이런 행위를 해야 하는지 등을 이해해야 한다. 그래야 오류 상황에서 대처할 수 있다. 착하신 기술 공유자분들이 수저에 밥까지 올려줬으면, 내가 알아서 떠먹자.