AWS 배포4_Git action_2024-02-28

gitaction을 활용한 프론트엔드 s3배포 자동화

 

gitaction을 활용한 백엔드(order_system) ec2배포

 

 

github action에서 DB정보 환경변수로 적용되게 관리

상태검사 경로 / 서버에 추가(ItemController)

 

deploy_with_scp_rds.yaml 파일 내용 추가

    - name: install java and run jar on ec2
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.EC2_HOST1 }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_SSH_KEY }}
        script: | # 자바가 없으면 apt update & install jdk(자바) // echo로 멘트 출력 // killall로 java 종료 //nohup으로 데몬형태로 실행되게 하여 종료되지 않고 계속 실행되게 설정
          if ! type java > /dev/null; then 
            sudo apt update && sudo apt install openjdk-11-jdk -y
          else
            echo "java is already installed"
          fi
          sudo killall java || true
          nohup java -jar /home/${{ secrets.EC2_USERNAME }}/ordering/build/libs/*.jar \
          --spring.datasource.url=jdbc:mariadb://${{ secrets.DB_HOST }}:3306/spring_order \
          --spring.datasource.username=${{ secrets.DB_USERNAME }} \
          --spring.datasource.password=${{ secrets.DB_PASSWORD }} > /home/${{ secrets.EC2_USERNAME }}/app.log 2>&1 &

//자바가 없으면 apt update & install jdk(자바)
// echo로 멘트 출력
// killall로 java 종료
//nohup으로 데몬형태로 실행되게 하여 종료되지 않고 계속 실행되게 설정
//application.yml 경로 확인하여 url, username, password 작성 후 git action에 등록
//=>${{ secrets.DB_HOST }}, ${{ secrets.DB_USERNAME }}, ${{ secrets.DB_PASSWORD }}
//> /home/${{ secrets.EC2_USERNAME }}/app.log = 로그 출력
//2>&1 & = 스크립트 마지막에 써주지 않으면 다 실행되고 멈춰있는 상태가 됌.

 

git action secrets 추가

 

 

DB_HOST = RDS 데이터베이스 엔드포인트 및 포트 입력

DB_PASSWORD = RDS에서 설정한 PW 입력

DB_USERNAME = admin

 

 

deploy_with_scp_rds.yaml 파일 add, commit, push 후 git Success 확인

 

데이터 베이스 접속 후 spring_order스키마에 테이블 생성 확인

 

 


EC2 - 대상그룹 포트8080으로 다시 대상등록

 

보안그룹 - 사용자 지정 TCP 8080 추가

 

 


sudo apt install net-tools - 네트워크 명령어 사용 가능 netstat


서버 두개 동시에 빌드하기

#워크플로우의 이름을 지정
name: Deploy to Ec2 With Jar

# push 이벤트 지정
# main브랜치에 push 될때마다 워크플로우가 실행되도록 지정
on:
  push:
    branches:
      - main

jobs:
# 작업의 이름 지정
  build-and-deploy:
    runs-on: ubuntu-latest # 가상 작업 공간에 ubuntu 설치
    steps:
    - uses: actions/checkout@v2 

    - name: Set up JDK 11
      uses: actions/setup-java@v2 # ubuntu 위에 java 설치
      with:
        java-version: '11'
        distribution: 'temurin'

    - name: Build with Gradle
      working-directory: ./ordering # ordering 폴더로 이동
      run: | # 실행권한 부여 # gradlew 실행
        chmod +x ./gradlew
        ./gradlew bootjar

# ⭐1번서버

    - name: Copy jar to ec2
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.EC2_HOST1 }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_SSH_KEY }}
        source: "./ordering/build/libs/*.jar" # start 경로 지점
        target: "/home/${{ secrets.EC2_USERNAME }}"

    - name: install java and run jar on ec2
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.EC2_HOST1 }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_SSH_KEY }}
        script: | # 자바가 없으면 apt update & install jdk(자바) // echo로 멘트 출력 // killall로 java 종료 //nohup으로 데몬형태로 실행되게 하여 종료되지 않고 계속 실행되게 설정
          if ! type java > /dev/null; then 
            sudo apt update && sudo apt install openjdk-11-jdk -y
          else
            echo "java is already installed"
          fi
          sudo killall java || true
          nohup java -jar /home/${{ secrets.EC2_USERNAME }}/ordering/build/libs/*.jar \
          --spring.datasource.url=jdbc:mariadb://${{ secrets.DB_HOST }}:3306/spring_order \
          --spring.datasource.username=${{ secrets.DB_USERNAME }} \
          --spring.datasource.password=${{ secrets.DB_PASSWORD }} > /home/${{ secrets.EC2_USERNAME }}/app.log 2>&1 &

# ⭐2번서버

    - name: Copy jar to second server ec2
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.EC2_HOST2 }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_SSH_KEY }}
        source: "./ordering/build/libs/*.jar" # start 경로 지점
        target: "/home/${{ secrets.EC2_USERNAME }}"

    - name: install java and run jar on second server ec2
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.EC2_HOST2 }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_SSH_KEY }}
        script: | # 자바가 없으면 apt update & install jdk(자바) // echo로 멘트 출력 // killall로 java 종료 //nohup으로 데몬형태로 실행되게 하여 종료되지 않고 계속 실행되게 설정
          if ! type java > /dev/null; then 
            sudo apt update && sudo apt install openjdk-11-jdk -y
          else
            echo "java is already installed"
          fi
          sudo killall java || true
          nohup java -jar /home/${{ secrets.EC2_USERNAME }}/ordering/build/libs/*.jar \
          --spring.datasource.url=jdbc:mariadb://${{ secrets.DB_HOST }}:3306/spring_order \
          --spring.datasource.username=${{ secrets.DB_USERNAME }} \
          --spring.datasource.password=${{ secrets.DB_PASSWORD }} > /home/${{ secrets.EC2_USERNAME }}/app.log 2>&1 &

 

 

 

 


front, back 합쳐서 배포(수업에서만 합쳐서 진행)

WebConfig - .allowedOrigins 변경확인

 

ordering-fronted - .env 경로 변경

 

화면테스트

ordering-fronted 파일로 와서 npm run serve

 


AWS CLI 사용해보기

IAM 사용자 생성(S3 사용자)

 

직접 정책 연결 - s3FullAccess 선택 - 사용자 생성 완료

 

사용자 정보 확인

 

사용자 생성 확인

 

액세스 키 만들기

 

CLI 선택 후 확인

 

설명 없이 액세스 키 만들기

 

액세스 키 값 확인

 


AWS cli download

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

download 후 설치

 

설치 후 cmd에서 aws version 확인

aws --version

 

cmd에서 aws configure 진행

- 액세스 키 입력

- 비밀 액세스 키 입력

- region name 입력

- json 입력

 

aws s3 ls S3 내부 데이터 확인

 

 

 

 

AWS_S3_ACCESS_KEY = 사용자 액세스 키

AWS_S3_SECRET_KEY = 사용자 비밀 액세스 키

 


 

deploy_fronted_with_s3.yaml 파일 내용 추가(프론트 파일 작성)

name: Deploy to AWS S3

on:
  push:
    branches:
      - main

jobs:
# 작업의 이름 지정
  build-and-deploy:
    runs-on: ubuntu-latest # 가상 작업 공간에 ubuntu 설치
    steps:
    - uses: actions/checkout@v2 

    - name: setup node.js
      uses: actions/setup-node@v2
      with:
        node-version: '20'

    - name: npm install
      working-directory: ./ordering-fronted
      run: npm install

    - name: npm build
      working-directory: ./ordering-fronted
      run: npm run build

    - name: setup aws cli # aws user 세팅
      uses: aws-actions/configure-aws-credentials@v2
      with:
        aws-access-key-id: ${{secrets.AWS_S3_ACCESS_KEY}}
        aws-secret-access-key: ${{secrets.AWS_S3_SECRET_KEY}}
        aws-region: "ap-northeast-2"

    - name: deploy to s3 # dist내용 s3 버킷에 복사 // recursive 파일체계
      run: |
        aws s3 cp ./ordering-fronted/dist s3://ordering-vue/ --recursive

 

add, commit, push로 git action 동작하여 배포하기

 

로그인 및 회원가입 완료 확인

'Cloud > AWS' 카테고리의 다른 글

Docker3_2024_03_05  (0) 2024.03.05
Docker2_2024_03_04  (1) 2024.03.05
Docker1_2023_02_29  (0) 2024.03.04
AWS 배포3_Git action_2024-02-27  (0) 2024.02.27
AWS 배포2_2024-02-27  (0) 2024.02.27