一、背景介绍

后端服务是Django框架编写的,需要使用Gunicorn进行服务托管,使用supervisord进行保持活跃,最后通过Nginx向外提供服务

二、nginx+gunicorn 安装和配置

2.1 软件安装

nginx 安装

在centos上支持yum 直接安装,其他系统请自行搜索安装方式

$ yum install nginx

gunicorn 安装

gunicorn只是一个Python的库 这里建议使用pip安装,简单方便
附:要么网络好,要么建议更改pip源为豆瓣源

$ pip install gunicorn

注:

  • 如果没有pip需要首先安装pip
  • 如果是Python3 请使用pip3
  • 由于服务器就跑一个Python应用,就使用了全局安装,如果你的服务器上运行了多个Python应用,并使用了不同的环境(版本号),建议使用不同的虚拟环境

2.2 环境配置

首先把你的django服务放在服务器合适的地方

2.2 nginx配置

server {listen       80 ;listen       [::]:80 ;server_name  _;root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}location /images {alias /data/images;}location / {proxy_max_temp_file_size 0;proxy_next_upstream off;proxy_pass http://127.0.0.1:8000;proxy_set_header Host  $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Remote_Addr $remote_addr;proxy_set_header X-Real-IP  $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;}}
  • listen是所需要监听的端口
  • server_name是需要绑定的域名,暂时没有域名时,请使用ip
  • access_log是确定正常状态下log文件位置
  • error_log使确定发生错误时log文件位置
  • location / 是当访问到根下的时候,将所有请求转发到127.0.0.1:8000,本文使转发到gunicorn启动的django应用上,中间配置的是需要转发的内容,基本上述内容可以满足大多需求,如需特殊需求请自行查看nginx官方文档
  • location /static/ 配置了静态文件所在的路径,静态文件由nginx处理,动态转发到django,如不配置会出现站点引用的所有js css都找不到
/root/envs/joops/bin/gunicorn joops.wsgi:application -c /data/joops/gunicorn.py

gunicorn配置

gunicorn启动一般有两种方式,可以在项目目录下建立gunicorn.conf.py配置文件,也可以在启动gunicorn时直接加上相关命令

需要在项目的settings.py中的INSTALLED_APPS添加gunicorn:

INSTALLED_APPS = [......'gunicorn',  # 部署用
]

gunicorn.conf.py文件

import multiprocessingbind = "127.0.0.1:8000"   #绑定的ip与端口
workers = 2                #核心数
errorlog = '/home/xxx/xxx/gunicorn.error.log' #发生错误时log的路径
accesslog = '/home/xxx/xxx/gunicorn.access.log' #正常时的log路径
#loglevel = 'debug'   #日志等级
proc_name = 'gunicorn_project'   #进程名

如还需要其他配置,可以自行查看官方文档

直接使用gunicron启动

gunicron需要启动后需要长期运行在后台,如果直接启动会在关闭终端后进程就被杀死,这肯定不是我们的需求,所以这里给出两种解决方式

  1. 使用Linux自带的nohup命令
    不使用gunicorn配置文件(需进入项目目录)
$ sudo nohup gunicorn 项目名.wsgi:application -b 127.0.0.1:8000&

使用配置文件方式

$ sudo nohup gunicorn 项目名.wsgi:application -c /home/xxx/xxx/gunicorn.conf.py&
  1. 使用supervistor进程管理器
    supervistor工具使用方法可参考博客Supervisor的使用_胡伟煌的博客-CSDN博客_supervisor,也可以直接查看官方文档
    配置文件:
[program:joops]
command=/root/envs/joops/bin/gunicorn joops.wsgi:application -c /data/joops/gunicorn.py ;
directory=/data/joops/ ;
stdout_logfile=/data/log/supervisor/joops/joops.log ;
redirect_stderr = true  ;
stdout_logfile_maxbytes = 200MB  ;
stdout_logfile_backups = 10     ;
autostart = true ;
startsecs = 5 ;
autorestart = true ;
startretries = 3 ;
user = root ;

三、启动站点

  1. 加载nginx配置文件重启nginx
$ sudo systemctl nginx reload
$ sudo systemctl nginx restart
//执行一种即可
  1. 启动gunicorn
  • 如果使用supervistor:
$ sudo supervisorctl reload
  • 如果使用nohup
$ sudo nohup gunicorn 项目名.wsgi:application -b 127.0.0.1:8000&

四、前后端分离配置

  1. 在一些前后端分离项目,可能还需要配置前端静态页面,此时就不能将所有url都转发到django了,需要配置一个前缀,但此时,django自带的后台管理也会出现问题,建议配置一个/admin,所以,最后我的配置nginx文件如下:
server {listen 80;server_name 192.168.84.199;server_name_in_redirect off;access_log /home/webserver/web/nginx.access.log;error_log /home/webserver/web/nginx.error.log;index login.html;root /home/webserver/web/html/WebHtml/;location / {try_files $uri $uri/ =404;}location /apis {rewrite ^.+apis/?(.*)$ /$1 break;proxy_pass http://127.0.0.1:8000;proxy_pass_header       Authorization;proxy_pass_header       WWW-Authenticate;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /admin {proxy_pass http://127.0.0.1:8000;proxy_pass_header       Authorization;proxy_pass_header       WWW-Authenticate;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /static/ {root /home/webserver/web/WebServer/;}
  1. 收集使用的admin或者其他库含有的静态文件
    在django项目的settings.py添加如下代码:
# 收集app静态文件到项目目录使nginx能访问到
STATIC_ROOT = os.path.join(BASE_DIR, "static")# 执行python manage.py collectstatic
STATICFILES_FINDERS = ("django.contrib.staticfiles.finders.FileSystemFinder","django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

然后在终端中进入项目目录在终端执行:

$ python manage.py collectstatic

将会自动将app中所含有的静态文件自动收集到项目的setting目录下,解决了某些app,比如admin在部署后找不到静态文件的现象

django+nginx+gunicorn+supervisord部署配置相关推荐

  1. django+nginx+uwsgi项目部署文档整理

    django+nginx+uwsgi项目部署文档整理 参考文章:https://blog.csdn.net/qq_42314550/article/details/81805328 一.python安 ...

  2. 【Flask】Nginx+Gunicorn+Supervisor部署一个Flask项目:步骤总结

    为什么要使用gunicorn? Flask 作为一个 Web 框架,内置了一个 webserver, 但这自带的 Server 到底能不能用? 官网的介绍: While lightweight and ...

  3. Python+Django+Nginx+Uwsgi 详细部署过程(爬坑过程,可以了解各个软件的执行流程,看过)

    这个部署,我真的是爬了好久的坑,才爬出来,所以给大家分享一下,避免入坑. 首先我们先了解一下相关知识: wsgi:   一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议, ...

  4. CentOS7 + Xshell6 + Xftp6 + Nginx+ Gunicorn环境部署与项目发布

    具体步骤 1. 链接服务器 你需要拥有一个服务器,我是通过Xshell6 连接上阿里云服务器(CentOS7系统)的. Xshell6 + Xftp6 阿里云操作系统CentOS7Server 2. ...

  5. Django +nginx + uwsgi + daphne部署

    Django 项目用 channels 写了一个实时聊天室(用websocket) .uwsgi对websocket不太友好.所以http的使用uwsgi,websocket使用Daphne . ng ...

  6. uwsgi模式_nginx+uwsgi 和nginx+gunicorn区别、如何部署

    [线上环境部署Django,nginx+uwsgi 和nginx+gunicorn,这两种方案,应该如何选择?] 大家是采用的何种部署方式? 第一种,高并发稳定一点 我们公司使用的是nginx+gun ...

  7. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

  8. CentOS6.5下Gunicorn+Django+nginx部署的过程

    2019独角兽企业重金招聘Python工程师标准>>> 本文假设你已经在CentOS下使用Python manage.py runserver 0.0.0.0:8080,能够顺利跑起 ...

  9. 在 Linux 上部署 Django 应用,nginx+gunicorn+supervisor

    如果是新服务器先要进行基本的配置 部署前应用配置 开发环境与生产环境中的应用一般会有两套不同的配置.比如 DEBUG 选项,数据库配置等. 对于 setting.py 文件, 在生产环境中我们要设置 ...

最新文章

  1. ScrollView HorizontalScrollView
  2. 应用框架的设计与实现学习手札系列(持续更新)
  3. java test使用手册,啄木鸟(woodpecker)自动化测试工具使用手册
  4. 队列的基础知识及实现方法
  5. MP(Multi-Link PPP)原理和实验
  6. Android实现“是否退出”对话框和“带图标的列表”对话框
  7. 资源 | 有了这些字体,你的设计也立即“高大上”起来。
  8. MATLAB深度学习工具箱汇总
  9. eplan2.5安装教程
  10. 鸿蒙系统pc版测评,华为MatePad Pro测评:鸿蒙系统+麒麟9000,旗舰平板封神之作?...
  11. 限流 Redis list 列表 Lpush rpop 实现令牌桶 – PHP 实例
  12. mame linux 编译,完美编译街机模拟器MAME(Android版)基于MAME4all
  13. 1 10000用计算机计算,2019新个税计算器 工资一万要交多少税
  14. matlab方波经过低通滤波,方波滤波matlab的实现
  15. CME ERROR错误代码列表
  16. python定义一个复数类complex_定义一个复数类Complex,使得下面的代码能够工作
  17. laravel路由的配置,别名,路由群组
  18. postman接口批量测试
  19. html和java开发哪个难,html5和java哪个难
  20. 净误差与遗漏为负值的含义_为什么遗漏与误差项为负反映了去向不明的资本外逃?...

热门文章

  1. 打开网页时出现504错误是什么
  2. Python安装rospy模块
  3. 三家量化生态厂商联合输出量化交易硬核内容
  4. 服务器把高清图片显示成表情图,图片上传被压缩怎么办?教你如何让公号图片变得高清!_【如何,得高,怎么,图片,表情包CC】...
  5. Web前端,CSS背景图片大小、文字阴影、盒子阴影、过渡
  6. 【知识】给字符数组赋值的方法
  7. 基于华为eNSP的双核心企业网/校园网网络设计综合组网配置/作品演示【网络工程毕业设计】
  8. 自学软件测试需要多久?怎么自学软件测试?自学软件测试可以找到工作吗? 绝对干货!
  9. 巴菲特致股东的一封信:1993年
  10. 装系统计算机丢失msi,msi电脑一键重装系统win7教程