CentOS7 + Django2.1 + uwsgi + nginx配置

假设已经可以运行Django项目,可以runserver。也已经安装了uwsgi和nginx

现在需要进行配置。

刚开始进行uwsgi测试就不行,提示bash:‘uwsgi’ Command not found

执行如下命令增加软链,可以解决uwsgi找不到的问题,不过使用的是uwsgi3命令

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

将你的django项目放到你想放的路径下,例如/root/,假设我们的Django项目名为"myproject",里面有一个应用叫"myapp"
在你的django项目下新建 myproject.xml,内容如下:


    127.0.0.1:8996
        /home/www/myproject
            myproject.wsgi
                4  
    uwsgi.log

wq保存

此上就为uwsgi的配置,不用做.ini,就只用写个.xml


配置nginx:

nginx一般默认安装好的路径为/usr/local/nginx
在/usr/local/nginx/conf/中打开nginx.conf,在一大段注释的server后面加入以下内容:

server {
    listen 8997; #暴露给外部访问的端口
    server_name localhost;
        charset utf-8;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8996; #外部访问8997就转发到内部8996
    }
    location /static/ {
        alias /root/myproject/myapp/static/; #项目静态路径设置(根目录)
    }
}

wq保存后进入/usr/local/nginx/sbin/目录
执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:
./nginx
终端没有任何提示就证明nginx启动成功

这里要监听什么端口就写啥,比如我的话是106.13.9.45:8997(这里换成自己的外网ip),然后浏览器打开会出现nginx work就是成功了,当然不想写端口,想直接通过ip106.13.9.45访问的话 就listen 80


开启Django项目:

进入django项目路径,执行以下命令:

uwsgi3 -x myproject.xml


以上步骤都没有出错的话,打开你的浏览器,输入以下链接,记得关闭系统防火墙或者开放8996端口
106.13.9.45:8997(请将该ip替换成你的服务器ip)
 


配置完发现自己静态文件访问不了,查看nginx的log发现:

2019/03/15 10:58:59 [error] 106026#0: *2 open() "/root/Course_website/static/plugin/highlight/highlight.pack.js" f
ailed (13: Permission denied), client: 120.196.99.35, server: localhost, request: "GET /static/plugin/highlight/highlight.pack.js HTTP/1.1", host: "106.13.9.45:8996", referrer: "http://106.13.9.45:8996/"

Permission denied 权限问题

解决方法:在/usr/local/nginx/conf/中打开nginx.conf

首行有个#user XXXXX

去掉注释,修改成 user root,重启nginx

关于nginx启动的命令参考:https://www.cnblogs.com/xiaojf/p/7891345.html


关于重新上传项目(views、urls、html)后依旧无变化,先尝试清理缓存,然后重启uwsgi,重启nginx。

uwsgi基本操作

启动

uwsgi -x xxxx.xml #xml配置
uwsgi -i xxxx.ini #ini配置

重启

uwsgi对于不同配置不一样,我自己是xml配置,没有直接重启的命令,但是关闭后再打开的方法都是通用的。

利用

ps -ef | grep uwsgi

查询出uwsgi运行情况,找到自己要重启的项目,然后将它的进程全都kill了

kill -INT pid

如果只有一个项目或者想重启所有uwsgi可以使用:

killall -INT uwsgi

Tips:因为之前添加软链,有时会输入uwsgi3有时会输入uwsgi,但是效果是一样的,如果查询出来是通过uwsgi3启动的就killall也是uwsgi3。

nginx重启可以类似,kill了nginx的进程,然后到sbin下 ./nginx


用redis数据库一定要记得记得设置redis密码,不然隔三差五接受脚本注入攻击,烦死了。

一般在redis.conf里设置requirepassword 密码

Django里配置redis缓存时

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://:你的密码@服务器地址:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
    }
}

 

你可能感兴趣的:(python,Django)