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基础教程之lambda表达式使用方法
Feb 12 Python
跟老齐学Python之关于循环的小伎俩
Oct 02 Python
Python使用turtule画五角星的方法
Jul 09 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
python序列类型种类详解
Feb 26 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
Python日志处理模块logging用法解析
May 19 Python
python对一个数向上取整的实例方法
Jun 18 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python 多线程爬取壁纸网站的示例
Feb 20 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 cookie 登录验证示例代码
2009/03/16 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
JScript分割字符串示例代码
2013/09/04 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
基于Python实现天天酷跑功能
2021/01/06 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
职业生涯规划设计步骤
2014/01/12 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
房贷工资证明范本
2015/06/12 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
Golang中channel的原理解读(推荐)
2021/10/16 Golang
Python jiaba库的使用详解
2021/11/23 Python