2019独角兽企业重金招聘Python工程师标准>>>
由于一个监控项目(使用django开发)交接到所在项目组,需要了解python的web开发和环境搭建。
这里记录环境的搭建流程,以及遇到的问题和处理方案。
环境信息: CentOS 6.6 (内网IP:100.84.73.45) Nginx 1.2.8 Python 2.6.6 Django 1.6 uwsgi 2.0.11.2
注意:Django1.6匹配的python最高版本是2.6,如果安装太高版本的django,需要使用python2.6以上版本,否则安装过程会报错:invalid syntax
这里我的机器自带了python2.6.6,就不介绍python的安装了。
安装pip
pip是python的包管理工具,我们使用pip进行python的管理
# wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
# python get-pip.py
安装uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
- 使用pip安装 uwsgi
# export LDFLAGS="-Xlinker --no-as-needed"
# pip install uwsgi
- 测试uwsgi
创建一个test.py的测试文件
# pwd
/home/test/django
# touch test.py
# vim test.py
test.py内容如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
- 启动uwsgi
# pwd
/home/test/django
# uwsgi --http :13010 --wsgi-file test.py
在浏览器中输入:http://100.84.73.45:13010
uwsgi安装和启动正常。
安装django
- 使用pip安装 django
由于使用的是python2.6.6,因此需要安装1.6版本的django。
安装指定版本的django的方式如下:
# pip install -v django==1.6
- 新建Django工程
# pwd
/home/test/django
# django-admin.py startproject MySite
# ls
MySite test.py
- 使用uwsgi启动django工程
# pwd
/home/test/django
# cd MySite
# uwsgi --http :13010 --wsgi-file MySite/wsgi.py
在浏览器中输入:http://100.84.73.45:13010
到此django安装成功,并且和uwsgi结合成功。
- 补充信息
也可以使用如下命令启动django工程
# pwd
/home/test/django/MySite
# uwsgi --http :13010 --module MySite.wsgi
如果是单独调试django,可以使用django自带的简单服务器进行。
# pwd
/home/test/django/MySite
# python manage.py runserver 0.0.0.0:13010
安装nginx
- 源码安装nginx
我们采用源码方式安装。 搜狐镜像下载地址:http://mirrors.sohu.com/nginx/ 我选择的是 1.2.8 版本
安装步骤,可以看这里:http://xyuex.blog.51cto.com/5131937/1013414
- 配置nginx
# pwd
/home/test/local/nginx
# touch nginx_django_unix.conf
nginx_django_unix.conf内容如下:
worker_processes 2;
events {
use epoll;
worker_connections 1024;
}
http {
include conf/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream django {
#server 127.0.0.1:13010; # nginx使用tcp方式与uwsgi交互
server unix:///home/test/django/MySite/MySite.sock; # nginx使用unix本地socket方式与uwsgi交互
}
server {
listen 13000;
server_name uwsgi_django;
client_max_body_size 75M;
location / {
uwsgi_pass django;
uwsgi_pass_header http;
uwsgi_read_timeout 300;
include conf/uwsgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- 启动uwsgi 和 nginx
# pwd
/home/test/django/MySite
# uwsgi --socket ./MySite.sock --module MySite.wsgi
# cd ~/local/nginx
# pwd
/home/test/local/nginx
# sbin/nginx -c nginx_uwsgi.conf
在浏览器中输入:http://100.84.73.45:13000
到此 nginx uwsgi django三个完成了结合。
过程中遇到的问题
uwsgi的交互方式
nginx与uwsgi有三种交互方式:http、tcp、unix本地sock http方式主要是利用nginx的反向代理功能。 TCP方式是ngix通过tcp方式和uwsgi交互。 unix本地sock是通过本地的sock文件进行交互。
- 如果使用本地sokc方式,uwsgi的启动应该是
# uwsgi --socket ./MySite.sock --module MySite.wsgi
并且nginx的upsteam配置sock文件地址
- 如果是TCP方式,uwsig的启动应该是
# uwsgi --socket :13010 --module MySite.wsgi
并且nginx的upsteam配置ip和端口
- 采用反向代理方式,uwsgi的启动应该是
# uwsgi --http:13010 --module MySite.wsgi
nginx的完整配置如下:
worker_processes 2;
events {
use epoll;
worker_connections 1024;
}
http {
include conf/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream django {
server 127.0.0.1:13010;
}
server {
listen 13000;
server_name uwsgi_django;
client_max_body_size 75M;
location / {
proxy_pass http://django; # 注意这里使用的是proxy_pass协议是http
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}