Django项目uwsgi+Nginx保姆级部署教程实现


Posted in Python onApril 19, 2020

写在最前:

非常抱歉的是,因为突如其来的疫情,我的hadoop系列断更了,很难受,因为我的分布式环境在学校,我的笔记本配置带不起来,代码跑不起来我是不敢写博客的,然后寒假在家写代码也没啥意思,看了非常多的书,把计网和操作系统重新学了一遍。因为实习的需要,未来我更多的技术可能在Python这块,但是java相关的内容我也会努力保持更新,同时也会出更多的入门教程给大家谢谢大家。

背景:

最近在学习django的过程中,用django做了一个小demo,所以试试看能不能部署到服务器上,自己顺便也熟悉一下Django整个部署的流程,因为之前学习flask的时候,就使用的uwsgi来作为python web服务器来部署的,所以这次也就选择了nginx+uwsgi这样的一个组合。

当时买完云服务器之后,就顺手把宝塔装上了,之前用宝塔部署php项目是真的很容易,所以就偷懒试试宝塔能不能部署django,苦试一个小时,无果,遂放弃,还是老老实实用原生的uwsgi配合Nginx来部署吧。然后下面的流程我会争取把有可能是坑的地方重点标注出来,将来如果发博客或者自己需要再次部署的时候,也可以少写很多配置文件。

环境:

系统版本 :centos7.5

python 版本:3.6.5

nginx 版本:1.16.1

uwsgi 版本:2.0.18

如环境不同,还请查阅其他资料另行配置。

环境准备:

在部署之前,请确保你的linux服务器正确安装了对应的python版本,如果需要python3版本,请自行查阅资料进行升级安装。

首先为了更好的独立部署,避免对其他的项目产生干扰,我们需要安装python 虚拟环境:

sudo pip install virtualenv
sudo pip install virtualenvwrapper

virtualenvwrapper 是virtualenv的扩展管理包,可以将所有的虚拟环境整合在一个目录下。

配置虚拟环境:

mkdir ~/.virtualenvs

打开.bashrc:

sudo vim ~/.bashrc

在.bashrc的末尾增加下面内容:

export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/python3/bin/virtualenvwrapper.sh

注意!:这里的/usr/local/bin/virtualenvwrapper.sh只是针对于我当前系统环境的一个位置,并不是所有的服务器都是在这个位置,如果自己不知道virtualenvwrapper.sh在哪里,可以搜索文件来找到它在系统中的位置,并且修改.bashrc。

启用配置文件:

source ~/.bashrc

这个时候如果不报错,就代表我们的虚拟环境配置成功了,一般常见的报错就是virtualenvwrapper.sh文件找不对。

创建虚拟环境:

找一个你自己觉得能记住的地方,新建一个env 文件夹:

cd /www
mkdir env
cd env #进入env目录

新建一个虚拟环境:

mkvirtualenv -p /usr/bin/python3 orange_env  # my_env是虚拟环境的名称

注意:如果你的软连接/usr/bin/python3没有的话,会报错误,找不到/usr/bin/python3,这个时候就需要你自己新建一个软连接:

如果报错:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 路径要改成自己的python安装路径

之后便可以进入我们的虚拟环境了:

source /www/env/orange_env/bin/activate

进去虚拟环境之后,前面会出现一个括号,里面是你虚拟环境的名字:

(orange_env) [root@iz2ze1cvux96riiwfh05qqz ~]#

在虚拟环境中安装uwsgi:

pip install uwsgi

退出虚拟环境:

deactivate

再次在主环境中安装uwsgi:

pip install uwsgi

注意:如果你有其他的依赖,比如django,msqlclient这些,记得一定要在虚拟环境里pip安装一下。

部署过程:

找一个你认为比较合适的地方,新建一个文件夹,将你的Django项目上传进去:

以我为例:

cd /www
mkdir orange

上传解压操作略,记得是上传项目根目录,就是直接带manage.py的那个目录。

新建一个uswgi配置文件,uswgi支持多种配置文件类型,比如yaml,xml,json,ini,这里我选的是xml。

vim mysite.xml #记得mysite.xml 要和你项目的manage.py 在一个目录下。

mysite.xml内容如下:

<uwsgi>  
  <socket>127.0.0.1:8080</socket><!-- 内部端口,自定义 --> 
  <chdir>/www/orange/</chdir><!-- 项目路径 -->      
  <module>orangeproject.wsgi</module> <!-- 一般模块名 项目名+wsgi --> 
  <processes>4</processes> <!-- 进程数 -->   
  <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

安装Nginx:

Nginx 我之前有写过一系列的基础入门教程,如果对安装启动重启这些不是很熟练的可以看下面这篇文章:

链接: 写给后端的Nginx初级入门教程:实战篇

查看nginx 配置文件路径:

nginx -t

记得备份nginx之前的配置文件,然后把之前的配置全部删了,直接加入下面内容:

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include    mime.types;
  default_type application/octet-stream;
  sendfile    on;
  server {
    listen    8000;
    server_name 你的域名;
    charset utf-8;
    location / {
      include uwsgi_params;
      uwsgi_pass 127.0.0.1:8080;
      uwsgi_param UWSGI_SCRIPT orangeproject.wsgi;
      uwsgi_param UWSGI_CHDIR /www/orange/;
      
    }
    location /static/ {
    alias /www/orange/transfer/static/; 
    }
  }
}

注意模块名要保持一致,而且你nginx监听的端口不能和你django启动的端口一样,要不uswgi会因为nginx占用端口启动失败。alias /www/orange/transfer/static/; 这个是你的静态文件地址,css,img这些。

检查nginx是否配置成功:

nginx -t

重启nginx:

nginx -s reload

之后,再次进入我们的虚拟环境orange_env中,启动我们的uwsgi服务器:

cd /www/orange
uwsgi -x mysite.xml

然后打开我们的本地浏览器,输入:域名:8000,备案过的可以改nginx配置文件成80。

大功告成:

Django项目uwsgi+Nginx保姆级部署教程实现

到此这篇关于Django项目uwsgi+Nginx保姆级部署教程实现的文章就介绍到这了,更多相关Django uwsgi+Nginx 部署内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
python如何爬取网页中的文字
Jul 28 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
浅谈Python类的单继承相关知识
May 12 Python
Python OpenCV实现图形检测示例详解
Apr 08 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 #Python
Python virtualenv虚拟环境实现过程解析
Apr 18 #Python
python实现贪吃蛇双人大战
Apr 18 #Python
Python的in,is和id函数代码实例
Apr 18 #Python
Python json读写方式和字典相互转化
Apr 18 #Python
Python figure参数及subplot子图绘制代码
Apr 18 #Python
Python数组拼接np.concatenate实现过程
Apr 18 #Python
You might like
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
JS判断数组那点事
2017/10/10 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
python如何删除文件、目录
2020/06/23 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
高中生学习生活的自我评价
2013/10/09 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
作文批改评语大全
2014/04/23 职场文书
解除财产保全担保书
2014/05/20 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
校运会加油稿大全
2015/07/22 职场文书
Python实现简繁体转换
2021/06/07 Python
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
电频谱管理的原则是什么
2022/02/18 无线电
Python进程池与进程锁之语法学习
2022/04/11 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS