AWS-EC2 , nginx 를 통한 배포

정훈·2023년 5월 27일
1

총..131번을 통한.. 그냥 땅바닥에 머리를 박고 한 .. CD 힘들다 ...

배포하기 앞서 AWS EC2 를 사용하여 배포를하였다.

인스턴스 유형은 원래는 t2 small로 하였으나 , react파일이 큰건지..yarn build 할때마다 너무 오래걸려 모니터링을 통해서 확인했을때 CPU가 99%가 치솟는걸 알수있었다. 하여, t2 large 를 사용하였다.

맨 먼저 EC2 배포 완료후

sudo ufw app list
apt-get install software-properties-common
add-apt-repository universe
add-apt-repository ppa:certbot/cerbot
add-apt-repository ppa:certbot/certbot
apt-get install certbot python3-certbot-nginx
sudo nginx -t
sudo certbot --nginx -d 도메인
sudo certbot --nginx -d 도메인

이런식으로 하게되면 무료로 tsl 인증서를 발급받을수있다. 이 과정을 통해서 해당 도메인을 통해 확인을 해보면 welcome to nginx가 보일것이다. 또한 https로 접속하면 똑같이 나오면 성공이다.

이후

sudo rm -rf /etc/nginx/sites-available/ .. 
sudo rm -rf /etc/nginx/sites-enabled/ .. 

.. 에 속한 모든 파일을 제거한다

이후 내가 임의로 nginx.conf 파일을 만든다.

이렇게해도 되는이유가 nginx.conf에

include /etc/nginx/sites-enabled/*;

모든 파일을 읽고있는부분이있기때문이다.

이후 나는 default 라는 파일을 만들었다.

server {

  listen 80 ssl;
  server_name 도메인이름;

  location / {
    root 해당 빌드폴더가 있는곳/build;
    try_files $uri /index.html;
  }
}

이런식으로 올리면 모든 준비가 끝났다. 아 이부분은 80 일때 얘기고, 만약 위에 글대로 똑같이 따라하고 있다면 , 아래와 같이 따라해주면된다.

server {

  listen 443 ssl;
  server_name 도메인이름;


  ssl_certificate /etc/letsencrypt/live/..
  ssl_certificate_key /etc/letsencrypt/live/..


  location / {
    root 해당 빌드폴더가 있는곳/build;
    try_files $uri /index.html;
  }
}

..이라는 곳에는 인증서 펨키를 넣어주면 된다.

무료로 certbot을통해 인증서를 받은 경우엔 경로가
etc/letsencrypt/live/라는 경로 에 저장이되어있다.
그리고 ssl_certisficate 엔
fullchain.pem키를 등록해주고,

아래 키는 privkey.pem을 넣어주면 된다.

이제 모든 준비가 다 끝나고

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default 를 명령어를 넣어주면 심볼링링크가 발동하게되어 빠르게 수정/추가 를 하게할수있으며,똑같은 파일이 생성이된다.

간단하게 github action 설정을 해보자

actions 탭에 Runners를 클릭후 Download Tab을 똑같이 따라해주자 !

위와 같이 다 따라해준 이후

밑에 configure 부분도 똑같이 따라해주자

이후에

sudo ./svc.sh install 
sudo ./svc.sh start

를 하면 이제 설정이 완료가되었고, workflow 파일을 작성하자.

name: 

on:
  push:
    branches: [ "main" ]
jobs:
  build:

    runs-on: self-hosted

    strategy:
      matrix:
        node-version: [18.x]
    steps:
      - uses: actions/checkout@v3
      - name: Pull latest changes
        run: git pull origin main
      - name: Set CI environment variable
        run: echo "CI=false" >> $GITHUB_ENV
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'yarn'
      - run: yarn install
      - run: yarn run build --if-present
      - run: sudo service nginx restart
  • 위 와 같이 workflow를 작성하고 푸쉬를 하게되면 트리거가 발동되어, github action에적은 step에 맞춰서 수행하고나면 아래와 같은 build 성공 여부를 볼수있을것이다.
  • 이후 해당 도메인에 들어가면 500 ERROR가 확인이 될텐데 이는 build파일부분이 권한이 없어서 안되었던걸 확인하였다.

이후

sudo chmod +x 경로 

위 명령어를 수행 완료후

sudo service nginx restart

를 통해 성공적으로 배포를 할 수 있었다.

0개의 댓글