ec2 서버 배포, 8080 포트 열어두기, 내 ip에서 ssh 22, .pem key 사용해서 접속
https://docs.docker.com/engine/install/ubuntu/
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
공식문서를 참고하여 docker 설치
docker pull postgres
docker run -d \
--name local_pgdb \
--restart always \
-p 5432:5432 \
-e POSTGRES_USER={user} \
-e POSTGRES_PASSWORD={password} \
-v local_pgdata:/var/lib/postgresql/data \
postgres
docker pull dpage/pgadmin4
docker run -d \
--name pgadmin4_container \
--restart always \
-p 8888:80 \
-e PGADMIN_DEFAULT_EMAIL={user-email} \
-e PGADMIN_DEFAULT_PASSWORD={password} \
-v pgadmin-data:/var/lib/pgadmin \
dpage/pgadmin4
docker-compose 설치할랬는데, docker-compose 의 호환이 지원되지 않아 포기
추후에 rds로 옮기려한다.
# 워크 플로우 이름
name: Java CI with Gradle
# 워크 플로우가 언제 실행 될지를 정한다.
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# 워크 플로우가 깃 레포에 대한 권한을 읽기 만 가능하게 설정한다.
permissions:
contents: read
# 워크플로우에서 할 작업 정의한다.
jobs:
# 작업 환경 = 우분투 최신 버전
build:
runs-on: ubuntu-latest
# 깃허브에서 제공하는 checkout 엑션 사용
steps:
- uses: actions/checkout@v3
# JDK 21 설정한당
# temurin = Adoptium에서 제공하는 JDK
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
# gradle wrapper 파일에 실행 권한을 부여
# gradle wrapper = 개발자가 특정 버전의 Gradle을 미리 설치하지 않고도 Gradle 빌드를 실행할 수 있게 해주는 편리한 도구
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Application.yml 파일에 secret 값 넣어주기
- name: Set Yaml
uses: microsoft/variable-substitution@v1
with:
files: ./src/main/resources/application.yml
env:
spring.datasource.url: ${{ secrets.DB_URL }}
spring.datasource.username: ${{ secrets.DB_USERNAME }}
spring.datasource.password: ${{ secrets.DB_PASSWORD }}
jwt.secret.key: ${{ secrets.JWT_KEY }}
# Gradle 빌드 엑션을 이용해서 프로젝트 빌드
- name: Build with Gradle
uses: gradle/gradle-build-action@v2.6.0
with:
arguments: build -Dspring.profiles.active=dev
# 빌드해서 생긴 JAR 파일을 깃허브 아티팩트로 업로드!!
- name: Upload build artifact
uses: actions/upload-artifact@v2
with:
name: SecurePay
path: build/libs/SecurePay-0.0.1-SNAPSHOT.jar
# 배포 **
deploy:
needs: build
runs-on: ubuntu-latest
# 위의 빌드작업한 JAR 파일 = 아티팩트를 다운로드
steps:
- name: Download build artifact
uses: actions/download-artifact@v2
with:
name: SecurePay
path: build/libs/
# EC2에 배포
# EC2 SSH 키를 SecurePay.pem 파일로 저장 ( 위치는 GitHub 서버 )
# SCP를 사용하여 JAR 파일을 EC2 서버로 복사
# SSH를 사용하여 EC2 서버에 연결하고 현재 실행 중인 Java 프로세스를 종료한 다음 새로운 Java 프로세스 생성 및 실행!!
## NLP 적용하면 IP -> 도메인으로 수정 + EC2 늘리면 run 추가
- name: Deploy to EC2
run: |
echo "${{ secrets.EC2_SSH_KEY }}" > SecurePay.pem
chmod 600 SecurePay.pem
scp -i SecurePay.pem -o StrictHostKeyChecking=no build/libs/SecurePay-0.0.1-SNAPSHOT.jar ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/home/${{ secrets.EC2_USERNAME }}/SecurePay.jar
ssh -i SecurePay.pem -o StrictHostKeyChecking=no ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }} "pgrep java | xargs kill -9; nohup java -jar /home/${{ secrets.EC2_USERNAME }}/SecurePay.jar --spring.profiles.active=dev > app.log 2>&1 &"
rm -f SecurePay.pem
이런식으로 CI/CD 가능하도록 코드 수정
열심히 고쳐서 완료
근데 두가지 문제가 있었는데
SSH 통신에 github action의 ip를 알 수 없어서 그걸 활용해야되는 것
ip는 일단 보안그룹을 열어줬고, ci 작업이 완료되고 난 이후, 다시 내 ip에서만 접근 가능하도록 수동으로 작업해주었다.(해결방법이 있다고 하지만 러닝커브가 높아보여 보류)
java 21을 설치안했던 것, 이 두가지였다.
sudo apt update
sudo apt install openjdk-21-jdk
이걸 안해서 배포가 안되고 있었다.
dockerfile을 선호하게 되는 이유를 알 것 같다.
그냥 dockerfile을 사용하여 같이 설치되도록 하면 편할 것 같다.
'Diary > TIL' 카테고리의 다른 글
2024-05-26) CS공부 (0) | 2024.05.26 |
---|---|
2024-05-25) 서브 프로젝트의 사용 가능 도구들 찾아보기 (0) | 2024.05.25 |
2024-05-22) 로그인 분석 (0) | 2024.05.24 |
2024-05-21) 로그인, 회원가입 Entity 설계 (0) | 2024.05.24 |
2024-05-20) Postgresql, 로그인 (0) | 2024.05.24 |