python部署工具
mordor2的Python项目详细描述
目的
如果您有基于python的应用程序,需要部署到一组机器上,并且需要不断更新这些应用程序,那么mordor是适合您的工具。您可以
- 将python应用程序部署到主机舰队
- 在舰队上启动和停止python应用程序
- 在舰队上更新python应用程序。
配置
您需要在~/.mordor/config.json
中放置一个本地配置文件。下面是一个示例:
{
"hosts": {
"localhost": {
"ssh_host" : "localhost",
"env_home" : "/Users/shizhong/mordor",
"virtualenv": "/usr/local/bin/virtualenv",
"python3" : "/usr/local/bin/python3"
},
"mylinux": {
"ssh_host" : "mylinux",
"env_home" : "/home/SHIZHONG/mordor",
"virtualenv": "/usr/bin/virtualenv",
"python3" : "/usr/bin/python3"
},
"test3": {
"ssh_host": "test3.deepspace.local",
"env_home": "/root/mordor",
"virtualenv": "/usr/bin/virtualenv",
"ssh_key_filename": "~/.runtime/cloudconfig/home",
"ssh_username": "root",
"python3": "/usr/bin/python36"
}
},
"applications": {
"sample": {
"home_dir" : "/Users/shizhong/projects/sample",
"deploy_to" : [ "mylinux", "localhost" ],
"use_python3" : true,
"config" : {
"config" : "convert",
"oci_api_key.pem": "copy"
}
}
}
}
主机配置
- 在“hosts”(主机)中,key是主机名,value是主机配置
ssh_主机
您应该能够使用其ssh_host属性作为主机名通过ssh连接到目标主机,而无需输入密码。
您可能需要使用ssh-add
命令并配置~/.ssh/config
ssh密钥文件名
如果需要使用私钥连接到ssh服务器,可以在此处指定密钥文件名
ssh_用户名
如果指定ssh\u key\u文件名,则必须提供该文件名。它表示ssh用户名
环境主页
指定mordor的主目录。
virtualenv
这将指定virtualenv命令的完整路径
Python3
这将指定python3的完整路径。如果不打算使用python3,则不需要具有此属性。
应用程序配置
- 在申请中。键是应用程序名称,值是应用程序配置
主目录
指定应用程序的主目录的位置。
部署到
这是一个数组,告诉应用程序将部署到的主机的列表。
使用_python3
如果为true,则此应用程序使用python3。默认值为false
命令
可选。运行应用程序时指定命令。if可以是bash shell脚本或python脚本。bash shell脚本的文件名必须以.sh
结尾,python脚本的文件名必须以.py
结尾
主机
在主机对mordor可用之前,您需要
- 将主机配置添加到
~/.mordor/config.json
- 运行
mordor -a init-host --host-name <hostname>
初始化主机
初始化前
在舰队的主机上,
- 您需要确保安装了Python2.x。对于大多数linux dist和mac,这是正确的。
- 如果需要在此主机上部署使用python3的应用程序,则需要安装python3
- 在主机配置中设置python3
- 你需要安装virtualenv和pip。
- 您需要为管理的每台计算机在主机部分中添加条目。
初始化
运行mordor.py -a init-host --host-name <hostname>
初始化主机。主机通常只需要初始化一次。
以下是主机目录结构的布局:
<Mordor Home Directory>
|
+-- apps Home directory for all applications
| |
| <application name> Home directory for an application
| |
| +-- <version 1> Directory for version 1 of application
| |
| +-- <version 2> Directory for version 2 of application
| |
| +-- current A symlink to the current version
|
+-- bin Some tools used by mordor
|
+-- configs Home directory for configs for all applications
| |
| +-- <application name> Config for an application
|
+-- logs Home directory for logs for all applications
| |
| +-- <application name> Logs for an application
|
+-- pids Directory for pid for each application
| |
| +-- <application name>.pid pid for the latest run of an application
|
+-- venvs Home for virtual envs for all application
| |
| +-- <application name>_<version> Virtual env for a given application with given version
|
+-- data
| |
| +-- <application name>
|
+-- temp Temporary directory
准备应用程序
您可以运行命令mordor.py -a stage --app-name <application_name>
将应用程序转移到应用程序要部署的所有主机
- 在
config.json
中,deploy_to
告诉它将部署到的主机列表 - 在应用程序的主目录中,有一个文件
manifest.json
,如下所示
{
"version": "0.0.1"
}
版本告诉应用程序的版本,
- 在每个可部署主机上,应用程序的代码将被复制到
apps/<application_name>/<version>
目录- sym链接将被打包,因此您可以使用
app/<application_name>/current/
作为当前版本
- sym链接将被打包,因此您可以使用
- 在每个可部署主机上,将创建virtualenv,并安装所有必需的包。
- 它在应用程序目录中查找要安装的包
requirements.txt
- 上面的文件是可选的。
它还查找^ {CD16}},如果存在,它将安装在^ {CD15}} 之前
- 它在应用程序目录中查找要安装的包
- 在主机上,virtual env是一个
venvs/<application_name>-<version>
- 符号链接将在
venvs/<application_name>
中创建
- 配置文件应存储在
~/.mordor/configs/<application_name>
config.json
中应用程序的config
部分将告诉需要复制的文件李>copy
表示简单的复制,convert
表示可以在配置文件中使用类似env_home
和app_name
的变量。
转换
您的文件必须是python格式的字符串,并提供以下变量
Variable name | Description |
---|---|
env_home | environment home directory on the host |
app_name | application name |
config_dir | configuration directory for the app on the host |
运行
您可以运行mordor.py -a run --app-name <application_name>
要运行应用程序,所有部署的主机都将运行您的应用程序。它将调用您在应用程序的cmd配置中指定的命令,如果缺少,则使用“run.sh”。
应用要求
- 您需要放置一个文件
requirements.txt
来告诉您的应用程序依赖关系 - 您需要提供一个
run.sh
命令,该命令将被调用以启动您的程序
要查看示例,请参见sample