EC2 + Nginx + Route53

소해·2025년 3월 7일

next.js 배포

목록 보기
3/3
post-thumbnail

간단한 사이드프로젝트를 S3에 배포하였다.
그런데 완성시켜놓고 보니 너무 단순한가 싶어서 기능을 확장시키기로 했다.

기능구현을 위해 서버와 DB가 필요했다. Next.js의 Route Handler와 AWS RDS를 사용하기로 결정했다. 또한 구매한 도메인으로 요청을 연결하기 위해 Nginx와 Route53을 사용하였다.


1. 아키텍처 설계

(1) 클라이언트: example.net으로 요청을 보냄
(2) Route53: 해당 도메인을 EC2의 공인 IP로 연결
(3) NginX: 요청을 받아 localhost:3000(Next.js 서버)로 전달
(4) PM2가 관리하는 Next.js앱 : 요청을 처리하고 결과를 반환
(5) RDS : Next.js API Routes를 통해 DB 요청


2. 서버환경 구축

1. EC2

1. EC2 인스턴스 생성

  • EC2 > Instances > Launch instances
    • OS: Ubuntu
    • Keypair: create new => key.pem 파일 다운로드
    • Network settings > Firewall :
      • Allow HTTPs traffic from the internet
      • Allow HTTP traffic from the internet

2. SSH 연결

  • EC2 > Instances > Instance id 클릭 > connect > SSH Client
    - 1.에서 생성한 key.pem 파일로 인증하여 SSH로 EC2 서버에 접근할 수 있다.
    • Example: ssh -i "key.pem" ubuntu@ec2-12-34-56-789.ap-northeast-2.compute.amazonaws.com

3. nvm, pm2, nginx, git 설치

  • nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    nvm install --lts
  • pm2: npm i -g pm2
  • nginx: sudo apt-get install nginx
  • git: sudo apt-get install git

4. git clone & pm2 start

2. Route53

  1. Route53 > Hosted zones > Create hosted zone
    • Domain name: 구매한 도메인 이름
    • Type: Public hosted zone
  2. Route53 > Hosted zones
    • 생성한 도메인 이름 클릭
      • Type이 NS인 레코드의 value값을 호스팅 업체의 도메인 -네임서버에 입력
      • [create record]
        • Type: A
        • value: EC2 Public IPv4 address

3. nginx 설정

sudo systemctl start nginx
sudo vi /etc/nginx/conf.d/project.conf

server {
	server_name 도메인;

	location / {
		proxy_pass http://127.0.0.1:3000/;
	}
}
sudo apt update
sudo apt install python3 python3-venv libaugeas0
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
sudo certbot --nginx

발급된 인증서의 유효기간은 sudo certbot certificates로 확인할 수 있으며, sudo certbot renew 명령어로 인증서를 갱신할 수 있다. 이 때 --dry-run 옵션을 붙이면 갱신 테스트도 가능하다.


여기까지 설정하면 EC2 서버에 3000번 포트로 띄워진 next.js 애플리케이션을, nginx를 통해 설정한 도메인으로 접근할 수 있다.

profile
Frontend Engineer

0개의 댓글