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中的index()方法使用教程
May 18 Python
Python内建数据结构详解
Feb 03 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python-接口开发入门解析
Aug 01 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python数组过滤实现方法
2015/07/27 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
python获取代码运行时间的实例代码
2018/06/11 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
python读取LMDB中图像的方法
2018/07/02 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
高三体育教学反思
2014/01/29 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
中班下学期幼儿评语
2014/12/30 职场文书