Django+nginx+uwsgi部署

详细步骤

    • 1,nginx的安装和配置
      • nginx启动/停止命令
      • nginx配置
    • 2,uWSGI配置修改
    • 3,常见问题排查
      • 样例
    • 4,nginx静态文件配置
      • 静态文件配置步骤
      • Nginx配置中添加新配置
    • 5,其他配置
      • 1,404/500界面
      • 2,邮箱告警

1,nginx的安装和配置

sudo apt install nginx
安装完毕后,Ubuntu终端中,输入nginx -v 显示如下:

nginx version: nginx/1.14.0 (Ubuntu)

安装完成后nginx就开启了,默认会占用80端口,可以输入命令访问一下:curl 127.0.0.1,会出现如下的欢迎界面的前端代码
Django+nginx+uwsgi部署_第1张图片

nginx启动/停止命令

  • 启动 sudo /etc/init.d/nginx start
  • 停止 sudo /etc/init.d/nginx stop
  • 重启 sudo /etc/init.d/nginx restart

注意:nginx配置只要修改,就需要进行重启,否则配置不生效

nginx配置

1,修改nginx的配置文件 /etc/nginx/sites-enabled/default
使用sudo vim修改该文件,命令:

sudo vim /etc/nginx/sites-enabled/default

by the way,我这里因为云服务器中的80端口没有开,所以在自己电脑上无法访问,所以只能把nginx的默认端口更换成8000,如下:将两行listen后的端口改成了8000

Django+nginx+uwsgi部署_第2张图片

2,找到location,把其中的 try_files $uri $uri/ =404; 给注释掉
3,手动添加以下两行(记得保持缩进都对齐):
格式为:配置名+空格+对应值+分号

uwsgi_pass 127.0.0.1:8001;
include /etc/nginx/uwsgi_params;

附:uwsgi_pass后面的ip要和下面将要提到的uwsgi中的socket保持一致,否则无法重定向到uwsgi协议(注意这里的ip端口不要和listen监听的端口一样,否则会有各种端口占用问题,我这里也是为了避免一样才用的8001端口)

添加完后应是这样的:
Django+nginx+uwsgi部署_第3张图片
4,保存退出;
重启nginx,命令如下:

sudo /etc/init.d/nginx restart

重启后如果结果显示的是【ok】的话,说明没有问题,可以用命令检查配置文件的语法是否有问题:sudo nginx -t 。如果是以下结果说明没有问题
在这里插入图片描述
如果重启nginx报以下错误:

nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)

可能是端口被占用了,输入命令:netstat -tnlp,查看一下端口使用情况,kill对应的端口进程即可。

接下来就是修改uwsgi的启动模式:

2,uWSGI配置修改

(建议提前部署好uWSGI,没有部署的小伙伴请移步:Django部署uwsgi)
nginx负责接收请求,并把请求转发给后面的uWSGI
此模式下,uWSGI需要以socket模式启动(
注释掉http,增加socket,注释掉static-map。注意此socket需要与上面nginx配置文件中uwsgi_pass保持一致)
样例:
Django+nginx+uwsgi部署_第4张图片

修改完后,也需要重启一下uwsgi

# 进入到同名项目文件夹下
sudo uwsgi --stop uwsgi.pid
sudo uwsgi --ini uwsgi.ini

如果遇到uwsgi正在运行的线程ID和uwsgi.pid中的线程ID不一致的话,可以直接kill全部uwsgi ini进程 :killall -s INT uwsgi,然后再用 uwsgi --ini uwsgi.ini 重新启动新的uwsgi。

重启后,查看一下uwsgi进程:ps -ef | grep uwsgi,结果像下面一样有两个进程就没错了。http模式的话是三个,而socket模式是两个
在这里插入图片描述

此时,nginx监听的是8000,如果要测试效果的话,在终端输入curl 127.0.0.1:8000,会得到一些前端代码,而在外部Windows中的浏览器上输入此服务器的IP地址+8000端口,就会获得具体页面了 以上完成后,配置基本上就完成了

3,常见问题排查

  • 排除问题方法:看日志,看日志,看日志!
  • nginx日志位置:
    异常信息:
    /var/log/nginx/error.log
    正常访问信息:
    /var/log/nginx/access.log
    uwsgi日志位置:
    项目同名目录下:uwsgi.log

样例

1,访问127.0.0.1:8000地址,502响应

502响应代表nginx反向代理配置成功,但是对应的uWSGI未启动

2,访问127.0.0.1:8000/url 404响应

  • 路由的确不在django配置中
  • nginx配置错误,未禁止掉try_files

以上完成后还需要配置nginx静态文件,不然访问的网址无法加载静态文件

4,nginx静态文件配置

静态文件配置步骤

1,创建新路径:主要存放Django所有静态文件 如:/home/wanghuimeng/python_SFTP/django_object/zy_ds_files/zyds_static/
2,在Django settings.py中添加配置

STATIC_ROOT = '/home/wanghuimeng/python_SFTP/django_object/zy_ds_files/zyds_static/static'
# 注意 此配置路径为 存放所有正式环境中需要的静态文件

3,进入项目,执行 python manage.py collectstatic 执行该命令后,Django将项目的所有静态文件复制到 STATIC_ROOT 中,包括Django内建的静态文件
执行完后会有类似这样的结果:
在这里插入图片描述
静态文件copy完成后,我们需要告诉nginx什么样的请求是静态资源请求以及该请求来了之后nginx该怎么处理。

Nginx配置中添加新配置

"""
file : /etc/nginx/sites-enabled/default
新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可
"""
server {
	...
	location /static {
		# root 第一步创建文件夹的绝对路径,如:
		root /home/wanghuimeng/python_SFTP/django_object/zy_ds_files/zyds_static
	}
}

就像我这样
Django+nginx+uwsgi部署_第5张图片

然后保存退出,重启nginx,然后访问服务器网址,就可以看到加载静态文件后的网页了。
记住,只要有静态文件的添加,就要反复的执行python manage.py collectstatic来同步静态文件

5,其他配置

1,404/500界面

在访问不存在的页面时,手动返回一个好看的报错页面:
首先,settings.py中的DEBUG必须为False,然后在模板文件夹内添加 404.html 模板,
当视图触发Http404异常时将会被显示,也就是说只要报404,它就会显示这个页面

2,邮箱告警

此处省略一百字

你可能感兴趣的:(ubuntu,python,服务器)