##language:zh #pragma section-numbers on ::-- ZoomQuiet [<>] <> ## 默许导航,请保留 <> {{{沈崴 reply-to python-cn@googlegroups.com, to "python-cn:CPyUG" , date Tue, Mar 18, 2008 at 2:47 PM subject [CPyUG:43817] Re: 关于PLONE~ }}} ^Hostmonster 对 Ruby 和 PHP 支持甚好, 而对 Python 的支持几可忽略不计这实在是一件令人气愤的事情 ... 好了, 下面进入正题:^ = 在 Hostmonster 上安装 Plone = == 软件安装 == * 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 就已经启动了。 == 发布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 * 可以参考这篇文章'''[[http://sunligt.gjjblog.com/archives/1066969/|《Hostmonster上部署Django》]]''' 这样我们就能通过 proxy 访问到 Plone 站点了。 == 回味 == 在 Hostmonster 上安装运行 Plone 存在很多未知因素, 上述方法未经完全验证, 可作为一种思路用。 另外也可以使用 fastcgi 模式运行 Plone, 步骤也比较多, 这里就不赘述了。 总而言之, 不太推荐一般水平的 Pythoner 在 Hostmonster 上使用 Plone 建站, 这里推荐使用 Django 等轻量级框架来做。 === PS === `On Mar 18, 3:24 pm, "Junyong Pan" wrote`: 牛就一个字! 还有,Plone现在可以直接用mod_python来带plone,根本不需要再起一个服务进程, * 就是这个repoze:'''http://repoze.org/index.html''' = 反馈 =