Skip to content

Merge pull request #553 from code-zero-to-one/refactor/folder-structure #490

Merge pull request #553 from code-zero-to-one/refactor/folder-structure

Merge pull request #553 from code-zero-to-one/refactor/folder-structure #490

Workflow file for this run

# 도커 허브에 이미지 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@v4
- 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@v3
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: Install cloudflared
run: |
echo "Downloading 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
cloudflared --version || echo "cloudflared 설치 확인 실패"
- name: Install sshpass
run: |
echo "Installing sshpass..."
sudo apt-get update -qq
sudo apt-get install -y -qq sshpass
sshpass -V || echo "sshpass 설치 확인 실패"
- name: Setup SSH config
run: |
echo "Setting up SSH config..."
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# known_hosts 설정 (실패해도 계속 진행)
ssh-keyscan -p 24 -H ssh.zeroone.it.kr >> ~/.ssh/known_hosts 2>&1 || echo "ssh-keyscan 실패 (계속 진행)"
# SSH config 생성
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
echo "SSH config 생성 완료"
cat ~/.ssh/config
- name: 서버 배포
run: |
SUDO_PASSWORD='${{ secrets.SSH_PASSWORD }}'
sshpass -p '${{ secrets.SSH_PASSWORD }}' ssh ssh.zeroone.it.kr bash << EOF
set -e
echo "사용하지 않는 컨테이너, 이미지, 네트워크 정리 중 (볼륨제외)..."
echo "$SUDO_PASSWORD" | sudo -S docker stop frontend-dev || true
echo "$SUDO_PASSWORD" | sudo -S docker rm frontend-dev || true
echo "$SUDO_PASSWORD" | sudo -S docker system prune -a -f
# 여기다 도커 컴포즈 파일 갖다놓았기 때문임
cd ~/front/study-platform-client-dev || {
echo "디렉토리가 없습니다. 생성합니다..."
mkdir -p ~/front/study-platform-client-dev
cd ~/front/study-platform-client-dev
}
echo ".env 파일 생성 (런타임에 필요한 모든 환경변수 포함)"
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 "NEXT_PUBLIC_STRAPI_URL=${{ secrets.NEXT_PUBLIC_STRAPI_URL }}" >> .env
echo "NEXT_PUBLIC_TOSS_CLIENT_KEY=${{ secrets.NEXT_PUBLIC_TOSS_CLIENT_KEY }}" >> .env
echo "GOOGLE_SERVICE_ACCOUNT_EMAIL=${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }}" >> .env
echo "GOOGLE_PRIVATE_KEY=${{ secrets.GOOGLE_PRIVATE_KEY }}" >> .env
echo "docker-compose.dev.yml 파일 생성"
echo "services:" > docker-compose.dev.yml
echo " frontend:" >> docker-compose.dev.yml
echo " container_name: frontend-dev" >> docker-compose.dev.yml
echo " image: zerooneitkr/frontend:develop" >> docker-compose.dev.yml
echo " ports:" >> docker-compose.dev.yml
echo " - '14855:14855'" >> docker-compose.dev.yml
echo " env_file:" >> docker-compose.dev.yml
echo " - .env" >> docker-compose.dev.yml
echo " restart: unless-stopped" >> docker-compose.dev.yml
echo "기존 컨테이너 완전 제거"
echo "$SUDO_PASSWORD" | sudo -S docker compose -f docker-compose.dev.yml down || true
echo "$SUDO_PASSWORD" | sudo -S docker stop frontend-dev || true
echo "$SUDO_PASSWORD" | sudo -S docker rm frontend-dev || true
echo "도커 이미지 pull"
echo "$SUDO_PASSWORD" | sudo -S docker pull zerooneitkr/frontend:develop
echo "도커 컴포즈 재시작"
echo "$SUDO_PASSWORD" | sudo -S docker compose -f docker-compose.dev.yml up -d
echo "테스트 서버 배포 완료"
EOF