-
Notifications
You must be signed in to change notification settings - Fork 4
AWS
PlusUltraCode edited this page Mar 27, 2025
·
1 revision
- 먼저 자바 jdk를 다운받아야 한다.
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
- 바로 git pull 땡겨서 clone 후 배포방법
git clone <git repo 주소>
chmod -x gradlew
./gradlew clean build
cd build/libs 들어가서 SNAPSHOT.JAR 파일명을 실행시킨다.
nohup java -jar instagram-server2-0.0.1-SNAPSHOT.jar &
sudo lsof -i:8080
tcp 8080 포트 종료시키는 명령어
sudo fuser -k -n tcp 8080
혹시나 repository 가 private로 설정해서 매번 비밀번호 인증이 귀찮다면
git config --global credential.helper store
근데 이러면 매번 git pull 받아서 서버 배포하는 작업이 귀찮다 . CICD 를 이용하자
intellij를 킨다음 상위 directory에 반드시
.github/workflows/deploy.yml 을 만든다

마지막 이름은 자유
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: SSH(원격 접속)로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
cd /home/ubuntu/instagram-server2
git pull origin main
./gradlew clean build
sudo fuser -k -n tcp 8080 || true
nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 &
secrets값은 넣어주자 host 는 ip를 의미 username 은 ubuntu로 설정햏으면 ubuntu private_key 는 pem key를 의미
.gitignore 등록후 cache 문제가 잇을수 있음 resouces 파일을 git 으로 등록하기 위해 임의이 txt파일 저
git add .
git status << 이거 시 new file 에 application.yml 이 있다면 아래와 같이 캐시삭제
git rm -r --cached .
해당 APPLICATION_PROPERTIES 는 SECRETS 로 따로 등록해야 된다.
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: SSH(원격 접속)로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
env:
APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
envs: APPLICATION_PROPERTIES
script_stop: true
script: |
cd /home/ubuntu/instagram-server2
rm -rf src/main/resources/application.yml
git pull origin main
echo "$APPLICATION_PROPERTIES" > src/main/resources/application.yml
./gradlew clean build
sudo fuser -k -n tcp 8080 || true
nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 &
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository에 올린 파일들을 불러오기
uses: actions/checkout@v4
- name: Test
run: |
ls
pwd
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
- name: 테스트 및 빌드하기
run: |
chmod +x ./gradlew
./gradlew clean build
- name: 빌드된 파일 이름 변경하기
run: mv ./build/libs/*SNAPSHOT.jar ./project.jar
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.jar
target: /home/ubuntu/instagram-server2/tobe
- name: SSH(원격 접속)로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
rm -rf /home/ubuntu/instagram-server2/current
mkdir /home/ubuntu/instagram-server2/current
mv /home/ubuntu/instagram-server2/tobe/project.jar /home/ubuntu/instagram-server2/current/project.jar
cd /home/ubuntu/instagram-server2/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar >./output.log 2>&1 &
rm -rf /home/ubuntu/instagram-server2/tobe
iam 이란 특정 aws 리소스가 다른 aws 리소스에 접근할 수 있는 권한을 의미한다 사용자란 외부 리소스가 특정 aws 리소스에 접근할 때
코드 deploy 와 s3를 이용하여 배포할 수 있는데 이건 추후에 하기로 ... 공부

#!/bin/bash
echo "--------------- 서버 배포 시작 -----------------"
cd /home/ubuntu/instagram-server2
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
echo "--------------- 서버 배포 끝 -----------------"

version: 0.0
os: linux
files:
# S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다.
# / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다.
- source: /
# EC2의 어떤 경로에 저장할 지 지정한다.
destination: /home/ubuntu/instagram-server2
permissions:
- object: /
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: scripts/start-server.sh
timeout: 60
runas: ubuntu
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository에 올린 파일들을 불러오기
uses: actions/checkout@v4
- name: Test
run: |
ls
pwd
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
- name: 테스트 및 빌드하기
run: |
chmod +x ./gradlew
./gradlew clean build
- name: 빌드된 파일 이름 변경하기
run: mv ./build/libs/*SNAPSHOT.jar ./project.jar
- name: 압축하기
run: tar -czvf $GITHUB_SHA.tar.gz project.jar appspec.yml scripts
- name: AWS Resource에 접근할 수 있게 AWS credentials 설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: S3에 프로젝트 폴더 업로드하기
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server123123/$GITHUB_SHA.tar.gz
- name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
run: aws deploy create-deployment
--application-name instagram-server2
--deployment-config-name CodeDeployDefault.AllAtOnce
--deployment-group-name production
--s3-location bucket=instagram-server123123,bundleType=tgz,key=$GITHUB_SHA.tar.gz
이걸 하기 위해선 aws codedeploy 설정 및 s3 설정을 해야하고 iam을 이용해 권한 부여 및 사용자를 만들어 githubaction 이 s3랑 codedeploy에 접근도 가능하게 설정해야 한다.