管理命令用于构建和部署Web应用程序,特别是基于Django的
项目描述
mantis-cli
Mantis是一个CLI(命令行界面)工具,设计为在docker和docker compose命令上包装你的项目。
使用少量命令,你可以
- 加密和解密你的环境文件
- 构建和推送Docker镜像
- 创建Docker上下文
- 零停机时间部署你的应用程序
- 打印容器的日志
- 使用SSH连接到容器的bash
- 清理Docker资源
- 使用Django、PostgreSQL和Nginx扩展的特定命令
- 等等
安装
pip install mantis-cli
配置
在JSON格式中创建一个 mantis.json 配置文件。如果需要,您可以在路径中使用 <MANTIS>
变量作为对mantis文件的相对引用。
配置参数说明
参数 | 类型 | 描述 |
---|---|---|
manager_class | 字符串 | mantis管理类路径 |
extensions | 字典 | Django, Postgres, Nginx |
encryption | 字典 | 加密设置 |
encryption.deterministic | 布尔值 | 如果为True,加密哈希值对于相同的值始终相同 |
加密文件夹 | 布尔值 | 包含环境文件的文件夹路径 |
配置文件 | 字典 | 配置设置 |
配置文件文件夹 | 字符串 | 包含配置文件的文件夹路径 |
构建 | 字典 | 构建设置 |
构建工具 | 字符串 | "docker" 或 "compose" |
compose | 字典 | docker compose 设置 |
compose.command | 字符串 | 独立的 "docker-compose" 或 "docker compose" 插件 |
compose文件夹 | 字符串 | 包含 compose 文件的文件夹路径 |
环境 | 字典 | 环境设置 |
环境文件文件夹 | 字符串 | 包含环境文件的文件夹路径 |
环境文件前缀 | 字符串 | 环境文件的前缀 |
zero_downtime | 数组 | 零停机部署的服务列表 |
project_path | 字符串 | 远程服务器上项目文件的文件夹路径 |
连接 | 字典 | 每个环境的连接定义 |
待办事项
- 默认值
请参阅 模板文件 以获取确切的 JSON 结构。
连接
除了 localhost 之外的环境的连接可以定义为 SSH 或 Docker 上下文
例如
"connections": {
"stage": "context://<context_name>",
"production": "ssh://<user>@<host>:<port>"
}
加密
如果您计划使用环境文件的加密和解密,您需要创建加密密钥。
生成新密钥
mantis --generate-key
将密钥保存到 mantis.key 文件
echo <MANTIS_KEY> > /path/to/encryption/folder/mantis.key
然后您可以使用对称加密加密您的环境文件。每个环境变量都是单独加密的,而不是加密整个文件,以便更好地跟踪 VCS 中的更改。
mantis <ENVIRONMENT> --encrypt-env
解密就像这样简单
mantis <ENVIRONMENT> --decrypt-env
在解密时,mantis 会提示用户确认。您可以通过强制解密来跳过该提示,这在 CI/CD 管道中可能很有用
mantis <ENVIRONMENT> --decrypt-env:force
用法
mantis-cli 的一般用法格式如下
mantis [--mode=remote|ssh|host] [environment] --command[:params]
模式
根据连接到远程机器的方式,mantis 可以以 3 种不同的模式运行
远程模式 --mode=remote
在本地机器上远程运行命令,使用 DOCKER_HOST 或 DOCKER_CONTEXT (默认)
SSH 模式 --mode=ssh
通过 ssh 连接到主机并直接在远程机器上运行所有 mantis 命令(nantis-cli 需要安装在服务器上)
主机模式 --mode=host
直接在主机机器上运行 mantis,而不调用连接(用作 ssh 模式的代理)
环境
环境可以是 本地 或任何自定义环境,例如 stage、production 等。环境也用作远程连接的标识符。
命令
命令 / 快捷键 | 说明 |
---|---|
--bash:params | 在容器中运行 bash |
--build[:params] / -b | 使用 Dockerfile 构建 所有服务 |
--check-config | 根据模板验证配置文件 |
--check-env | 比较加密和解密的 env 文件 |
--check-health:container | 检查给定容器的当前健康状况 |
--clean[:params] / -c | 清理镜像、容器和网络 |
--contexts | 打印所有 docker 上下文 |
--create-context | 使用用户输入创建 docker 上下文 |
--decrypt-env[:params,env_file,return_value] | 解密所有环境文件(强制参数跳过用户确认) |
--deploy[:dirty] / -d | 运行部署过程:上传文件、拉取镜像、运行零停机部署、删除后缀、重新加载 web 服务器、清理 |
--down[:params] | 调用 compose down(可选参数) |
--encrypt-env[:params,env_file,return_value] | 加密所有环境文件(强制参数跳过用户确认) |
--exec:params | 在容器中执行命令 |
--generate-key | 创建新的加密密钥 |
--get-container-name:service | 为给定服务构造具有项目前缀的容器名称 |
--get-container-suffix:service | 为给定服务返回用于容器的后缀 |
--get-deploy-replicas:service | 返回给定服务的默认部署副本数 |
--get-healthcheck-config:container | 打印给定容器的健康检查配置(如果有) |
--get-healthcheck-start-period:container | 为给定容器返回健康检查启动周期(如果有) |
--get-image-name:service | 为给定服务构建图像名称 |
--get-image-suffix:service | 返回给定服务使用的图像后缀 |
--get-number-of-containers:service | 打印给定服务的容器数量 |
--get-service-containers:service | 打印给定服务的容器名称 |
--has-healthcheck:container | 检查给定容器是否有定义的健康检查 |
--healthcheck[:container] / -hc | 执行给定项目容器的健康检查 |
--kill[:params] | 杀死所有或给定项目的容器 |
--logs[:params] / -l | 打印所有或给定项目容器的日志 |
--manage:params | 运行Django manage命令 |
--networks / -n | 打印docker网络 |
--pg-dump[:data_only,table] | 备份数据库PostgreSQL [数据和结构] |
--pg-dump-data[:table] | 仅备份数据库PostgreSQL [数据] |
--pg-restore[:filename,table] | 从备份恢复数据库 [数据和结构] |
--pg-restore-data:params | 从备份恢复数据库 [数据] |
--psql | 启动psql控制台 |
--pull[:params] / -p | 拉取服务所需图像 |
--push[:params] | 将构建的图像推送到存储库 |
--read-key | 返回密钥加密值的值 |
--remove[:params] | 删除所有或给定项目的容器 |
--remove-suffixes[:prefix] | 从容器名称中删除数字后缀(如果scale == 1) |
--restart[:service] | 通过调用compose down和up重启所有容器 |
--restart-service:service | 停止、删除并重新创建给定服务的容器 |
--run:params | 使用params调用compose run |
--scale:service,scale | 将服务扩展到给定规模 |
--send-test-email | 使用Django 'sendtestemail'命令向管理员发送测试邮件 |
--services | 打印所有定义的服务 |
--services-to-build | 打印所有将构建的服务 |
--sh:params | 在容器中运行sh |
--shell | 运行并连接到Django shell |
--start[:params] | 启动所有或给定项目的容器 |
--status / -s | 打印图像和容器 |
--stop[:params] | 停止所有或给定项目的容器 |
--try-to-reload-webserver | 尝试重新加载web服务器(如果适合的扩展可用) |
--up[:params] | 调用compose up(可选参数) |
--upload / -u | 上传mantis配置、compose文件 和环境文件到服务器 |
--zero-downtime[:service] | 运行服务(或给定服务)的无中断部署 |
--backup-volume:volume | 将卷备份到文件 |
--restore-volume:volume,file | 从文件恢复卷 |
一些示例
mantis --version
mantis local --encrypt-env
mantis stage --build
mantis production --logs:container-name
# you can also run multiple commands at once
mantis stage --build --push --deploy -s -l
检查mantis --help
获取更多详细信息。
流程
1. 构建
一旦定义了项目的mantis配置并可选地创建加密密钥,就可以构建您的Docker镜像
mantis <ENVIRONMENT> --build
Mantis根据您的配置中定义的构建工具,使用docker-compose --build
或docker build
命令。构建图像名称使用'_'作为单词分隔符。
2. 推送
构建的图像需要推送到在compose文件中定义的存储库(您需要认证)
mantis <ENVIRONMENT> --push
3. 部署
通过调用简单命令执行到远程服务器的部署
mantis <ENVIRONMENT> --deploy
部署过程包括多个步骤
- 如果使用--mode=ssh,mantis将mantis配置、环境文件和compose文件上传到服务器
- 从存储库拉取docker图像
- 对正在运行的容器执行无中断部署(如果有任何正在运行的容器)
- 调用docker compose up启动容器
- 从容器名称中删除数字后缀(如果scale==1)
- 重新加载web服务器(如果找到合适的扩展)
- 清理docker资源(不包括卷)
Docker容器名称使用'-'作为单词分隔符(docker compose v2约定)。
4. 检查
部署后,您可以验证容器状态
mantis <ENVIRONMENT> --status
列出所有Docker网络
mantis <ENVIRONMENT> --networks
同时检查所有容器日志
mantis <ENVIRONMENT> --logs
如果您需要跟踪特定容器的日志,可以通过将容器名称传递给命令来实现
mantis <ENVIRONMENT> --logs:<container-name>
5. 其他有用的命令
有时,您不需要调用整个部署过程,只需直接调用compose命令即可
mantis <ENVIRONMENT> --up
mantis <ENVIRONMENT> --down
mantis <ENVIRONMENT> --restart
mantis <ENVIRONMENT> --stop
mantis <ENVIRONMENT> --kill
mantis <ENVIRONMENT> --start
mantis <ENVIRONMENT> --clean
单个容器的命令
mantis <ENVIRONMENT> --bash:container-name
mantis <ENVIRONMENT> --sh:container-name
mantis <ENVIRONMENT> --run:params
零停机时间部署
Mantis具有自己的零停机时间部署实现,无需任何第三方依赖项。它使用docker compose服务扩展和docker健康检查。
工作原理如下
- 使用扩展启动一个新的服务容器
- mantis等待新容器通过检查其健康状态来变得健康。如果没有定义健康检查,它将等待由启动周期定义的X秒
- 重新加载web服务器(以将请求代理到新容器)
- 容器健康或启动周期结束后,停止并删除旧容器
- 将新容器重命名为前一个容器的名称
- 再次重新加载web服务器
发布说明
Mantis使用语义版本。更多详情请参阅变更日志。
项目详情
mantis-cli-19.1.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 71b02d8ec645f74ab5afc0b2d067f676cfb11e4dda4ef55da02a3adf4321f936 |
|
MD5 | 1ad24d7fe9a3411779e8b7039111fa19 |
|
BLAKE2b-256 | fc378590b58988972312850cb4a8bfda2724dc08b8c3a469d93d97781033fa03 |