기본적인 배포 및 GitHub 연동은 아래를 참고해주세요 !
[GCP] GCP를 통한 서버 배포 및 Git Hub 연동
프로젝트 루트 디렉토리에 아래 처럼 도커파일을 작성

version: '3'
services:
mysql-server:
image: mysql:latest
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: crewing
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
env_file:
- .env
ports:
- "3305:3306"
redis-server:
image: redis
command: redis-server --port 6379
hostname: redis
ports:
- "6378:6379"
restart: always
crewing-server:
image: crewing-server
build: .
ports:
- "8081:8080"
env_file:
- .env
depends_on:
- mysql-server
- redis-server
DB_URL=jdbc:mysql://mysql-server:3306/crewing?useSSL=false&allowPublicKeyRetrieval=truedocker-compose up
# 1. 프로그램 설치 전 우분투 시스템 패키지 업데이트
$ sudo apt-get update
# 2. 필요한 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 3. Docker의 공식 GPG 키 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4. Docker의 공식 apt 저장소 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 5. 시스템 패키지 업데이트
$ sudo apt-get update
# 6. Docker 설치
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
# 7. 설치 확인
$ docker -v
# Docker Compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 다운로드 한 파일에 권한 설정
$ sudo chmod +x /usr/local/bin/docker-compose
# 설치 확인
$ docker-compose -v
vi .env
$ sudo docker-compose up
프로젝트 루트 경로에 .github/workflows에 작성

name: Java CI with Gradle
on:
pull_request:
branches: [ "main" ]
workflow_dispatch:
permissions: write-all
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant Execute Permission For Gradlew
run: chmod +x gradlew
- name: Build With Gradle
run: ./gradlew build -x test
name: CD
on:
workflow_dispatch:
push:
branches:
- main
permissions: write-all #테스트 결과 작성을 위해 쓰기권한 추가
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build With Gradle
run: ./gradlew build -x test
- name: Docker build & Push
run: |
docker login -u ${{ secrets.DOCKER_ID }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/crewing-server .
docker push ${{ secrets.DOCKER_REPO }}/crewing-server
- name: Deploy to Prod
uses: appleboy/ssh-action@master
id: deploy-prod
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_PRIVATE_KEY }}
envs: GITHUB_SHA
script: |
cd ./project
sudo docker stop crewing-server
sudo docker rm crewing-server
sudo docker pull ${{ secrets.DOCKER_REPO }}/crewing-server
sudo docker image tag ${{ secrets.DOCKER_REPO }}/crewing-server:latest crewing-server:latest
sudo docker-compose up -d
Repository → settings → Secrets and Variables → action
→ new Repository Secret
