S3 를 통해 Front-end 사이트를 얻어오고, EC2 와 RDS를 통해 백엔드, DB 서버를 만들어 보았다.
# host 에 node 가 있다는 것을 가정하고 작성한다.
# 리액트 의존성 라이브러리를 설치한다.
$ npm i
# 리액트 결과물을 빌드한다.
$ npm run build
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::simple-memo/*"
}
]
}
나중에 ssh 접근할 때 키 페어가 필요하다.
2.3 EC2에 노드 서버를 넣고 실행한다.
# 호스트의 서버 정보를 ec2 우분투에 넣는다.
$ sudo scp -i ~/.ssh/key.pem -r ~/test/projectSprint/sprint-aws/server ubuntu@54.180.145.159:/home/ubuntu
# ec2 서버에 접속한다.
$ ssh -i key.pem ubuntu@ec2-54-180-145-159.ap-northeast-2.compute.amazonaws.com
# node 를 설치하는 과정이다.
$ sudo apt-get update
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
$ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
$ nvm install --lts
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
# 8080 포트로 서버 연결한다.
# server 를 빌드 및 실행한다.
$ cd server
$ npm install
$ sudo node app.js
서버 실행
서버 작동 확인
# 프론트 프로젝트에 백엔드 API URI 지정
# REACT_APP_API_URL=<API_URI>
REACT_APP_API_URL=http://54.180.145.159
테스트용이므로 가장 싸고 돈이 안나가는 옵션으로 설정한다.
MYSQL 선택
가격이 싼 프리티어로 선택
비밀번호 등 개인 설정
가격이 싼 t2.micro 선택
추후 돈 나갈 가능성이 있으므로.. 스토리지 자동 조정 활성화를 체크 해제했다.
기본값을 사용하면 된다. 쉽게 하려면 컴퓨팅 리소스 선택에서 'EC2 컴퓨팅 리소스 연결' 을 선택하면 된다. 선택하면 보안그룹을 사용자가 별도로 설정하지 않아도 알아서 설정이 되기 때문이다. 그러나 나는 공부용이기에 보안그룹을 직접 만들어주려 한다.
rds를 위해 보안그룹을 만들어주자
이제 생성하자
4.2.1 인바운드
4.2.2 아웃바운드 규칙
- 모든 트래픽을 허용한다. (Private Network이기에 모든 트래픽을 허용하였다.)
# AWS EC2 서버에 접속
$ ssh -i key.pem ubuntu@54.180.145.159
...
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-1031-aws x86_64)
...
# mysql -u <MYSQL-USER-ID> -p --host <MY-SQL-HOST>
$ mysql -u admin -p --host database-2.cql3w7dt8kdv.ap-northeast-2.rds.amazonaws.com
# mysql 이 설치되지 않았다고 뜨면 mysql을 설치하고 다시 실행한다.
$ sudo apt install mysql-client-core-8.0
$ mysql -u admin -p --host database-2.cql3w7dt8kdv.ap-northeast-2.rds.amazonaws.com
# mysql 비밀번호를 입력한다.
Enter password:
...
Welcome to the MySQL monitor. Commands end with ; or \g.
...
# EC2에서 접속이 되는 것을 확인했다.
# backend의 .env 파일
DATABASE_HOST=database~~~.com
DATABASE_USER=admin
DATABASE_PASSWORD=myPassword
DATABASE_PORT=3306
PORT=8080
ec2 서버 실행
서버 GET "/" 확인
로그인해보자
정상적으로 동작됨을 확인헀다.