跳转到主要内容

管理命令用于构建和部署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 模式的代理)

环境

环境可以是 本地 或任何自定义环境,例如 stageproduction 等。环境也用作远程连接的标识符。

命令

命令 / 快捷键 说明
--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 --builddocker 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使用语义版本。更多详情请参阅变更日志

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

mantis-cli-19.1.6.tar.gz (39.2 kB 查看哈希值)

上传时间

由以下支持