django+nginx+uwsgi部署完全指导

这可能是你读的最全的django+nginx+uwsgi教程了!本文主要解决的问题是部署完之后只能访问nginx,而不能访问uwsgi的项目。

前几天在部署一个django项目,弄了两天都没有成功,后来请教了师兄才解决,这个问题在网上之前都没有搜到过,记录一下以免后人踩坑。

首先了解一下用nginx和uwsgi部署的原理,感觉这篇文章讲得比较清楚了,大家可以看一下http://blog.csdn.net/c465869935/article/details/53242126。另外uwsgi官方文档也有说明,可以参考http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?,但是我根据这个官方文档没有走通。

下面说一下自己的部署。本次部署的服务器环境:ubuntu16.04

1.准备工作。

①安装uwsgi。推荐使用pip安装,命令行输入:

pip install uwsgi

②安装nginx。直接用sudo apt-get 安装,如果安装不了,应该是软件源的位置,可以修改一下,清华的,豆瓣的,阿里云的都可以,命令行输入:

sudo apt-get install nginx
③django项目要能够跑起来,在项目目录下运行
python manage.py runserver

要能够跑得通,如果不行肯定是有部分包没有安装好。

2.在django项目下的setting.py文件中进行修改,便于下一步部署:

①将debug改为False。如下:

Debug = False

②在allow_host中添加服务器的ip以及localhost,如:

Allow_host=['192.160.23.1','localhost',]

③移植静态文件配置,这个主要是将原项目的静态文件移植出来以便访问。如下,注意括号中第二个参数为移植后的目录,不要和之前的静态文件目录相同就好。

STATIC_ROOT = os.path.join(BASE_DIR, "/var/www")

④进行静态文件移植,完成步骤 ③之后,在django项目目录下运行

python manage.py collectstatic

3.配置uwsgi。对于uwsgi的配置有很多种方式,私以为 xml配置方式最简单,这儿就只说最简单的。在项目目录下新建socket.xml文件(与manage.py同级)内容如下:


    :8000
    /home/user/project/hello
    hello.wsgi
    4  
    uwsgi.log

其中,需要修改的就是两行,第一行的端口可以自己设,尽量设置8000以后的,避免冲突,但是这个端口号一定要记住,因为后面配置nginx时会用到。

4.配置nginx。在/etc/nginx/目录下,找到nginx.conf文件,用vim打开它,然后在http{}内部加入下面内容。

 server{
            listen 80;
            server_name localhost;
            charset utf-8;
            #index index.nginx-debian.html ;
            #root /var/www/html;
            access_log off;
            location /static {
                alias /var/www/; #要与之前django的setting.py中添加的static静态文件转移目录一致
            }
            location / {
                uwsgi_pass  127.0.0.1:8000; #端口与原来的uwsgi中设置的端口一致
                include     /etc/nginx/uwsgi_params;
            }
        }

注意!注意!注意!原来nginx.conf配置有两行必须注释掉。(这就是我一直搞不好的原因。。。)

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

5.启动项目,完成部署。进入到项目目录下,依次执行以下三个命令:

killall -9 uwsgi
uwsgi -x socket.xml
service nginx reload

第一个是先杀死现有的uwsgi进程,第二句是用xml进行uwsgi配置,第三步是重启nginx。中间如果有端口占用就杀死被占用的进程;如果有权限问题,加上sudo就好。

好了,现在就可以在外面访问你的django项目了!!!

PS,加一句今天的感受,只要和前端js有关的错误,(例如点击一个按钮没反应)一般最好的解决方式就是查看chrome检查中的console窗口,看其报错情况, 靠自己检查代码很困难的。






你可能感兴趣的:(django+nginx+uwsgi部署完全指导)