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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
python help函数实例用法
Dec 06 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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程序之die调试法 快速解决错误
2009/09/17 PHP
php读取xml实例代码
2010/01/28 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
React中的refs的使用教程
2018/02/13 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
前端性能优化建议
2020/09/17 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
pandas DataFrame运算的实现
2020/06/14 Python
python des,aes,rsa加解密的实现
2021/01/16 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
opencv实现图像几何变换
2021/03/24 Python
八年级历史教学反思
2014/01/10 职场文书
请假条格式范文
2014/04/10 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
高校教师个人总结
2015/02/10 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
MySQL空间数据存储及函数
2021/09/25 MySQL