AWS에서 ec2 생성
ec2에 docker, docker compose
github secretkey 기능을 활용하여 action secret key에 AWS pair key 설정(SSH_KEY, SSH_HOST)
github workflow 설정(main으로 merge 시 배포하도록 설정)아래 코드는 amazon-linux 기준으로 작성된 .github/workflows/deploy.yml 파일이며, 이외 리눅스를 사용할 시 리눅스 명령어에 맞게 수정이 필요하다.
1. EC2 생성( Ubuntu Server 22.04 LTS (HVM) )
2. 키페어를 받아주고
putty 설치
Category-> Connection -> SSH -> Auth -> Credentials에 ppk를 올려서 접속해준다.
login as : 가 뜨면 ubuntu 를 입력해주면 접속이 완료 된다.
3. 자바 설치를 위해 아래 명령어를 차례대로 입력해준다.
wget -O - https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main" | sudo tee /etc/apt/sources.list.d/corretto.list
sudo sudo apt-get update
sudo apt-get install -y java-17-amazon-corretto-jdk
정상적으로 설치 되었다면 아래 화면이 뜬다.
4. 도커 설치를 위하여 아래 명령어를 차례대로 입력해준다.
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
정상적으로 설치되었다면 아래와 같이 뜬다.
5. docker-compose도 설치해준다.
sudo usermod -aG docker ubuntu
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
정상적으로 과정이 완료되었다면 아래와 같이 뜬다.
6. aws에서 받았던 키를 메모장으로 열어서 복사해준다음 github의 아래 메뉴로 가 SSH_KEY를 등록해준다.
(여기서 ppk로 받았다면 puttygen을 설치해서 pem 파일로 변환해주도록 하자)
SSH_HOST도 AWS 의 해당 인스턴스의 ' 퍼블릭 IPv4 DNS ' 항목을 복사해 붙여넣도록 하자.
7. 프로젝트소스/.github/workflows/deploy.yml 파일을 넣어준다.
(따로 폴더 생성이 안되있으니 .github 폴더부터 만들면 된다.)
name: Deploy
on:
workflow_dispatch:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Make application.yml
run: |
cd ./src/main/resources
touch ./application.yml
echo "${{ secrets.YML_SECRET }}" > ./application.yml
shell: bash
- name: gradlew bootJar
run: ./gradlew bootJar
- name: copy jar to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ubuntu
key: ${{ secrets.SSH_KEY }}
port: 22
source: "./build/libs/*.jar"
target: "~"
strip_components: 2
- name: SSH Commands
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.SSH_HOST }}
username: ubuntu
key: ${{ secrets.SSH_KEY }}
port: 22
script_stop: true
script: |
for pid in $(pgrep java); do
if ps -p $pid -o args= | grep -q 'java -jar'; then
echo "Java 프로세스 발견 (PID: $pid). 종료 중..."
sudo kill -9 $pid
fi
done
nohup java -jar ~/*.jar > ~/app.log 2>&1 &
8. 위 github Actions 스크림트는 main에 푸시 될때 실행되기 때문에 main에 푸시해보자.
gradle-wraper.properties가 없다는 오류가 뜰 경우 intellij 오른쪽에 gradle -> build setup의 init과 wrapper를 눌러보자.
만들어졌으면 다시 메인으로 push 해준다.
안된다면 다시 실행시켜보자,
워크플로우가 완료되면 이런식으로 뜬다.
EC2 서버에도 정상적으로 안착한 것이 확인되었다.
9. RDS 연결이 안된다면 VPC-> 라우팅을 확인할 것.
라우팅 테이블을 0.0.0.0/0으로하고 인터넷 게이트웨이로 설정해주면 된다.
이제 ec2 url로 회원가입 요청을 보내면 성공하는 걸 볼 수 있다.
'Docker AND Cloud' 카테고리의 다른 글
AWS 프리티어 EC2 빌드 실패, 메모리 부족, 스왑메모리 설정 (0) | 2025.03.27 |
---|---|
[AWS] S3 기능으로 유저 이미지 저장 기능 구현하기 (0) | 2025.01.22 |
[AWS] S3의 Presigned URL 이란? 백엔드 서버에서 presigned url 반환하기 (0) | 2025.01.21 |