::-- ZoomQuiet [2008-03-18 07:08:09]
{{{沈崴 <[email protected]> reply-to [email protected], to "python-cn:CPyUG" <[email protected]>, date Tue, Mar 18, 2008 at 2:47 PM subject [CPyUG:43817] Re: 关于PLONE~ }}} Hostmonster 对 Ruby 和 PHP 支持甚好, 而对 Python 的支持几可忽略不计这实在是一件令人气愤的事情 ... 好了, 下面进入正题:
1. 在 Hostmonster 上安装 Plone
1.1. 软件安装
1. 下载 Plone 的 Linux 集成安装包, 例如 Plone-3.0.6
$ wget https://launchpad.net/plone/3.0/3.0.6/+download/Plone-3.0.6-UnifiedInstaller.tar.gz $ tar -xzf Plone-3.0.6-UnifiedInstaller.tar.gz
2. 修改 install.sh
$ cd cd Plone-3.0.6-UnifiedInstaller $ vi install.sh
找到 PLONE_HOME, 修改安装位置为自己的 home 目录
# Path for install of Python/Zope/Plone PLONE_HOME=/home/USERNAME/opt/Plone-3.0.6
3. 执行 install.sh 安装
$ ./install.sh standalone
8 4. 安装完成后, 修改 Plone 配置
$ cd /home/USERNAME/opt/Plone-3.0.6/zinstance $ vi etc/zope.conf
修改 port-base, 诸如 3000 (那么 http 端口就在 3000+8080 = 11080)。 推荐打开 debug-mode。
port-base 3000 debug-mode on
5. 找到自己的管理员密码, 启动 Plone
$ cat adminPassword.txt $ cd bin $ ./runzope
这样, Plone 就已经启动了。
1.2. 发布Plone
目标将 Plone 发部到 80 端口
- 一般来说我们可以使用 apache 的 mod_proxy来把 Plone 发布到 80 端口
- 不过 Hostmonster 上没有 mod_proxy, 所以我写了一个天杀的 proxy 脚本。
1. proxy.py 脚本 (熟悉 PHP 的同学可以使用诸如 curl 之类的工具仿制一个)
# proxy.py PORT = 3000 + 8080 from os import environ from sys import exit, stdin, stdout from socket import socket, AF_INET, SOCK_STREAM sock = socket(AF_INET, SOCK_STREAM) sock.connect(('localhost', PORT)) method = environ.get('REQUEST_METHOD', 'GET') query_string = environ.get('QUERY_STRING', None) if query_string: query = '%s %s?%s %s' %(method, environ.get('PATH_INFO', '/'), query_string, environ.get('SERVER_PROTOCOL', 'HTTP/1.0') ) else: query = '%s %s %s' %(method, environ.get('PATH_INFO', '/'), environ.get('SERVER_PROTOCOL', 'HTTP/1.0') ) headers = [query] if method == 'POST': headers.append('Content-Length: %s' %environ['CONTENT_LENGTH']) for key, value in environ.items(): if key[:5].upper() == 'HTTP_': headers.append( '%s: %s' %('-'.join(p.capitalize( ) for p in key[5:].split('_') ), value) ) headers.append('\r\n') sock.send('\r\n'.join(headers)) if method == 'POST': data = stdin.read(8192) while data: sock.send(data) data = stdin.read(8192) data = sock.recv(8192) p = data.find('\r\n') if not p: exit(0) data = data[p+2:] while data: stdout.write(data) stdout.flush() data = sock.recv(8192) sock.close()
2. 将 proxy.py 拷贝到 cgi-bin 目录设置为可执行, 然后设置 RewriteRule
可以参考这篇文章《Hostmonster上部署Django》
这样我们就能通过 proxy 访问到 Plone 站点了。
1.3. 回味
在 Hostmonster 上安装运行 Plone 存在很多未知因素, 上述方法未经完全验证, 可作为一种思路用。
另外也可以使用 fastcgi 模式运行 Plone, 步骤也比较多, 这里就不赘述了。
总而言之, 不太推荐一般水平的 Pythoner 在 Hostmonster 上使用 Plone 建站, 这里推荐使用 Django 等轻量级框架来做。
1.3.1. PS
On Mar 18, 3:24 pm, "Junyong Pan" <[email protected]> wrote:
- 牛就一个字! 还有,Plone现在可以直接用mod_python来带plone,根本不需要再起一个服务进程,
就是这个repoze:http://repoze.org/index.html