배포 & 운영/AWS

[AWS] 도커로 리액트 배포하기

an_apricot__ 2023. 9. 5. 09:35

 

# 리액트 build 파일 생성
npm run build

# Dockerfile 생성

# nginx.conf 파일 생성

 

  • Dockerfile 생성
# nginx 이미지를 사용합니다. 뒤에 tag가 없으면 latest 를 사용합니다.
FROM nginx

# root 에 app 폴더를 생성
RUN mkdir /app

# work dir 고정
WORKDIR /app

# work dir 에 build 폴더 생성 /app/build
RUN mkdir ./build

# host pc의 현재경로의 build 폴더를 workdir 의 build 폴더로 복사
ADD ./build ./build

# nginx 의 default.conf 를 삭제
RUN rm /etc/nginx/conf.d/default.conf

# host pc 의 nginx.conf 를 아래 경로에 복사
COPY ./nginx.conf /etc/nginx/conf.d

# 3000 포트 오픈
EXPOSE 3000

# container 실행 시 자동으로 실행할 command. nginx 시작함
CMD ["nginx", "-g", "daemon off;"]

 

  • nginx.conf 파일 생성
server {
    listen 3000;
    location / {
        root    /app/build;
        index   index.html index.html;
        try_files $uri $uri/ /index.html;
    }
}

 

  • 윈도우에서 리눅스 서버로 파일 업로드
# 여러 가지 파일을 보낼 경우 -r 옵션 필수
# -r 옵션 없을 경우 not a regular file 에러 발생
scp -i {키페어경로/키페어.pem} -r {유저명}@{주소}:{파일저장경로}

# /home/ec2-user/home 폴더에 리드미파일 저장
scp -i ~/.ssh/{키} ./README.md {인스턴스주소}:~/home/

# /home/ec2-user/ 폴더에 GG폴더 저장
scp -i ~/.ssh/{키} -r ./GG {인스턴스주소}:~/home/

# error: permission denied
# 디렉토리 권한 변경
sudo chmod 766 home

 

  • nvm(node version manager) 설치
curl -o- <https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh> | bash

# .bashrc에 반영
source ~/.bashrc
source ~/.bash_profile

# nvm 명령어로 설치 확인

 

  • node 설치 (npm도 함께 설치 됨)
# node v9.4.0 설치
nvm install v9.4.0
nvm install v17.9.1

# node 사용 선언
nvm use v9.4.0
[root@ip-{아이피} home]# nvm use 17
Now using node v17.9.1 (npm v8.11.0)

# 반영
source ~/.bashrc

 

  • node.js 업그레이드
# 캐시 삭제
npm cache clean --force

# n모듈 설치
npm install -g n

# node.js 설치
npm install -g npm

 

  • 리액트 빌드 (로컬에서 빌드 후 서버에 올리는 방법)
# 1. npm run build로 리액트 파일 빌드

# 2. build된 디렉토리로 이동 (build 폴더 안으로 이동)

# 3. build 폴더 안의 파일들을 tar 파일로 압축 (build 폴더가 아니라 build 폴더 안 파일들만 압축)
$ tar cvfz web.0.1.tar .

# 3-1. tar 없을 경우 설치 필요
$ sudo apt-get install tar

# 4. aws 서버에 빌드 파일 업로드 (~/.ssh/thispotsvr.pem : aws 접속키 경로)
$ scp -i ~/.ssh/{키} ./web.0.1.tar {인스턴스주소}:{폴더경로}

# 4-1. .ssh 폴더 없을 경우 SSH Key 생성 후 .ssh 폴더에 가지고 있는 접속키를 넣어주기
$ cd ~
$ ssh-keygen -t rsa

# 5. 서버 접속
$ ssh -i ~/.ssh/{키} {인스턴스주소}

# 6. 빌드 파일이 업로드된 디렉토리로 이동
$ cd {폴더경로}

# 7. 이동한 디렉토리에서 압축 해제
$ tar xvfz web.0.1.tar

# 끝

 

 

인스턴스에 바로 깃을 연동하여 내려받은 후 빌드하거나

젠킨스를 사용하여 깃에 업로드하면 서버에 자동 빌드 되도록 설정하는 방법도 있다.