git clone+PM2를 이용해 EC2에 API 서버 배포를 해보자.
- 서버에 속하는 각 서비스들을 모두 레포지토리로 나눈다.
- EC2에서 services 폴더를 생성한 후 그 안에 서비스 레포지토리들을 모두
git clone한다.- 각 서비스의 인스턴스에 대한 설정을 하기 위해 services 폴더 안에
ecosystem.config.js를 작성한다.- EC2 내에 PM2를 설치해주고 PM2로
ecosystem.config.js를 실행시켜 모든 서비스를 한번에 구동시킨다.
AWS 콘솔에 접속 후 EC2로 들어가서 해당 인스턴스 연결에서 SSH클라이언트 탭의 명령어를 터미널에서 실행시킨다.
ssh -i your-key.pem ec2-user@your-ec2-public-ip
단, 이 명령어는 your-key.pem이 있는 위치에서 실행시킨다. 안그러면 뭐 찾을 수 없다고 떴나..그랬다.
mkdir ~/services
cd ~/services
(여기선 서비스를 user-service, auth-service, post-service 이렇게 세개로 예시를 들겠다.)
git clone https://github.com/your-username/user-service.git
git clone https://github.com/your-username/auth-service.git
git clone https://github.com/your-username/post-service.git
git clone을 할 때마다 git login을 계속 해야 할텐데 이 뒤에도 pull, fetch 이런걸 쓸 때마다 git login을 해야하므로
ssh key를 통해 git 연동을 하는 법을 이후의 포스팅에서 다룰 예정
이제 PM2 설정 파일을 작성해야 하는데 이 포스팅에서 다루는 설정말고도 많은 기능들이 있으니 한번 찾아보는걸 추천합니다.
기본적으로 이 파일은 모듈 시스템을 사용하여 구성된 설정 파일이며 각 서비스를 PM2로 관리하기 위해 정의해놓은 파일이라고 이해하면 쉽다...아마도
nano ecosystem.config.js
위의 명령어는 services/ 의 위치에서 실행해야하며 nano편집기로 ecosystem.config.js을 작성하는 것이다.
ecosystem.config.js
module.exports = {
apps: [
{
name: 'user-service',
script: './user-service/src/index.js',
env: {
...commonEnv,
NODE_ENV: 'development',
PORT: 8091,
DB_NAME: 'dev',
DB_USERNAME: 'user-service',
},
env_production: {
...prodEnv,
NODE_ENV: 'production',
DB_NAME: 'prod',
},
},
{
name: 'auth-service',
script: './auth-service/src/index.js',
env: {
...commonEnv,
NODE_ENV: 'development',
PORT: 8092,
DB_NAME: 'dev',
DB_USERNAME: 'auth-service',
},
env_production: {
...prodEnv,
NODE_ENV: 'production',
DB_NAME: 'prod',
},
},
{
name: 'post-service',
script: './post-service/src/index.js',
env: {
...commonEnv,
NODE_ENV: 'development',
PORT: 8093,
DB_NAME: 'dev',
DB_USERNAME: 'post-service',
},
env_production: {
...prodEnv,
NODE_ENV: 'production',
DB_NAME: 'prod',
},
},
]
}
이제 이 코드를 약간 설명해보겠다.
모듈 시스템으로 구성되어 있다.PM2로 관리할 애플리케이션 목록을 정의한다.pm2 start 애플리케이션을 할텐데 이때 실행되는 파일이다.(여기서 commonEnv는 서비스에 필요한 환경변수들을 따로 정의해놓은 것이다.)
이 외에도 아주 많은 속성들이 존재한다.
결국 이 파일에서는 PM2에서 관리할 애플리케이션의 설정을 하고 있다. 이것이 끝.
이제는 설정 파일도 만들었고 서비스들도 clone으로 가져왔으니 PM2를 실행만 하면 된다.
먼저 PM2를 깔아주고,
npm install -g pm2
PM2로 ecosystem.config.js를 실행하면
pm2 start ecosystem.config.js
설정 파일에서 작성해놨던 apps 내의 애플리케이션들이 전부 실행된다. (이때는 env에서 설정했던 환경변수들이 들어간다.)
만약에 env_production을 넣어서 실행하고 싶다면,
pm2 start ecosystem.config.js --env production
이렇게 하면 된다.
실제로 위의 과정을 따라간다면 오류들이 뜰 수도 있다. 예를 들면 npm을 설치안했거나 등등 이것들은 생략하겠다.
디렉토리 구조
services/
├── ecosystem.config.js
├── auth-service/
│ └── (auth-service 관련 파일들)
├── post-service/
│ └── (post-service 관련 파일들)
└── user-service/
└── (user-service 관련 파일들)
다음 포스팅에서는 EC2에 git 연동하는 법과 최신 버전으로 재시작하는 법을 쓸 예정이다.