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 if: github.ref == 'refs/heads/develop' environment: name: staging url: http://micecola.top:8080 steps: - name: 检出代码 uses: actions/checkout@v4 - name: 部署到测试服务器 uses: appleboy/ssh-action@v1 with: host: micecola.top port: 22 username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} script: | echo "开始部署到测试环境..." 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 "环境: staging" > .deploy_info echo "分支: develop" >> .deploy_info echo "提交: $(git rev-parse HEAD)" >> .deploy_info echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> .deploy_info echo "部署者: Gitea Actions" >> .deploy_info echo "✅ 测试环境部署完成" - name: 部署通知 run: echo "🚀 测试环境部署完成: http://micecola.top:8080" # 部署到正式环境 deploy-production: name: 部署正式环境 runs-on: linux if: github.ref == 'refs/heads/main' environment: name: production url: https://kb.micecola.top steps: - name: 检出代码 uses: actions/checkout@v4 - name: 备份当前版本 uses: appleboy/ssh-action@v1 with: host: micecola.top port: 22 username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} script: | 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 echo "✅ 备份完成" - name: 部署到正式服务器 uses: appleboy/ssh-action@v1 with: host: micecola.top port: 22 username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} script: | echo "开始部署到正式环境..." 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 "环境: production" > .deploy_info echo "分支: main" >> .deploy_info echo "提交: $(git rev-parse HEAD)" >> .deploy_info echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> .deploy_info echo "部署者: Gitea Actions" >> .deploy_info echo "✅ 正式环境部署完成" - name: 部署通知 run: echo "🚀 正式环境部署完成: https://kb.micecola.top" # 手动部署 manual-deploy: name: 手动部署 runs-on: linux if: github.event_name == 'workflow_dispatch' environment: name: ${{ github.event.inputs.environment }} steps: - name: 检出代码 uses: actions/checkout@v4 - name: 确定部署目录 id: deploy-config run: | if [ "${{ github.event.inputs.environment }}" == "production" ]; then echo "deploy_dir=/var/www/kb-web-prod" >> $GITHUB_OUTPUT echo "branch=main" >> $GITHUB_OUTPUT else echo "deploy_dir=/var/www/kb-web-test" >> $GITHUB_OUTPUT echo "branch=develop" >> $GITHUB_OUTPUT fi - name: 部署 uses: appleboy/ssh-action@v1 with: host: micecola.top port: 22 username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} script: | cd ${{ steps.deploy-config.outputs.deploy_dir }} git fetch origin git reset --hard origin/${{ steps.deploy-config.outputs.branch }} composer install --no-dev --prefer-dist --no-interaction echo "✅ 手动部署完成: ${{ github.event.inputs.environment }}"