这个包提供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中部署的实例的名称。在上面的示例中,developproduction
  • --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,然后在第二次传递时更改符号链接。这大大减少了代码在节点间失去同步的可能时间。
  • 迁移只在第一个节点上运行,在更改符号链接之前运行,再次最小化代码和数据库不同步的时间。
  • 确保^ {< CD15> }和^ {CD61}}的基目录存在,或者可以由^ {CD62}创建。

0.1.0

  • 初始版本

贡献者

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么GetScaleInstance()不起作用?   如何筛选日期列表?   java启动文件中缺少以下必填字段:<jnlp>   Java:使枚举绑定到不同的字符串值   使用Java从sharepoint下载文件   Java的LinkedList中的链表peek和元素   java处理终止socket“客户端”的正确方法是什么   html从字符串java/gwt解析htmltags   swing“awteventque0”java。lang.NullPointerException在保存JTable时(DefaultTableModel)   java将数据从JSON ArrayList加载到spinner中   classloader我可以从外部JAR文件的另一个包中重新加载Java类吗?   用于多(并发)测试执行的java多浏览器配置文件?   java IntelliJ Idea标志着红色网络。工作良好的xml   如何设计以数据库为中心的Java Swing应用程序?   java RestrictionsFactoryUtil。in()与MySQL配合使用,与MS SQL Server配合使用失败。需要可行的解决办法