1+ # 도커 허브에 이미지 push 후 서버에 배포하는 방식 (25.10.30 이후)
2+
13name : Front Test Server (Develop)
24
35on :
68 - develop # develop 브랜치에 push가 발생하면 실행
79
810jobs :
9- deploy :
11+ build-and-push-image : # 도커 이미지 빌드 및 도커 허브 push
1012 runs-on : ubuntu-latest
1113
1214 steps :
1315 - name : Checkout code
1416 uses : actions/checkout@v3
1517
18+ - name : ENV 파일 생성
19+ run : |
20+ echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" > .env
21+ echo "NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}" >> .env
22+ echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env
23+ echo "NEXT_PUBLIC_CLARITY_PROJECT_ID=${{ secrets.NEXT_PUBLIC_CLARITY_PROJECT_ID }}" >> .env
24+ echo "NEXT_PUBLIC_GOOGLE_SHEETS_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_SHEETS_ID }}" >> .env
25+ echo "GOOGLE_SERVICE_ACCOUNT_EMAIL=${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }}" >> .env
26+ echo "GOOGLE_PRIVATE_KEY=${{ secrets.GOOGLE_PRIVATE_KEY }}" >> .env
27+
28+ - name : DockerHub 로그인
29+ uses : docker/login-action@v2
30+ with :
31+ username : ${{ secrets.DOCKERHUB_USERNAME }}
32+ password : ${{ secrets.DOCKERHUB_PASSWORD }}
33+
34+ - name : Docker 이미지 빌드 및 push
35+ run : |
36+ docker build -f Dockerfile.dev -t zerooneitkr/frontend:develop .
37+ docker push zerooneitkr/frontend:develop
38+
1639 - name : Setup SSH
1740 run : |
1841 mkdir -p ~/.ssh
@@ -21,49 +44,27 @@ jobs:
2144 ssh-keyscan -H ${{ secrets.LIGHTSAIL_HOST }} >> ~/.ssh/known_hosts
2245 echo "SSH 설정 완료"
2346
24- - name : Deploy to server
47+ deploy-image-to-server : # 도커 허브 pull 후 서버에 배포
48+ runs-on : ubuntu-latest
49+ needs : build-and-push-image
50+
51+ steps :
2552 run : |
2653 ssh -i ~/.ssh/id_ed25519 ${{ secrets.LIGHTSAIL_USER }}@${{ secrets.LIGHTSAIL_HOST }} << EOF
2754
28- # 용량 확보를 위해 도커 컨테이너, 이미지 먼저 정리
2955 echo "사용하지 않는 컨테이너, 이미지, 네트워크 정리 중 (볼륨제외)..."
56+ sudo docker stop frontend-dev || true
57+ sudo docker rm frontend-dev || true
3058 sudo docker system prune -a -f
31-
32- # 디렉토리 없으면 생성
33- if [ ! -d "/home/ubuntu/front/study-platform-client-dev" ]; then
34- mkdir -p "/home/ubuntu/front/study-platform-client-dev"
35- echo "디렉토리 생성 완료"
36- fi
3759
60+ # 여기다 도커 컴포즈 파일 갖다놓았기 때문임
3861 cd ~/front/study-platform-client-dev
3962
40- # git 저장소 없으면 clone, 있으면 fetch + reset (덮어쓰기)
41- if [ ! -d ".git" ]; then
42- git clone git@github.com:code-zero-to-one/study-platform-client.git .
43- echo "Git clone 완료"
44- else
45- git fetch origin
46- git reset --hard origin/develop
47- echo "Git fetch & reset 완료"
48- fi
49-
50- git fetch origin
51- git checkout develop
52- git pull origin develop
53-
54- echo ".env 파일 생성"
55- echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" > .env
56- echo "NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}" >> .env
57- echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env
58- echo "NEXT_PUBLIC_CLARITY_PROJECT_ID=${{ secrets.NEXT_PUBLIC_CLARITY_PROJECT_ID }}" >> .env
59- echo "NEXT_PUBLIC_GOOGLE_SHEETS_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_SHEETS_ID }}" >> .env
60- echo "GOOGLE_SERVICE_ACCOUNT_EMAIL=${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }}" >> .env
61- echo "GOOGLE_PRIVATE_KEY=${{ secrets.GOOGLE_PRIVATE_KEY }}" >> .env
63+ echo "도커 이미지 pull"
64+ sudo docker pull zerooneitkr/frontend:develop
6265
6366 echo "도커 컴포즈 재시작"
64- sudo docker stop frontend-dev
65- sudo docker rm frontend-dev
6667 sudo docker compose -f docker-compose.dev.yml up -d --build
6768
68- echo "운영 서버 배포 완료"
69+ echo "테스트 서버 배포 완료"
6970 EOF
0 commit comments