在点云上运行Plone(不使用uwsgi)

在点云上运行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

通过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
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的标准部署方法。

几个问题/评论

  • 在getplone.sh脚本中,您正在创建一个新的virtualenv?你为什么这么做?已经在~/env(/home/dotcloud/env是完整路径)下为您创建了一个virtualenv

    如果你想在里面安装东西,你可以使用~/env/bin/pip,或者更好,你可以把你的需求放在
    requirements.txt
    文件中,我注意到你现在已经空了

    有关dotCloud上的代码依赖关系的更多信息,请参阅以下链接:

  • 如果您想要Python2.7,您应该在
    dotcloud.yml
    中设置它。有关更多信息,请参阅此链接

    这就是添加python版本后dotcloud.yml的外观

  • 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;但是你应该在一段时间内保持安全。(。