diff --git a/.github/workflows/deploy-docker.yml b/.github/workflows/deploy-docker.yml new file mode 100644 index 0000000..255a4d3 --- /dev/null +++ b/.github/workflows/deploy-docker.yml @@ -0,0 +1,44 @@ +name: Deploy Frontend + +on: + push: + branches: + - main + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Docker Build and Push + uses: docker/build-push-action@v6 + with: + context: . + push: true + file: ./Dockerfile + platforms: linux/amd64 + tags: | + ${{ secrets.DOCKER_HUB_USERNAME }}/frontend:${{ github.run_number }} + ${{ secrets.DOCKER_HUB_USERNAME }}/frontend:latest + + deploy: + needs: build-and-push + runs-on: ubuntu-latest + steps: + - name: Deploy to Server + uses: appleboy/ssh-action@v0.1.10 + with: + host: ${{ secrets.SERVER_IP }} + username: ubuntu + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/ubuntu && ./deploy-frontend.sh diff --git a/.github/workflows/deploy-main.yml b/.github/workflows/deploy-main.yml deleted file mode 100644 index 1cbc11b..0000000 --- a/.github/workflows/deploy-main.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Deploy Main - -on: - pull_request: - branches: [main] - types: [closed] - -jobs: - deploy: - runs-on: ubuntu-latest - - steps: - - name: Deploy to Production Server - uses: appleboy/ssh-action@master - with: - host: ${{ secrets.SERVER_IP }} - username: ${{ secrets.SERVER_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - script: | - echo "배포 테스트001" - echo "=== 초기 환경 확인 ===" - echo "Shell: $SHELL" - echo "PATH: $PATH" - echo "PWD: $PWD" - echo "User: $(whoami)" - - echo "=== NVM 환경 설정 ===" - export NVM_DIR="$HOME/.nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" - - echo "=== bashrc 로드 ===" - source ~/.bashrc - - echo "=== Node 환경 확인 ===" - echo "Node 버전: $(node -v || echo 'node not found')" - echo "NPM 버전: $(npm -v || echo 'npm not found')" - echo "PNPM 위치: $(which pnpm || echo 'pnpm not found')" - echo "PM2 위치: $(which pm2 || echo 'pm2 not found')" - - cd /home/ubuntu/dev/front-end - echo "=== Git 상태 확인 ===" - echo "현재 디렉토리: $PWD" - echo "현재 remote URLs:" - git remote -v - echo "현재 브랜치:" - git branch - - echo "=== Git 작업 시작 ===" - git reset --hard - git checkout main - git fetch --all - git reset --hard origin/main - echo "현재 커밋:" - git rev-parse HEAD - echo "변경된 파일:" - git status - - echo "=== PNPM 캐시 정리 시작 ===" - pnpm store prune - - echo "=== 의존성 설치 시작 ===" - pnpm install - - echo "=== 빌드 시작 ===" - pnpm build - - echo "=== PM2 상태 확인 ===" - pm2 list || echo "PM2 실행 실패" - - echo "=== 서비스 재시작 ===" - pm2 reload techBlogHub-main-frontend --update-env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..78408c0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +# 1. Node.js 환경 설정 +FROM node:20 AS builder + +# 2. 작업 디렉토리 설정 +WORKDIR /app + +# 3. corepack 및 pnpm 설치 +RUN npm install -g corepack && corepack enable && corepack prepare pnpm@latest --activate + +# 4. 필수 파일 복사 +COPY package.json pnpm-lock.yaml ./ + +# 5. 의존성 설치 (pnpm 사용) +RUN pnpm install --frozen-lockfile + +# 6. 소스 코드 복사 및 빌드 +COPY . . +RUN pnpm build + +# 7. PM2 설치 및 상태 확인 +RUN npm install pm2 -g && pm2 --version + +# 8. PM2 프로세스 시작 +RUN pm2 start npm --name "techBlogHub-main-frontend" -- run start + +# 9. 4000 포트 열기 +EXPOSE 4000 + +# 10. PM2 실행 +CMD ["pm2-runtime", "start", "npm", "--name", "techBlogHub-main-frontend", "--", "start", "--", "--port", "4000"]