Django作为最受欢迎基于Python的Web框架之一,为用户提供了一个轻量级的测试Server,但这个Server最好不要用于生产环境。那么如果我们需要在生产环境上面部署Django项目,那么我们使用什么环境呢?最早Django推荐使用Apache+mod_wsgi,但现在已经Django的部署方法已对有很多,越来越好,也相对更复杂了,本文将介绍其中一种Django在生产环境的部署方案:Gunicorn+Nginx+Supervisor

实验环境:

  • 操作系统:CentOS 7

  • Python版本:3.4.8

  • Django版本:2.0.5

准备实验环境:

因为CentOS 7默认的Python版本为2.7.5,所以我们需要再安装一个3.4.8的版本。另外我们使用的Django版本为2.0.5,Django 2.x版本只支持Python 3.x的版本,所以我们第一步先安装3.x版本的Python

yum install python34 python34-pip

接下来再安装Django

#  此命令表示使用3.4版本的Python来安装Django,如果直接使用pip install django,默认是使用2.7.5的Python,这样会提示不支持,无法安装
python3.4 -m pip install django

安装Gunicorn

python3.4 -m pip install gunicorn

安装Nginx

yum install nginx

安装Supervisor

yum install supervisor

创建Django项目:

# 注意替换ProJectName为自己的项目名,AppName为自己的App名
django-admin startproject ProJectName
cd ProJectName
django-admin startapp AppName

使用Gunicorn测试启动Django项目:

# 必须进入到项目的目录再执行下面的命令
cd ProJectName
gunicorn ProJectName.wsgi

启动成功后输入大概如下

[2018-05-24 09:50:33 +0800] [22849] [INFO] Starting gunicorn 19.8.1
[2018-05-24 09:50:33 +0800] [22849] [INFO] Listening at: http://127.0.0.1:8000 (22849)
[2018-05-24 09:50:33 +0800] [22849] [INFO] Using worker: sync
[2018-05-24 09:50:33 +0800] [22852] [INFO] Booting worker with pid: 22852

从以上信息我们可以看出项目已经启动成功,gunicron版本为19.8.1,监听127.0.0.1:8000端口并且工作在22849号进程,启动的worker方式为sync,并启动了一个worker进程,进程号为22852。更多关于workder相关的资料自行查略更多的信息

由上面我们监听在127.0.0.1,我们客户端无法访问,所以我们需要指定监听端口启动,把上面的直接Ctrl+c结束,然后执行下面的命令启动

# 使用-b指定监听的地址和端口
gunicorn Gogenius.wsgi -b 0.0.0.0:8000

配置Supervisor:

Supervisor主要是用来管理进程的工具,默认安装好了以后有一个配置文件/etc/supervisord.conf,这是主配置文件。还有一个目录/etc/supervisord.d,这个目录一般用来存放我们管理的进程,每个进程一个配置文件,以.ini结尾

创建一个管理Gunicorn的配置文件

touch /etc/supervisord.d/gunicorn.ini

gunicorn.conf的内容为

[program:gunicorn]
directory= /usr/local/ProJectName
command = /usr/bin/gunicorn ProJectName.wsgi -b 127.0.0.1:8000
user = root
autostart= true
autorestart= true
redirect_stderr = true
stdout_logfile = /var/log/gunicorn.log

说明:

  • [program:gunicorn]:其中gunicorn为要管理的子进程名称,此名称可以自定义,但最好不要乱写,与子进程有点关系为好

  • directory:Django项目的根目

  • command:要执行的命令,这里为启动子进程的命令,子进程为gunicorn

  • user:指定启动子进程的用户

  • autostart :自动启动,也就是当父亲进程启动的时候,子进程也跟随启动。supervisor为父进程

  • autorestart:自动重启,也就是当子进程挂掉的时候,父进程将会尝试自动去重启了进程

  • redirect_stderr:当此选项为true的时候,错误日志也会写进stdout_logfile中

  • stdout_logfile:定义stdout_logfile路径

关于更多资料可以参考此链接

接下来就是启动Supervisor

systemctl start supervisord.service
systemctl enable supervisord.service

如果更改过子进程的配置文件,这时候我们只需要reload下我们的Supervisor服务即可,不需要重启整个服务,这样会影响其它的服务

supervisorctl reload

配置Nginx转发:

我们知道我们Django本身就可以作用一个轻量级的Web Server,Django里面为我们定义了我们html js img css等页面的存放位置,并且为自动的去找到需要的页面。但现在我们没有使用Django本身的Web Server,这时候就需要通过我们Nginx配置代理来让客户端请求访问到对应的页面,Nginx配置如下:根据自己需求

