드디어...영원히 끝나지 않을 것만 같았던 졸업 프로젝트에 마지막이 찾아오네요...😂
항상 미루고 미뤘던 프로젝트 배포를 이제는 정말 해야할 때가 되었습니다..
AWS를 제대로 사용해본 경험이 별로 없어 이걸 할 수 있을까..과금 되지는 않을까..걱정이 많았는데요
저의 얼레벌레 배포기를 함께 보시죠!
프로젝트는 react
와 express
조합으로 구성되어 있습니다!
팀 협업을 위해 코드는 github
에 올려둔 상태입니다.
따라서 코드는 git clone
을 통해 여러 환경에서 쉽게 가져올 수 있는 상황이었습니다.
Amazon Web Services(AWS)는 전 세계적으로 분포한 데이터 센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이며, 널리 채택되고 있는 클라우드 플랫폼입니다.
AWS는 각자의 비즈니스와 조직의 니즈에 맞게 조합해 쓸 수 있는 클라우드 서비스를 제공합니다.
AWS 계정을 만든지 1년이 안 되었다면 일부 서비스에 한해 무료로 서비스를 사용할 수 있는 프리티어 혜택을 누릴 수 있으니 확인!
프로젝트 웹 서버를 구축해야 하므로, 가상 머신을 제공해주는 서비스인 EC2를 사용해야 합니다.
먼저, 지역을 서울로 설정하는 걸 잊지 마시고!!
서비스 > 컴퓨팅 > EC2를 선택합니다
인스턴스 > 인스턴스를 선택합니다
인스턴스 시작 버튼을 누릅니다
인스턴스 시작 페이지를 설정합니다
1. 이름 및 태그
2. 애플리케이션 및 OS 이미지
사용할 가상 머신의 OS를 설정하는 과정입니다. 저는 ubuntu
를 사용했습니다.
❗여기서 주의할 점❗
꼭 프리티어 사용 가능 문구를 확인하세요!!
3. 인스턴스 유형
t2.micro
로 설정하였습니다!4. 네트워크 설정
5. 인스턴스 시작
인스턴스 id를 누르면 인스턴스 세부 정보 페이지로 들어갈 수 있습니다
우측 상단의 연결 버튼을 누르면
인스턴스에 연결 창이 나옵니다. 아래의 연결 버튼을 눌러줍시다.
그러면 이렇게 바로 aws 내에서 인스턴스에 연결할 수 있습니다!
이제 인스턴스로 프로젝트를 가져와야 합니다
프로젝트는 github
에 올라가 있기 때문에, git clone
을 사용해서 가져오도록 합시다.
sudo apt-get update # 현재 사용 가능한 패키지와 버전 목록만 업데이트
sudo apt-get upgrade # 목록에 있는 패키지에 대해서 최신 버전으로 재설치
git
을 설치합니다sudo apt-get install git
git
설치 후 git version
을 확인해 git이 잘 설치되었는지 확인합니다.git --version
git
설치가 잘 되었다면, git 계정정보를 서버에 저장합니다.git config --global user.name "유저명"
git config --global user.mail "메일"
sudo mkdir "폴더명"
cd "폴더명"
git clone "프로젝트 repository 주소"
이렇게 인스턴스에 프로젝트를 가져왔습니다!
프로젝트의 프론트 부분을 react
로 개발했기 때문에, build를 해야하는데요!
그 전에 아직 nodejs
설치가 안 된 상태이기 때문에 nodejs
와 npm
설치가 필요합니다.
nodejs
설치를 위해 curl
설치sudo apt-get install curl
curl
을 사용해 원하는 버전의 nodejs
설치curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
npm
설치sudo apt install npm
node -v
npm -v
nodejs
와 npm
설치가 끝났다면 build를 진행하면 됩니다.
npm run build
하지만 여기서 에러를 마주하고 맙니다....😱
바로 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
이 에러 인데요...
아마도 프리티어 인스턴스를 사용하다보니 메모리가 부족해서 이런 일이 생기지 않았나 싶습니다....
export NODE_OPTIONS=--max_old_space_size=800
를 터미널에 입력하면 해결이 된다는 글이 많았으나...전혀 먹히질 않았습니다ㅠ
결국 로컬에서 build 한 뒤 build한 파일을 filezilla로 옮기는 방법을 사용하기로 하였습니다.
👉 FileZilla로 EC2에 파일 옮기는 법
1. https://filezilla.softonic.kr/
위 링크에서 FileZilla를 다운받습니다.
2. 파일 > 사이트 관리자 > 새 사이트
3. 프로토콜 - SFTP
호스트 - 인스턴스의 퍼블릭 IPv4 DNS
로그온 유형 - 키 파일
키 파일 - AWS에서 생성한 pem key
이렇게 하면 인스턴스와 filezilla가 연결되면서, 인스턴스에 파일을 쉽게 올리고 삭제할 수 있습니다.
FileZilla를 사용해 build한 파일을 인스턴스에 올렸습니다
배포를 위해 nginx
가 필요합니다
우선, nginx
를 설치합니다
sudo apt install nginx
다음으로 nginx에서 몇 가지를 설정해줘야 하는데요
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
sudo vi /etc/nginx/sites-available/원하는 이름.conf
site-available
과 sites-enabled
라는 폴더를 만들고, sites-available
에 원하는이름.conf
파일을 만들어 줍니다.
#/etc/nginx/sites-available/원하는 이름.conf
server {
listen 80;
location / {
root /home/ubuntu/build; #build 디렉토리 경로
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /test { #프로젝트 내에서 프록시 설정을 했을 경우 프록시를 사용하는 URI 입력(저는 /test에서 프록시를 사용했습니다)
proxy_pass http://localhost:8000;
}
}
이후 sites-enabled
로 symlink를 설정하고 Nginx 설정 파일을 체크합니다.
sudo ln -s /etc/nginx/sites-available/원하는이름.conf /etc/nginx/sites-enabled/원하는이름.conf
sudo nginx -t
아래의 문구가 나오면 설정의 문법이 정상적이라는 것입니다.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
이제 nginx를 실행해봅시다
sudo systemctl start nginx
브라우저에서 AWS EC2 인스턴스 IP 주소를 입력해 배포된 것을 확인합니다!
nginx 설정에서 막히는데
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
에서 이미 파일이 존재한다고 떠서
sites-available에 project.conf 파일을 만들었습니다
근데 sudo ln -s /etc/nginx/sites-available/project.conf /etc/nginx/sites-enabled/project.conf
이라고 치니
sudo ln -s /etc/nginx/sites-available/project.conf /etc/nginx/sites-enabled/project.conf
ln: failed to create symbolic link '/etc/nginx/sites-enabled/project.conf': File exists
여기선 file이 존재한다고 뜨고
ubuntu@ip-172-31-21-26:~$ sudo nginx -t
nginx: [emerg] open() "/etc/nginx/sites-enabled/project.conf" failed (2: No such file or directory) in /etc/nginx/nginx.conf:60
nginx: configuration file /etc/nginx/nginx.conf test failed
확인을 하면 여기선 파일이 없다고 뜨네요,,
이게 대체 뭘까요ㅠㅠㅠ