在点云上运行Plone(不使用uwsgi)
通过uwsgi计划A-Plone 我正试图通过wsgi在dotcloud上部署plone 到目前为止,我已经安装了dotcloud工具并创建了一个git存储库,它成功地将所有部分部署到dotcloud。我使用github存储所有相关配置。如果您想试用,以下是我当前用于部署的命令:在点云上运行Plone(不使用uwsgi),plone,wsgi,dotcloud,Plone,Wsgi,Dotcloud,通过uwsgi计划A-Plone 我正试图通过wsgi在dotcloud上部署plone 到目前为止,我已经安装了dotcloud工具并创建了一个git存储库,它成功地将所有部分部署到dotcloud。我使用github存储所有相关配置。如果您想试用,以下是我当前用于部署的命令: git clone github@github.com/pigeonflight/stack-python-plone cd stack-python-plone dotcloud create plone dotcl
git clone github@github.com/pigeonflight/stack-python-plone
cd stack-python-plone
dotcloud create plone
dotcloud push
部署后,我能够确认(在我的dotcloud实例中“sshing”之后),我能够使用paster通过以下命令启动堆栈:
cd current
bin/paster serve production.ini
但是,当我试图访问应用程序的url时,我得到了一个uwsgi错误,python应用程序找不到
我的wsgi.py文件如下所示:
import os
from paste.deploy import loadapp
current_dir = os.getcwd()
application = loadapp('config:production.ini', relative_to=current_dir)
更新
A计划不适合我。我最初假设uwsgi是dotcloud上Python应用程序的唯一选项
计划B-在Web服务器代理的端口上执行Plone
我现在对计划B持开放态度,它将使用Plone作为在端口上运行的工作人员,然后使用代理通行证为站点提供服务。作为一个额外的好处,“Web服务器代理端口上的Plone”将更接近其他场景中Plone的标准部署方法。几个问题/评论
requirements.txt
文件中,我注意到你现在已经空了
有关dotCloud上的代码依赖关系的更多信息,请参阅以下链接:
dotcloud.yml
中设置它。有关更多信息,请参阅此链接
这就是添加python版本后dotcloud.yml的外观
www:
type: python
postinstall: ./getplone.sh
config:
python_version: v2.7
db:
type: postgresql
总之,我认为它不适用于您的原因是wsgi设置为使用~/env virtualenv,并且由于您正在创建自己的virtualenv,并将代码放在那里,因此uWSGI无法找到您的应用程序。因此,如果您改为使用默认的virtualenv,它应该按计划工作。尝试一下我建议的更改,看看它们是否适合您。我已经有一段时间没有尝试运行Plone了。上一次我这么做(大约1年前),可以用“pip install Plone”安装它,但它花了很长时间(因为IIRC它甚至可以编译Zope和其他东西),而且没有工作(因为项目的初始化并不是100%完成) 假设事情仍然处于这种状态,我只会在公开HTTP端口的
python worker
服务中使用一个Plone默认配方(当时使用的是buildout)。与普通的python
服务的关键区别在于python worker+HTTP
解决方案不附带uwsgi,因此,您可以运行paster
或Plone统一安装程序部署的任何东西
最终结果将更接近标准的Plone安装,这很可能是一件好事 Ken Cochrane和jpetazzo的回答都有助于我找到解决方案。我决定暂时放弃wsgi。解决方案需要深入挖掘dotcloud python服务和附带的nginx Web服务器。我找到了一种将指令传递给nginx的方法,可以配置代理传递 生成的堆栈现在位于以下位置: 当我意识到我可以通过创建一个plone-uwsgi.conf文件将命令传递给nginx时,我取得了重大突破。出于我的目的,我正在“劫持”一个文件,该文件旨在传递额外的wsgi配置,并将其用于其他用途。nginx服务器被配置为在nginx.conf文件中的其他键指令(例如location/{}指令)之后读取*uwsgi.conf文件。这为我提供了一种覆盖(不需要的)wsgi代码的理想方法。在我的例子中,我使用该文件“注入”代理\u pass指令 下面是我的
plone uwsgi.conf
文件的外观:
# This configuration file overrides the default file and allows you to run
# your zope instance at the root of your dotcloud instance
location ^~ / {
rewrite ^(.*)$ /VirtualHostBase/http/$http_host:80/VirtualHostRoot$1 break;
proxy_pass http://127.0.0.1:8080;
include /home/dotcloud/current/proxy.conf;
}
我还将其他配置存储在一个名为proxy.conf的文件中,该文件包含在plone-uwsgi.conf文件中
这是我的proxy.conf
文件:
client_max_body_size 0;
client_body_buffer_size 128k;
client_body_temp_path /home/dotcloud/current/var/client_body_temp;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /home/dotcloud/current/var/proxy_temp;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
总之,应该可以使用以下命令在dotcloud沙箱中启动新的plone站点:
instance=instancename
git clone git://github.com/pigeonflight/stack-python-plone.git $instance
cd $instance
dotcloud create $instance
其次是:
dotcloud push
可能的问题:
如果dotcloud对其工作实例进行更改,我不知道由我的自定义脚本下载的预编译包是否会继续工作。根据您的建议,我应该探索一种解决方案,在独立端口上以更标准的方式运行Plone,并在其前面使用nginx作为反向代理。我正在寻找查看nginx.conf文件信息,看看这是否是最好的途径。我仍然不知道如何启动python worker,但我将开始深入阅读文档,以找出答案。如果我想启动具有我自己设置(而不是uwsgi)的自定义版本的nginx,该怎么办在/etc/nginx/sites enabled/default配置中?我想覆盖目前假定为uwsgi的默认位置/指令。感谢Ken,这有助于我更深入地理解dotcloud平台。我现在以更“dotcloudish”的方式实现了配置的一个新变体它现在使用PythonV2.7,我在requirements.txt文件中添加了zc.buildout。它构建得很漂亮,感觉更干净,如果我登录并使用paster启动它,它就可以工作,但在其他情况下,我仍然会收到相同的uwsgi错误。真的很好,谢谢你提供这个配方!我认为预编译的包应该可以工作,直到我们升级将基本图像复制到Ubuntu LTS 12;但是你应该在一段时间内保持安全。(。