诸如WordPress,Typecho都是基于PHP的,即LEMP框架。最近折腾服务器上跑Python web服务,就总结了一些安装步骤。
LEMP环境搭建参见这里:在Ubuntu14.04上搭建LEMP环境
因为PHP用到的是fastCGI
,所以在Django
也使用fastCGI
,不过这里还需要flup
,flup
是一个用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就算安装完成了。
需要注意的几点:
- Python版本问题,如果在Ubuntu中安装多个版本的Python一定要注意依赖包的问题,有可能
pip install
成功了但Python中无法import
,所以这里我直接用的系统自带的。 - Nginx配置文件中实际
fastcgi_pass
才是最重要的,我的test
目录下有index.html
,但访问test.polarxiong.com
时仍然直接跳转到Django
,说明Nginx首先会把请求交给fastcgi_pass
,再由flup
传至指定的Django
项目。所以Django
项目的实际路径也是可以自定义的。 flup
运行后,即python manage.py runfcgi method=threaded host=0.0.0.0 port=8051
执行后需要重启Nginx才能实现访问Django
,所以在服务器重启后也要重复上述步骤。
- 注意到执行
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
所以暂时不考虑。