From 320af5c0c6286859e0dfd7e66b90029fd396ba14 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Fri, 15 May 2026 14:09:21 +0800 Subject: [PATCH] refactor(ci): use native ssh instead of appleboy/ssh-action to avoid download issues --- .gitea/workflows/deploy-prod.yaml | 69 +++++++++---------------------- 1 file changed, 19 insertions(+), 50 deletions(-) diff --git a/.gitea/workflows/deploy-prod.yaml b/.gitea/workflows/deploy-prod.yaml index 8fedb18..98bc84c 100644 --- a/.gitea/workflows/deploy-prod.yaml +++ b/.gitea/workflows/deploy-prod.yaml @@ -12,7 +12,7 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 - - name: Step 1 - Sync Code to Server + - name: Step 1 - Setup SSH and Sync Code run: | export DEBIAN_FRONTEND=noninteractive echo "Waiting for apt lock..." @@ -21,17 +21,16 @@ jobs: sleep 5 done - # 檢查是否已安裝,減少 apt-get 使用頻率 if ! command -v rsync >/dev/null 2>&1 || ! command -v ssh >/dev/null 2>&1; then apt-get update && apt-get install -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" rsync openssh-client - else - echo "rsync and openssh-client are already installed." fi + mkdir -p ~/.ssh echo "${{ secrets.PROD_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa_prod chmod 600 ~/.ssh/id_rsa_prod echo "${{ secrets.PROD_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts + echo "🚀 Syncing code via rsync..." rsync -avz --delete \ --exclude='/.git' \ --exclude='/node_modules' \ @@ -42,48 +41,28 @@ jobs: -e "ssh -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no" \ ./ twsystem1003@34.84.169.132:~/star-cloud/ - rm ~/.ssh/id_rsa_prod - - name: Step 2 - Container Up & Health Check - uses: appleboy/ssh-action@master - with: - host: 34.84.169.132 - port: 22 - username: twsystem1003 - key: ${{ secrets.PROD_SSH_PRIVATE_KEY }} - script: | + run: | + ssh -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no twsystem1003@34.84.169.132 << 'EOF' cd ~/star-cloud - - # 確保 .env 存在 test -f .env || cp .env.example .env - - # 修正可能被 root 佔用的目錄權限 chown -R twsystem1003:twsystem1003 ~/star-cloud if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then - echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..." + echo "🔄 偵測到 Docker 檔案變更,執行完整重建..." WWWGROUP=1001 WWWUSER=1001 docker-compose up -d --build else - echo "⚡ 無 Docker 檔案變更,確認容器狀態..." if ! docker ps --format '{{.Names}}' | grep -q 'star-cloud-laravel'; then echo "容器未運行,正在啟動..." WWWGROUP=1001 WWWUSER=1001 docker-compose up -d - else - echo "容器已運行,直接進行程式碼部署..." fi fi - - echo "容器狀態:" && docker ps --filter "name=star-cloud" + docker ps --filter "name=star-cloud" + EOF - name: Step 3 - Composer & NPM & Initialization - uses: appleboy/ssh-action@master - with: - host: 34.84.169.132 - port: 22 - username: twsystem1003 - key: ${{ secrets.PROD_SSH_PRIVATE_KEY }} - script: | - # 清除 node_modules 確保乾淨安裝 + run: | + ssh -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no twsystem1003@34.84.169.132 << 'EOF' docker exec star-cloud-laravel sh -c " chown -R 1001:1001 /var/www/html && mkdir -p /.npm && chown -R 1001:1001 /.npm && @@ -104,25 +83,15 @@ jobs: php artisan db:seed --class=AdminUserSeeder --force " docker exec star-cloud-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache + EOF - name: Step 4 - Restart Long-running Workers - uses: appleboy/ssh-action@master - with: - host: 34.84.169.132 - port: 22 - username: twsystem1003 - key: ${{ secrets.PROD_SSH_PRIVATE_KEY }} - script: | - docker restart star-cloud-mqtt-worker - echo "✅ MQTT Worker 已重啟" + run: | + ssh -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no twsystem1003@34.84.169.132 "docker restart star-cloud-mqtt-worker" + echo "✅ MQTT Worker 已重啟" - - name: Step 5 - Cleanup - uses: appleboy/ssh-action@master - with: - host: 34.84.169.132 - port: 22 - username: twsystem1003 - key: ${{ secrets.PROD_SSH_PRIVATE_KEY }} - script: docker image prune -f - -# Trigger rebuild after SSH key fix + - name: Step 5 - Cleanup and Key Removal + run: | + ssh -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no twsystem1003@34.84.169.132 "docker image prune -f" + rm ~/.ssh/id_rsa_prod + echo "✅ Cleanup complete"