4.3 KiB
4.3 KiB
服务器增量部署说明(update-server.bat)
本地 go/ 目录改动后,只把改动过的文件推到服务器,不用再一个个找文件替换。
一、用法
在 go/ 目录下双击 update-server.bat,或命令行执行:
update-server.bat :: 比对 -> 确认 -> 上传 -> 询问是否重启服务
update-server.bat dry :: 只比对不上传(先看清单用这个)
update-server.bat restart :: 只重启服务器服务
bat 会在 go/ 目录下自动编译部署工具 bin/deploy.exe,然后:
- SSH 连上服务器,对
go/目录和服务器目录各算一遍文件 MD5 - 比对出「新增」和「内容变了」的文件并打印清单
- 确认后把这些文件打包成 tar 通过 SSH 管道传到服务器解包(只传差异文件)
- 回读服务器指纹复核,确认每个文件都传对了
- 询问是否
systemctl restart go-api.service让改动生效
二、配置
bat 顶部「CONFIG」区:
| 变量 | 说明 |
|---|---|
DEPLOY_HOST |
服务器地址 |
DEPLOY_USER |
SSH 用户名 |
DEPLOY_DIR |
服务器目录 |
DEPLOY_KEY |
私钥路径(默认 %~dp010.31.100.2_id_ed25519) |
DEPLOY_PASS |
密码(备用,服务器开了密码认证时才用) |
RESTART_CMD |
重启命令,默认 systemctl restart go-api.service |
注意:这台服务器 sshd 关闭了密码认证(只接受 publickey / gssapi),所以默认走密钥登录。 如果以后在服务器上开了密码认证,把
DEPLOY_KEY置空、填上DEPLOY_PASS即可,工具会自动切换。
关于私钥
- 私钥放在
go/10.31.100.2_id_ed25519,已被同步工具自动排除,不会传到服务器。 - Windows 上私钥权限过宽会让 OpenSSH 客户端拒绝加载,已用下面的命令收紧过(只需做一次):
icacls "10.31.100.2_id_ed25519" /inheritance:r /grant:r "%USERNAME%:(F)"
go/.deploy_known_hosts记录服务器主机密钥指纹,换服务器时会提示指纹变化(同样被排除,不会上传)。
三、不会同步的内容
工具默认跳过:.git / node_modules / bin / dist / tmp、*.exe / *.log / *.bak、
nohup.out、output.log、go.log、test-output-*.txt、migrate_*.csv、
无扩展名的 server 二进制、*_id_ed25519 私钥、.deploy_known_hosts。
服务器上存在、本地没有的文件默认保留不删(服务器上还有 .git、历史二进制等)。
确实要清理就在 bat 里加 -delete,但请先想清楚。
四、原理
本地 go/ ──MD5──┐
├─ 比对 ──> 只传 新增/变更 的文件 ──> 服务器 /www/wwwroot/api.yunzer.cn
服务器 ──MD5──┘ └── 传完回读远端指纹复核
- 服务器是 systemd 的
go-api.service,ExecStart=/usr/local/btgo/bin/go run main.go, 直接用目录里的源码编译运行,所以传.go源码即可,重启服务就会重新编译生效。 - 传到服务器的文件属主会被改成目标目录的属主(
www:www),权限规范成 0644(脚本 0755)。
五、常见问题
| 现象 | 处理 |
|---|---|
Permission denied (publickey,gssapi-...) |
私钥没配好:检查 DEPLOY_KEY 路径,或用 icacls 收紧权限 |
本地目录不存在 |
别从别处调用 bat,bat 里用 %~dp0 定位自身目录 |
| 上传后服务没生效 | 需要重启:update-server.bat restart(或看 go.log 是否有编译错误) |
| 清单里出现奇怪的文件 | 用配置区的 EXTRA_EXCLUDE 排除,逗号分隔、支持 * |
| 远端提示 md5sum 不存在 | 极老系统没 md5sum,用 cksum 也能工作,可改工具里的命令 |
六、单独使用部署工具
bat 之外的进阶用法(在 go/ 目录下):
bin\deploy.exe -host 10.31.100.2 -user root -key 10.31.100.2_id_ed25519 ^
-dir /www/wwwroot/api.yunzer.cn -local . -dry-run :: 只看差异
bin\deploy.exe -host 10.31.100.2 -user root -key 10.31.100.2_id_ed25519 ^
-exec "systemctl status go-api.service" :: 执行远程命令
常用参数:-dry-run 只比对、-yes 跳过确认、-delete 同步删除远端多余文件、
-restart "命令" 上传后自动重启、-exclude "a,b" 额外排除。