deploy

command module
v0.0.0-...-3a253d9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

README

deploy-go

deploy 是一个基于 SSH / SFTP 的轻量级原子发布 CLI,通过软链接切换实现快速发布与秒级回滚。

特性

  • 🚀 原子发布: 通过软链接切换实现零停机发布
  • 🔄 快速回滚: 一键回滚到历史版本,秒级恢复
  • 🌐 多主机支持: 支持同时部署到多台服务器
  • 📦 智能打包: 支持文件包含/排除规则,带进度条显示
  • 🪝 钩子支持: 发布前后可执行自定义命令
  • 📊 历史记录: 查看部署历史,支持多主机状态对比
  • 🔧 灵活配置: 支持环境变量和命令行参数配置

安装

方式一:使用 go install(推荐)
go install cnb.cool/zhiqiangwang/deploy@latest
方式二:手动编译安装
# 克隆项目
git clone https://cnb.cool/zhiqiangwang/deploy
cd deploy-go

# 编译
go build -o deploy .

# 安装到系统路径
sudo mv deploy /usr/local/bin/

快速开始

1. 配置SSH连接

设置环境变量(推荐):

export DEPLOY_HOSTS="user1:[email protected]:22,user2:[email protected]:22"

或者在命令中直接指定:

deploy publish --hosts "user:[email protected]:22" --dir ./myapp --version v1.0.0
2. 发布应用
# 基础发布
deploy publish --dir ./myapp --version v1.0.0

# 指定远程路径
deploy publish \
  --dir ./myapp \
  --version v1.0.0 \
  --remote-repo "/data/wwwroot/myapp/releases" \
  --current-link "/data/wwwroot/myapp/current"

# 使用包含/排除规则
deploy publish \
  --dir ./myapp \
  --version v1.0.0 \
  --include "src,public,package.json" \
  --exclude "node_modules,.git,*.log"
3. 查看发布历史
deploy history
4. 回滚到历史版本
# 回滚到指定版本
deploy rollback --version v0.9.0

# 使用短选项
deploy rollback -V v0.9.0

命令详解

publish - 发布应用

发布本地目录到远程主机。

标志
标志 短选项 必需 默认值 说明
--dir - 当前目录 本地要发布的目录
--version -V "main" 版本号或分支名
--hosts - - 主机列表,格式: user[:password]@host[:port]
--remote-repo - /data/wwwroot/{basename}/releases 远程仓库目录
--current-link - /data/wwwroot/{basename}/website 当前版本的软链接
--include - - 包含的文件或目录(相对路径)
--exclude - - 排除的文件或目录(相对路径)
--hook-pre-host - - 远程发布前执行的命令
--hook-post-host - - 远程发布后执行的命令
--key - - SSH私钥文件路径
--timeout - 10s SSH连接超时时间
使用示例
# 发布到单台主机
deploy publish \
  --dir ./frontend \
  --version v2.1.0 \
  --hosts "deploy:[email protected]:22"

# 发布到多台主机
deploy publish \
  --dir ./backend \
  --version v1.5.2 \
  --hosts "app:[email protected]:22,app:[email protected]:22"

# 使用SSH密钥认证
deploy publish \
  --dir ./api \
  --version main \
  --hosts "[email protected]:22" \
  --key ~/.ssh/id_rsa

# 带钩子的发布
deploy publish \
  --dir ./app \
  --version v3.0.0 \
  --hook-pre-host "npm install --production" \
  --hook-post-host "systemctl restart app.service"
rollback - 回滚应用

回滚到指定的历史版本。

标志
标志 短选项 必需 默认值 说明
--version -V - 要回滚到的版本号
--hosts - - 主机列表
--remote-repo - - 远程仓库目录
--current-link - - 当前软链接路径
使用示例
# 回滚到上一个版本
deploy rollback --version v1.4.2

# 紧急回滚到稳定版本
deploy rollback --version stable-v1.3.1

# 回滚到特定提交
deploy rollback --version abc123def
history - 查看发布历史

查看所有已部署的版本信息。

标志
标志 说明
--hosts 主机列表
--remote-repo 远程仓库目录
--current-link 当前软链接路径
使用示例
# 查看所有主机的发布历史
deploy history

# 查看特定主机的历史(通过hosts过滤)
deploy history --hosts "[email protected]:22"

配置说明

环境变量
变量名 说明
DEPLOY_HOSTS SSH主机列表,格式: user[:password]@host[:port]
DEPLOY_KEY SSH私钥文件路径
DEPLOY_TIMEOUT SSH连接超时时间,如: 30s
DEPLOY_HOOK_PRE 发布前在远程主机执行的钩子命令,如: npm install --production
DEPLOY_HOOK_POST 发布后在远程主机执行的钩子命令,如: systemctl restart app.service
发布流程
  1. 打包: 在本地将指定目录打包为 tar.gz 格式
  2. 上传: 通过SFTP将压缩包上传到远程服务器
  3. 解压: 在远程服务器解压到版本目录
  4. 切换: 更新软链接指向新版本
  5. 清理: 删除压缩包和旧版本(可选)
故障排查
常见问题
  1. SSH连接失败

    # 检查主机连通性
    ssh user@host
    
    # 检查密钥权限
    chmod 600 ~/.ssh/id_rsa
    
  2. 权限不足

    # 确保用户有远程目录的写权限
    sudo chown -R user:user /data/wwwroot/myapp
    
  3. 磁盘空间不足

    # 手动清理旧版本(登录服务器)
    ssh user@host "cd /data/wwwroot/myapp && ls -dt releases/* | tail -n +3 | xargs rm -rf"
    

Documentation

The Go Gopher

There is no documentation for this package.

Source Files

  • main.go

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL