nginx基于uwsgi部署Django

之前uwsgi配置发布web服务器已经讲了如何配置python环境,今天偶尔看到一个博客,照着做了下,感觉博客写的有点乱,这里来整理一下。

环境准备

因为也在熟练docker中,索性我们就以一个容器为例来进行今天的部署。

宿主机服务器:centos7ip:172.17.0.1

docker容器服务器:centos7ip:172.17.0.1(我们运行容器的时候使用了–network=host,所以docker服务器和宿主服务器用的网卡一样了)

关于如何交互运行docker我这里不细说了,详情请看:Docker基础使用

安装扩展包

我们肯定使用uwsgi,所以先安装它及其所需要的扩展

1
2
3
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
pip install uwsgi

安装django

1
pip install django==1.11

创建项目及应用

1
2
3
cd /www
django-admin startproject visasto
django-admin startapp web

修改allowd_host

1
ALLOWED_HOSTS = ['*']

启动测试

启动方式有3种。

使用nginx基于wsgi部署

使用django自带wsgi启动

1
python manage.py runserver 0.0.0.0:8000

我们在172.17.0.1宿主机上使用浏览器访问:http://172.17.0.1:8000(使用http://127.0.0.1:8000访问是一样的),正常运行django

配置宿主机nginx

前面我们docker直接用了宿主机的ip,所以直接用宿主机的ip,就可以访问到docker容器中的django程序。

宿主机nginx做一下配置,做之前记得将域名解析到该宿主机上,以下配置的作用就是有人访问了www.diandian100.cn,我们就直接将其反向代理到我们宿主机的8000端口,因为我们docker容器中的django程序用的就是宿主机的ip,等于是将客户发来的请求直接转发到了我们的django程序上。

1
2
3
4
5
6
7
8
server
{
listen 80;
server_name www.diandian100.cn;
location / {
proxy_pass http://127.0.0.1:8000;
}
}

重启nginx

1
2
nginx -t
nginx -s reload

测试访问

此时访问www.diandian100.cn可以看到能够正常访问我们的django程序了,如果你迁移了django数据库,并且创建了超级用户,www.diandian100.cn/admin/也能正常登录,正常对后台数据进行增删改查了

使用nginx基于uwsgi部署

使用uwsgi启动

1
uwsgi --http :8000 --module visasto.wsgi

我们在172.17.0.1主机上使用浏览器访问:http://172.17.0.1:8000,正常运行django

使用uwsgi配置文件启动

这次我们要结合nginx了,将nginx默认的80端口给转发到我们的uwsgi

创建uwsgi配置文件
1
2
cd /www/visasto
vim uwsgi_visasto.ini
修改配置文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[uwsgi]
socket = 0.0.0.0:8000
#the local unix socket file than commnuincate to Nginx
#socket = /www/visasto/visasto.socket
# the base directory (full path)
chdir = /www/visasto
# Django's wsgi file
wsgi-file =visasto/wsgi.py
# maximum number of worker processes
processes = 4
#thread numbers startched in each worker process
threads = 2
# clear environment on exit
vacuum = true
daemonize = /www/visasto/uwsgi_visasto.log
py-autoreload=1

ps: nginx 连接uwsgi一共有三种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
方式一: 
uwsgi.ini 里面指定为http = 127.0.0.1:8000
nginx的配置文件里面需要写
proxy_pass 127.0.0.1:8000;
方式二:
uwsgi.ini里面指定为socket = 127.0.0.1:8000
nginx的配置文件需要写
include /etc/nginx/uwsgi.conf;
uwsgi_pass 127.0.0.0:8000;
方式三:
uwsgi.ini里面指定为socket = /www/visasto/visasto.socket
nginx的配置文件需要写
include /etc/nginx/uwsgi.conf;
uwsgi_pass unix:/www/visasto/visasto.socket;
修改nginx

/etc/nginx/uwsgi_params文件已经默认生成好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/nginx/nginx.conf
# 内容修改为
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
}

启动uwsgi
1
uwsgi --ini uwsgi_visasto.ini
启动nginx
1
systemctl start nginx

我们在172.17.0.1主机上使用浏览器访问:http://172.17.0.1,正常运行django