이제는 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 변경하기
# 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 접속이 안될 경우(timeout)
AWS 를 등록하고 인스턴스를 생성해서 ssh에 접속하려고 하는데 계속 접속이 안된다. 인터넷에 찾아보면 대부분 보안그룹을 등록하라고만 나오는데, 실제로 똑같이 해보아도 안되었다.(인스턴스
lemontia.tistory.com
요점은 다음과 같습니다.
1. VPC 생성 시 인터넷 게이트 웨이 연결
2. 해당 인터넷 게이트를 라우팅 테이블에 세팅하기
** 추가 : 라우팅 테이블은 연결된 VPC 의 서브넷 (특히 해당 인스턴스와 연결된 서브넷) 이 추가되어있어야 한다.
3. Ec2 보안그룹을 ssh 22 포트에 라우팅 테이블에 설정된 대상 주소로 설정하기
AWS 는 이렇게나 미로 같습니다..
'Infra' 카테고리의 다른 글
CI / CD 구축하기 (7) - Next.js(SSR), github IP, EC2 등 .. (0) | 2023.04.19 |
---|---|
CI / CD 구축하기 (6) - ELB 및 Nginx (0) | 2023.03.15 |
두 번이나 이 거지같은 next.js 배포에 떨어지다니 (0) | 2023.03.07 |
CI / CD 구축하기 (4) - CodeDeploy (0) | 2023.02.28 |
CI / CD 구축하기 (3) - Github actions 와 ec2 (0) | 2023.02.24 |
댓글