Skip to content

Commit 7e2ccee

Browse files
committed
chore: 인프라 환경 이전 작업 (#169)
* chore: GCE 자동화 빌드 및 배포 워크플로우 추가, GCE 수동 빌드 및 배포 워크플로우 유지 * chore: nginx default.conf 파일 및 docker-compose.yml 파일 삭제 * chore: S3 자격증명 설정 변경 * refactor: S3 접근 테스트 API 제거
1 parent b4751e6 commit 7e2ccee

File tree

9 files changed

+170
-233
lines changed

9 files changed

+170
-233
lines changed

.github/workflows/.DS_Store

6 KB
Binary file not shown.
Lines changed: 119 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,119 @@
1-
#name: develop push Build and Deploy
2-
#
3-
#on:
4-
# push:
5-
# branches: [ "develop" ]
6-
#
7-
#env:
8-
# DOCKERHUB_USERNAME: fittheman
9-
# DOCKERHUB_IMAGE_NAME: fittheman-server
10-
#
11-
#jobs:
12-
# build-deploy:
13-
# runs-on: ubuntu-latest
14-
# environment: DEV
15-
#
16-
# steps:
17-
# # 체크아웃
18-
# - name: Checkout
19-
# uses: actions/checkout@v4
20-
#
21-
# # JDK 17 세팅
22-
# - name: Set up JDK 17
23-
# uses: actions/setup-java@v4
24-
# with:
25-
# java-version: '17'
26-
# distribution: 'temurin'
27-
#
28-
# # 테스트 환경에서 필요한 컨테이너 실행 (redis, postgres)
29-
# - name: Run Containers
30-
# run: docker compose -f ./docker-compose-test.yml up -d
31-
#
32-
# # 테스트 환경에서 필요한 스키마, 데이터 등록
33-
# - name: Apply Schema and Data
34-
# env:
35-
# TEST_POSTGRES_CONTAINER_NAME: "${{ github.event.repository.name }}-postgres-1"
36-
# TEST_POSTGRES_USER: test
37-
# TEST_POSTGRES_DB: ftm_test_db
38-
# run: |
39-
# echo "⏳ Waiting for postgres to be ready..."
40-
# until docker exec -i $TEST_POSTGRES_CONTAINER_NAME pg_isready -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB; do
41-
# echo "postgres is not ready yet. Retrying in 3 seconds..."
42-
# sleep 3
43-
# done
44-
# echo "✅ postgres is ready!"
45-
#
46-
# echo "${{ secrets.SCHEMA_SQL }}" | docker exec -i $TEST_POSTGRES_CONTAINER_NAME psql -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB
47-
# echo "${{ secrets.DATA_SQL }}" | docker exec -i $TEST_POSTGRES_CONTAINER_NAME psql -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB
48-
#
49-
# # Gradlew 실행 권한 허용
50-
# - name: Grant Execute Permission for Gradlew
51-
# run: chmod +x ./gradlew
52-
#
53-
# # .env 파일 생성
54-
# - name: Load secrets into .env file
55-
# run: |
56-
# echo "${{ secrets.ENV }}" >> .env
57-
#
58-
# # Swagger API 문서화 task 실행
59-
# - name: Apply Swagger API Document Task
60-
# run: ./gradlew copyOasToSwagger
61-
#
62-
# # Rest Docs API 문서화 task 실행
63-
# - name: Apply Rest Docs API Document Task
64-
# run: ./gradlew copyDocument
65-
#
66-
# # Gradle 빌드
67-
# - name: Build with Gradle
68-
# id: gradle
69-
# uses: gradle/gradle-build-action@v2
70-
# with:
71-
# arguments: |
72-
# bootJar
73-
# --scan
74-
# cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
75-
#
76-
# # Dockerhub 로그인
77-
# - name: Login to Dockerhub
78-
# uses: docker/login-action@v3
79-
# with:
80-
# username: ${{ env.DOCKERHUB_USERNAME }}
81-
# password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
82-
#
83-
# # Docker 메타데이터
84-
# - name: Extract Docker metadata
85-
# id: metadata
86-
# uses: docker/metadata-action@v5.5.0
87-
# env:
88-
# DOCKERHUB_IMAGE_FULL_NAME: ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
89-
# with:
90-
# images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
91-
# tags: |
92-
# type=sha,prefix=
93-
#
94-
# # Docker 이미지 빌드, 도커허브 푸시
95-
# - name: Build and Push Docker image
96-
# uses: docker/build-push-action@v3
97-
# with:
98-
# context: .
99-
# push: true
100-
# tags: ${{ steps.metadata.outputs.tags }} # 추출된 도커 메타데이터 tags -> "${DOCKERHUB_USERNAME}/${DOCKERHUB_IMAGE_NAME}:{TAG}
101-
#
102-
# # EC2 서버로 docker-compose.yml 파일 복사
103-
# - name: Copy docker-compose file to EC2
104-
# uses: burnett01/rsync-deployments@7.0.1
105-
# with:
106-
# switches: -avzr --delete
107-
# path: docker-compose.yml
108-
# remote_host: ${{ secrets.EC2_HOST }}
109-
# remote_user: ${{ secrets.EC2_USER }}
110-
# remote_key: ${{ secrets.SSH_PRIVATE_KEY }}
111-
# remote_path: /home/ubuntu/
112-
#
113-
# # EC2 서버로 nginx 파일 복사
114-
# # docker-compose.yml 에서 nginx 컨테이너 실행 시 파일을 마운트하기 위함
115-
# - name: Copy default.conf file to EC2
116-
# uses: burnett01/rsync-deployments@7.0.1
117-
# with:
118-
# switches: -avzr --delete
119-
# path: ./nginx
120-
# remote_host: ${{ secrets.EC2_HOST }}
121-
# remote_user: ${{ secrets.EC2_USER }}
122-
# remote_key: ${{ secrets.SSH_PRIVATE_KEY }}
123-
# remote_path: /home/ubuntu
124-
#
125-
# # EC2 배포
126-
# - name: Deploy to EC2 Server
127-
# uses: appleboy/ssh-action@v1.0.3
128-
# env:
129-
# IMAGE_FULL_PATH: ${{ steps.metadata.outputs.tags }}
130-
# DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }}
131-
# with:
132-
# host: ${{ secrets.EC2_HOST }}
133-
# username: ${{ secrets.EC2_USER }}
134-
# key: ${{ secrets.SSH_PRIVATE_KEY }}
135-
# envs: IMAGE_FULL_PATH, DOCKERHUB_IMAGE_NAME # docker-compose.yml 에서 사용할 환경 변수
136-
# debug: true
137-
# script: |
138-
# echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
139-
# docker compose up -d
140-
# docker image prune -a -f
1+
name: develop push Build and Deploy
2+
3+
on:
4+
push:
5+
branches: [ "develop" ]
6+
7+
env:
8+
DOCKERHUB_USERNAME: fittheman
9+
DOCKERHUB_IMAGE_NAME: fittheman-server
10+
11+
jobs:
12+
build-deploy:
13+
runs-on: ubuntu-latest
14+
environment: DEV
15+
16+
steps:
17+
# 체크아웃
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
with:
21+
ref: ${{ inputs.ref }}
22+
23+
# JDK 17 세팅
24+
- name: Set up JDK 17
25+
uses: actions/setup-java@v4
26+
with:
27+
java-version: '17'
28+
distribution: 'temurin'
29+
30+
# 테스트 환경에서 필요한 컨테이너 실행 (redis, postgres)
31+
- name: Run Containers
32+
run: docker compose -f ./docker-compose-test.yml up -d
33+
34+
# 테스트 환경에서 필요한 스키마, 데이터 등록
35+
- name: Apply Schema and Data
36+
env:
37+
TEST_POSTGRES_CONTAINER_NAME: "${{ github.event.repository.name }}-postgres-1"
38+
TEST_POSTGRES_USER: test
39+
TEST_POSTGRES_DB: ftm_test_db
40+
run: |
41+
echo "⏳ Waiting for postgres to be ready..."
42+
until docker exec -i $TEST_POSTGRES_CONTAINER_NAME pg_isready -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB; do
43+
echo "postgres is not ready yet. Retrying in 3 seconds..."
44+
sleep 3
45+
done
46+
echo "✅ postgres is ready!"
47+
48+
echo "${{ secrets.SCHEMA_SQL }}" | docker exec -i $TEST_POSTGRES_CONTAINER_NAME psql -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB
49+
echo "${{ secrets.DATA_SQL }}" | docker exec -i $TEST_POSTGRES_CONTAINER_NAME psql -U $TEST_POSTGRES_USER -d $TEST_POSTGRES_DB
50+
51+
# Gradlew 실행 권한 허용
52+
- name: Grant Execute Permission for Gradlew
53+
run: chmod +x ./gradlew
54+
55+
# .env 파일 생성
56+
- name: Load secrets into .env file
57+
run: |
58+
echo "${{ secrets.ENV }}" >> .env
59+
60+
# Swagger API 문서화 task 실행
61+
- name: Apply Swagger API Document Task
62+
run: ./gradlew copyOasToSwagger
63+
64+
# Rest Docs API 문서화 task 실행
65+
- name: Apply Rest Docs API Document Task
66+
run: ./gradlew copyDocument
67+
68+
# Gradle 빌드
69+
- name: Build with Gradle
70+
id: gradle
71+
uses: gradle/gradle-build-action@v2
72+
with:
73+
arguments: |
74+
bootJar
75+
--scan
76+
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
77+
78+
# Dockerhub 로그인
79+
- name: Login to Dockerhub
80+
uses: docker/login-action@v3
81+
with:
82+
username: ${{ env.DOCKERHUB_USERNAME }}
83+
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
84+
85+
# Docker 메타데이터
86+
- name: Extract Docker metadata
87+
id: metadata
88+
uses: docker/metadata-action@v5.5.0
89+
env:
90+
DOCKERHUB_IMAGE_FULL_NAME: ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
91+
with:
92+
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
93+
tags: |
94+
type=sha,prefix=
95+
96+
# Docker 이미지 빌드, 도커허브 푸시
97+
- name: Build and Push Docker image
98+
uses: docker/build-push-action@v3
99+
with:
100+
context: .
101+
push: true
102+
tags: ${{ steps.metadata.outputs.tags }} # 추출된 도커 메타데이터 tags -> "${DOCKERHUB_USERNAME}/${DOCKERHUB_IMAGE_NAME}:{TAG}
103+
104+
# GCE 배포
105+
- name: Deploy to GCE Server
106+
uses: appleboy/ssh-action@v1.0.3
107+
env:
108+
IMAGE_FULL_PATH: ${{ steps.metadata.outputs.tags }}
109+
DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }}
110+
with:
111+
host: ${{ secrets.GCE_HOST }}
112+
username: ${{ secrets.GCE_USER }}
113+
key: ${{ secrets.GCE_SSH_PRIVATE_KEY }}
114+
envs: IMAGE_FULL_PATH, DOCKERHUB_IMAGE_NAME # docker-compose.yml 에서 사용할 환경 변수
115+
debug: true
116+
script: |
117+
echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
118+
docker compose up -d
119+
docker image prune -a -f

.github/workflows/develop-build-deploy-gce-manual.yml renamed to .github/workflows/develop_build_deploy_manual.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
name: develop push Build and Deploy (GCE)
1+
name: develop push Build and Deploy Manual
22

33
on:
44
workflow_dispatch:
55
inputs:
66
ref:
7-
description: "배포할 브랜치 (수동 테스트 전용)"
7+
description: "배포할 브랜치 (수동 배포)"
88
required: true
99
default: "chore/#169"
1010

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ tasks.named('test') {
9696
openapi3 {
9797
servers = [
9898
{ url = "http://localhost:8080/" },
99-
{ url = "https://dev-api.fittheman.site/" }
99+
{ url = "https://dev-api.fittheman.site/" },
100+
{ url = "https://dev-api-gcp.fittheman.site/" }
100101
]
101102
title = '핏더맨 API DOCUMENT'
102103
description = '핏더맨 api 명세서입니다.'

docker-compose.yml

Lines changed: 0 additions & 55 deletions
This file was deleted.

nginx/default.conf

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)