部署 42qu.com 源代码

前两个月我有幸参与了42区网站的重构(2012年中),经历了从hello world到完整网站的整个过程,为他添砖加瓦,也挖了不少坑。。。
42区的代码是开源的,可以从这里获得https://bitbucket.org/zuroc/42qu下面说一下怎样在你自己的网站上跑起来一个完整的42区。
首先当然是环境的配置,这里http://help.42qu.com/code/environment.html有完整的配置过程,其实就是安装需要的各种软件。42区运行环境主要使用的软件:
Linux操作系统,这个不解释,需要注意的是,官方的网站使用的是Gentoo操作系统,经测试Debian也是可以的,而且由于Gentoo的软件安装是从源码编译的,主要区别在于软件的安装方式不同,特别是python-memcached这个包可能不太好装,不过这个在上面的链接里都会提到。
Python,这个也不用说,要求版本为2.7,因为用到了2.7里面的一些新特性。
MySQL,主要的数据库。
Redis,很多需要性能或者存储量不大的地方都用到了。
Memcached,非常重要,我们要求同一个页面第二次刷新的时候不能有SQL查询(数据没有更改的情况下),这都依赖它。
Nginx,高性能的web服务器,提供反向代理到Tornado和静态文件处理服务。
Supervisord,用于保证Python进程的运行。
...
还有其他的软件,不一一说了。
Python库方面,
zweb,教主基于Tornado扩展而成的web框架,封装了很多好用的功能。
zorm,教主写的ORM框架,简单易用。
mako,模板引擎。

当环境配置都准备好了,就可以准备开始了。
首先确保已经有域名指向你的服务器(改DNS或者hosts也是能运行的),然后创建一个MySQL用户,如用户名work,密码42qu,必须保证给予work用户对所有work_开头的数据库的权限(使用phpMyAdmin可以很方便做到),因为要创建多个数据库。
然后在你的用户的家目录(如/home/work)运行hg clone https://bitbucket.org/zuroc/42qu 获取最近源码,首次运行要执行reset程序,
cd ~/42qu
python misc/once/reset.py
运行过程中会提示输入域名和MySQL的用户名密码。注意,这个脚本会清空数据库,没事不要乱运行。
接下来,就可以开始了,在42qu目录下有一个 dev_site.py 和 site.py 文件,分别用于开发和在线服务器,开发时能显示详细出错信息,并在终端中显示HTTP日志和Python日志,方便调试。
如果运行时出错,如果提示某数据库不存在,可能是新增了数据库,可以手工创建或者重新运行reset程序。
如果正常运行但是无法打开网站,可能是域名或者Nginx没设置好。

注意,包括注册在内的很多服务都需要发送邮件,邮件服务需要单独开启
python misc/srv/base/sendmail_srv.py
线上服务器可以使用Supervisord进行管理。

2012-09-15 13:2448342qupython