Diango + uwsgi + nginx项目部署的全过程(可外网访问)


Posted in Python onApril 22, 2018

前言

自己通过nginx uwsgi 部署django项目,查询了很多资料,遇到了很多问题,最终完成了部署,趁着心情愉悦,写个随笔,为曾像我一样苦寻解决方案的小伙伴们提供些思路。

方法如下

安装Nginx:

#安装nginx
sudo apt-get install nginx

#一些有用的命令
#启动nginx
sudo /etc/init.d/nginx start 
#重启nginx
 8sudo /etc/init.d/nginx restart
#停止nginx
sudo /etc/init.d/nginx stop

#很暴力的方法,我喜欢
sudo killall nginx

安装uwsgi:

pip install uwsgi
 
 #注意uwsgi需要在虚拟环境中运行

配置uwsgi:

#在项目目录中建立个conf文件夹,将nginx和uwsgi文件都放进去,不是必须#但是个好习惯

#my_uwsgi.ini
ite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir   = /to/your/project/#这个是项目的路径
# Django's wsgi file
module   = project.wsgi#这个project要换成自己的项目名,也就是uwsgi.py所在的文件夹名
# the virtualenv (full path)
home   = /home/ubuntu/.virtualenvs/虚拟环境名#这个就是虚拟环境的路径

# process-related settings
# master
master   = true
# maximum number of worker processes
processes  = 10
# the socket (use the full path to be safe
socket   = 127.0.0.1:8080#这个用来和Nginx对接,端口号可以改,本人项目将uwsgi作为本地服务,外网不能直接访问,用nginx作为代理,所以用本地的地址。
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum   = true
~

配置nginx

#以下内容在mysite_nginx.conf中,这个文件名也可以随意起
# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
 # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
 server 127.0.0.1:8080; #这个是用来跟uwsgi对接的,要和my_uwsgi.ini中写一致
}

# configuration of the server
server {
 # the port your site will be served on
 listen  8000;#这个端口是nginx用来监听uwsgi的,默认的是80,总之项目是通过下面的server_name:8000来访问的
 # the domain name it will serve for
 server_name xxx.xxx.xx.xx ; #这个ip就是服务器的ip
 charset  utf-8;

 # max upload size
 client_max_body_size 75M; # adjust to taste

 # Django media
 location /media {
  alias /your/project/media; #这个目录是项目的meda目录
 }
 location /static {
  alias /your/project/static; # 这个目录是项目的static目录
 }

 # Finally, send all non-media requests to the Django server.
 location / {
  uwsgi_pass django;#这个是对接uwsgi的
  include  uwsgi_params; # 这个参数按我这样写nginx就能找到的
 }
}

将nginx配置文件链接到启动配置目录:

#注意修改下面的路径及文件名,哈哈不要只复制粘贴啊
sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

修改django项目中的setting.py文件,添加

#要将STATICFILES_DIRS =[os.path.join(BASE_DIR, 'static')]注释掉,Debug在生产模式也要改成False
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

将静态文件打包,让nginx代理:

python manage.py collectstatic

启动nginx,uwsgi

sudo /etc/init.d/nginx restart
#进入conf文件夹,或者说配置的uwsgi.ini文件所在目录
#uwsgi.ini改成自己的名字
uwsgi -i uwsgi.ini

访问:

ip:port(端口为nginx.conf中配置的)

总结:

写到这也差不多了,项目可以跑起来了,nginx,uwsgi高级配置还在学习中,希望本文对你有所帮助,谢谢。

最后再提醒下,网上有很多配置文件的模板,将我写注释的地方对比修改下,别遗漏。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

参考文档:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

 http://uwsgi-docs.readthedocs.io/en/latest/Nginx.html

Python 相关文章推荐
Python+django实现文件下载
Jan 17 Python
python fabric实现远程部署
Jan 05 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
python多个模块py文件的数据共享实例
Jan 11 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
python装饰器使用实例详解
Dec 14 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 #Python
Python解决八皇后问题示例
Apr 22 #Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 #Python
对python中raw_input()和input()的用法详解
Apr 22 #Python
对Python3中的input函数详解
Apr 22 #Python
Python实现中一次读取多个值的方法
Apr 22 #Python
使用python编写udp协议的ping程序方法
Apr 22 #Python
You might like
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
Jquery异步请求数据实例代码
2011/12/28 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
硕士研究生自我鉴定
2013/11/08 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
经验交流材料格式
2014/12/30 职场文书
会计简历自我评价
2015/03/10 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
新闻稿标题
2015/07/18 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书