Backend server 구축
1. AWS free tier 사용하기
AWS 계정 회원 가입
- 계정 회원가입 후 계정 설정에서 프리티어 사용량 알림 받기로 과금 시 확인 가능
- free tier 항목에서 사용량 매일 체크
AWS EC2 생성
- EC2 인스턴스 시작을 클릭
- 인스턴스 개수 1개 설정, 이름 설정
- free tier 사용가능한 이미지 선택
- 인스턴스 유형과 키페어 생성하여 안전하게 보관
- 네트워크 설정은 변경 없이 인스턴스 시작한다.
인스턴스 인바운드 규칙
- 8080, 443, 80 포트 열어주기
EIP 연결
- 고정 IP 주소를 가지기 위해 탄력적 IP 할당 후, 탄력적 IP 주소 연결을 클릭 후 해당 인스턴스를 연결
2. EC2 접속
- EC2 인스턴스 연결로 접속
- 인스턴스 개발 환경 구축
- 패키지 매니저 최신상태, java 설치, ssh 등록
- git clone으로 github에 있는 프로젝트 가져오기
- 배포 쉘스크립트 작성
#!/bin/bash
REPOSITORY=/home/ubuntu/main15#[레포 주소]
PROJECT_NAME=seb41_main_015#[프로젝트 이름]
DIRECTORY=server
cd $REPOSITORY/$PROJECT_NAME
echo "git pull"
git pull origin main
echo "move directory"
cd $REPOSITORY/$PROJECT_NAME/$DIRECTORY
echo "project build start"
./gradlew build
echo "copy build file"
cp ./build/libs/*.jar $REPOSITORY/
echo "current running application pid check"
CURRENT_PID=$(pgrep -f DIRECTORY)
echo "current running appliacation pid : $CURRENT_PID"
if [-z $CURRENT_PID];then
echo "no current application"
else
echo "kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "deploy new application"
JAR_NAME=$(ls $REPOSITORY/ | grep "server" | tail -n 1)
echo "JAR NAME : $JAR_NAME"
cd $REPOSITORY
nohup java -jar $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
3. 도메인 등록
- 도메인 등록하여 사용하고자 하는 도메인 사용
4. EC2 가상 메모리 활용
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
5. Nginx
- https 연결 및 포트
- nginx 설치
sudo apt-get update
sudo apt-get install nginx // 설치
sudo service nginx start //서비스 시작
sudo service nginx status // 상태 확인
sudo service nginx stop //서비스 중지
sudo nginx -t //설정 파일 테스트
- /etc/nginx/sites-enabled 로 이동
- 해당 도메인을 이름으로하는 파일 생성하고 수정(sudo vim 도메인명)
upstream preServer { ip_hash; server {도메인:포트}; } server { server_name {도메인}; location / { proxy_pass <http://preServer>; # upstream에서 설정한 이름 proxy_set_header HOST $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; charset utf-8; } }
6. SSL 인증서 발급
- letsencrypt 설치
Ubuntu Nginx 환경에서 CertBot을 사용하여 https 사용하기
$ cd /etc/nginx/sites-available/
$ sudo touch {도메인 주소}
$ sudo vi {도메인 주소}
- 위에서 /etc/nginx/sites-enabled에 작성한 내용 작성
$ sudo ln -s /etc/nginx/sites-available/{도메인} /etc/nginx/sites-enabled/{도메인}
$ sudo nginx -t
// nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
// nginx: configuration file /etc/nginx/nginx.conf test is successful
//위와 같이 나오면 성공
- certbot 다운로드
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get install python3-certbot-nginx
- ssl설치
$ sudo certbot --nginx -d {도메인}
//이메일 작성 후 yes 입력
- nginx 재시동
Frontend server(AWS EC2 활용)
1. 인스턴스 생성 및 EC2 접속, 도메인 등록, EC2 가상 메모리 활용
- 위의 과정과 동일
- 개발 환경
- git ssh key 등록, node 설치
$ sudo apt-get update $ sudo apt-get install -y build-essential $ sudo apt-get install curl $ curl -sL <https://deb.nodesource.com/setup_16.x> | sudo -E bash -- $ sudo apt-get install -y nodejs
- npm -v, node -v으로 설치 확인
- yarn 설치
- sudo npm install yarn --location=global
- 해당 프로젝트로 이동 후
- yarn 실행
yarn install yarn build yarn start
- background 실행
sudo npm i pm2 --location=global pm2 start yarn -- start
2. Nginx를 이용한 리버스프록시로 port fowarding
- nginx 설치
sudo apt-get install nginx
sudo su
3. https 적용
- /etc/nginx/sites-available/에 도메인 이름으로 생성 후 입력
server {
server_name {도메인 주소};
location / {
root /home/ubuntu/main15/seb41_main_015/client/build; #이동 경로
index index.html;
try_files $uri $uri/ /index.html;
}
}
- 이외의 과정은 동일
- 500 error나 403 error가 발생할 수 있다.
- /etc/nginx/nginx.config에서 user [사용자(ex ubuntu)]로 변경
- index.html 의 권한 변경(chmod 755 index.html)
AWS RDS를 활용한 DB 구축
1. AWS RDS 생성
- RDS에서 데이터베이스 메뉴에 들어가 데이터베이스 생성 클릭
- mysql을 선택하고 프리티어 선택 후 마스터 이름, 암호 작성
- 인스턴스는 과금 방지를 위해 꼭 db.t2.micro를 선택
- 할당 스토리지 20으로 변경, 스토리지 자동 조정 활성화를 off한다.
- 퍼블릭 엑세스 예로 변경(추가 구성에 port 번호 변경, vpc 보안그룹 추가)
- 추가 구성에 초기 데이터베이스 이름 선정 후 db 생성
- 연결&보안에 엔드포인트 확인
2. mysql 접속
- mysql -u [마스터 이름] --host [엔드 포인트 주소] -P (포트 번호) -p로 접속
3. 환경 변수 설정
- ~/.bashrc 에서 설정
- export TOMCAT_HOME=/usr/lib/tomcat/tomcat1.8/ 형태로 작성
- 환경 설정 저장 후 재시작
- 아래 해당 내용에 맞춰 설정해야 한다.