基于免费版TFS部署PHP-MySQL应用及数据库更新的技术咨询
嘿,针对你在内网环境用免费版TFS(也就是现在的Azure DevOps Server Express)管理跨Windows/Ubuntu的PHP-MySQL应用批量部署的问题,我给你梳理一套完全自给自足的方案,刚好适配你从4台扩到100台的需求:
一、代码批量部署:用TFS Release Pipeline搞定跨平台推送
因为你没有外网,所有工具必须全内网落地,先从基础配置入手:
1. 搭建内网专属的部署代理
- 分别在Windows和Ubuntu服务器上各部署至少1台自托管代理(Self-Hosted Agent):代理不需要外网,只要能连内网的TFS服务器就行。部署时直接从TFS服务器下载代理安装包(内网共享分发就行),配置时选"无外网访问"模式。
- 要是项目用Composer拉依赖,记得在内网搭个私有Composer仓库(用Satis或者Toran Proxy),提前把项目需要的所有依赖包同步到仓库里,这样部署时不用碰外网。
2. 写一套跨平台的部署脚本
用PowerShell Core(Windows和Ubuntu都能跑)写统一的脚本,存在TFS代码仓库里,比如:
# 拉取TFS最新代码到服务器目录 # Ubuntu路径示例 git clone http://你的内网TFS地址/项目仓库.git /var/www/your-app # Windows路径示例 # git clone http://你的内网TFS地址/项目仓库.git C:\inetpub\your-app # 从内网Composer仓库安装依赖 composer install --no-dev --repository-url=http://内网Composer仓库地址 # Ubuntu专属:配置网站目录权限 chown -R www-data:www-data /var/www/your-app chmod -R 755 /var/www/your-app
然后在TFS的Release Pipeline里加个「执行PowerShell脚本」任务,针对Windows和Ubuntu服务器分别选对应的代理节点执行就行。
3. 批量管理100台服务器
在TFS里创建部署组(Deployment Groups),把所有Windows和Ubuntu服务器按分组加进去(每台服务器装个轻量的Deployment Agent就行,内网批量分发安装包很快)。部署的时候直接选整个部署组,TFS会自动把代码推送到所有服务器,不用手动一台台操作。
二、数据库持续更新:版本化脚本+自动化执行
数据库更新最怕手动操作出错,尤其是100台服务器,必须靠版本化+自动化解决:
1. SQL脚本版本化管理
在TFS代码仓库里建个db-migrations目录,按版本号命名脚本,比如v1.0.0_initial_schema.sql、v1.0.1_add_user_column.sql。重点要让脚本是幂等的——比如用CREATE TABLE IF NOT EXISTS、ALTER TABLE ... ADD COLUMN IF NOT EXISTS,这样重复执行也不会报错。
2. 自动化执行迁移脚本
用MySQL客户端(Windows和Ubuntu都能装)写个执行脚本,放到Release Pipeline里:
# Ubuntu示例:执行指定版本的SQL脚本 mysql -u 数据库用户名 -p你的密码 -h 数据库地址 < /var/www/your-app/db-migrations/v1.0.1_add_user_column.sql
执行前可以加个步骤:先查数据库里的版本记录(建议建个db_version表存当前版本号),然后自动执行所有未运行过的脚本,完全不用人工干预。
3. 必加的备份前置步骤
在执行更新脚本前,一定要加数据库备份任务,比如:
# Windows备份示例 mysqldump -u 用户名 -p密码 数据库名 > C:\backup\db_backup_$(Get-Date -Format "yyyyMMddHHmmss").sql # Ubuntu备份示例 mysqldump -u 用户名 -p密码 数据库名 > /backup/db_backup_$(date +%Y%m%d%H%M%S).sql
万一更新出问题,能快速回滚到之前的状态。
三、免费版TFS的小提醒
Azure DevOps Server Express免费版最多支持5个用户访问TFS,但部署功能本身不受用户数限制——也就是说,哪怕你团队超过5人,只要是用部署组自动化推送,完全不影响。
内容的提问来源于stack exchange,提问作者Deon Oosthuizen

