在云服务部署个人的Django项目

一、Ubuntu系统切换默认python3.5

ubuntu14.04系统会自带python2.7,请不要卸载它。不同版本的Python可以共存在一个系统上。

卸载之后,桌面系统会被影响。

(1)sudo add-apt-repository ppa:fkrull/deadsnakes

(2)sudo apt-get update

(3)sudo apt-get install python3.5

(4)sudo cp /usr/bin/python /usr/bin/python_bak,先备份
(5)sudo rm /usr/bin/python,删除
(6)sudo ln -s /usr/bin/python3.5 /usr/bin/python,默认设置成python3.5,重建软链接这样在终端中输入python默认就是 3.5版本了

二、部署Django

(1)升级pip3,命令:apt install python3-pip

(2)安装Django,命令:pip3 install django==1.10.3,然后继续安装django项目依赖相关的库

  把包传到云服务上,尝试启动Django,命令:python manage.py 0.0.0.0:80(运行之前需要把django配置文件ALLOW_HOST改成公网IP)

(3)浏览器访问公网地址,如果有反应,则成功

三、安装uWSGI

(1)直接用pip安装,命令:pip3 install uwsgi,或者到这里下载,https://pypi.python.org/pypi/uWSGI

(2)测试uwsgi,新建test.py文件,内容如下:

def application(env, start_response):

  start_response('200 OK', [('Content-Type', 'text/html')])

  return [b"Hello World!"]
test.py

(3)通过uwsgi命令运行test.py文件,命令:uwsgi --http :8001 --wsgi-file test.py,然后访问http://localhost:8001可见Hello World!

(4)uWSGI运行Django,命令:uwsgi --http :80 --chdir /home/ubuntu/buybooks/ --wsgi-file buybooks/wsgi.py --master --processes 4 --stats localhost:9191

uWSGI成功部署完毕!

  ——提示:如果每次都要输入那么长的命令,会很麻烦,所以可以用配置文件的方式,uWSGI支持多种类型配置文件,如xml、ini等:

    1、在项目里的wsgi.py同级目录下,创建uwsgi.ini文件,配置uWSGI参数如下,

    2、在配置文件的目录下,通过“uwsgi”命令读取uwsgi.ini文件来启动WEB项目,命令:uwsgi --ini uwsgi.ini

 1 [uwsgi]
 2 
 3 # 请求方式与端口号,若配置与Nginx连接用soket,只用wsgi那就用http
 4 socket = :8000
 5 #http = :8000
 6 
 7 #Django项目路径
 8 chdir = /home/ubuntu/buybooks
 9 
10 #wsgi文件
11 module = buybooks.wsgi
12 
13 #允许主进程存在
14 master = true
15 
16 #开启进程数
17 processes = 3
18 
19 # 当服务器退出时自动清理环境
20 vacuum = true
21 
22 # 运行时,讲日志输出道指定的日志文件
23 daemonize = /home/ubuntu/buybook.log

四、部署Nginx+uWSGI组合

访问页面时,请求会先到Nginx,再由Nginx赚到uWSGI WEB容器来处理。uWSGI WEB容器比Django的WEB容器性能要稍好。

(1)安装Nginx,命令:sudu apt-get install nginx

(2)启动Nginx,命令:/etc/init.d/nginx start,默认80端口,浏览器访问localhost:80

  重新启动Nginx,命令:/etc/init.d/nginx restart

  停止Nginx,命令:/etc/init.d/nginx stop

(3)配置Nginx,打开/etc/nginx/sites-available/default配置文件,可修改对外端口号listen,也就是指定的是Nginx代理uWSGI对外的端口号

 1 ......
 2 
 3 server {
 4         listen 8089;
 5       listen [::]:8089;
 6 server_name 127.0.0.1  192.168.127.134(局域网IP,方便局域网内访问);
 7 
 8 location/ {include /etc/nginx/uwsgi_params;
 9           uwsgi_pass 127.0.0.1:8000;
10     
11     }
12 }
13 .....

Nginx+ uWSGI配置成功!