회고

AWS EC2로 Next.js 서버 배포하기 -2

불닭냠냠 2025. 2. 11. 22:09

수업 듣고 공부하느라 밀린 서버 배포하기를 마저 작성하려고 합니다!

 


1. 프로그램 창이 열린 것까지 저번 1 때 완료했고, login ad:라고 쓰여있는 곳에 ec2-user라고 입력합니다! 그리고 엔터

 

이제 순서는 node.js 설치, git 설치, Next.js 앱 빌드 및 실행, Nginx 설정, Let's Encrypt 사용 입니다. 

 

2. node.js 설치

이제는 캡처본에는 프라이빗 IPv4 주소가 나오기 때문에 코드로 알려드립니다!

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

command not found가 나오셨다면 아래를 입력해 주세요. 위 명령어가 되셨다면 아래 코드는 스킵!

sudo yum install curl -y

curl 명령어를 다운 받는 거입니다.

sudo yum install -y nodejs

 

위 명령어를 치고 기다리시면 Complete! 가 뜨게 됩니다.

node -v //한 줄씩 엔터 치면서 버전이 나오는지 확인
npm -v

 

++ 2025.02.16 추가
https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v3/developer-guide/setting-up-node-on-ec2-instance.html

 

Amazon EC2 인스턴스에서 Node.js 설정 - AWS SDK for JavaScript

노드 설치는 현재 Amazon EC2 세션에만 적용됩니다. CLI 세션을 다시 시작하는 경우 nvm을 다시 사용하여 설치된 노드 버전을 활성화해야 합니다. 인스턴스가 종료되면 노드를 다시 설치해야 합니다.

docs.aws.amazon.com

설치가 안된다면 공식문서 참고해주세요!!

node -v

3. git 설치

sudo yum install git -y

위 코드를 작성하시고 기다리시면 또 Complete! 가 나옵니다.

 

git clone <내 레포지토리 주소>

아래 사진에 있는 아이콘을 누르면 레포지토리 주소를 복사할 수 있습니다. 대신!! 마지막 .git 삭제하기!!!!! 아니면 도메인 창에서 복사하셔도 됩니다.

$git clone ~~~~~~~~~~~ 이렇게 작성해주셔야합니다.

 

그리고 기다리다가 done이 끝났다면 ls를 눌러봐서 프로젝트 디렉토리를 확인 후 이동합니다.

cd <내 프로젝트 디렉토리>

ls를 쳐보는 이유는 제 디렉토리 폴더 이름이 길기 때문입니다 ㅎ

cd 하고 나면 [ec2-user@ip~~ ] 여기가 길어졌을 것입니다.

 

4. Next.js 앱 빌드 및 실행

npm install
npm run build

 

한 줄씩 실행해 줍니다. vs code에서 실행한 거랑 똑같습니다! ㅎㅎ

 

그리고 pm2로 Next.js 실행할 것입니다.

npm install -g pm2 //pm2 설치
sudo npm install -g pm2 // 안된다면 sudo로 설치

기다리시고 아래 코드 입력하시면

pm2 start npm -- start

online인 것을 확인해 주세요!

 

5. Nginx 설정

sudo yum install nginx -y
sudo dnf install nginx -y

 

엔진x를 깔아주세요!

sudo systemctl start nginx //시작
sudo systemctl enable nginx //활성화
sudo systemctl status nginx //nginx가 실행 중인지 확인

실행 중인지까지 하면 active (running)인 것을 확인해 주세요!

 

sudo nano /etc/nginx/nginx.conf

이제 안에 가지고 있는 도메인을 넣어줘야 합니다. server_name  _;여기를 수정해야 합니다.

 

server_name www.example.com; //자신만의 도메인 넣기

+ 아래도 추가해 주세요

 location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

파일 저장하고 종료 후 아래 코드를 입력하여 Nginx 설정을 다시 로드합니다.

sudo systemctl reload nginx

 

6. Let's Encrypt 사용

무료로 SSL 인증서를 발급해 주는 서비스입니다. 

+ Certbot 설치

sudo yum install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
// -d 로 내 도메인들 설정해주기!
sudo crontab -e

인증서의 유효 기간은 90일입니다. 이를 자동으로 갱신할 수 있도록 cron 작업을 설정

0 0 * * * certbot renew --quiet && systemctl reload nginx

매일 자정에 인증서 갱신을 시도

 


CI/CD로 자동 갱신도 가능하지만, 귀찮아서 파일들이 갱신될 때마다 아래 코드를 계속 입력하고 있습니다 ㅎ 

git pull origin dev
npm run build
pm2 restart all

 


고급 프로젝트에 배포를 적용하려다 보니까 임시저장을 해놓고 안올려놓은 것을 깨달았습니다.ㅎ 고급 프로젝트도 끝나가고 여유가 생기니 블로그를 다시 열심히 올려야겠습니다..