django+uwsgi+nginx搭建笔记玄学篇(个人博客搭建之旅Day2)

*适用于Ubuntu16.04系统
*瞄了一眼发现买的腾讯云域名过期了,现在又断货,短时间内只好把一切部署在localhost
*主要还是给自己留档,照此方法安装对系统造成任何毁灭性打击概不负责
*或许以后会另开两篇写写科学篇,写一下uwsgi和nginx,这边只记录安装和配置过程
*小白一个,如果什么地方写错了请大佬们留言指出

工具安装

  • 安装uwsgi:普通的pip安装,这里安装的是python2的版本,安装完毕后可以自行检测是否安装成功:
    新建test.py,内容如下:
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

然后在终端运行:

uwsgi --http :8001 --wsgi-file test.py

在浏览器地址栏输入localhost:8001(或127.0.0.1:8001),若浏览器页面显示Hello World则安装成功。否则需要检查uwsgi是否安装了python3的版本,是最容易跳的坑之一。

  • 安装nginx:这一步稍微复杂,需要先安装PCRE,且前提是有gcc和g++等环境,没记错的话都是系统自带。这一步具体参见菜鸟教程的步骤,按照流程来应该也没什么坑

uwsgi配置

神坑的一步来了,我曾经是老老实实跟着菜鸟教程走的,也就是创建配置文件ini文件,写成下面这样:

[uwsgi]
socket = 127.0.0.1:9090
master = true         //主进程
vhost = true          //多站模式
no-site = true        //多站模式时不设置入口模块和文件
workers = 2           //子进程数
reload-mercy = 10     
vacuum = true         //退出、重启时清理文件
max-requests = 1000   
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid    //pid文件,用于下面的脚本启动、停止该进程
daemonize = /website/uwsgi9090.log

然后就排了一晚上的坑……
细想原因或许有二,一是这个配置文件是用在Centos下的,虽然我也不知道二者的区别在哪……二是教程演示的是如何在刚安装django的情况下搭建环境,最后浏览器访问的是django的欢迎页面,而我的情况是框架里已经有自己的内容,最初的页面已经被我改掉,虽然也不知道区别在哪……

坑具体在这样几个地方:

  • ini文件的位置:ini文件其实是可以随便放的,不一定要放在/etc下,且放在etc下在启动uwsgi的时候还要转换成root用户,每次都会在log中看到warning,更方便的做法可以把它创建在你的project目录下
  • module的添加:uwsgi需要与你的project建立起联系。新建的django项目默认有一个wsgi.py文件,需要在配置文件中指定其位置,我的做法是把项目自带的wsgi.py放在了项目根目录下(与ini文件同一目录下),然后在ini文件里添加下面一行:
module = wsgi

然后神坑的一步来了,直接执行该python文件,终端会显示找不到/var/mail/django.core.wsgi,我至今没懂这个神来一笔的报错是为什么,还有/var/mail是从哪来的,试过重新添加python path还是不行,多方搜索后找到了解决办法,在wsgi.py中加入下面一行:

#!/usr/bin/env python

在这之后log继续报错找不到django.core.wsgi,通过在wsgi.py中添加python环境变量解决:

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')
  • log和pid文件位置:跟ini文件一样,也是可以随便放的,后来被我丢在了项目根目录下
  • buffer-size的添加:启动这份配置后发现log报错invalid request block size: 21573 (max 4096)...skip,经过多方搜索,添加了下面一行解决了这一问题:
buffer-size = 65536

nginx配置

这边倒是颇为平顺,修改/usr/local/nginx-1.5.6/conf/nginx.conf文件,更改http下server段的内容为:

    server {
        listen 8080;
        server_name localhost;

        location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:9090;
                uwsgi_read_timeout 300;
        }
    }

我的做法是把server段下除上面之外的其他语句都注释掉了,事实上如果你的project有图片之类的内容很可能要添加其他东西。注意这里的uwsgi_pass地址与uwsgi.ini中的地址要保持一致

运行

配置完毕后在你的project根目录下打开终端,输入

uwsgi --ini uwsgi.ini

其中uwsgi.ini用你的ini文件名替换,再启动nginx:

sudo /usr/local/nginx-1.5.6/sbin/nginx

最后在浏览器地址栏输入localhost:8080,就能够看到你的project中的内容了。这个端口号即是nginx server的端口号。

常用命令

uwsgi --stop uwsgi.ini:结束一个uwsgi任务,uwsgi.ini为配置文件名
nginx -s stop:结束nginx任务

猜你喜欢

转载自blog.csdn.net/m0_37924639/article/details/82948697
今日推荐