诸如WordPress,Typecho都是基于PHP的,即LEMP框架。最近折腾服务器上跑Python web服务,就总结了一些安装步骤。

LEMP环境搭建参见这里:在Ubuntu14.04上搭建LEMP环境

因为PHP用到的是fastCGI,所以在Django也使用fastCGI,不过这里还需要flupflup是一个用python写的web server,也就是CGI中所谓的Server/Gateway,它负责接受Nginx转发的请求,并调用你写的程序 (application),并将application处理的结果返回到Nginx。

Ubuntu自带了Python,可以这样查看Python版本:
python --version
得到如下:
Python 2.7.6

接下来安装pip

sudo apt-get install python-pip

pip安装Django

pip install Django==1.8.1

查看Django是否正确安装:
进入Python:
python
在Python中输入:
import django
print django.get_version()
得到:
1.8.1

创建一个Django项目:

这里实际上可以在服务器上任意自己想要的目录,不过我放在/usr/share/nginx/html/test
cd到想要的目录,然后创建:
django-admin startproject mysite # mysite即项目名,可自己修改

安装flup

sudo apt-get install python-flup

修改Nginx配置文件:

Nginx配置文件路径为:/etc/nginx/sites-available/default
在文件中新加入一个server,如下:

server {
    listen 80;
    server_name test.polarxiong.com;  # server_name修改为自己的域名或IP地址
    root /usr/share/nginx/html/test;  # 实际上root路径不太重要
    index index.php index.html index.htm;  # 这里也不太重要

    location / {
        index index.html index.php;
        fastcgi_pass 127.0.0.1:8051;  # 这个地址个端口可以自定义,但后面会需要
            fastcgi_param PATH_INFO $fastcgi_script_name;  
            fastcgi_param REQUEST_METHOD $request_method;  
            fastcgi_param QUERY_STRING $query_string;  
            fastcgi_param CONTENT_TYPE $content_type;  
            fastcgi_param CONTENT_LENGTH $content_length;  
            fastcgi_param SERVER_PROTOCOL $server_protocol;  
            fastcgi_param SERVER_PORT $server_port;  
            fastcgi_param SERVER_NAME $server_name;  
            fastcgi_pass_header Authorization;  
            fastcgi_intercept_errors off;  
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

文件修改保存后退出。

启动flup

将当前目录cd切换到Django项目下(即有manage.py的那层),执行:
python manage.py runfcgi method=threaded host=0.0.0.0 port=8051

注意这里端口号要和Nginx配置文件中相同

然后重启Nginx:

service nginx restart

接下来在浏览器中输入上面Nginx配置文件中的server_name就能看到Django的“It worked!”界面了,这样Django就算安装完成了。

需要注意的几点:

  1. Python版本问题,如果在Ubuntu中安装多个版本的Python一定要注意依赖包的问题,有可能pip install成功了但Python中无法import,所以这里我直接用的系统自带的。
  2. Nginx配置文件中实际fastcgi_pass才是最重要的,我的test目录下有index.html,但访问test.polarxiong.com时仍然直接跳转到Django,说明Nginx首先会把请求交给fastcgi_pass,再由flup传至指定的Django项目。所以Django项目的实际路径也是可以自定义的。
  3. flup运行后,即
    python manage.py runfcgi method=threaded host=0.0.0.0 port=8051

执行后需要重启Nginx才能实现访问Django,所以在服务器重启后也要重复上述步骤。

  1. 注意到执行
    python manage.py runfcgi method=threaded host=0.0.0.0 port=8051

后会出现警告:
Warning: FastCGI support has been deprecated and will be removed in Django 1.9
这个因为现在用的还是1.8.1所以暂时不考虑。