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下如何让web元素的生成更简单的分析
Jul 17 Python
Python原始字符串(raw strings)用法实例
Oct 13 Python
python通过索引遍历列表的方法
May 04 Python
Python实现抢购IPhone手机
Feb 07 Python
python装饰器深入学习
Apr 06 Python
Python实现修改IE注册表功能示例
May 10 Python
python爬虫实例详解
Jun 19 Python
浅谈python中get pass用法
Mar 19 Python
python os模块常用的29种方法使用详解
Jun 02 Python
PyQt5的相对布局管理的实现
Aug 07 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
Django框架之路由用法
Jun 10 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
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
跟老齐学Python之print详解
2014/09/28 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
详解Django框架中的视图级缓存
2015/07/23 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
我的老师教学反思
2014/05/01 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
社区综治工作汇报
2014/10/27 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
订货会邀请函
2015/01/31 职场文书
护士个人总结范文
2015/02/13 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python