aws 배포

gogigogigogi·2024년 12월 13일

전체 배포 순서

  1. aws 인스턴스 생성 - 실행
  2. 인스턴스 퍼블릭 IP에 ssh 접속 - 배포하려는 github 레포지토리 clone
  3. node, nvm, mysql 설치
  4. pm2 사용해서 백그라운드로 실행

aws 인스턴스

  • 생성한 인스턴스의 인바운드 규칙 추가
    • 접근 허용 IP는 상황에 따라 설정할것

MYSQL

  • 유형 : MYSQL/Aurora
    • 포트 : 3306
    • 접근 허용 IP : 0.0.0.0./0 (누구나 접근 가능)

    HTTPS

    • 유형 : HTTPS
    • 포트 : 443
    • 접근 허용 IP : 0.0.0.0./0 (누구나 접근 가능)

    SSH

    • 유형 : SSH
    • 포트 : 22
    • 접근 허용 IP : 0.0.0.0./0 (누구나 접근 가능)

    HTTP

    • 유형 : HTTP
    • 포트 : 3306
    • 접근 허용 IP : 0.0.0.0./0 (누구나 접근 가능)

    EXPRESS

    • 유형 : 사용자 지정 TCP
    • 포트 : 8080 (express에서 설정한 port 번호로 기입)
    • 접근 허용 IP : 0.0.0.0./0 (누구나 접근 가능)

배포할 앱 가져오기

  • SSH로 인스턴스 접속 후 github 레포지토리 주소로 clone 한다.
    • git clone 레포지토리 주소 (보통 루트 경로에 복사, 경로는 임의 설정)
  • npm install로 package.json에 따른 모듈을 설치한다
  • 해당 레포지토리에 변경이 생기면 인스턴스 쪽에서도 git pull .... 으로 업데이트 해준다.

필요 모듈 설치( 설치가 필요하다면 )

mysql

  • sudo apt-get update로 리스트를 업데이트 한다.

  • sudo apt-get install mysql-server로 mysql 서버를 설치한다.

    • 로컬 mac에서 brew install mysql 한것과 동일한 의미
      filezilla 로 파일업로드를 했을때는 nginx로 정적파일을 제공할때 했던것
  • mysql-server --version 버전 확인

  • sudo mysql -u root -p로 mysql 실행

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 로 bind-address를 변경한다. (mysql 서버로 접속 허용하는 IP주소, 0.0.0.0 은 모든 주소를 허용)

    • mysql 기본 허용접속은 localhost에서만 가능하다.

      mysql 설정 파일을 변경한 후에는 sudo systemctl restart mysql 명령어를 실행해야 한다.

node

  • sudo apt-get install curl로 curl을 설치
    (curl : url로 데이터 다운, 업로드를 하는 패키지)
  • curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash로 - (패키지 파일을 모아둔 중앙 저장소의 node 정보를 가져와서 추가, 실행 )
  • sudo apt-get install -y nodejs로 nodejs를 설치
    (node를 설치)

nvm

  • curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash로 nvm을 설치 (nvm 설치)

  • export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"로 환경설정 변경

  • nvm list로 사용가능한 노드 리스트 조회

  • nvm install로 특정버전의 노드를 설치

  • nvm use로 특정버전의 노드를 사용

cross-env

  • 운영체제에 상관없이 환경변수 설정을 스크립트 명령어로 하기위해 필요하다.

    • 스크립트로 앱을 실행할때 특정 환경변수 값을 지정해 줄 수 있다.

      특정 환경변수 값을 스크립트로 넣어주는 이유??
      개발, 배포 등 특정 환경마다 다른 값을 넣기 위해 사용

  • npm install cross-env로 cross-env 설치

  • pakage.json 변경

  • models/index.js 변경

pm2

  • 실행한 앱은 보통 터미널을 닫으면 종료되지만, pm2 로 실행하면 백그라운드에서 실행된다
  • 서버 종료, 재부팅 후 자동 재시작 등의 기능을 제공한다.
  • sudo npm install pm2 -g로 pm2을 설치 한다.
  • pm2 start app.js로 pm2 실행한다.
  • pm2 stop 프로세스 or all로 특정 프로세스 또는 전체를 중지 한다. (프로세스 id, name 값으로 선택)
  • pm2 delete 프로세스 or all로 특정 프로세스 또는 전체를 삭제 한다. (프로세스 id, name 값으로 선택)
  • package.json-script에서 스크립트로 작성하면 된다.

package.json 내 script 명령어로 실행이 아닌 cli로 실행할때는 npx으로 실행해야 한다. ex) cross-env, pm2...등

0개의 댓글