用于在ubuntu/nginx/supervisord/gunicorn堆栈上部署wsgi应用程序的基于结构的工具。

silk-deployment的Python项目详细描述


概述

silk是一个基于Fabric的工具,用于根据我喜欢的设置python wsgi应用程序 调用紧贴堆栈:

  • Supervisord用于启动进程并使其保持活动状态。
  • Nginx用于在wsgi应用程序和大坏站点之间进行代理。
  • Ubuntu作为可选择的操作系统,使用 Debian也可以,但还没有测试过。
  • Gunicorn为您的wsgi应用程序提供服务。

(我想也可能是枪堆,但听起来不太友好。)

主要功能

  • 使用一个命令(“silk push”)将站点部署到一个或多个服务器。
  • 自动配置nginx、supervisord和gunicorn以使您的站点运行。
  • 将每个站点隔离成单独的Virtualenv
  • 支持不同的应用程序配置,具体取决于您部署到哪个角色(a 例如,与生产阶段不同的数据库)。

安装

使用pip:

pip install silk-deployment

您还可以直接从BitBucket安装当前的开发版本:

pip install hg+http://bits.btubbs.com/silk-deployment#egg=silk-deployment

命令

(几乎)下面的所有命令都要求您指定一个角色名,如 “丝绸剂量计-R DEV”。

命令通常可以从站点根目录或任何子目录运行 是的。

推动

silk push -R rolename
这个命令是丝的存在的主要原因。它完成了所需的工作 在给定配置的主机(或一组主机)上运行应用程序 在site.yaml和选定的role.yaml文件中指定。“推”可以 以下内容:

  1. sshe到角色配置中指定的远程服务器。
  2. 将站点从本地计算机复制到 远程服务器。
  3. 为站点创建一个virtualenv。
  4. 将python依赖项安装到virtualenv中。
  5. 写入配置文件包括nginx和supervisord。
  6. 为站点编写一个管理器配置并启动它。
  7. 向主页发出请求以确保网站正在运行。
  8. 告诉nginx将流量路由到新实例而不是旧实例。

运行

silk run -R rolename

此命令从本地计算机在端口8000上运行站点。(什么都不是 在的static\u dirs部分中列出的静态目录 还将提供site.yaml。(樱桃是用来施魔法的。)

骨架

silk skel sitename

创建具有基本silk文件和目录结构的目录。

布局

一个支持丝绸的项目应该像这样分层:

mysite.com
├── fabfile.py
├── membrane.py
├── requirements.txt
├── roles
│   ├── dev.yaml
│   ├── staging.yaml
│   └── production.yaml
├── site.yaml
└── my-django-project

其中一些文件/文件夹是必需的,其他是可选的:

必需

  1. site.yaml-这是主配置文件(类似于google中的app.yaml 应用程序引擎)
  2. requirements.txt-一个与pip兼容的python包名和 版本。
  3. roles/*.yaml-一个或多个“role”文件,其中包含要 根据部署上下文传入应用程序。

将使用“silk skel”命令为您创建所有必需的文件。

可选

  1. py-对于django项目来说,有一个小垫片可以暴露是很好的。 作为wsgi应用程序的项目。我喜欢叫我的膜。你可以用 你喜欢什么,或者什么都不喜欢,这取决于你的设置。
  2. 我的django项目-silk不限于django;上的任何有效wsgi应用程序 您的python路径应该是可维护的。但对于django项目我认为 把它们粘在那里是有道理的。
  3. fabfile.py-aFabric兼容的fabfile,用于导入丝绸织物 功能。在这里,您可以通过 用你自己的包起来(我这样做是为了运行django的“collectStatic 推动)。或者加入你自己的织物任务。

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

推荐PyPI第三方库


热门话题
由于测试失败,java testcontainers maven构建失败   java实现jacobi算法实现laplace方程   java中的多线程:如何在不等待所有线程使用ExecutorService完成任务的情况下终止所有线程的执行?   java Hello World不在Android Studio 3中工作   ubuntu Tomcat7的Java版本不正确   java Javafx内存泄漏   对于手动实现的Spring数据存储库方法,我应该使用Java8默认方法吗?   googleappengine中的java添加过滤查询   html当使用JSOUP库在Java中读取标签时,如何保留标签(如<br>、<ul>、<li>、<p>等)的含义?   编码为什么jasper生成的报告在Java中不显示西里尔语(保加利亚语)?   java有没有办法隐藏当前位置和jdk动作?   java找出编译原型文件的版本   有没有办法在运行时更改java方法的访问修饰符?   语法字符串。。。Java中的参数   java数组元素在添加其他元素时会相互覆盖   eclipse中的java GWT项目   java如何为spring rest模板请求将动态json属性名映射到jackson   java无法在Windows 10上找到特定的JDK   在xml字符串和java字符串之间提取正则表达式子字符串