[AWS] WAS 서버에 Spring Boot 애플리케이션 배포하기 - pm2

koline·2024년 7월 10일
0

AWS

목록 보기
11/18

Spring 관련 포스팅에서 생성한 게시판 프로젝트를 WAS 서버에 배포해보자.

1. git repository clone 하기

# 원하는 경로에 애플리케이션 배포할 디렉토리 생성
> sudo mkdir /home/practice

# 해당디렉토리의 소유주 및 권한을 바꿔준다.
> sudo chown ubuntu:ubuntu /home/practice
> sudo chmod 760 /home/practice

# 경로로 이동
> cd /home/practice

# git repository clone
> git clone -git repository 주소-

# 경로 내부로 이동
> cd -clone된 경로-

2. datasource 수정

application.properties의 datasource가 현재는 로컬에서 개발하던 database로 설정되어 있을 것이다.

그것을 생성한 RDS에 연결해줘야 한다.

우선 RDS에 접속해서 스키마를 생성해준다.

그리고 사용자를 생성해서 이 스키마에 대한 권한을 준다.

> create user 'practice'@'%' identified by '비밀번호입력';

> grant all privileges on practice.* to 'practice'@'%';

> flush privileges;

스키마를 생성했으면 application.properties를 그에 맞춰 수정한다..

> vi ./src/main/resources/application.properties

:wq로 저장하고 나온다.

참고로 ddl-auto가 지금 create로 되어있는데 이는 처음 반영할 때 ddl을 자동 실행하기 위함이지 create로 계속 두면 절대 안된다.

재실행 시 기존 테이블을 삭제하고 다시 생성하기 때문에 당연히 안된다.

validate 또는 none으로 바꾸자.

3. gradle clean & build

# gradle clean & build
> gradle clean build

4. 실행 및 테스트

# gradle 실행
> gradle bootrun

정상적으로 실행된다!

200 응답!

5. PM2 적용

PM2node.js 진영에서 프로세스 관리를 위해 사용하는 라이브러리이다.

시스템이 종료됬다가 재시작될 때 자동 실행, 무중단 실행 (예기치 못하게 종료됐을 때 자동으로 재실행 시킨다) 등 다양한 편의성을 제공한다.

ubuntu 계정으로 설치하니까 전역으로 설치가 안되서 CodeDeploy를 적용할 때 문제가 생겼다.

sudo su - root

위 명령어로 root로 전환하거나 sudo 키워드를 꼭 사용해서 전역으로 설치하자.

# nvm 설치
> curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

# 환경변수 반영
> source ~/.bashrc

# 원하는 버전의 노드 설치
> nvm install 20.15.1

# yarn 설치 (npm 써도 무관)
> npm install -g yarn

# pm2 설치
> yarn global add pm2

# 디렉토리 이동
> cd /home/practice

# pm2 실행
> pm2 ecosystem

pm2 ecosystem 명령어를 실행하면 해당 디렉토리에 ecosystem.config.js 파일이 생성될 것이다.

# vi로 실행
> vi ecosystem.config.js

기본으로 아래의 파일이 있을 것이다.

module.exports = {
  apps : [{
    script: 'index.js',
    watch: '.'
  }, {
    script: './service-worker/',
    watch: ['./service-worker']
  }],

  deploy : {
    production : {
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
      'pre-setup': ''
    }
  }
};

아래와 같이 수정해주자

module.exports = {
  apps : [{
    name: 'practice-api',
    script: 'java',
    args: ['-jar', 'practice-BE/build/libs/api-0.0.1.jar']
  }],

  deploy : {
    production : {
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
      'pre-setup': ''
    }
  }
};

보면 알 수 있듯이 pm2를 실행하면 script에 지정된 명령어를 실행한다는 뜻이고 이 명령어의 매개변수로 args를 준다는 뜻이다.

# 실행
> pm2 start ecosystem.config.js

성공적으로 실행 되었다!

6. WAS02 서버에도 동일하게 배포해주자.

profile
개발공부를해보자

0개의 댓글

관련 채용 정보