HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 BackFro💯] ArtZip: 세상 모든 전시회를 한 번에
[팀 BackFro💯] ArtZip: 세상 모든 전시회를 한 번에
/
☠️
백엔드 기술 문서
/
⏩
Docker, Elastic Beanstalk 를 이용한 무중단 배포
⏩

Docker, Elastic Beanstalk 를 이용한 무중단 배포

너무나 명확한 요약 그림
너무나 명확한 요약 그림

특정 Branch에 Push / Merge 시 Github Action Script 실행

# dockerfile FROM openjdk:11.0.15 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} demo-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","/demo-0.0.1-SNAPSHOT.jar"]
# .github/workflows/deploy.yml name: Java CI with Gradle on: push: # 해당 branch에서 push 시 스크립트 실행 branches: [ "main" ] pull_request: # 해당 branch로 pull request 병합 시 스크립트 실행 - 불확실. 테스트 해 볼 예정 branches: [ "main" ] permissions: # 기본으로 있던 친군데 아마 코드 내용을 수정 못하게 하는 권한 설정인듯? contents: read jobs: # 스크립트에서 실행 될 잡들 build: runs-on: ubuntu-latest # 해당 스크립트가 돌아갈 환경 steps: - uses: actions/checkout@v3 - name: Set up JDK 11 # 17로 변경 필요 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' - name: Grant execute permission for gradlew # gradlew 권한 설정 run: chmod +x gradlew - name: Build with Gradle # gradlew로 초기화 및 빌드 (해당 스크립트에선 jar 파일 생성을 위해 bootJar를 사용, 보통은 build 면 됨) run: ./gradlew clean bootJar - name: Docker build # (docker hub에 jar 파일 push) (앞서 나온 dockerfile이 이 때문에 필요) run: | docker login -u ${{secrets.DOCKERHUB_USERNAME}} -p ${{secrets.DOCKERHUB_PASSWORD}} docker build -t hooo0503/demo . docker push hooo0503/demo - name: Current Time # elastick beanstalk 에선 버전 이름이 같으면 에러 발생. 버전 이름 중복 방지용 시간 uses: gerred/current-time@master id: current-time - name: Replace string # 위와 동일한 이유로 존재. 앞서 수집한 current time을 format화 시켜주는 job uses: frabert/replace-string-action@v2.1 id: format-time with: pattern: '[:\.]+' string: "${{ steps.current-time.outputs.time }}" replace-with: '-' flags: 'g' - name: Beanstalk Deploy # aws beanstalk에 deploy하는 script. uses: einaregilsson/beanstalk-deploy@v20 with: # AWS Access Key aws_access_key: ${{secrets.AWS_ACCESS_KEY_ID}} # AWS Secret Key aws_secret_key: ${{secrets.AWS_SECRET_ACCESS_KEY}} # AWS Region region: ap-northeast-2 # Beanstalk application name application_name: "docker-test" # Beanstalk environment name. If empty a version will be created but not deployed anywhere. environment_name: "Dockertest-env" # Version label for new Beanstalk version version_label: "github-action--${{steps.format-time.outputs.replaced}}" # Zip file with the version to deploy. If skipped the action will deploy existing version. deployment_package: Dockerrun.aws.json # 생성된 인스턴스 내부에서 도커에게 전달할 데이터 함유
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "hooo0503/demo:latest", //docker hub에 존재하는 레포지토리 이름 및 태그 명 "Update": "true" // 넌 뭐냐? }, "Ports": [ { "ContainerPort": 8080, // 컨테이너 내부 포트. 도커 내부에서 돌아갈 Application의 포트 값을 넣어주면 된다. "HostPort": 5000 // 컨테이너 포트와 연결될 호스트 포트. 호스트의 5000번과 컨테이너의 8080이 연결된다. } ] }
 

Reference

2. Github Action & AWS Beanstalk 배포하기 - profile=local로 배포하기
지난 시간에 만들어둔 Github Action을 통해 profile=local 로 Beanstalk에 배포를 진행해보겠습니다. profile=local, 즉, 운영 DB와 구글&네이버 OAuth 를 사용하지 않는 간단한 테스트 용도로만 배포할 예정입니다. 실제 운영 배포는 다음 시간에 진행할 예정입니다. Github Action과 Beanstalk 연동된 환경 (즉, 이번 시간에 설정된 환경)를 구성하고 이를 기반으로 개선하는 과정으로 진행할 예정입니다.
2. Github Action & AWS Beanstalk 배포하기 - profile=local로 배포하기
https://jojoldu.tistory.com/549
2. Github Action & AWS Beanstalk 배포하기 - profile=local로 배포하기
[CI/CD] Docker와 Elastic Beanstalk를 사용한 spring boot 프로젝트 CI/CD 자동화 배포2 (실습내용)
AWS 개발자 안내서 에 제공된 내용을 확인해보면, Docker Compose를 사용하지 않고 배포하는 경우, zip파일을 생성하지 않고 Dockerfile과 Dockerrun.aws.json파일만 사용하여 애플리케이션을 배포할 수 있다고 설명하고 있다. dockerrun.aws.json은 v1,v2,v3으로 구분되며 아래 조건에 따라 사용하는 버전을 선택할 수 있다.
[CI/CD] Docker와 Elastic Beanstalk를 사용한 spring boot 프로젝트 CI/CD 자동화 배포2 (실습내용)
https://taetoungs-branch.tistory.com/202?category=1035823
[CI/CD] Docker와 Elastic Beanstalk를 사용한 spring boot 프로젝트 CI/CD 자동화 배포2 (실습내용)