---
title: "部署 42qu.com 源代码"
url: "https://lerry.me/post/2012/09/deploy-42qu-code"
date: 2012-09-15T05:24:00.000Z
updated: 2026-08-31T09:37:52.536Z
tags:
  - "Python"
language: zh-CN
---

# 部署 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程序，

```bash
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进行管理。
