WEB-32:网站版本管理与发布

王尘宇 网站建设 3

网站版本管理与发布 是通过 Git 版本控制、分支管理策略、自动化部署流程、发布回滚机制,实现代码有序管理、安全发布、快速回滚的开发运维方法。


版本控制基础

Git 基础 ⭐⭐⭐⭐⭐

基本操作:

# 初始化仓库
git init

# 克隆仓库
git clone https://github.com/user/repo.git

# 查看状态
git status

# 添加文件
git add .
git add filename

# 提交
git commit -m "提交信息"

# 推送
git push origin main

# 拉取
git pull origin main

分支操作:

# 创建分支
git branch feature-name

# 切换分支
git checkout feature-name

# 创建并切换
git checkout -b feature-name

# 合并分支
git checkout main
git merge feature-name

# 删除分支
git branch -d feature-name

分支策略 ⭐⭐⭐⭐⭐

Git Flow:

分支类型:
- main/master: 生产环境
- develop: 开发环境
- feature/*: 功能分支
- release/*: 发布分支
- hotfix/*: 热修复分支

流程:
1. 从 develop 创建 feature 分支
2. 开发完成合并到 develop
3. 准备发布时创建 release 分支
4. 测试完成合并到 main 和 develop
5. 生产问题创建 hotfix 分支

GitHub Flow:

分支类型:
- main: 生产环境
- feature/*: 功能分支

流程:
1. 从 main 创建 feature 分支
2. 开发完成创建 Pull Request
3. Code Review
4. 合并到 main
5. 自动部署到生产

简化分支:

适合小团队:
- main: 生产
- staging: 测试
- feature/*: 功能

流程:
1. feature 开发
2. 合并到 staging 测试
3. 测试通过合并到 main
4. 自动部署

部署流程

手动部署 ⭐⭐⭐

部署步骤:

# 1. 拉取代码
cd /var/www/html
git pull origin main

# 2. 安装依赖
npm install
# 或
composer install

# 3. 构建
npm run build
# 或
webpack --mode production

# 4. 数据库迁移
php artisan migrate
# 或
python manage.py migrate

# 5. 清理缓存
php artisan cache:clear
php artisan config:cache

# 6. 重启服务
systemctl restart php-fpm
systemctl restart nginx

部署检查清单:

□ 代码已拉取
□ 依赖已安装
□ 构建完成
□ 数据库迁移
□ 缓存清理
□ 服务重启
□ 功能验证

自动化部署 ⭐⭐⭐⭐⭐

GitHub Actions:

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'

    - name: Install dependencies
      run: npm ci

    - name: Build
      run: npm run build

    - name: Deploy to server
      uses: easingthemes/ssh-deploy@v2.1.1
      env:
        SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
        REMOTE_HOST: ${{ secrets.SERVER_IP }}
        REMOTE_USER: deploy
        SOURCE: "dist/"
        TARGET: "/var/www/html"

    - name: Restart services
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_IP }}
        username: deploy
        key: ${{ secrets.SSH_KEY }}
        script: |
          systemctl restart nginx
          systemctl restart php-fpm

GitLab CI/CD:

# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm install
    - npm test

build:
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - dist/

deploy:
  stage: deploy
  script:
    - apt-get update -y && apt-get install -y rsync
    - rsync -avz --delete dist/ deploy@server:/var/www/html/
    - ssh deploy@server "systemctl restart nginx"
  only:
    - main

发布策略

蓝绿部署 ⭐⭐⭐⭐

原理:

环境:
- 蓝环境:当前生产
- 绿环境:新生产

流程:
1. 部署到绿环境
2. 测试绿环境
3. 切换流量到绿环境
4. 绿环境成为新的生产
5. 蓝环境保留作为备份

优点:

✅ 零停机发布
✅ 快速回滚
✅ 风险低
✅ 可测试生产环境

实现:

# Nginx 配置
upstream backend {
    server 127.0.0.1:8080; # 蓝
    # server 127.0.0.1:8081; # 绿
}

# 切换时修改配置,reload Nginx

金丝雀发布 ⭐⭐⭐⭐

原理:

流程:
1. 部署新版本到部分服务器
2. 导入少量流量(5-10%)
3. 监控指标
4. 逐步增加流量
5. 全部切换

优点:

✅ 降低风险
✅ 早期发现问题
✅ 渐进式发布
✅ 可控制影响范围

实现:

# Nginx 配置
upstream backend {
    server 127.0.0.1:8080 weight=9; # 旧版本 90%
    server 127.0.0.1:8081 weight=1; # 新版本 10%
}

滚动发布 ⭐⭐⭐⭐

原理:

流程:
1. 逐台更新服务器
2. 每次更新一台
3. 健康检查通过
4. 继续下一台
5. 全部更新完成

优点:

✅ 零停机
✅ 资源利用率高
✅ 适合多服务器
✅ 自动化友好

回滚机制

快速回滚 ⭐⭐⭐⭐⭐

代码回滚:

# Git 回滚
git revert 
git push origin main

# 或
git reset --hard 
git push origin main --force

部署回滚:

# 切换回旧版本
cd /var/www/html
git checkout 

# 重新构建
npm run build

# 重启服务
systemctl restart nginx

数据库回滚:

# Laravel
php artisan migrate:rollback

# Django
python manage.py migrate app_name 0001_initial

# 手动回滚
mysql -u root -p < rollback.sql

回滚策略 ⭐⭐⭐⭐

自动回滚:

# CI/CD 配置
deploy:
  script:
    - deploy.sh
  on_failure:
    - rollback.sh

手动回滚:

触发条件:
- 严重 bug
- 性能下降
- 功能异常
- 用户投诉

流程:
1. 确认问题
2. 决定回滚
3. 执行回滚
4. 验证恢复
5. 问题复盘

环境管理

多环境配置 ⭐⭐⭐⭐⭐

环境划分:

开发环境 (dev):
- 开发人员使用
- 最新代码
- 调试模式
- 本地数据库

测试环境 (staging):
- 测试人员使用
- 预发布代码
- 测试数据
- 接近生产

生产环境 (prod):
- 真实用户
- 稳定版本
- 真实数据
- 严格监控

配置文件:

.env.development
.env.staging
.env.production

# 加载对应环境配置
NODE_ENV=production node app.js

配置管理 ⭐⭐⭐⭐

敏感信息管理:

# 不要提交到 Git
echo ".env" >> .gitignore

# 使用环境变量
const dbPassword = process.env.DB_PASSWORD;

# 使用密钥管理
AWS Secrets Manager
阿里云密钥管理服务

配置差异:

// config.js
const config = {
  development: {
    db: 'localhost',
    debug: true
  },
  production: {
    db: process.env.DB_HOST,
    debug: false
  }
};

module.exports = config[process.env.NODE_ENV];

王尘宇实战建议

18 年经验总结

  1. 版本控制必须
  2. Git 是标配
  3. 分支管理
  4. 提交规范

  5. 自动化部署

  6. 减少人为错误
  7. 提升效率
  8. 可追溯

  9. 发布策略

  10. 根据业务选择
  11. 蓝绿/金丝雀
  12. 降低风险

  13. 回滚机制

  14. 必须准备
  15. 快速回滚
  16. 定期演练

  17. 环境隔离

  18. 开发/测试/生产
  19. 配置分离
  20. 权限控制

西安企业建议

  • 使用 Git 管理
  • 配置自动化部署
  • 建立发布流程
  • 准备回滚方案

常见问题解答

Q1:Git 分支策略如何选择?

答:
- 小团队:简化分支
- 中团队:GitHub Flow
- 大团队:Git Flow
- 根据团队规模

Q2:自动化部署有必要吗?

答:
有:
- 减少错误
- 提升效率
- 可追溯
- 强烈推荐

Q3:发布频率多少合适?

答:
- 小步快跑
- 每天/每周
- 根据业务
- 持续交付

Q4:回滚需要多久?

答:
- 目标:5 分钟内
- 理想:1 分钟
- 根据系统
- 定期演练

Q5:如何管理多环境?

答:
- 环境隔离
- 配置分离
- 权限控制
- 自动化部署


总结

网站版本管理与发布核心要点:

  • 📦 版本控制 — Git、分支策略
  • 🚀 部署流程 — 手动、自动化
  • 📋 发布策略 — 蓝绿、金丝雀、滚动
  • 🔙 回滚机制 — 快速、自动
  • 🌍 环境管理 — 多环境、配置

王尘宇建议: 版本管理和发布是开发运维的基础。建立规范流程,自动化部署,降低风险,提升效率。


关于作者

王尘宇
西安蓝蜻蜓网络科技有限公司创始人

联系方式:
- 🌐 网站:wangchenyu.com
- 💬 微信:wangshifucn
- 📱 QQ:314111741
- 📍 地址:陕西西安


本文最后更新:2026 年 3 月 18 日
版权声明:本文为王尘宇原创,属于"网站建设系列"第 32 篇,转载请联系作者并注明出处。
下一篇:WEB-33:网站自动化部署

标签: 网站建设

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~