-
[aws] ec2 인스턴스에 next.js 배포하기 (feat. pm2 nginx ) in Ubuntu카테고리 없음 2023. 12. 8. 17:17
기본적으로 제공하는 next 프로젝트에 대해 배포해보기.
1. npx create-next-app
2. npm run build
3. next.js를 배포하면 build 폴더를 따로 제공하지 않고 .next 폴더 안에 생성 됨. => 숨겨져 있어서 ls 통해서 봐도 안보임. cd .next 하면 입장 가능
4. nginx 를 통해 포트에 대해 우회할것이므로 해당 next 프로젝트의 pacakge 파일안에서 npm start 시 포트 지정해줄 필요 x
5. nginx, pm2는 이미 설치되어있다고 가정
6. 도메인 접속 시(퍼블릭 ip) next 빌드로 우회 하기 위해 root경로에서 /etc/nginx/sites-available 폴더 안에 default 파일 생성 해서 아래와 같이 입력
server { listen 80 default; listen [::]:80 default; server_name [domain] www.[domain]; location / { proxy_pass http://127.0.0.1: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; } }
7. sites-available 폴더 안에 생성한 것에 대해 nginx의 엔진이 실행할 때 사용할 환경변수를 잡아주기 위해 site-enable 안에 링크를 심어줌
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enable/default
위의 명령어를 심어주면 sites-availble 안에 파일의 내용을 수정할 시 자동적으로 enable과 링크가 연결된 파일도 함께 수정 됨( ln 은 link를 뜻함. -s는 심볼을 뜻함)
8. sudo nginx -t 를 통해 위와 같이 설정한 것에 대해 문법적 오류가 없는지 체크
9. ok가 떴다면 sudo service nginx start ( 이미 실행중이었다면 sudo service nginx restart)
10. pm2 를 통해 next 프로젝트를 지속적으로 실행하게 하는 환경을 만들어준다
pm2 --name myapp start npm -- start
myapp은 내가 만든 프로젝트의 폴더 이름
11. pm2 status를 통해 해당 플젝이 online 상태가 맞는지 체크
이제 나의 도메인(퍼블릭 ip) 을 통해 접속해 보면 next app 의 기본 프로젝트가 렌더링 됨.
만약 502 게이트가 떴다면 루트에 chmod 711 /root/ubuntu를 통해 권한을 줘보거나
ec2 인스턴스 보안그룹에 들어가봐서 80번이나 내가 지정한 포트에 대한 접근 권한을 줬는지 체크해보기