본문 바로가기
Infra

CI / CD 구축하기 (5) - Amplify ? 어림없지

by 박순애 2023. 3. 13.
반응형
이제는 next.js 의 ssr 배포만이 문제가 아니라는 사실에 직면하게 되었다.
어디서부터 어디까지 내가 해야하는 부분인가에 대해, 그리고 기존 프로젝트가 그렇게 밖에 할 수 없었던 사실에 대해
다시 숙고해야 하는 지점에 이르렀다.
현 프로젝트의 특징은,

1.  pc 웹 과 모바일 웹 프로젝트가 각각 존재한다. -> 모바일 환경과 pc 환경에서 각자 다른 경험을 주고 있다.
2. 두 개의 레포는 공통의 도메인에서 nginx 의 user agent 로 분기 처리

즉, 프로젝트는 두 개이지만 하나의 도메인을 사용하므로 공통의 서버에서 다뤄야 한다는 점이 고려되어야 했다.

 

Amplify 는 console 에서 자동화 배포 및 관리까지 해주는 유용한 플랫폼이었다. (과거형)

그러나 각각의 앱 호스팅을 하고 나면 단점으로 각각의 서버가 생성되고 현 프로젝트처럼 하나의 도메인에 두 개의 프로젝트를 담기 위해서는 통합된 서버 하나가 더 필요했다. 전부 다 시각화 해주는 편리함이 있지만 그에 따른 적절한 제어 혹은 커스텀 배포에 관해서는 Amplify 자체에 대한 공부가 더 많이 요구되었다.

 

따라서, 다시 원점으로 돌아와 (또 오열) EC2 + pm2 + nginx 로 구성된 하나의 서버에 pc 프로젝트와 모바일 프로젝트를 넣고,

github CI CD 를 세밀하게 구축해서 push 액션이 발생하면 해당 서버로 접근해서 pm2 restart all (혹은 pm2 restart 0 or 1) 까지 진행되는 방향으로 진행해보려고 한다.

 

EC2 와 도메인을 연결하기 위해서는 EC2 자체 설정부터 세심하게 해야했다. 왜냐? 내가 서버를 새로 생성하기 때문 ㅎㅎ ..

** 참고 자료 : AWS VPC + Alb + EC2

 

[AWS] Vpc + Alb + Ec2

VPC + NLB(ALB) + EC2 구축해보자.

teri0411.github.io

아쉽게도 AWS 에 대해 회사 내에서 조언을 받거나 함께 구축할 수 있는 사람이 없고 프론트엔드 프로젝트를 위해 미리 세팅된 서버도 없으므로 내가 직접 해보게 됐다. 오히려 좋아 (?) ,, 중요한 건 꺾이지 않는 마음,, 의 모토를 갖고 ,,

 

 

** 참고 자료 : VPC 생성

 

[AWS] VPC를 생성할 때 고려할 점.

클라우드 사용하는 목적이 무엇이 됐건 VPC(Virtual Private Cloud)를 생성하는 것이 가장 기본이 아닌가 싶다. VPC를 만들고자 한다면 크게 다음 4가지를 거쳐야 한다. VPC라는 가상의 데이터센터를 생성

bosungtea9416.tistory.com

AMI 생성 및 VPC 변경하기

 

AMI생성 및 VPC 변경하기

# EC2 인스턴스를 AMI 이미지로 생성 후 새로운 VPC 와 Subnet을 부여하는 과정을 수행한다. 예를들어 A라는 VPC에 인프라 리소스 자원을 세팅 후 테스트를 진행 후 B 라는 운영 VPC에 인프라를 동일하게

may9noy.tistory.com

 

 

Ec2 설정, 즉 VPC 및 alb 세팅 이전에 먼저 선작업 했던 (사실 선작업의 의미가 없는,, ) pm2 설정 과정부터 간단하게 기록하려고 한다.

 

Ec2 인스턴스에 Node.js 및 Nginx 설치

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install -g pm2
sudo apt-get install nginx

 

프로젝트 파일을 EC2 인스턴스로 복사

나의 경우 github clone 해서 가져왔고, npm private repo 적용을 위해 npm adduser 를 진행했다.

sudo apt-get install git // git 설치
git --version // git 설치 확인

 

** 추가

1. nginx 포트 열기 -> config 생성 및 수정

2. 프로젝트에 들어가서 git pull 을 받기 -> 로그인 1회 이후 영구적으로 로그인 되게끔 설정

 

 

프로젝트 폴더로 이동해서 필요한 패키지를 npm install 을 통해 설치하고,

pm2 를 사용하여 프로젝트를 시작한다.

 

pm2 start npm --name "app name" -- run start

 

무중단 실행을 위해,

pm2 startup
pm2 save

까지 해줘본다.

 

pm2 상태 확인을 위해서,

pm2 list
pm2 status

명령어로 계속 online 인지, errored 상태는 아닌지 체크한다.

 

Nginx 의 기본 설정

Nginx 의 설정 파일을 새로 만들거나 기존에 있었다면 그 파일을 열고 기본 세팅을 해준다.

sudo nano /etc/nginx/sites-available/default

server {
    listen 80;
    server_name your-domain-name; // 실제 사용하고자 하는 도메인 이름

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

이후, 

sudo service nginx restart

위의 명령어로 Nginx 재실행 한다.

다만, 현 프로젝트에서는 User agent 로 모바일 및 pc 프로젝트 분기를 하고 있으므로 해당 부분은 서버를 띄워서 다시 확인해볼 예정..

 

 


 

새로운 vpc 가 생성되고 나서 ec2 인스턴스 연결이 안 되는 상황에 대해 기록

** 참조 문서 : AWS EC2 SSH 연결할 때 네트워크 설정

 

AWS EC2 SSH 연결 할때 네트워크 설정

목차 EC2 생성하고 이런 메세지가 뜬다 There was a problem connecting to your instance we were unable to connect to your instance. make sure that your instance’s network settings are configured correctly for ec2 instance connect. EC2에서

rainbound.tistory.com

 

AWS ssh 접속 안 될 경우

 

[AWS] ssh 접속이 안될 경우(timeout)

AWS 를 등록하고 인스턴스를 생성해서 ssh에 접속하려고 하는데 계속 접속이 안된다. 인터넷에 찾아보면 대부분 보안그룹을 등록하라고만 나오는데, 실제로 똑같이 해보아도 안되었다.(인스턴스

lemontia.tistory.com

 

요점은 다음과 같습니다.

 

1. VPC 생성 시 인터넷 게이트 웨이 연결

2. 해당 인터넷 게이트를 라우팅 테이블에 세팅하기

** 추가 : 라우팅 테이블은 연결된 VPC 의 서브넷 (특히 해당 인스턴스와 연결된 서브넷) 이 추가되어있어야 한다.

3. Ec2 보안그룹을 ssh 22 포트에 라우팅 테이블에 설정된 대상 주소로 설정하기

 

AWS 는 이렇게나 미로 같습니다..

 

 

반응형

댓글