# 관리자 계정 패스워드 생성
sudo passwd
# 우분투 시간대 설정
sudo timedatectl set-timezone Asia/Seoul
# 패키지 매니저 최신으로 업데이트
sudo apt update
# 필수 패키지 설치 nginx 등등
sudo apt install nginx net-tools htop
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# Zsh 사용자
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh
# nvm 활성화
source ~/.bashrc
# Zsh 사용자
source ~/.zshrc
# 확인
nvm -v
# node 설치
nvm install node # 최신 버전 설치
nvm install --lts # 최신 LTS 버전 설치
nvm install 16.14.0 # 특정 버전 설치
nvm install 16 # 특정 버전 16의 최신 릴리즈 설치
unbuntu node 세팅 참고
보통 프로젝트들은 /var/www 경로에 위치해 있다. AWS ubuntu는 git을 기본으로 설치해두기 때문에 따로 깃은 설치할 필요가 없지만, clone을 위해서 ssh 키를 먼저 만들어야 할 필요가 있다.
# ssh키 생성
ssh-keygen
# 생성된 퍼블릭 키 열기
cat ~/.ssh/id_rsa.pub
# 원하는 레포지토리 클론 (/var/www/ 경로)
git clone [git repo 경로]
# yarn, pm2 글로벌 설치
npm install -g yarn
일단 서버에서 Next.js를 실행하고, 외부 클라이언트 요청에 따라 리버스 프록시로 프로젝트를 보여줄 준비는 마쳤다.
다만 clone 받은 프로젝트의 모듈을 설치하고 빌드하는 과정에서 시스템이 자주 멈추어버리는 현상이 발생하는데, 이를 위해 메모리 스왑부터 하려 한다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 성공했는지 확인
swapon -s
# 재시작 할 때마다 메모리 할당
sudo vim /etc/fstab
/swapfile swap swap defaults 0 0
# 메모리 적용 확인
free
여기까지 참고한 블로그
npm i -g pm2 pm2 list
애플리케이션을 클러스터 모드로 실행 하기 위해서 프로젝트 루트 폴더에 ecosystem.config.js 파일을 저장한다. ecosystem.config.js 파일은 PM2 프로세스 매니저가 사용하는 설정 파일이다.
module.exports = {
apps: [{
name: 'minsunblog',
cwd: './',
script: 'node_modules/next/dist/bin/next',
args: 'start',
exec_mode: 'cluster',
instances: 0,
autorestart: true,
listen_timeout: 50000,
kill_timeout: 5000
}]
}
name: 애플리케이션의 이름을 지정합니다.
cwd: 현재 작업 디렉토리를 지정합니다. 일반적으로 실행 파일이 있는 디렉토리를 가리킨다.
script: 실행할 스크립트 파일을 지정합니다. 여기서는 Next.js의 실행 파일 경로를 지정하고 있다.
args: 스크립트에 전달할 인자를 지정합니다. start를 전달하여 Next.js 애플리케이션을 시작한다.
exec_mode: PM2에서 애플리케이션을 실행하는 모드를 지정한다. cluster 모드를 사용하고 있으며, 이는 멀티 프로세스 클러스터 모드를 의미한니다.
instances: 클러스터 모드에서 실행할 인스턴스 수를 지정한니다. 여기서는 0을 설정하여 CPU 코어 수에 따라 자동으로 인스턴스를 할당하도록 합니다.
autorestart: 애플리케이션의 비정상 종료 시 자동으로 다시 시작할지 여부를 지정한다.
listen_timeout: 애플리케이션 시작 후 대기할 수 있는 시간을 지정합니다.
kill_timeout: 프로세스 종료를 위해 대기할 시간을 지정합니다.
pm2 start ./ecosystem.config.js
# 참고: pm2 끄는 법
npx pm2 kill
nginx.conf 에 들어가 설정을 추가해준다.
nano /etc/nginx/nginx.conf
include 바로 아래에 다음 코드를 추가해준다.
********** HTTP 안에 있는 include 아래여야한다.
server {
server_name 도메인이름
listen 80;
location / {
proxy_set_header HOST $host;
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
}
}
이제 포트 번호를 기입하지 않고 페이지에 들어갈 수 있다.
sudo nginx -t ### text가 성공 해야함
sudo systemctl reload nginx
https로 설정하기 위해서는 인증서가 필요해서 Let's Encrypt에서 무료로 발급해주는 인증서를 활용 하면된다.
이전에 설치되어있던 certbot 삭제 (충돌 방)
sudo apt-get remove certbot
certbot 설치
sudo snap install certbot --classic
/** certbot 설치 */
sudo certbot --nginx
/** SSL 인증서 발급 */
설치하면 안내 글이 나오는데
Enter email address 가 나오면 이메일을 적고 넘어가면 된다.
Certbot으로 자동 갱신 설정
설정 파일 들어가서 1번 “/bin/nano” 를 선택하면 된다.
sudo crontab -e
하단에 아래 코드 적고 Ctrl + X -> y -> Enter로 나오면된다.
매월 1일 오후 6시마다 인증서를 갱신하고 NGINX를 재시작하는 명령어가 실행된다.
0 18 1 * * certbot renew --renew-hook="sudo systemctl restart nginx"
이러면 끝
잘 설명해준 블로그
그리고 탄력 IP 받는 법과 연동 법