Search

#014 #배포자동화02

PaSS

NginX 서버가 5000번을 때리기 때문에, PROD 서버 설정을 5000으로 설정을 해줘야 된다.

Jar파일 굽기

로컬에서 테스트 하고 바로 AWS로 던지는게 위험한 이유는, 환경이 다르기 때문!!! 테스트를 하면 같은 환경에서 테스트를 해봐야된다. !!!

도커를 공부해야되는 이유???

우분투를 윈도우에서 실행할 수 있다. 같은 환경을 가상화로 만들 수 있기 때문에 도커를 배우는 것이 중요하다. 도커를 사용할 것이 아니라면, 테스트 서버를 로컬서버에 맞게 똑같이 만들어서 사용하면 된다.

로컬 돌려보고 → 테스트 서버 환경 세팅 확인 → 실제 서버 넣어보기

이걸 파이프 라인으로 구축한 다는 것은? → 배포 자동화 CI/CD
1.
로컬에서 프로젝트 생성
2.
로컬에서 프로젝트를 github로 배포
3.
github이 코드변경을 감지 서버를 만든 뒤에 서버로 프로젝트를 전달 (CI)
4.
github 자체에 우분투 테스트 서버를 만들어서 테스트를 돌려보고 AWS를 보내준다. (깃헙 action)
5.
깃헙에서 던지는 jar파일을 모조건 허용하지 않기 때문에, IAM이 필요함 (Access Key), 권한 설정
6.
CI/CD는 종류가 많다.
a.
트래비스
b.
젠킨스
c.
Polling기법
i.
변화가 생긴 것을 외부에서 확인하는 방법, 계속 request로 확인을 직접 해야된다.
ii.
깃헙이 바뀌었을 때 어떤게 바뀌었다고 알려주면, 구독 푸쉬 기법 (Webhook 기법)
7.
권한 → 정책 (권한을 묶은 것)
a.
사람에게는 그룹이나 권한이나 정책을 주는 것 (그룹으로 관리하는 게 제일 편하다)
b.
역할 (엘라스틱 빈 스톡자체가 EC2에 접근할 수 있는 것은 역할)
c.
테스트를 돌릴때는 yml DEV해야된다. (깃험 액션에서)

로드 밸런서 구조

트럭들은 모두 보안 그룹 설정이 필요하다. 어느 포트를 누구에게 개방할지 설정을 해야된다.
EC2가 로드 밸런서의 IP를 허용해야된다. EC2는 외부에서 접근할 일이 없으므로, 공인 아이피를 설정할 필요 없다. 공인 아이피는 비용이 발생한다. 내부 아이피는 비용이 발생하지 않는다.
EC2는 80포트만 허용해준다. EC2는 프로비전을 통해서 확장 설정을 하게 되고, Auto Scaling을 하게 된다. 엘라스틱 빈 스톡에서 프로비전 설정을 할 수가 있다.
보안 그룹 이름을 설정해서 EC2가 같이 사용하면 된다. k1
이 전체 EC2를 관리하는 엘라스틱빈스톡에게 보안그룹을 설정 해주면 된다. K1
로드밸런서는 오픈된 단일진입점이므로 모든 아이피 허용과 80포트 허용을 위해서 0:80 설정을 한다.

리버스 프록시로 가장 많이 쓰는 서비스 : cloudflare

클라우드 플레어가 우리서버 앞에서 존재하므로 , 디도스 공격이 들어와서 클라우드 플레어가 막아준다. 정적인 파일을 모두 클라우드 플레어에 저장, 캐싱도 시켜준다.
로드밸런서 보안그룹을 K2로 설정. EC2입장에서 보안정책을 가진 그룹을 허용할 수 있다.
이 기능이 RDS설정을 할 때 필요하다. 왜냐하면 CI/CD에서 사라지는 EC2때문에 매번 새로운 아이피를 등록하는 것이 번거롭기 때문이다.
그래서 보안그룹 자체를 허용해주면, 자동 생성되는 EC2도 허용이 된다.

GitHub Actions 접속 (내 프로젝트에서)

publish java package 클릭

스텝에서 빌드만 되면 자동 테스트가 되는 것이다.

여기서 자바버전 21을 허용해주는 버전을 찾아야 된다.
상세설정은 with에서 한다.

깃헙 폴더 생성, 프로젝트 내 최상위에 github

내부에 workflows폴더 생성
폴더네 deploy.yml 파일 생성
마스터 브랜치에 푸시가 되면 CI하겠다는 설정
자바 21을 허용하는 지 확인하고 버전 설정

projects>github>workflows>deploy.yml 설정

name: blog on: push: branches: - master # https://github.com/actions/setup-java # actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다. jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: java-version: 21 distribution: 'temurin' - name: Permission run: chmod +x ./gradlew - name: Build with Gradle run: ./gradlew clean build - name: AWS CD
JavaScript
복사

내가 푸시한 것을 깃허브에서 테스트 해보고 있다.

build되고 나서 jar파일이 어디에 생성되는 지 테스트 해보아야된다.

실행되는 경로 확인, 여기서 jar을 찾아야 cd를 할 수 있다.
이렇게 복사하면서 이름을 지정할 수 있다.
배포가 완료 되었을때, 명령어들을 넣어야 된다. 엘라스틱 빈스톡은 Procfile을 실행한다.

폴더 생성
파일 생성 ㅡ스크립트에 포함된 것을 순서대로 실행한다.
아마존 우분투는 레드햇 계열이라 명령어가 다르다. (다른 애들은 데비안 계열)
GPL 공중 퍼블릭 라이센스,
압축이 풀리면 항상 이 경로로 간다
files: "/sbin/appstart": mode: "000755" owner: webapp group: webapp content: | #!/usr/bin/env bash JAR_PATH=/var/app/current/application.jar java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar ${JAR_PATH}
JavaScript
복사
파일 만드는 것은 리눅
작업 명령들을 다 실행이되고 다시 시작할때, 나의 경로가 어디인가????
deploy 폴더가 보이니까 여기 까지인거지
https://github.com/einaregilsson/beanstalk-deploy
JavaScript
복사
로그인해서 아래 키들을 부여받아야 된다.
이렇게 환경변수가 두개라면 시스템이 자동적으로 깃헙시스템을 쓴다.
엘라스틱 빈스톡의 앱이름과 환경이름, 철자 틀리면 안된다.
설정 최종완료

최종 deploy.yml 코드

배포예시 깃허브

beanstalk-deploy
einaregilsson