Dokku项目Git部署方法详解
2025-07-05 04:47:40作者:苗圣禹Peter
前言
Dokku作为一个轻量级的PaaS平台,Git部署是其最传统也是最核心的部署方式。本文将全面解析Dokku中Git部署的各种方法和技巧,帮助开发者更好地利用Git工作流进行应用部署。
Git部署基础
Dokku的Git部署支持多种构建方式:
- Cloud Native Buildpacks
- Herokuish Buildpack
- Dockerfiles
这些构建方式为不同技术栈的应用提供了灵活的部署方案。
应用初始化
标准初始化流程
当通过git push
创建应用时,Dokku会自动创建正确的pre-receive
钩子来执行构建管道。但在某些特殊情况下(如使用git-http-backend时),可能需要手动初始化:
dokku git:initialize node-js-app
注意:
- 执行此命令前应用必须已存在
- 这会覆盖任何现有的pre-receive钩子
部署分支管理
默认行为
Dokku默认部署推送到master
分支的代码。如需部署其他分支,可使用Git命令:
git push dokku SOME_BRANCH_NAME:master
推荐方式(0.12.0+)
更规范的做法是使用git:set
命令:
# 全局设置
dokku git:set --global deploy-branch SOME_BRANCH_NAME
# 应用特定设置
dokku git:set node-js-app deploy-branch SOME_BRANCH_NAME
从0.22.1版本开始,Dokku会自动将首次推送的分支设为主分支。
GIT_REV环境变量
配置说明
从0.12.0版本开始,部署时会包含一个特殊的GIT_REV
环境变量,记录当前部署的SHA值。
自定义变量名:
dokku git:set node-js-app rev-env-var DOKKU_GIT_REV
禁用此功能:
dokku git:set node-js-app rev-env-var ""
.git目录处理
默认行为
Dokku默认会在构建前删除.git
目录,这可以:
- 减少镜像体积
- 避免潜在的安全风险
保留.git目录
如需保留:
dokku git:set node-js-app keep-git-dir true
恢复默认:
dokku git:set node-js-app keep-git-dir false
注意:保留.git目录可能导致构建过程中显示未暂存的更改。
从远程仓库同步
基础用法(0.23.0+)
dokku git:sync node-js-app https://example.com/repo.git
支持指定分支、标签或特定提交:
# 分支
dokku git:sync node-js-app https://example.com/repo.git main
# 标签
dokku git:sync node-js-app https://example.com/repo.git v1.0
# 提交
dokku git:sync node-js-app https://example.com/repo.git 97e6c724...
构建选项
同步后立即构建:
dokku git:sync --build node-js-app https://...
仅在变更时构建:
dokku git:sync --build-if-changes node-js-app https://...
私有仓库支持(0.24.0+)
认证方式
支持两种认证方式:
- SSH公钥认证
- .netrc文件认证
netrc配置
添加凭据:
dokku git:auth github.com username token
移除凭据:
dokku git:auth github.com
主机访问控制
允许远程仓库主机:
dokku git:allow-host github.com
注意:此命令非幂等,可能导致known_hosts中出现重复条目。
SSH密钥管理(0.33.0+)
生成部署密钥
生成无密码的ed25519密钥对:
dokku git:generate-deploy-key
查看公钥
dokku git:public-key
注意事项
- 不支持从浅克隆推送,请先取消浅克隆
- 推送多个分支需要自定义receive-branch插件触发器
- 使用私有仓库时建议使用机器人账号的个人访问令牌
总结
Dokku的Git部署功能提供了灵活多样的部署方式,从简单的git push到复杂的远程仓库同步,开发者可以根据项目需求选择最适合的部署策略。通过合理配置部署分支、环境变量和认证方式,可以实现安全高效的持续部署流程。