일기처럼 작성되었습니다. 참고 바랍니다.
환경
java 17
spring boot 3.1.1
gradle 8.1.1
github
dockerhub
proxmox(KVM 기반 오픈소프 하이퍼바이저)
초기 설정
proxmox 설치한 가상머신
mysql 서버
docker 엔진용 서버
시나리오
맥북 에어로 개발하고 github로 commit 하면 action에서 gradle & docker 빌드 후 docker서버에서 도커로 배포
개념도 제대로 이해 못하고 시작하여 처음엔 가상머신에 scp로 jar 파일 업로드 및 실행하는 방법을 생각했다.
계속 찾아보니 도커가 있는데 그럴 필요가 없었다.
그래서 결과물은 도커로 배포 된다. 그리고 다른 능력자분들의 것들의 짜깁기이다.
Dockerhub 설정
Account settings - Security - Access Tokens -> 생성 및 키값 아래 작업의 github의 변수에 추가
Github 리포지토리 설정
설정 - Secrets and Variables - Action - Repository secrets -> 민감정보 설정
Github action - New workflow -> gradle 선택(참고용으로 사용 예정)
Dockerfile 작성(편의를 위해 gradlew 파일과 같은 위치하였다.)
FROM khipu/openjdk17-alpine # 도커허브에서 이미지 검색하여 찾음
COPY ./build/libs/vue-boot-backend-0.0.1-SNAPSHOT.jar app.jar # 프로젝트명 등등
ENTRYPOINT ["java", "-jar", "app.jar"]
gradle.yml 파일 작성
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
- name: 저장소 Checkout
uses: actions/checkout@v3
- name: 스프링부트 애플리케이션 빌드 # (1)
run: ./gradlew build
- name: 도커 이미지 빌드 # (2)
run: docker build -t kimjuyoung0923/miner .
- name: Docker Hub 로그인 # (3)
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker Hub 퍼블리시 # (4)
run: docker push kimjuyoung0923/miner
- name: WAS 인스턴스 접속 및 애플리케이션 실행 # (5)
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_PORT }}
script: |
docker stop $(docker ps -a -f "name=miner" -q)
docker rm $(docker ps -a -f "name=miner" -q)
docker pull kimjuyoung0923/miner
docker run -d -p 8080:8080 --name miner kimjuyoung0923/miner
그 외 작업
도커서버의 사용자에 docker 권한이 없으므로 docker 그룹에 사용자 추가
적용은 파일 저장 후 바로 적용 된다. 기존 ssh 세션은 로그아웃 후 재로그인 해야 한다.(재부팅 안해도 된다.)
참고한 블로그
'개발 > 기타' 카테고리의 다른 글
[macOS] 배터리 관리 AlDente (0) | 2023.11.15 |
---|---|
[macOS] 맥북 리소스 모니터링 툴 (0) | 2023.10.31 |
[Python] vscode 환경설정 (0) | 2023.09.13 |
[Python] VS Code 설치 및 가상환경 설정 (0) | 2022.07.05 |
[Python] Windows 10 설치 (0) | 2022.07.05 |