이제 운영에 배포한다고 생각하고 Elastic Beanstalk에 올릴거다.
환경 구성가서
애플리케이션 이름
환경이름
플랫폼은 서버니까 자바
샘플 애플리케이션으로 만들고
말이 운영이지 연습이니 단일 인스턴스
서비스 액세스는 새로만들어도되고 있던거 써도되고
vpc는 디비나 다른거 공유할거로 맞추고
값싼 마이크로 ec2
롤링업데이트는 단일 인스턴스라 못하고
이건 환경을 미리 만들고 거기에 prod로 풀 리퀘스트 할때마다 배포하게 하는거니
yml이 아닌 빈스톡 환경에 변수를 전부 입력했다.

특별한 설정은 없었으니 잘 생성됫고 도메인누르면 샘플페이지 뜬다
이제 깃 액션
name: Deploy to AWS Elastic Beanstalk
on:
push:
branches:
- prod
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew clean bootJar
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Deploy to Elastic Beanstalk
uses: einaregilsson/beanstalk-deploy@v22
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: ${{ secrets.EB_APPLICATION_NAME }}
environment_name: ${{ secrets.EB_ENVIRONMENT_NAME }}
version_label: ${{ github.sha }}
region: ${{ secrets.AWS_REGION }}
deployment_package: build/libs/board-api.jar
환경변수는 빈스톡에 입력해놧으니
빈스톡에 배포하고 배포되는 소스를 s3에 저장시키기 위해 iam을 만들고
AdministratorAccess-AWSElasticBeanstalk
AmazonS3FullAccess
AWSCloudFormationFullAccess
IAMFullAccess
필요한 권한을 부여
깃 시크릿에 키 아디, 시크릿키, 레기온 저장하고
실행하니 바로 성공.
바로 route53에 board-api.prod로 좀 구린 레코드 생성하고 프록시 설정하니 정상적으로 설정한 도메인으로 응답 확인
아재 리액트를 운영배포한다고 생각하자
s3와 cloudeFront를 사용한다
먼저 s3를 생성하고 권한은 그냥 다 차단해둔다

빌드한 파일 올리고 클라우드 프론트로 가


저 빨간곳에 아까 만든 s3연결시키고
뒤에 나오는 보안쪽은 돈나가니까 끄고 마지막으로 확인하고 생성
생성이 되면 설정에서

이렇게 추가해야 라우트가 정상적으로 된다고 하더라
이제 배포 도메인 이름으로 접속해보면 접속이 잘 되는걸 확인하고
name: Production S3 Deploy and CloudFront Invalidation
on:
push:
branches:
- prod
env:
NODE_VERSION: '22'
AWS_REGION: ap-northeast-2
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build for production
run: npm run build
env:
VITE_SERVER_URL: ${{ secrets.VITE_PROD_SERVER_URL }}
VITE_AUTH_URL: ${{ secrets.VITE_PROD_AUTH_URL }}
VITE_APP_ENV: production
VITE_APP_COOKIE_DOMAIN: ${{ secrets.VITE_PROD_COOKIE_DOMAIN }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Deploy to S3
run: |
aws s3 sync ./dist s3://${{ secrets.S3_BUCKET_NAME }} --delete --cache-control max-age=31536000,public
aws s3 cp s3://${{ secrets.S3_BUCKET_NAME }}/index.html s3://${{ secrets.S3_BUCKET_NAME }}/index.html --cache-control max-age=0,no-cache,no-store,must-revalidate --content-type text/html
- name: Invalidate CloudFront
run: |
DISTRIBUTION_ID="${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }}"
INVALIDATION_ID=$(aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths "/*" --query 'Invalidation.Id' --output text)
echo "CloudFront invalidation created with ID: $INVALIDATION_ID"
echo "Waiting for invalidation to complete..."
aws cloudfront wait invalidation-completed --distribution-id $DISTRIBUTION_ID --id $INVALIDATION_ID
echo "✅ CloudFront invalidation completed!"
prod 브런치로 푸시되면 실행하는 액션이다.
개발서버와 중복되는 시크릿이 있으나

여기서 환경을 설정하고 해당 환경 내부에 시크릿값을 저장시키면
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
요기 액션에 설정한 환경에 우선순위가 되서 여기 환경에 설정한 시크릿값이 입력된다.
환경에 없는값은 원래 작성해둔 전역? 시크릿값을 참조한다고 하더라
이제 도메인 설정을 위해 클라우드프론트 배포에서

이친구를 누른다

도메인을 입력하고

하단에 인증서 만들기 누르면 알아서 설정하고 만들어주더라
다하고
route53에서
레코드생성

클라우드프론트 선택하고 아래 누르면 방금만들었던 내용이 뜨니 그거선택하고 도메인설정되면 완료

쿠키도 잘만들어지고 로그인도 유지되는거보니 환경변수 오타도 없나보다