Deployment

Deployment

Isso附带了一个内置的web服务器,这对于初始设置非常有用,并且可以用于低流量站点的生产环境(最多每秒20个请求)。运行一个”真正的”WSGI服务器支持一些不错的东西,比如UNIX域套接字、守护和可靠的HTTP处理程序,同时比内置的web服务器更稳定、更安全和更具web规模。

gevent

可能是最简单的部署方法。使用PIP安装(需要libevent):

$ pip install gevent

然后,像往常一样使用 isso 可执行文件。Gevent Monkey修补了Python的标准库以使用greenlets。

要执行Isso,只需使用命令行界面:

$ isso -c my.cfg run

不幸的是,gevent 0.13.2不支持UNIX域套接字(有关详细信息,请参见 #295#299 )。

uWSGI

Isso对uWSGI具有特殊的支持,即快速IPC缓存(fast IPC caching),作业假脱机(job spooling)和延迟作业(delayed jobs)。这是作者的选择,但不是唯一的选择。您需要uWSGI 1.9或更高版本,幸运的是,您可以从PyPi安装它:

~> apt-get install build-essential python-dev
~> pip install uwsgi

为了方便起见,我建议使用INI样式的配置(您还可以将所有内容作为命令行参数提供):

[uwsgi]
http = :8080
master = true
; set to `nproc`
processes = 4
cache2 = name=hash,items=1024,blocksize=32
; you may change this
spooler = /tmp/isso/mail
module = isso.run
; uncomment if you use a virtual environment
; virtualenv = /path/to/isso
env = ISSO_SETTINGS=/path/to/isso.cfg

然后,创建假脱机目录并通过uWSGI启动Isso:

~> mkdir /tmp/isso/mail
~> uwsgi /path/to/uwsgi.ini

gunicorn

Gunicorn,’Gree Unicorn’, 是一个用于Unix具有pre-fork工作模型的Python WSGI HTTP服务器,移植于Ruby的Unicorn项目。通过PIP安装 gunicorn

$ pip install gunicorn

要执行Isso,请使用类似于以下命令:

$ export ISSO_SETTINGS="/path/to/isso.cfg"
$ gunicorn -b localhost:8080 -w 4 --preload isso.run

mod_wsgi

首先,创建一个名为 isso.wsgi 的启动脚本。如果Isso在您的系统模块搜索路径中,则脚本非常简单。此脚本作为 run.py 包含在isso发行版中:

from __future__ import unicode_literals

import os

from isso import make_app
from isso import dist, config

application = make_app(
config.load(
    os.path.join(dist.location, dist.project_name, "defaults.ini"),
    "/path/to/isso.cfg"),
multiprocessing=True)

如果在虚拟环境中安装了Isso,则必须将virtualenv的路径添加到特定于站点的Python路径中:

from __future__ import unicode_literals

import site
site.addsitedir("/path/to/isso_virtualenv")

import os

from isso import make_app
from isso import dist, config

application = make_app(
config.load(
    os.path.join(dist.location, dist.project_name, "defaults.ini"),
    "/path/to/isso.cfg",
multiprocessing=True)

使用上述脚本将在可用时加载系统模块,并从virtualenv加载模块。如果您想要相反的行为,即virtualenv中的模块优先于系统模块,则以下脚本可以解决问题:

from __future__ import unicode_literals

import os
import site
import sys

# Remember original sys.path.
prev_sys_path = list(sys.path)

# Add the new site-packages directory.
site.addsitedir("/path/to/isso_virtualenv")

# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
    if item not in prev_sys_path:
        new_sys_path.append(item)
        sys.path.remove(item)
sys.path[:0] = new_sys_path

from isso import make_app
from isso import dist, config

application = make_app(
config.load(
    os.path.join(dist.location, dist.project_name, "defaults.ini"),
    "/path/to/isso.cfg",
multiprocessing=True)

最后两个脚本基于 mod_wsgi文档 给出的。

Apache的配置将类似于以下内容:

<VirtualHost *>
    ServerName example.org

    WSGIDaemonProcess isso user=www-data group=www-data threads=5
    WSGIScriptAlias /mounted_isso_path /path/to/isso.wsgi
</VirtualHost>

您将需要根据Apache的安装情况和安全策略来调整用户和组。还应注意,包含评论数据库的目录必须由运行WSGI守护进程的用户或组可写:仅拥有可写数据库是不够的,因为SQLite将需要在同一目录中创建锁定文件。

mod_fastcgi

如果您的托管服务提供商不允许您运行长时间的进程,则可以使用此方法。如果尚未在服务器中配置FastCGI,请按照以下步骤操作:

注解

如果您对如何通过 mod_fastcgi 部署Python有更多的了解,那么此信息可能是错误的,请考虑扩展/更正此部分。

有关更多信息,请参见 Flask: Configuring Apache

LoadModule fastcgi_module /usr/lib64/httpd/modules/mod_fastcgi.so

FastCgiServer /var/www/html/yourapplication/app.fcgi -idle-timeout 300 -processes 5

<VirtualHost *>
    ServerName example.org

    AddHandler fastcgi-script fcgi
    ScriptAlias / /var/www/isso.fcgi

    <Location />
        SetHandler fastcgi-script
    </Location>
</VirtualHost>

接下来,要将isso作为FastCGI脚本运行,您需要使用PIP安装 flup

$ pip install flup

最后,复制并粘贴到 /var/www/isso.fcgi (或您喜欢的任何位置):

#!/usr/bin/env python
#: uncomment if you're using a virtualenv
# import sys
# sys.path.insert(0, '<your_local_path>/lib/python2.7/site-packages')

from isso import make_app, dist, config
import os

from flup.server.fcgi import WSGIServer

application = make_app(config.load(
        os.path.join(dist.location, dist.project_name, "defaults.ini"),
        "/path/to/isso.cfg"))
WSGIServer(application).run()

Openshift

使用 Isso Openshift Deployment Kit 只需单击一下即可将Isso安装在Open Shift上。确保您已经安装了rhc(说明:instructions )并完成设置。

  1. 运行以下命令,您将获得一个随Isso安装的Open Shift实例:

    rhc create-app appname python-2.7 --from-code https://github.com/avinassh/isso-openshift.git
    
  2. 上面的步骤还将在当前目录中克隆Open Shift实例的Git存储库。更改配置文件并推回Openshift,它将使用新设置重新部署。

  3. 访问 http://<yourappname>-<openshift-namespace>.com/info 以验证Isso是否已正确部署并正常工作。