这可能是你读的最全的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
其中,需要修改的就是
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窗口,看其报错情况, 靠自己检查代码很困难的。