server {listen 5000;location / {# proxy_pass指定地址为访问gunicorn地址和端口proxy_pass http://127.0.0.1:8000;proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}location ~.*\.(html|css|js|jpg|json|png|map|\ttf*|\woff2*|\woff*|eot|otf|ttf|json|cur|woff|svg|woff2|m3u8|ts|mp3)$ {# root指定Django项目的根目录root /usr/local/Gogenius;proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}
}

启动Nginx

systemctl start nginx
systemctl enable nginx

至此,我们就可以通过Nginx的5000端口访问我们的Django项目了

转载于:https://blog.51cto.com/270142877/2119720

使用Gunicorn Ngnx Supervisor部署Django项目相关推荐

  1. Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

    转载 Nginx+uwsgi+celery+supervisor部署Django前后端分离项目 ljmict 0人评论 3887人阅读 2018-08-08 01:29:45 本实验实现了负载均衡.反 ...

  2. python前后端分离项目部署_nginx+uwsgi+supervisor部署django前后端分离项目

    以下内容为原创,转载请注明出处! 先前一直用的apache部署django项目,查看链接地址:https://www.520pf.cn/article/22.html .这次帮同事用nginx部署服务 ...

  3. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgiln ...

  4. django开发-在Docker中部署django项目

    今天整理了一下如何在docker中部署django项目. 1.环境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.项目结构如下: 由于仅仅是测试 ...

  5. 基于nginx和uWSGI在Ubuntu系统上部署Django项目

    1. nginx 1.1 安装 sudo apt-get install nginx 1.2启动.停止和重启 sudo /etc/init.d/nginx start sudo /etc/init.d ...

  6. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

  7. nginx、uwsgi部署django项目理论+实战

    基本环境: Ubuntu 16.04.4 LTS python 3.5 virtualenv django project deployable #理论分析   部署django项目有很多方法,方法推 ...

  8. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)

    记录一次Django部署的文章,不是很熟悉Linux系统,踩了不少坑,本篇文章相当于是一个总结,我会在本文中详细介绍,部署单个Django项目和多个Django的方法,如读者有更好的方法,欢迎留言一起 ...

  9. python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)

    上线 Django 项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装" python项目管理器 " 第二步:安装适配python版本 因为服 ...

最新文章

  1. 全卷积(FCN)论文阅读笔记:Fully Convolutional Networks for Semantic Segmentation
  2. iOS之深入解析weak关键字的底层原理
  3. vim tutor summary
  4. 为什么要自学python_为什么那么多自学Python的后来都放弃了,总结起来就这些原因...
  5. redis——Java整合
  6. 数列分块入门 9(LibreOj-6285)
  7. C++安全方向(三):3.5 SHA-1 算法分析和代码演示
  8. 父类指针指向子类实例,用父类指针调用虚函数,调用的是子类的函数还是父类的函数...
  9. Pycharm新建文件时头部模板的配置方法
  10. php 中echo命令详解,DOS中的ECHO命令详解
  11. 中专计算机教师天涯,天涯里有教职高或中专的教师吗?你们现在过得好吗~~
  12. python NLP英式英语和美式英语的转换
  13. kali系统自带的aircrack-ng破解WIFI
  14. 移动简报026—智慧餐厅出新服务:吃饭用微信就可排队;支付宝上线银行卡安全险:盗刷最高获赔 50 万;高德正式发布车载导航App...
  15. 【Javascript的基本知识——数据的流程和流程的切割】
  16. Web手机开发框架一览
  17. windows电脑中的待机、休眠和睡眠状态的区别
  18. win10系统要求配置_win10的配置要求是什么?对电脑硬件有什么要求?
  19. Spring Ioc原理解析
  20. 正则表达 包含 英文、数字、特殊字符

热门文章

  1. php oauth2.0 实例,详解laravel passport OAuth2.0的4种模式
  2. python中不同类型的数据不能相互运算_PyTorch中Tensor的数据类型和运算的使用
  3. 用粑粑治疗自闭症!男孩接受6次粪菌移植,目前效果显著
  4. Bengio实验室推出开源AI药物研发平台,唐建领队、清北上交学生参与开发
  5. 马斯克即将解锁海上发射!SpaceX海洋太空港最早明年可投入使用
  6. 我用24小时、8块GPU、400美元在云上完成训练BERT!特拉维夫大学新研究
  7. 23年前的今天,首辆火星车登陆火星,后来还拯救了马特达蒙
  8. 人形AI捉迷藏惊煞网友:飞檐走壁纯靠自学,表情丰富还会合作,姚班学霸吴翼参与...
  9. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合
  10. 剑指offer 二进制1中的个数