Amazon Web Service
Cloud Computing
기존의 서버 방식
Cloud
Deploy
작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면?
- 절대경로 대신 상대경로를 사용
- 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정
- (Advanced) Docker 와 같은 개발 환경 자체를 통일시키는 솔루션을 사용
EC2
RDS
S3
Deploy Strategy
빌드
- 붎필요한 데이터를 없애고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것
- 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라진다.
백엔드 배포 실습
- AWS 로그인한다.
- 리젼을 서울로 설정한다.
- AWS 콘솔에 EC2 를 클릭하여 대시보드로 이동한다.
- EC2 인스턴스를 클릭하고 연결한다. 만약 인스턴스가 없다면 인스턴스 시작을 눌러 만들어준다.
- 인스턴스에 들어가 세션 매니저를 이용하여 접속하면 브라우저 환경에서 터미널이 실행이된다.
- bash -> cd ~ 를 해준다.
Create & Access EC2 Instance
- 용도에 맞게 AMI를 선택하는 과정
- 프리 티어 사용 가능 태그를 확인하여 과금이 되지 않도록 유의
- 인스턴스 유형을 선택하는 과정
- 생성되는 인스턴스를 원격으로 제어하기 위해서는 SSH 연결을 통한 원격접속이 필요하다.
- 원격접속을 위해서 필요한 Key를 생성하고 다운로드하는 과정
- 새 키 페어 생성 메뉴를 확인한 후 키 페어의 이름을 정한 뒤 키 페어를 다운로드하면 인스턴스 시작 버튼이 활성화
- SSH 프로토콜은 서로 다른 PC가 인터넷과 같은 Public Network를 통해 통신을 할 때 보안상 안전하게 통신을 하기 위한 통신 규약
- 주고받는 데이터를 암호화해서 해당 키 페어를 가지지 않은 사람은 통신되는 데이터를 알아볼 수 없기 때문에 보안상 안전한 통신 방법
- 다운로드 한 파일은 SSH 통신을 위한 키 페어 중 프라이빗 키가 기록된 파일이고, .pem 확장자를 가지고 있다.
- 해당 키 페어 파일은 EC2 인스턴스에 연결을 할 때 사용하는 암호가 담긴 파일이다.
따라서 pem 파일은 관리에 유의해야한다.
EC2 인스턴스 상에서 서버 실행
1. 인스턴스에 개발 환경 구축하기
- EC2 인스턴스와 연결한 터미널에 sudo apt update 명령어를 입력
- 패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트하기 위해서 아래 명령어- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash (명령어 입력)
- export NVM_DIR="{XDG_CONFIG_HOME-}" ] && printf %s "{XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm- nvm 설정 벨로그에서 코드가 이상하게 나오니 https://github.com/nvm-sh/nvm#install--update-script / Install & Update Script 참조
- nvm install node (명령어 입력)
- sudo apt install npm (명령어 입력)
2. git을 통해 서버 코드 클론 받기
- 로컬 컴퓨터에 git clone을 위해 진행했던 SSH등록이 필요하다.
SSH 키 생성
- ssh-keygen (명령어 입력)
공개키(Public Key) 복사
- cat ~/.ssh/id_rsa.pub (명령어 입력)
Github에 공개키 등록
예시 (공개키 등록후)
- cd ~ 명령어로 홈 디렉토리로 이동
- git clone https://github.com/codestates-seb/fe-sprint-practice-deploy.git 클론할 레포지토리 클론
- ls 명령어를 입력하여 폴더명이 보이면 정상적으로 다운로드가 완료
- cd fe-sprint-practice-deploy/server/ 이동후 npm i 명령어를 입력해서 필요한 모듈 다운
3. EC2 인스턴스에서 서버 실행하기
- npm i 를 설치 과정이 완료되면 npm start 명령어를 이용해서 서버를 실행하면 위 사진과 같이 오류가 뜬다.
오류가 보이는 이유는 아래의 포트 번호를 이용해서 서버를 실행하려면 관리자 권한이 필요하기 때문이다.
관리자 권한으로 서버를 시작하기 위해서는 sudo npm start 명령어를 입력해야한다.
- 퍼블릭 IPv4 주소와 퍼블릭 IPv4 DNS는 형태만 다를 뿐 같은 주소
Security Group
PM2
- npm install pm2 -g
- pm2 start 파일 이름
- sudo apt-get update
- sudo apt-get install authbind
- sudo touch /etc/authbind/byport/80
- sudo chown ubuntu /etc/authbind/byport/80
- sudo chmod 755 /etc/authbind/byport/80
- authbind --deep pm2 update
프론트엔드 배포 실습
- AWS 콘솔에서 S3를 검색
- 나의 버킷이 있으면 있는 버킷을 사용하고 없다면 버킷 만들기
- 이건 아까 EC2 에 있던 서버를 클라이언트 폴더 .env 파일에 넣어놓은 작업
- 클라이언트 폴더도 npm i 를 해주고 npm run build 를 합니다.
- 빌드 폴더이 만들어지는데, 빌드 폴더 자체를 넣지 않고, 스택틱 폴더와 각종 파일들을 넣는다.
Hosting a Static Website