Merge pull request #405 from code-zero-to-one/hotfix/infra #338
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 도커 허브에 이미지 push 후 서버에 배포하는 방식 (25.10.30 이후) | |
| name: Front Test Server (Develop) | |
| on: | |
| push: | |
| branches: | |
| - develop # develop 브랜치에 push가 발생하면 실행 | |
| jobs: | |
| build-and-push-image: # 도커 이미지 빌드 및 도커 허브 push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v3 | |
| - name: ENV 파일 생성 | |
| run: | | |
| echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" > .env | |
| echo "NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}" >> .env | |
| echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env | |
| echo "NEXT_PUBLIC_CLARITY_PROJECT_ID=${{ secrets.NEXT_PUBLIC_CLARITY_PROJECT_ID }}" >> .env | |
| echo "NEXT_PUBLIC_GOOGLE_SHEETS_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_SHEETS_ID }}" >> .env | |
| echo "GOOGLE_SERVICE_ACCOUNT_EMAIL=${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }}" >> .env | |
| echo "GOOGLE_PRIVATE_KEY=${{ secrets.GOOGLE_PRIVATE_KEY }}" >> .env | |
| echo "NEXT_PUBLIC_STRAPI_URL=${{ secrets.NEXT_PUBLIC_STRAPI_URL }}" >> .env | |
| echo "NEXT_PUBLIC_TOSS_CLIENT_KEY=${{ secrets.NEXT_PUBLIC_TOSS_CLIENT_KEY }}" >> .env | |
| - name: DockerHub 로그인 | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
| - name: Docker 이미지 빌드 및 push | |
| run: | | |
| docker build -f Dockerfile.dev -t zerooneitkr/frontend:develop . | |
| docker push zerooneitkr/frontend:develop | |
| deploy-image-to-server: # 도커 허브 pull 후 서버에 배포 | |
| runs-on: ubuntu-latest | |
| needs: build-and-push-image | |
| steps: | |
| - name: Setup cloudflared and SSH | |
| run: | | |
| # cloudflared 바이너리 다운로드 (설치보다 빠름) | |
| curl -L --output /tmp/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 | |
| chmod +x /tmp/cloudflared | |
| sudo mv /tmp/cloudflared /usr/local/bin/cloudflared | |
| # sshpass 설치 (비밀번호 자동 입력용) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y -qq sshpass | |
| # SSH 설정 (Cloudflare Access만 사용) | |
| mkdir -p ~/.ssh | |
| ssh-keyscan -p 24 -H ssh.zeroone.it.kr >> ~/.ssh/known_hosts | |
| # SSH config 생성 (Cloudflare Access로 인증) | |
| cat >> ~/.ssh/config << 'SSHCONFIG' | |
| Host ssh.zeroone.it.kr | |
| HostName ssh.zeroone.it.kr | |
| User zero_one | |
| Port 24 | |
| ProxyCommand cloudflared access ssh --hostname %h | |
| StrictHostKeyChecking no | |
| SSHCONFIG | |
| chmod 600 ~/.ssh/config | |
| - name: 서버 배포 | |
| run: | | |
| sshpass -p '${{ secrets.SSH_PASSWORD }}' ssh ssh.zeroone.it.kr << EOF | |
| echo "사용하지 않는 컨테이너, 이미지, 네트워크 정리 중 (볼륨제외)..." | |
| sudo docker stop frontend-dev || true | |
| sudo docker rm frontend-dev || true | |
| sudo docker system prune -a -f | |
| # 여기다 도커 컴포즈 파일 갖다놓았기 때문임 | |
| cd ~/front/study-platform-client-dev | |
| echo "도커 이미지 pull" | |
| sudo docker pull zerooneitkr/frontend:develop | |
| echo "도커 컴포즈 재시작" | |
| sudo docker compose -f docker-compose.dev.yml up -d --build | |
| echo "테스트 서버 배포 완료" | |
| EOF |