[Toy Project] systemd 서비스 배포 과정

최지나·2024년 2월 21일
3

배경

  • 서버의 DB 백업/복구 기능을 만들다 보니 Test 서버가 필요했다. 운영 중인 서버에서 직접 테스트 할 수 없었고, 로컬이랑은 환경이 달랐기 때문이다(로컬은 window, 운영 서버는 우분투)
  • 그래서 테스트 서버를 운영 서버와 동일하게 하나 더 생성해 테스트 서버에 제품 관리 시스템을 systemd 서비스로 배포하였다 그 과정을 기록하고자 한다

과정

Java, Postgresql 설치

  • 아무것도 존재하지 않는 깡통 서버였기에 java와 DB를 설치해 주어야 했다

Postgresql

  • 설치
sudo apt update
sudo apt install postgresql postgresql-contrib

\password postgres   #PostgreSQL user의 비밀번호 변경
  • 접속 확인
sudo -u postgres psql

Java

  • 서버 버전 확인
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
...
  • 서버 버전에 맞는 jdk 설치
sudo apt update
sudo apt install openjdk-17-jdk

systemd 서비스 등록

위치: /etc/systemd/system

[Unit]
Description=Logistics Service
After=network.target

[Service]
User={유저이름}

ExecStart=/bin/java -jar /home/../latest/logistics.jar --spring.profiles.active=test
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

jar 파일 생성 및 배포

  • Fat-jar 생성과정을 통해 fat-jar파일을 생성하고 테스트 서버로 복사해왔다

  • 3개의 디렉토리를 사용해 jar 파일들을 관리하였다

- toupdate: jar file to upload
- latest: running jar
- version: oldest version jar
#!/bin/bash

sudo systemctl stop logistics
rm /home/../latest/logistics.jar
mv /home/../latest/*.jar /home/../versions/
mv /home/../toupdate/*.jar /home/../latest/
ln -s /home/../latest/*.jar /home/../latest/logistics.jar

sudo systemctl start logistics
sudo journalctl -u logistics -f
  • 실행 중인 서비스를 멈춘 뒤, 실행되던 jar를 이전 version 디렉토리로 옮긴다
  • 업데이트할 jar 파일을 latest 폴더로 옮긴다
  • latest 폴더에 옮긴 jar 파일을 logistics.jar로 심볼릭 링크를 생성한다
  • 서비스를 시작하고 로그를 조회한다

결과

  • {test 서버 IP}:{backend port} 로 접속 결과 정상적으로 배포되었음을 확인할 수 있었다!

느낀 점

  • 회사에서 배포할 때는 보통 Java, postgres 등은 이미 깔려 있었기 때문에 깡통 서버를 마주 했을 때 뭐부터 해야할지 처음에는 잘 몰랐던 것 같다!
  • 배포도 밥 먹듯이 쉽게 할 수 있을 정도로,,, DB 백업 기능 완성 후에 깡통 서버에서 배포하는 연습을 조금 더 해봐야겠다 🥰
  • 그리고 jar 파일 업데이트하고 서비스 재실행하는 스크립트도 조금 더 개선해 봐야겠다
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글