一边开发 woodlog 一边想让更多的人可以直接看到它的样子,并且对它进行测试。听说 DreamHost 有段时间了,但一直没有下定决心也整一个,因为总想找些现成的,特别是懒得配置。但为了方便自已调试和修改,我终于下定决心整了一个,而且参照网上的说明,输入一个优惠码的话,可以第一年便宜到 $24.4 ,这样合人民币 160 块左右,应该还算可以。毕竟我是为了测试软件,最终希望部署到别人那里去。
整个申请,部署的过程基本上还算顺利,从申请到部署成功大概有三四天左右吧。下面把整个过程记录下来。
1. 参考这篇 Blog DreamHost申请指南
这篇文档写得不错,很详细,而且给出了一个优惠码,很感谢。我就是用得它。我采用信用卡支付,我使用的是可以办理国际业务的信用卡。在申请之后, dreamhost 会自动创建你的用户,然后你可以上去看一看。但生效要转天,因为我是晚上办理的。同时还可以申请一个免费的域名,不错。我申请的叫: http://www.djangocn.org 。已经可以访问了。上面目前就是我做的 woodlog 系统,有兴趣的去看一看吧。
2. 到了第二天,收到了若干封 dreamhost 的信,再登录到dreamhost的控制界面中域名还无效,但象ftp用户什么的都已经生成好了。不过听人家说可以使用ssh登录,怎么没看到有说明啊,再等一等吧。
3. 到了第三天,说明域名可以使用了。访问了一个,果然,不过没有东西,只有一个目录列表。上面有我原来想安装的 wiki ,但我没有配置。于是进入 Manage Domains ,一旦它生效了,你就可以看到 web hosting那项有一个 Edit 可以使用。点击后,选中 Fastcgi 支持,这个很重要,部署 django 就靠它了。在这里你还可以设置你的 web 目录,回头放置文件要用。
这里你可以使用putty软件来试一试你的 ssh telnet 了。完全按 ftp 的配置即可。如果成功,说明功能基本开通了。
以前从来没有这样操作过,所以许多东西还不是很清楚,而且不完全熟悉 DreamHost 的系统都提供了哪些东西。既然开通了,下一步就是部署了。找到两篇文档:
TurboGearsOnDreamHost
DjangoOnDreamHost
这两篇都有一些用,但都不完全。先说一下我的要求:
- 安装 Python 2.4, 因为有一些 decorator 用法
- PIL要处理上传的头像
- PySqlite2想使用sqlite3数据库,省事
在 Django那篇文档中没有如何使用 python 2.4 的说明,而 TurboGears 中有,还不错,于是按照说明开始操作。步骤和目录安装完全是一样的。在操作中感觉 DreamHost 还是挺快的,而且编译什么的都没有出错,挺好的。
PIL 因为是标准的 python 安装方式,因此到 PIL 的主页把链接一拷,使用 wget 下载。然后解包,执行 python setup.py install 即可。
看到有 mysql 包的安装,顺便也做了下。最后没想到,我改成了 mysql 数据库了,这是后话。
pysqlite2 也装了,使用 easy_install 。
然后再按 django 的文档使用 svn 从 magic-removal 中取得最新的代码,放在 django_src 目录下。接着设置一下 .bash_profile 文件,主要是路径什么的。
在 dreamhost 中我的目录是这样的:
/home/limodou 这是我的主目录
/home/limodou/djangocn.org 这是 web 目录
/home/limodou/lib 这是存放自已编译的东西的
/home/limodou/django_src django的最新M-R版本
/home/limodou/django_projects/woodlog woodlog 存放于 django_projects 目录下
安装 woodlog 很方便,因为它的代码在啄木鸟的 svn 中,因此使用 svn 就可以取过来。
基本环境装好,开始配置 Fastcgi 了。基本上按 django 文档进行的。
主要是先下载 fastcgi.py 放在 djangocn.org 目录下。然后编写 django.fcgi 和 hello.fcgi 。不过编好后访问 http://www.djangocn.org/hello.fcgi 出错,时间等待很长,然后是 500 的错。实在不知道怎么回事,django.fcgi也是如此。因为太晚了,就先睡觉了。
第4天。又看了TG那篇文档,才发现可以通过手工运行 hello.fcgi 来进行测试。于是乎登到主机上,来到 djangcn.org 目录下,执行 ./hello.fcgi 天,报错。再参照 TG 的文档,先修改了第一行为 #!/home/limodou/bin/python/bin/python 。还是报错。说是格式不对。然后我又发现拷贝的代码缩近不对,改正确的,然后又在 ‘Hello, world!\n’ 后面又加了一个 ‘\n’ ,终于成功了。
于是同理处理 django.fcgi 。而且在页面中已经可以访问了,不过出现的是调试出错的页面。不管怎么样,说明可以运行了。发现是pysqlite2报错,说是找不到数据库的配置,可是我明明配置了呀。进入shell 后手工导入: django.db.backends.sqlite.base 报错,说明 _sqlite.so 有一个函数不支持(具体错误信息记不清了)。后来去 google 上查了查,说是 pysqlite2与sqlite的版本不配匹。我很奇怪,难道 dreamhost 上装了 Sqlite 了。在命令行下执行 sqlite3 ,果然进入 sqlite> 了。看来是装了。于是我去 sqlite 的主页下载了最新的 3.3.4 源码然后编译。不过后来还在 dreamhost 上找到了关于 sqlite 编译的一些说明。编译是成功,但还是不行。于是我不想再试验 sqlite 了。全面改到 mysql 下去吧。于是修改 settings.py 的数据库配置。在改之前已经到 dreamhost 上的面板中生成了一个 blog 的库,用户名和口令也都有了。
但在访页面时还是报 sqlite3 的错误。看到django文档上有一个google的讨论和django的文档也都谈到可以使用pkill django.fcgi 来杀掉进程。试了试,说是有个表找不到。高兴,说明基本成功,就差执行syncdb 了。进入命令行,执行 python mange.py syncdb ,终于行了。再进入页面,内容出来了,但css找不到。
再参考 django 文档,看到有一些 rewrite 的配置说明,因为不熟悉,不知道加在哪里,后来查了查 google,原来就是要创建一个 .htaccess 文件,就在 djangocn.org 就行。然后加到里面就行。不过对于其中的规则不是很清楚。原本我还想怎么让访问 django.fcgi 时不是 http://www.djangocn.org/django.fcgi 的形式呢,这样多不方便啊。原来通过 rewrite 规则就可以做到,这下明白了。因为所有的css和图片都以 medias 开头,于是我照抄:
RewriteRule ^(media/.*)$ – [L]
增加一行:
RewriteRule ^medias/(.*)$ /home/limodou/django_projects/woodlog/media/$1 [L]
但是连访问都不行了。这个rewriterule到底做什么用呢?怎么使呢?查了不少的文档,终于明白了一件事,它是用来处理url映射的,不是用来象 Alias 一样提供别名的,我犯了一个错误。看到 django 文档上有一个处理是将admin的media目录链接到 djangocn.org 这样的目录下。我想我也需要这样做。于是:
ln -s /home/limodou/django_projects/woodlog/media $HOME/djangocn.org/medias
这样再增加一个rewriterule就行了:
RewriteRule ^(medias/.*)$ – [L]
然后杀掉无用的 django.fcgi 和 python 进程(可以使用ps -A来看,还可以使用 kill -9 来杀),再试一试。终于OK了。
而且我发现使用 DreamHost 根本不需要考虑重启 server 的事,只要杀掉进程即可。而且总有一个 django.fcgi 在起着。杀了它又会出现一个新的。因此只有一个的话例也无所谓。
经过几天的折腾,woodlog 在线版终于可以使用了。