跳到主要内容

DockerDeploy SSH:不用镜像仓库,把本地 Docker 镜像一键部署到生产服务器

DockerDeploy SSH:不用镜像仓库,把本地 Docker 镜像一键部署到生产服务器

这工具解决什么问题

手上有一台自己的生产服务器,本地写好代码、build 好 Docker 镜像,怎么部署上去?

常见做法是推到 Docker Hub 或阿里云 ACR,再到服务器上 pull。但对于个人项目、内部工具来说,为了部署一个镜像去搭一套镜像仓库、配 CI/CD,有点重了。镜像要么公开,要么得管私有仓库的权限和费用。

DockerDeploy SSH 走的是另一条路:离线传输。本地把镜像 save 成 tar,gzip 压缩,通过 SFTP 传到服务器,再 load 进来,最后 compose up。整个过程不经过任何第三方镜像仓库,也不需要 CI/CD。

本地 docker save → gzip 压缩 → SFTP 上传 → 服务器 docker load → docker compose up -d

两种部署模式

单镜像部署

适合只有一个服务的项目。选好本地镜像、目标服务器和项目配置,点一下部署,工具会自动:

  1. 给镜像打一个带日期的 tag
  2. save + gzip 打包(打包前会检查本地和服务器磁盘空间,按 1.5 倍预估)
  3. SFTP 上传到服务器(支持断点续传,失败自动重试一次)
  4. 服务器端 docker load
  5. docker compose up -d 启动

中间还会跑 pre/post 钩子和健康检查,结束后写部署历史、发 webhook 通知。

整栈部署(compose)

适合用 docker-compose 编排的多服务项目。导入 compose 文件后,工具会解析每个服务的镜像来源,分成两类:

  • 本地构建的镜像:走 save → 上传 → load 的离线传输
  • 服务器直接拉取的镜像(比如 nginx、postgres 这种公共镜像):到服务器上直接 compose pull

这样不用把公共镜像也打包传一遍,省流量也省时间。多个本地镜像并行打包(并发 3),统一上传到服务器的 releases 目录,最后一起 compose up。

compose 文件支持本地路径和远端相对路径两种形式。本地 Windows 路径不会直接传给服务器执行,如果本地文件不存在,部署前会明确报错。

技术栈

  • 桌面壳:Tauri 2,WebView2 承载前端,安装包约 3MB
  • 后端:Rust,全部业务逻辑在 Rust 端,约 7560 行,分 7 个模块
  • 前端:原生 HTML/CSS/JS,无框架、无打包器、无 npm 运行时依赖,约 5000 行
  • SSH/SFTP:russh + russh-sftp,纯 Rust 实现
  • 压缩:flate2,gzip 流式压缩,不依赖系统 gzip
  • 密码加密:Windows DPAPI(CurrentUser),密码字段加密后存 JSON

前后端通过 Tauri 的 invoke 通信,19 个命令 + 4 个事件。长任务(部署)用 async spawn 跑在后台,进度和日志通过事件推给前端,支持协作式取消。

几个值得说的设计点

便携式配置

所有配置存在安装目录下的 config/ 文件夹里:

  • servers.json:服务器列表(密码是 DPAPI 密文)
  • projects.json:部署项目配置(含钩子、健康检查、webhook)
  • deployments.json:部署历史(上限 200 条)
  • stacks/<uuid>/:导入的 compose 文件副本

整个应用是绿色便携的,装在 U 盘里换台电脑也能用(当然 DPAPI 加密的密码跟当前 Windows 用户绑定,换机器需要重输)。

环境检测闸门

部署前会检查本地和服务器的环境:Docker 是否安装、是否在运行、磁盘空间够不够、compose 命令是否可用。没通过的话禁止部署,并提供一键启动 Docker 或安装指引。

回滚

整栈部署会在服务器上保留最近 5 份 release,每个 release 包含镜像包和 compose 文件。出问题可以切回上一个版本。

安全取舍

  • SSH 主机密钥无条件接受——这是有意的取舍,工具定位是个人/小团队用,连的都是自己的服务器,不做 TOFU 提示打断流程
  • Docker 操作全部走 CLI 子进程(参数数组,不经 shell),服务器端命令走 SSH 单引号转义,防注入
  • 密码只在内存中解密使用,落盘一律是 DPAPI 密文

快速开始

npm install          # 仅装 @tauri-apps/cli
npm run tauri dev    # 开发运行
npm run tauri build  # 发布构建(NSIS 安装包)

需要 Windows 环境 + Rust 工具链 + WebView2(Win10/11 自带)。

适合谁用

  • 有自己的 VPS/家用服务器,部署个人项目或内部工具
  • 不想为了小项目搭私有镜像仓库和 CI/CD
  • 镜像不方便推到公开仓库(内部代码、未开源项目)
  • 想要一个图形界面,不用每次敲一长串 ssh + docker 命令

当前版本 v0.4.3,还在持续迭代中。

评论 (0)

暂无评论,来抢沙发吧!

发表评论