Dokku 升级完全指南:版本确认、安全更新与 apt / dokku-update / 源码三种升级路径详解

发布时间:2026/9/11 13:57:58
Dokku 升级完全指南:版本确认、安全更新与 apt / dokku-update / 源码三种升级路径详解 Dokku 升级完全指南版本确认、安全更新与 apt / dokku-update / 源码三种升级路径详解【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokkuDokku 是运行在单台服务器上的 Docker 驱动的 PaaS其升级路径与一般的 Docker Compose 项目不同升级不仅涉及dokku包本身还牵涉 Docker 引擎、herokuish 构建镜像、nginx 代理等周边组件。本文以官方升级指南 docs/getting-started/upgrading/index.md 为主体结合本仓库的打包配置、依赖清单与源码实现系统讲解升级前确认版本 → 规划停机 → 执行升级 → 升级后重建的完整流程并给出dokku-update、apt、源码编译三种可落地的升级手段。读完本文你将能独立评估当前 Dokku 版本的可升级性选择合适方式完成一次低风险升级。升级前第一件事确认当前版本与升级路径升级的第一步永远是搞清楚自己当前处于哪个版本执行dokku version如果版本号早于0.3.0即 0.2.x 及更早官方明确建议不要做原地升级而是在新服务器上执行全新安装参见 全新安装指南。这是因为 Dokku 的插件系统、存储布局和构建链路在 0.3.x 之后经历了大量重构跨过该临界点的原地升级收益远低于风险。对于 0.3.0 及以上的版本官方要求逐版阅读迁移指南——从你当前安装的版本一直读到你要升级到的版本。迁移指南的作用是让你提前了解新版本引入的配置变更、废弃项和破坏性改动从而在升级前完成必要的配置调整。本仓库 docs/appendices 目录下按版本维护了完整的迁移指南清单0.38.0 迁移指南0.37.0 迁移指南0.36.0 迁移指南0.35.0 迁移指南0.34.0 迁移指南0.33.0 迁移指南0.32.0 迁移指南0.31.0 迁移指南0.30.0 迁移指南0.29.0 迁移指南0.28.0 迁移指南0.27.0 迁移指南0.26.0 迁移指南0.25.0 迁移指南0.24.0 迁移指南0.23.0 迁移指南0.22.0 迁移指南0.21.0 迁移指南0.20.0 迁移指南0.10.0 迁移指南0.9.0 迁移指南0.8.0 迁移指南0.7.0 迁移指南0.6.0 迁移指南0.5.0 迁移指南注意迁移指南对旧版本采用跳跃式收录如 0.50.10、0.200.38 连续收录如果两个版本之间缺少单独文档说明该版本未引入需要人工介入的破坏性变更。以 0.33.0 为例其迁移指南原文即注明未引入任何重构、移除或废弃仅聚焦于系统改进。安全更新Dokku、操作系统与 Docker 引擎的分层策略升级指南专门强调了安全更新的三个层次理解这一分层有助于你判断什么该立刻升、什么可以规划后升。1. Dokku 自身的更新。Dokku 不运行任何守护进程daemon其主体是一组通过 SSH 触发、由plugn插件框架加载的 shell 与 Go 插件因此软件本身引入的安全攻击面相对有限。安全相关的更新会通过官方发布渠道如 Twitter 账号公告建议保持关注。这不是说可以忽视更新而是说升级节奏可以按业务窗口规划不必像对待常驻网络服务那样争分夺秒。2. 操作系统的安全更新。操作系统层面建议开启无人值守升级unattended upgrades。官方指南推荐参考 Arch Linux 的系统维护文档以及 Debian、Ubuntu 的无人值守升级文档进行配置。这一点与 Dokku 无守护进程的设计相辅相成——OS 补丁由系统机制自动应用Dokku 层面的人工干预就被降到了最低。3. Docker 引擎的更新。Docker 会周期性发布引擎版本官方建议阅读其 release notes 并据此升级。从本仓库 debian/control 可以看到Dokku 对 Docker 引擎的硬性依赖是 19.03.0支持docker-engine-cs、docker-ce、docker-ee、moby-engine等多个实现也就是说满足该底线即可但为了获取安全修复与稳定性改进仍应跟随 Docker 官方节奏升级。如何快速核对整套组件的版本升级前建议用dokku report全量盘点版本该命令由核心插件 plugins/00_dokku-standard/subcommands/report 实现会逐一输出docker version、herokuish version、dokku version、dokku-event-listener version、dokku-update version、plugn version、sigil、sshcommand、docker-container-healthchecker等全部关键组件的版本号并能在缺少dokku-update时给出显式警告。用它可以在升级前后各打一份快照便于比对。升级前准备规划停机窗口并停止应用升级指南强调如果本次升级同时涉及 Docker 或 herokuish 包强烈建议先停止所有应用升级完成后再重建若升级只影响dokku包本身则无需停应用。为什么建议停应用Docker升级 Docker 引擎期间容器可能被随机重置randomly reset导致请求被转发到错误的容器实例。因此主动确认并规划停机窗口比被动承受不确定的流量错乱重要得多。herokuish严格来说不是必须。升级 herokuish 后可以利用其最新的基础镜像只有在基础操作系统变更通常发生在 minor 或 major 版本时才可能引发问题。所以是否停应用取决于你这次升级是否携带了 herokuish 的新镜像。停止全部应用的命令随 Dokku 版本而异务必按版本对号入座# 0.22.0 及更新版本 dokku ps:stop --all # 0.11.4 ~ 0.21.4 版本 dokku ps:stopall # 0.8.1 ~ 0.11.3 版本 dokku --quiet apps:list | xargs -L1 dokku ps:stop # 早于 0.8.1 的版本 dokku --quiet apps | xargs -L1 dokku ps:stop从源码看ps:stop的--all参数由 ps 插件的 Go 实现解析见 plugins/ps/src/subcommands/subcommands.goallApps : args.Bool(all, false, --all: stop all apps)并支持--parallel指定并行停止的并发数-1表示匹配 CPU 核数。命令的用法说明定义在 plugins/ps/src/commands/commands.gops:stop [--parallel count] [--all|app], Stop an app。也就是说ps:stop --all在 0.22.0 是内建的一等公民能力不必再用xargs拼命令。升级方式一使用dokku-update推荐包官方提供一个名为dokku-update的独立二进制建议单独安装使用其优点如下独立安装升级 Dokku 本身不会影响该包的运行自动完成大量升级指令减少人工操作为后续持续增强升级流程提供干净的载体。dokku-update在 Debian 与 RPM 系发行版上均通过官方软件仓库提供包名为dokku-update源码安装场景下则由独立的 dokku-update 仓库维护。本仓库的两处配置印证了它的推荐地位debian/control 中dokku-update被列在Recommends段与herokuish、bash-completion、dokku-event-listener同级即安装 Dokku 时默认建议一并安装contrib/dependencies.json 的recommendations段记录了dokku-update0.10.0 的 amd64/arm64 发布地址说明其作为推荐依赖随发布流程同步维护版本。升级方式二使用apt标准路径如果 Dokku 是通过 Debian/Ubuntu 系统上的apt-get install dokku或 bootstrap.sh 安装的本仓库的安装脚本在未指定DOKKU_BRANCH/DOKKU_TAG时默认走 Debian 包安装路径那么升级同样用apt-get# 刷新本地 apt 缓存 sudo apt-get update # 更新 dokku 及其依赖组件 sudo apt-get --no-install-recommends install dokku herokuish sshcommand plugn gliderlabs-sigil dokku-update dokku-event-listener # 或者直接升级所有软件包 sudo apt-get upgrade升级指南特别提示IMPORTANT除非另行指定bootstrap.sh均通过 Debian 包.deb安装 Dokku因此使用dokku-update或apt任意一种方式都足以完成 Dokku 的升级。升级到指定版本则需要在apt-get调用中显式指定版本号注意版本号不带v前缀sudo apt-get install dokku$VERSION例如当前仓库对应版本为 0.38.27见 debian/control 的Version字段要精确安装该版本即为sudo apt-get install dokku0.38.27。同时可以留意 debian/control 的依赖声明Dokku 运行时依赖gliderlabs-sigil、plugn、nginx ( 1.8.0)或 openresty、python3、rsyslog、debconf等预依赖Pre-Depends以及git、curl、cpio、cron、docker-ce系列、docker-buildx-plugin、docker-compose-plugin、procfile-util等常规依赖——升级时若这些组件版本过旧apt 会一并处理或提示。升级方式三从源码升级谨慎路径CAUTIONDokku 通常不采用源码安装。如果系统原本由 apt 包安装此时执行源码升级可能导致系统不可用且需要人工干预才能恢复。只有确认自己最初就是从源码安装较罕见时才使用以下流程cd ~/dokku git pull --tags origin master # 继续沿用源码方式安装 sudo DOKKU_BRANCHmaster make install # 或者切换为 Debian 包方式安装 sudo make install如果还需要从源码升级 herokuishcd /tmp git clone https://github.com/gliderlabs/herokuish.git cd herokuish CIRCLECItrue IMAGE_NAMEgliderlabs/herokuish BUILD_TAGlatest make build/docker与本仓库bootstrap.sh的源码安装分支install-dokku-from-source内部执行git clonegit checkoutmake install相比手动源码升级的核心差异在于升级后 Dokku 的安装状态、文件布局与 apt 包管理器的记录可能脱节后续再想切回包管理升级时需要额外收敛。这也是官方将其标注为 CAUTION 的原因。升级完成后的收尾重建应用升级完成后应重建应用以利用新发布的 buildpackbuildpack 更新往往不在旧镜像中dokku ps:rebuild --allps:rebuild与ps:stop同属 ps 插件同样支持--all与--parallel参数见 plugins/ps/src/subcommands/subcommands.go。如果你的升级涉及 herokuish 基础镜像更换例如 0.35.0 将默认 herokuish 镜像切到gliderlabs/herokuish:latest-24那么这次重建会让所有应用从新镜像重新走一遍构建流程彻底切换到新运行栈。升级必经之路逐版迁移要点速览最后将升级指南要求逐版阅读的迁移指南中几处影响面较大的变更做一速览供你在升级到 0.38.x 系列前快速评估。0.38.0ENV 文件迁移与报告体系重构0.38 是改动最密集的一个大版本重点包括全局与应用的ENV文件路径迁移磁盘上全局ENV与各应用ENV文件的位置被调整官方要求通过插件触发器而非直接sourceENV 文件来引用环境变量。旧文件会在迁移后被合并进新位置并移除0.38.27 起若迁移后旧路径再次出现 ENV 文件其内容与当前 config 一致时会被直接删除不一致时则以ENV.migrated形式移开并输出警告供人工用dokku config:set补回差异键后手动删除。未部署应用的 nginx 最小化配置对没有运行web进程的应用未部署、无web进程类型或 web 进程已停止Dokku 会生成返回502 Bad Gateway的最小 nginx 配置保证域名可解析、监控工具能探测到非 200 状态码一旦应用以运行中的web进程完成部署该配置会被完整代理配置自动替换。自定义了nginx.conf.sigil模板且引用了DOKKU_APP_WEB_LISTENERS的用户需要兼容该变量为空的情况例如location / { {{ if $.DOKKU_APP_WEB_LISTENERS }} proxy_pass http://{{ $.APP }}-{{ $upstream_port }}; {{ else }} return 502; {{ end }} }详情可继续阅读 nginx 代理文档。--report体系全面引入--global与computed键所有:report子命令支持--global标志且新增plugin-computed-property键返回应用值 → 全局值 → 内置默认值的最终生效值plugin-global-property改为返回原始存储值。ps、cron等插件的报告键也统一改名如ps-stop-timeout-seconds、cron-computed-mailfrom。0.38.x 补丁系列期间新旧 JSON 键会并存输出旧键将在未来大版本移除外部脚本应尽早迁移到新键形态。docker-local调度器优雅停机语义对齐 Heroku部署成功后立即向旧容器发送SIGTERM不再等待wait-to-retire秒使应用在代理流量切换的同时即可开始排空在途请求wait-to-retire宽限与stop-timeout-seconds强停逻辑继续生效。详见 零停机部署文档。存储插件升级为具名资源新增storage:create/storage:mount/storage:set/storage:destroy旧的storage:mount app host:container冒号形式在 docker-local 上仍可用但已废弃在 k3s 上直接拒绝旧挂载会自动迁移为legacy-hash条目。大量DOKKU_*环境变量被替换为插件属性升级后首次运行dokku时自动迁移并 unset 原变量此后通过dokku config:set设置这些旧变量将不再生效。对应关系如下废弃环境变量替代命令DOKKU_APP_PROXY_TYPEdokku proxy:set app type valueDOKKU_APP_RESTOREdokku ps:set app restore true\|falseDOKKU_APP_SHELLdokku scheduler:set app shell valueDOKKU_CHECKS_DISABLEDdokku checks:disable app [proctypes]DOKKU_CHECKS_ENABLEDdokku checks:enable app [proctypes]DOKKU_CHECKS_SKIPPEDdokku checks:skip app [proctypes]DOKKU_CHECKS_WAITdokku checks:set app wait valueDOKKU_CHECKS_TIMEOUTdokku checks:set app timeout valueDOKKU_CHECKS_ATTEMPTSdokku checks:set app attempts valueDOKKU_DEFAULT_CHECKS_WAITdokku checks:set --global default-wait valueDOKKU_DISABLE_APP_AUTOCREATIONdokku apps:set --global disable-autocreation true\|falseDOKKU_DISABLE_PROXYdokku proxy:disable app/dokku proxy:enable appDOKKU_DOCKERFILE_START_CMDdokku ps:set app dockerfile-start-cmd valueDOKKU_PROXY_PORTdokku proxy:set app proxy-port valueDOKKU_PROXY_SSL_PORTdokku proxy:set app proxy-ssl-port valueDOKKU_SKIP_ALL_CHECKSdokku checks:disable appDOKKU_SKIP_CLEANUPdokku builder:set app skip-cleanup true\|falseDOKKU_SKIP_DEFAULT_CHECKSdokku checks:skip appDOKKU_SKIP_DEPLOYdokku ps:set app skip-deploy true\|falseDOKKU_START_CMDdokku ps:set app start-cmd value其中DOKKU_PARALLEL_ARGUMENTS被彻底移除、无替代DOKKU_SKIP_CLEANUP若设置在/etc/environment或~dokku/.dokkurc/*中仍会被引导期配置沿用但builder skip-cleanup属性是规范接口且优先级更高。TLS 握手行为变更nginx 1.19.4 上对域名匹配应用但该应用未配置 TLS 证书的 HTTPS 请求catch-all 会通过ssl_reject_handshake on直接拒绝握手取代旧版回落到字典序第一个 443 server block 从而产生证书不匹配的行为nginx 低于 1.19.4 的系统不受影响。0.37.0命令改名与移除app.json文件现在按 JSONC 解析支持行内注释scheduler-k3s:cluster-add/list/remove改名为scheduler-k3s:cluster:add/list/remove移除了DOKKU_DOCKERFILE_CACHE_BUILD、DOKKU_DOCKER_BUILD_OPTS环境变量以及 nixpacks 的no-cache属性统一改用docker-options插件设置构建参数移除了自定义 caddy 代理 label-key 的能力caddy 指令固定使用caddy.前缀。0.36.0进程停止超时改为属性管理进程停止超时改为通过ps属性stop-timeout-seconds配置旧DOKKU_DOCKER_STOP_TIMEOUT环境变量会自动迁移进程停止超时默认值调整为30秒domains:clear不再附带执行域名 setup如需原行为应使用domains:reset或手动执行domains:setupUbuntu 20.04 被标记为废弃安装目标建议迁移到 Ubuntu 24.04 或切换为 Docker 安装方式。0.35.0基础镜像升级到 Ubuntu 24.04dokku/dokku:latestDocker 镜像切换到 Ubuntu 24.04 (Noble)CNB云原生 buildpack默认 builder 变为heroku/builder:24herokuish buildpack 默认镜像变为gliderlabs/herokuish:latest-24均基于heroku-24栈需要保留旧栈的可显式指定heroku/buildpacks:22或gliderlabs/herokuish:latest-22升级后建议执行dokku logs:vector-stop dokku logs:vector-startvector 0.39→0.41与dokku openresty:stop dokku openresty:startopenresty 0.8.0→0.9.0以切换到新镜像。0.34.0k3s 调度器与触发器的若干移除移除了scheduler-docker-local的disable-chown属性与git:unlock命令k3s 调度器改为按域名而非按端口映射创建 Ingress升级后首次部署会有短暂停机k3s 默认代理实现切换为 nginxtraefik 用户需执行dokku scheduler-k3s:set --global ingress-class traefikpre-deploy插件触发器被废弃0.34.4 起新代码应迁移到pre-release-builder触发器。0.33.0纯系统改进该版本未引入重构、移除或废弃仅聚焦系统改进升级风险最低。小结一次低风险升级的完整清单dokku version确认当前版本若早于 0.3.0选择新服务器全新安装安装指南。逐版阅读 docs/appendices 中两个版本之间的全部迁移指南提前处理废弃变量与属性迁移。若升级涉及 Docker 或 herokuish按版本执行对应的ps:stop --all或旧版命令规划停机窗口。用dokku-update或apt-get推荐执行升级源码升级仅在确认原安装方式为源码时进行。升级后执行dokku ps:rebuild --all重建应用并通过dokku report核对各组件版本确认迁移日志中无ENV.migrated之类的残留告警。以上流程覆盖了从 0.5 到 0.38 的全部已知升级路径任何一步的具体变更细节都可以回到对应的版本迁移指南中按需查阅。【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考