首页
/ Dokku项目Git部署方法详解

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

注意:

  1. 执行此命令前应用必须已存在
  2. 这会覆盖任何现有的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+)

认证方式

支持两种认证方式:

  1. SSH公钥认证
  2. .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

注意事项

  1. 不支持从浅克隆推送,请先取消浅克隆
  2. 推送多个分支需要自定义receive-branch插件触发器
  3. 使用私有仓库时建议使用机器人账号的个人访问令牌

总结

Dokku的Git部署功能提供了灵活多样的部署方式,从简单的git push到复杂的远程仓库同步,开发者可以根据项目需求选择最适合的部署策略。通过合理配置部署分支、环境变量和认证方式,可以实现安全高效的持续部署流程。