name: Deploy on: push: branches: [main, develop] workflow_dispatch: inputs: environment: description: '部署环境' required: true default: 'staging' type: choice options: - staging - production jobs: # 部署到测试环境 deploy-staging: name: 部署测试环境 runs-on: linux container: image: gitea-runner-php:latest if: github.ref == 'refs/heads/develop' steps: - name: 设置 SSH 密钥 run: | mkdir -p ~/.ssh echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed255 echo "Host micecola.top" >> ~/.ssh/config echo " StrictHostKeyChecking no" >> ~/.ssh/config - name: 部署到测试服务器 run: | echo "开始部署到测试环境..." ssh root@micecola.top << 'EOF' cd /var/www/kb-web-test # 备份 BACKUP_DIR="/var/www/kb-web-test-backups" mkdir -p $BACKUP_DIR CURRENT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") tar -czf "$BACKUP_DIR/backup_${CURRENT_COMMIT}_$(date +%Y%m%d_%H%M%S).tar.gz" . 2>/dev/null || true # 更新代码 git fetch origin git reset --hard origin/develop # 安装依赖 composer install --no-dev --prefer-dist --no-interaction # 设置权限 chown -R www-data:www-data . 2>/dev/null || true echo "✅ 测试环境部署完成" EOF - name: 完成 run: echo "🚀 测试环境部署完成: http://micecola.top:8080" # 部署到正式环境 deploy-production: name: 部署正式环境 runs-on: linux container: image: gitea-runner-php:latest if: github.ref == 'refs/heads/main' steps: - name: 设置 SSH 密钥 run: | mkdir -p ~/.ssh echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed255 echo "Host micecola.top" >> ~/.ssh/config echo " StrictHostKeyChecking no" >> ~/.ssh/config - name: 备份并部署 run: | echo "开始部署到正式环境..." ssh root@micecola.top << 'EOF' # 备份 BACKUP_DIR="/var/www/kb-web-prod-backups" mkdir -p $BACKUP_DIR cd /var/www/kb-web-prod CURRENT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") tar -czf "$BACKUP_DIR/backup_${CURRENT_COMMIT}_$(date +%Y%m%d_%H%M%S).tar.gz" . 2>/dev/null || true # 保留最近 10 个备份 cd $BACKUP_DIR && ls -t | tail -n +11 | xargs -r rm -f # 部署 cd /var/www/kb-web-prod git fetch origin git reset --hard origin/main composer install --no-dev --prefer-dist --no-interaction chown -R www-data:www-data . 2>/dev/null || true echo "✅ 正式环境部署完成" EOF - name: 完成 run: echo "🚀 正式环境部署完成: https://kb.micecola.top"