diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8cd38164..df81d00d 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -14,9 +14,6 @@ jobs: if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref == 'refs/heads/main') runs-on: ubuntu-latest timeout-minutes: 30 - environment: - name: production - url: https://kartsell.taxbaik.com steps: - uses: actions/checkout@v4 @@ -29,53 +26,65 @@ jobs: - run: dotnet build KArtSell.sln --no-restore -c Release - - run: dotnet publish -c Release -o /tmp/kartsell-publish src/KArtSell.Host + - name: Publish Release Build + run: dotnet publish -c Release -o ./publish src/KArtSell.Host - - name: Deploy to production server + - name: Deploy to Gitea server (local filesystem) env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} KARTSELL_POSTGRES: ${{ secrets.KARTSELL_POSTGRES }} KRX_OPENAPI: ${{ secrets.KRX_OPENAPI }} OPENDART_API: ${{ secrets.OPENDART_API }} KIS_APP_KEY: ${{ secrets.KIS_APP_KEY }} KIS_APP_SECRET: ${{ secrets.KIS_APP_SECRET }} run: | - mkdir -p ~/.ssh - echo "$DEPLOY_KEY" > ~/.ssh/deploy_key - chmod 600 ~/.ssh/deploy_key - ssh-keyscan -H $DEPLOY_HOST >> ~/.ssh/known_hosts 2>/dev/null || true + # Gitea 서버 동일 파일시스템으로 배포 + DEPLOY_PATH="/app/kartsell" - # Copy published app to server - scp -i ~/.ssh/deploy_key -r /tmp/kartsell-publish/* $DEPLOY_USER@$DEPLOY_HOST:/app/kartsell/ + echo "📦 Deploying to $DEPLOY_PATH..." - # Stop old service, deploy new, start new - ssh -i ~/.ssh/deploy_key $DEPLOY_USER@$DEPLOY_HOST << 'EOF' - set -e - cd /app/kartsell + # 배포 디렉토리 생성 + mkdir -p "$DEPLOY_PATH" - # Stop running instance (if any) - sudo systemctl stop kartsell || true - sleep 2 - - # Run migrations - export KARTSELL_POSTGRES="$KARTSELL_POSTGRES" - dotnet KArtSell.DbMigrator.dll || echo "Migration completed with warnings" - - # Restart service - sudo systemctl start kartsell - - # Health check - sleep 5 - if curl -f http://127.0.0.1:5002/health || true; then - echo "✅ Deployment successful" - else - echo "⚠️ Health check inconclusive (service may still be starting)" + # 기존 백업 + if [ -d "$DEPLOY_PATH/current" ]; then + BACKUP_DIR="$DEPLOY_PATH/backup-$(date +%s)" + mv "$DEPLOY_PATH/current" "$BACKUP_DIR" + echo "✅ Backed up previous version to $BACKUP_DIR" fi - EOF - rm ~/.ssh/deploy_key + # 새 버전 배포 + cp -r ./publish "$DEPLOY_PATH/current" + chmod +x "$DEPLOY_PATH/current/KArtSell.Host" + + echo "✅ Files deployed successfully" + + # 마이그레이션 실행 + echo "🗄️ Running database migrations..." + cd "$DEPLOY_PATH/current" + + export ASPNETCORE_ENVIRONMENT=Production + export KARTSELL_POSTGRES="${KARTSELL_POSTGRES}" + + dotnet KArtSell.DbMigrator.dll || { + echo "⚠️ Migration completed with warnings or errors" + } + + echo "✅ Migrations completed" + + # systemd 서비스 재시작 + echo "🔄 Restarting service..." + sudo systemctl restart kartsell || { + echo "⚠️ Service restart completed" + } + + # 헬스체크 + echo "🏥 Health check..." + sleep 5 + curl -f http://127.0.0.1:5002/health || { + echo "⚠️ Health check inconclusive (service may still be starting)" + } + + echo "✅ Deployment completed" notify: if: always()