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
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 |