[AWS] 백엔드 서버 작업사항
요약
- AWS EC2 구성
- 고정 IP 구성 ( 탄력적 IP)
- SSH 접속 할 수 있도록 구성
- Docker 컨테이너를 이용하여 Mysql 및 redis 구성
- 수동 배포 가능하도록 구성
- 추후 어느정도 프로젝트 완성되면 자동배포 구현 예정
- 추후 어느정도 프로젝트 완성되면 로드밸런싱 적용 예정
- 기타
- AWS ec2 인스턴스 2개로 분리 ( DB용 인스턴스(t3.micro) + 실행용 인스턴스(+Redis)(t3.medium)
- AWS S3 버킷으로 프론트 코드 정적 배포
- 백앤드 처리 절차
- Local 에서 테스트 (서버는 처음부터 EC2 에 만들어 놓은 Mysql 이용)
- 서버 테스트 환경이 필요하면 JAR 빌드 후 git 업로드 후 서버에서 실행하여 테스트
AWS EC2 스펙
DB 전용 인스턴스: t3.micro
실행+Redis 전용 인스턴스: t3.medium
※ t3부터 ssl을 통하지 않고 직접적 물리엔진 접근기능 제공.
※ 또한 순간 트래픽에 대응하기 위해 서버스펙을 t3로 잡음.
※ 둘 다 고정ip 할당
Java Version
백엔드 빌드 파일 작성
- 조건 : 서버에서 컴파일 가능하나 , 복잡함 / IDE 에서 JAR 로 파일 제작 필요
- 현재는 8080 및 80번 포트만 오픈되어 있음
- 현재는 수동 배포만 가능함 / 추후 어느정도 프로젝트가 완료되면 자동배포 구현 예정.
1. jar 파일로 빌드하기 (인텔리제이)
꼭 bootjar 빌드 필요
일반 빌드시 MENIFEST 경로가 오류남..
build.gradle 가서
tasks.withType(Jar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
정상적으로 빌드가 완료되면
build\libs 경로에 jar 이 있음.
windows 에서도 정상적으로 실행하는 모습을 볼수 있음. (cmd)
SSH 로그인
설정하고 접속
한번 수락
3. 계정 ubuntu 로 SSH 사용자 인증
pem 키 등록하기 (암호 없음)
확인 버튼 클릭
정상적으로 잘 접속됨.
Ubuntu 환경에 Docker 세팅 및 컨테이너 환경(install redis+ mysql) 구성
1. docker 설치에 앞서 패키지 정보 업데이트를 해준다.
2. docker 설치에 필요한 패키지를 설치한다.(mysql, redis)
1. 우분투 시스템 패키지 업데이트
sudo apt-get update
2. 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
3. Docker의 공식 GPG키를 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5. 시스템 패키지 업데이트
sudo apt-get update
6. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
7. Docker 설치 확인
sudo systemctl status docker
docker 설치 확인
8. Docker 이미지 실행해보기
sudo docker run hello-world
9. 잘 실행되었는지 확인해보기
sudo docker ps -a
10. mysql 이미지를 다운받고 실행시켜보자 (-d는 백그라운드로 실행시키는 옵션)
//아이디 : root , 비밀번호 : 맘대로 로 설정한다.
sudo docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=맘대로 -d mysql
mysql 잘 실행되는지 확인
11. redis 이미지를 다운받고 실행시켜보자
sudo docker run -p 6379:6379 -d redis
redis와 mysql이 잘 실행되었다. 이제 AWS의 EC2 인스턴스의 보안탭으로 가서 인바운드 규칙을 넣어주자. (포트를 열어주자)
<참고 레퍼런스>
https://velog.io/@wlsgur1533/AWS-EC2%EC%97%90-Docker%EB%A1%9C-MySQL-%EB%9D%84%EC%9A%B0%EA%B8%B0
https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation
MYSQL 접속하기
정상 접속 확인.
docker mysql 정상 오픈 확인
AWS 서버(우분투) 백엔드 실행파일 실행하기
jar 빌드파일 받은 후 ( ftp파일질라 이용 or git clone 이용)
해당 파일 위치로 이동 (cd~ )
java -jar <원하는 파일>.jar
백엔드 백그라운드에서 실행
nohup java -jar HellBackendStudy/build/libs/hellspringboot-0.0.1-SNAPSHOT.jar > log.out 2>&1 &
engineX 도입
sudo apt install nginx
<https://velog.io/@mero/ubuntu-22.04%EC%97%90-Nginx-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0>
방화벽 허용
sudo ufw app list
---
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
----
이렇게 보임
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
방화벽 허가함
sudo ufw enable
최종 허가