관련 내용
[리눅스 인프라] - 스프링 부트 무중단 배포를 위한 NginX 적용하기
개요와 목적
리눅스 터미널에서 실행한, Spring 서버는 터미널이 종료되는 즉시 서버도 함께 종료된다. 이번 글에서는 PM2와 Linux service를 사용해서 터미널이 종료되어 동작하는 스프링 서버를 만들어보자.
위 관련 내용 글에서도 PM2를 사용해서, 터미널에 구애 받지 않고, API서버와 UI서버를 동시에 실행하였다.
개발 환경
- SpringBoot(gradle) : 2.7.8
- Ubuntu : 20.04
PM2
PM2는 Node.js 의 프로세스를 관리해주는 서비스이다. 이번 글에서는, Ubuntu에 PM2를 설치하고, 두 개의 스프링 서버를 올려서, 프로세스를 작동 시키는 방법에 대해서 알아보겠다.
설치
//NodeJs 설치
curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh> | bash
//nvm을 활성화
. ~/.nvm/nvm.sh
//Node.js의 최신 버전을 설치
nvm install --lts
//확인
node --version
//PM2 설치
npm install -g pm2
스프링 서버 작동하기
vi ui.json 파일을 만들어서, Spring 서버를 PM2에서 작동하기
{
"apps" : [{
"name" : "uiserver",
"script" : "java",
"args" : [
"-jar",
"-Dspring.profiles.active=server",
"/home/j/SepearateDeliveryService/UIDeliveryService/build/libs/UIDeliveryService-0.0.1-SNAPSHOT.jar"
]
}]
}
실행 하기
pm2 start ui.js
그리고 API 스프링 서버를 동작하게 하는 api.json 파일을 만들어 pm2 start api.json 하면,
아래 그림과 같이 하나의 우분투 서버에서 PM2를 사용해 스프링 API 서버와 UI 서버를 작동 시킬 수 있다.
Linux Service
이번에는 PM2가 아닌, .service 파일을 만들어 터미널이 종료되어 실행하는 스프링 서비스 만드는 방법에 대해서 알아보자.
Linux service는 사용자가 직접적으로 제어하지 않고, 백그라운드에서 작동하는 프로그램이다. service들은 systemd라는 프로세스가 관리한다.
service 파일 생성
sudo vi /etc/systemd/system/ui.service
해당 디렉토리에 서비스 파일을 만든다.
[Unit]
Description=Service Description
After=syslog.target network.target mysql.service
[Service]
ExecStart=/bin/bash -c "exec java -jar -Dspring.profiles.active=server /home/j/SepearateDeliveryService/UIDeliveryService/build/libs/UIDeliveryService-0.0.1-SNAPSHOT.jar"
Restart=on-failure
RestartSec=1
User=root
Group=root
[Install]
WantedBy=multi-user.target
권한 주고 실행 하기.
sudo systemctl daemon-reload
sudo systemctl enable ui.service
sudo systemctl start ui.service
상태 확인 및 종료
sudo systemctl status ui.service
sudo systemctl stop ui.service
systemd 명령어
Reference
pm2
https://charlie-choi.tistory.com/240
https://zlcjfalsvk.github.io/java/pm2/
https://engineering.linecorp.com/ko/blog/pm2-nodejs/
https://velog.io/@ko-inseoklee/EC2에서-Spring-Boot-PM2로-배포하기
LinuxService
https://pamyferret.tistory.com/16
https://it-serial.tistory.com/entry/Linux-systemctl-명령어-프로세스-상태-확인
https://hello-gg.tistory.com/55
'리눅스 인프라 > Ubuntu' 카테고리의 다른 글
VirtualBox NAT network 고정 IP 할당하기 (1) | 2023.01.28 |
---|---|
리눅스 gradle 파일 삭제와 gradlewapper로 Spring Boot 실행 (0) | 2022.12.25 |