본문 바로가기
배포

수동 배포

by orioncsy 2023. 2. 6.

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/ 형태로 작성
    • 환경 설정 저장 후 재시작
    • 아래 해당 내용에 맞춰 설정해야 한다.
  •