这个包提供django管理命令,通过paramiko通过ssh部署站点。
django-ssh-deployer的Python项目详细描述
django ssh部署程序
这个包提供了一个django管理命令,通过paramiko通过ssh将站点部署到各种实例(开发、阶段、生产)。
先决条件
伟大的力量带来伟大的责任!目标服务器(DEPLOYER_INSTANCES['instance']['servers']
)必须分别安装git
和python 3.3+,并支持linux风格的os命令。目标服务器必须有一个用户(DEPLOYER_INSTANCES['instance']['server_user']
),该用户的密钥是从运行django命令的控制计算机设置的。这通常意味着将控制计算机帐户的公钥安装到目标服务器用户帐户的AUTHORIZED_KEYS
中。
安装和所需的django设置
通过pip
安装到开发环境中:
pip install django-ssh-deployer
然后将django_ssh_deployer
添加到INSTALLED_APPS
中。接下来,我们需要在django的设置中配置您的实例;这些实例可以存在于您的开发或本地设置中,因为生产环境不需要它们。
DEPLOYER_INSTANCES={'develop':{'name':'your-project','repository':'git@github.com:youruser/your-project.git','branch':'develop','settings':'config.settings.develop','requirements':'requirements/develop.txt','code_path':'/var/django/sites','venv_python_path':'/usr/bin/python3.6','upgrade_pip':False,'servers':['devserver.example.com'],'server_user':'deploy_user','save_deploys':3,'selinux':False,},'production':{'name':'your-project','repository':'git@github.com:youruser/your-project.git','branch':'master','settings':'config.settings.master','requirements':'requirements/master.txt','code_path':'/var/django/sites','venv_python_path':'/usr/bin/python3.6','upgrade_pip':False,'servers':['prodserver-1.example.com','prodserver-2.example.com'],'server_user':'deploy_user','save_deploys':3,'selinux':True,'additional_commands':["chmod -R a+rX /var/django/sites/your-project-master","curl -kLs -o /dev/null --max-time 5 --resolve 'your-domain.com:443:127.0.0.1' https://your-domain.com/",],},}
name
:项目的名称。repository
:django项目的存储库,它将在每个目标服务器上克隆。branch
:要签出实例的分支。settings
:instnace的django设置的完整路径。requirements
:实例的requirements
文件的相对路径。code_path
:要签出到目标服务器上的代码存储库的根路径。venv_python_path
:要在目标服务器上使用的venv
的python版本的完整路径。upgrade_pip
:如果设置为True
,则将pip
升级到最新版本。servers
:部署django项目的服务器列表。server_user
:目标服务器上的用户,该服务器已使用来自控制计算机的密钥设置。- (可选)
save_deploys
:如果是正整数,则只保留最近的部署数。默认情况下,将保留所有。 - (可选)
selinux
:如果设置为true,部署程序将运行chcon
命令为selinux在文件上设置必要的安全上下文。它会将codepath
中的所有文件设置为httpd_sys_content_t
,并将venv
中的任何*.so
文件设置为httpd_sys_script_exec_t
。 - (可选)
additional_commands
:部署完成后要运行的命令列表。
运行命令
python manage.py deploy --instance=develop
--instance
:必需。要在DEPLOYER_INSTANCES
中部署的实例的名称。在上面的示例中,develop
或production
。--quiet
:更少的详细输出。不显示正在运行到终端的命令的输出。--no-confirm
:无需确认步骤即可发布。小心!--stamp
:默认情况下,django ssh部署程序将向git clone
附加日期时间戳。这将覆盖日期时间默认值。
它的功能
deploy
命令将以servers
作为server_user
对每个服务器执行ssh,并分两次执行以下功能。
首先,它将连接到每个服务器并准备新的部署:
- 从带有标记的git克隆存储库
- 用图章创建
venv
- 运行
collectstatic
命令
在所有服务器上正确准备好部署后,它将继续执行最后的部署步骤:
- 仅在第一台服务器上运行
migrate
命令 - 创建或更新符号链接以指向每台服务器上已完成的部署
已知的限制和问题
- 不支持Windows服务器,但是可以使用Windows作为控制计算机。
- 存储库的主机必须在目标服务器的已知主机列表中,因为通过ssh的git签出需要初始指纹。
- 这并不意味着要取代像jenkins这样功能齐全的持续集成产品。
发行说明
0.4.5
- 添加用于发布的
--no-confirm
命令行选项UT确认。小心!
0.4.4
- 默认情况下,来自安全上下文的管道输出将切换到/dev/null。
0.4.3
- 添加
upgrade_pip
选项将目标venv中的pip升级到最新版本。
0.4.2
- 添加对附加的
.so
文件模式的支持,这些模式可以与pip
一起安装,用于selinux。
0.4.1
- 添加在发布完成后按环境运行命令的功能。这将是迁移之前运行的最后一项操作。这对于诸如必需的
chmod
更改或curl
调用之类的事情很方便。
0.4.0
- 现在支持selinux。当发布发生时,将为已发布的文件和venv设置适当的安全上下文。
0.3.1
- 一些文档补遗。
0.3.0
virtualenv
已被弃用,取而代之的是python 3.3+附带的venv
。如果您需要对virtualenv
的支持,请使用0.2系列的最新版本。- 为了简化,选项
virtualenv_path
不再受支持。venv
将在项目的根目录中创建。 - 为了保持一致性,指向构建
venv
的python可执行文件的设置virtualenv_python_path
已重命名为venv_python_path
。
0.2.1
- 修复一个错误,其中一个冗余符号链接被覆盖,造成不必要的时间,数据库可能会与节点上的代码不同步。
- 用markdown更新新的pypi界面的详细描述。
0.2.0
- 重构以在所有节点上准备代码和virtualenv,然后在第二次传递时更改符号链接。这大大减少了代码在节点间失去同步的可能时间。
- 迁移只在第一个节点上运行,在更改符号链接之前运行,再次最小化代码和数据库不同步的时间。
0.1.0
- 初始版本
贡献者
- 蒂莫西·艾伦(https://github.com/FlipperPA)