Skip to content

Commit c15a80e

Browse files
committed
feat: 환경별 프로파일 설정 및 배포 워크플로 개선
- 운영, 알파, 로컬 환경별 Spring 프로파일 설정 추가 - SPRING_PROFILES_ACTIVE 기본값을 'local'로 변경 - GitHub Actions 배포 워크플로 환경 변수 처리 방식 간소화 - Docker Hub 및 EC2 관련 Secrets 활용으로 보안 강화 - PEM 키 처리 로직 개선 및 유효성 검증 추가
1 parent bf06e91 commit c15a80e

5 files changed

Lines changed: 38 additions & 33 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,78 +10,80 @@ on:
1010
jobs:
1111
deploy:
1212
runs-on: ubuntu-latest
13+
environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'alpha' }}
14+
1315
steps:
1416
- name: Checkout
1517
uses: actions/checkout@v4
1618

17-
- name: Set Environment Variables
19+
- name: Set image tag and Spring profile
1820
run: |
1921
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
20-
echo "ENV_TYPE=PROD" >> $GITHUB_ENV
21-
echo "DOCKERHUB_USERNAME=${{ secrets.PROD_DOCKERHUB_USERNAME }}" >> $GITHUB_ENV
22-
echo "DOCKERHUB_TOKEN=${{ secrets.PROD_DOCKERHUB_TOKEN }}" >> $GITHUB_ENV
23-
echo "EC2_KEY=${{ secrets.PROD_EC2_KEY }}" >> $GITHUB_ENV
24-
echo "EC2_HOST=${{ secrets.PROD_EC2_HOST }}" >> $GITHUB_ENV
25-
echo "EC2_USER=${{ secrets.PROD_EC2_USER }}" >> $GITHUB_ENV
26-
echo "ENV_FILE_CONTENT=${{ secrets.PROD_AUTH_BE_ENV_FILE }}" >> $GITHUB_ENV
2722
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
2823
echo "SPRING_PROFILE=prod" >> $GITHUB_ENV
2924
else
30-
echo "ENV_TYPE=ALPHA" >> $GITHUB_ENV
31-
echo "DOCKERHUB_USERNAME=${{ secrets.ALPHA_DOCKERHUB_USERNAME }}" >> $GITHUB_ENV
32-
echo "DOCKERHUB_TOKEN=${{ secrets.ALPHA_DOCKERHUB_TOKEN }}" >> $GITHUB_ENV
33-
echo "EC2_KEY=${{ secrets.ALPHA_EC2_KEY }}" >> $GITHUB_ENV
34-
echo "EC2_HOST=${{ secrets.ALPHA_EC2_HOST }}" >> $GITHUB_ENV
35-
echo "EC2_USER=${{ secrets.ALPHA_EC2_USER }}" >> $GITHUB_ENV
36-
echo "ENV_FILE_CONTENT=${{ secrets.ALPHA_AUTH_BE_ENV_FILE }}" >> $GITHUB_ENV
3725
echo "IMAGE_TAG=alpha" >> $GITHUB_ENV
3826
echo "SPRING_PROFILE=alpha" >> $GITHUB_ENV
3927
fi
4028
4129
- name: Log in to Docker Hub
4230
uses: docker/login-action@v3
4331
with:
44-
username: ${{ env.DOCKERHUB_USERNAME }}
45-
password: ${{ env.DOCKERHUB_TOKEN }}
32+
username: ${{ secrets.DOCKERHUB_USERNAME }}
33+
password: ${{ secrets.DOCKERHUB_TOKEN }}
4634

4735
- name: Build and push
4836
uses: docker/build-push-action@v6
4937
with:
5038
context: .
5139
push: true
5240
tags: |
53-
${{ env.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
54-
${{ env.DOCKERHUB_USERNAME }}/auth-server:${{ github.sha }}
41+
${{ secrets.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
42+
${{ secrets.DOCKERHUB_USERNAME }}/auth-server:${{ github.sha }}
5543
5644
- name: Setup SSH
5745
run: |
46+
set -euo pipefail
5847
mkdir -p ~/.ssh
59-
echo "${{ env.EC2_KEY }}" | base64 --decode > ~/.ssh/ec2_key.pem
48+
printf '%s' "${{ secrets.EC2_KEY }}" > /tmp/ec2_key_src
49+
if [[ ! -s /tmp/ec2_key_src ]]; then
50+
echo "::error::EC2_KEY secret is empty" >&2
51+
exit 1
52+
fi
53+
if head -n 1 /tmp/ec2_key_src | grep -q '^[[:space:]]*-----BEGIN'; then
54+
cp /tmp/ec2_key_src ~/.ssh/ec2_key.pem
55+
else
56+
tr -d '\n\r \t' < /tmp/ec2_key_src | base64 --decode > ~/.ssh/ec2_key.pem || {
57+
echo "::error::EC2_KEY is not PEM and base64 decode failed" >&2
58+
exit 1
59+
}
60+
fi
61+
rm -f /tmp/ec2_key_src
6062
chmod 600 ~/.ssh/ec2_key.pem
6163
62-
- name: Create env dir and Copy env file to EC2
64+
- name: Create env file and copy to EC2
6365
run: |
64-
echo "${{ env.ENV_FILE_CONTENT }}" > auth-be.env
65-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem ${{ env.EC2_USER }}@${{ env.EC2_HOST }} 'mkdir -p ~/env'
66-
scp -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem auth-be.env ${{ env.EC2_USER }}@${{ env.EC2_HOST }}:~/env/auth-be.env
66+
printf '%s\n' "${{ secrets.AUTH_BE_ENV_FILE }}" > auth-be.env
67+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} 'mkdir -p ~/env'
68+
scp -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem auth-be.env ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:~/env/auth-be.env
6769
6870
- name: Deploy to EC2
6971
run: |
70-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem ${{ env.EC2_USER }}@${{ env.EC2_HOST }} "
72+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "
7173
set -e
72-
echo '${{ env.DOCKERHUB_TOKEN }}' | docker login -u '${{ env.DOCKERHUB_USERNAME }}' --password-stdin
73-
74-
docker pull ${{ env.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
75-
74+
echo '${{ secrets.DOCKERHUB_TOKEN }}' | docker login -u '${{ secrets.DOCKERHUB_USERNAME }}' --password-stdin
75+
76+
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
77+
7678
docker rm -f auth-be || true
77-
79+
7880
docker run -d \
7981
--name auth-be \
8082
--restart unless-stopped \
8183
--network app-network \
8284
--env-file ~/env/auth-be.env \
8385
-e SPRING_PROFILES_ACTIVE=${{ env.SPRING_PROFILE }} \
84-
${{ env.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
85-
86+
${{ secrets.DOCKERHUB_USERNAME }}/auth-server:${{ env.IMAGE_TAG }}
87+
8688
docker logout
8789
"

src/main/resources/application-alpha.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# alpha — 알파 서버 (DDL update, 운영에 가까운 쿠키)
12
spring:
23
config:
34
activate:

src/main/resources/application-local.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# local — 로컬 개발 (DDL update, SQL 디버그, 쿠키 완화)
12
spring:
23
config:
34
activate:

src/main/resources/application-prod.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# prod — 운영 (RDS SSL, DDL validate, 쿠키 Strict)
12
spring:
23
config:
34
activate:

src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ spring:
1010
local: local, jwt, oauth
1111
alpha: alpha, jwt, oauth
1212
prod: prod, jwt, oauth
13-
active: alpha
13+
active: ${SPRING_PROFILES_ACTIVE:local}
1414

1515
datasource:
1616
url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:authdb}

0 commit comments

Comments
 (0)