实际采用的nginx.conf文件内容:

server {
charset utf-8;
listen 80;
server_name ip; access_log /webapps/project/logs/nginx.access.log;
error_log /webapps/project/logs/nginx.error.log; location = /favicon.ico { access_log off; log_not_found off; }
location /static {
alias /webapps/project/myproject/static/; # 项目静态文件所在路径
}
location /media {
alias /webapps/project/myproject/media/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

管理gunicorn脚本内容:

bash manage.sh start|stop|restart
# cat manage.sh
function start(){
VIRTUALENV_DIR=自己虚拟环境路径
source ${VIRTUALENV_DIR}/bin/activate
DJANGO_DIR=自己项目地址路径
cd ${DJANGO_DIR}
gunicorn xxxx.wsgi:application \
--bind 127.0.0.1:8000 \
--workers 4 \
--timeout 30 \
--daemon \
--reload \
--access-logfile 自己日志地址 \
--error-logfile 自己日志地址
} function stop(){
kill -9 `ps -ef |grep gunicorn|grep -v grep|awk "NR==1" |awk '{print $2}'`
} case $1 in
"start")
start
sleep 5
echo "启动完成"
;;
"stop")
stop
sleep 5
echo "关闭成功"
;;
"restart")
stop
echo "关闭等到5秒"
sleep 5
echo "正在启动中,等待10秒"
sleep 10
start
echo "重启完成"
;;
*)
echo "only start|stop|restart"
exit 1
;;
esac

Django 项目中的 settings.py 部分重要配置

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False # 允许访问此项目的地址
ALLOWED_HOSTS = ['*'] # 其实只添加你的IP地址或域名即可 # Application definition
INSTALLED_APPS = [
...
# 'gunicorn', # gunicorn采用gevent 模式需要开启这个
] # Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_qc',
'HOST': '172.17.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '123456',
'CHARSET': 'utf8',
}
} # Static files (CSS, JavaScript, Images)
# # 对外提供WEB访问时的URL地址
STATIC_URL = '/static/'
# # 然后会将项目中的静态文件(包括STATICFILES_DIRS、自带admin的静态文件)收集到该目录下面来(所以不应该在该目录下面放置自己的一些静态文件,因为会覆盖掉)
STATIC_ROOT = os.path.join(BASE_DIR, "static") # Upload source
# # 对外提供WEB访问时的URL地址
MEDIA_URL = '/media/'
# # 放置项目接收的上传文件
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

创建虚拟独立环境

# 创建虚拟环境
$ virtualenv --python /usr/local/bin/python3.6 py-env-boluomi
# 进入虚拟环境
$ source py-env-boluomi/bin/activate
# 退出依赖环境
(py-env-boluomi)$ deactivate

安装依赖包

# 在虚拟环境中安装django
(py-env-boluomi)$ pip install django
# 在虚拟环境中安装mysqlclient
(py-env-boluomi)$ pip install mysqlclient
# 在虚拟环境中安装gunicorn
(py-env-boluomi)$ pip install gunicorn

创建Django项目

# 在项目目录创建Django项目
(py-env-boluomi)$ django-admin startproject boluomi

项目目录结构如下:

boluomi
├── boluomi
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

编辑settings.py文件,将数据库改为MySQL:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'boluomi',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'init_command':"SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}

根据模型将数据表同步到数据库:

(py-env-boluomi)$ python manage.py migrate

根据提示创建一个admin的管理账户:

(py-env-boluomi)$ python manage.py createsuperuser

启动Django内置服务器:

(py-env-boluomi)$ python manage.py runserver 0.0.0.0:8080

配置Gunicorn

在实际生产环境中不会使用Django内置的单线程开发服务器,可以采用Gunicorn,Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器。

Gunicorn采用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。

# 使用方法
# gunicorn [OPTIONS] 模块名:变量名
# 模块名是python文件名(可以是完整的路径+python文件名)
# 变量名是python文件中可调用的WSGI(Web Server Gateway) # [OPTIONS]
# 指定一个配置文件
# -c CONFIG, --config # 绑定socket
# -b ADDRESS, --bind ADDRESS # 以守护进程方式运行Gunicorn进程
# -D, --daemon # 切换到指定的工作目录
# --chdir CHDIR # 工作进程的数量,在Gunicorn启动的时候,在主进程中预先fork出指定数量的worker进程处理请求
# -w INT, --workers INT # worker重启前处理的最大请求数
# --max-requests INT # worker空闲的超时时间,空闲超时将重启(默认30秒)
# -t INT, --timeout INT # 指定访问日志文件
# --access-logfile FILE # 指定error log的错误级别
# --log-level LEVEL # 指定错误日志文件
# --error-logfile FILE, --log-file FILE

启动/关闭/重启Gunicorn:

# 启动Gunicorn
(py-env-boluomi)$ gunicorn boluomi.wsgi:application --bind 0.0.0.0:8080 --workers 2
# 关闭Gunicorn
$ pstree | grep gunicorn | grep -v grep | awk 'NR==1{system("kill -QUIT "$2)}'
# 重启Gunicorn
$ pstree | grep gunicorn | grep -v grep | awk 'NR>1{system("kill -HUP "$2)}'

在生产环境使用Gunicorn需要添加很多配置,通常我们会把这些配置写成一个bash脚本,如下所示:

#!/bin/bash
# 激活虚拟环境
VIRTUALENV_DIR=/data/server/workspace/py-project/py-env-boluomi
source $VIRTUALENV_DIR/bin/activate
#进入项目目录
DJANGO_DIR=/data/server/workspace/py-project/boluomi
cd $DJANGO_DIR
#启动Gunicorn服务
gunicorn boluomi.wsgi:application \
--bind 0.0.0.0:8080 \
--workers 2 \
--timeout 30 \
--daemon \
--access-logfile /data/logs/gunicorn/boluomi_access.log \
--error-logfile /data/logs/gunicorn/boluomi_error.log

用Gunicorn启动服务后,Django的admin无法显示static文件,解决方法如下:

在项目的settings.py中设置ALLOWED_HOSTS:

# 这个参数的设置是为了限制一些主机的访问,当Debug=False的时候,这个值是必须要设定的,否则会报错。
# 其值是一个列表,可以是ip地址,也可以是域名,还可以支持通配符。
ALLOWED_HOSTS = ['*']

在项目的settings.py中添加STATIC_ROOT:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

执行如下命令会自动创建static文件夹,并把静态文件全部复制到static文件夹中:

$ python manage.py collectstatic

在项目urls.py中添加如下内容:

from django.conf import settings
from django.conf.urls import url
from django.views.static import serve # DEBUG为Fasle时执行
if not settings.DEBUG:
urlpatterns += [url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})]

配置Nginx

通常Gunicorn会部署在Nginx后面,Nginx会直接解析静态请求,并将动态请求转发给Gunicorn去解析。

server {
listen 80;
server_name boluomi.test.com; access_log /data/logs/nginx/boluomi_access.log main;
error_log /data/logs/nginx/boluomi_error.log; location / {
proxy_pass http://127.0.0.1:8080;
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 {
alias /data/server/workspace/py-project/boluomi/static;
}
}

nginx+gunicorn部署Django项目的更多相关文章

  1. Nginx 和 Gunicorn 部署 Django项目

    目录 Nginx 和 Gunicorn 部署 Django项目 配置Nginx 安装配置Gunicorn 通过命令行直接启动 Gunicorn 与 uwsgi 的区别,用哪个好呢 Gunicorn u ...

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

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

  3. nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...

  4. nginx+uwsgi部署Django项目到Ubuntu服务器全过程,以及那些坑!!!

    前言:自己在windows上用PyCharm编写的Django项目,编写完后在windows上运行一点问题都没有,但是部署到服务器上时却Bug百出.百度,CSDN,sf,各种搜索寻求解决方案在历时3天 ...

  5. 在nginx上部署django项目--------Gunicorn+Django+nginx+mysql

    一.安装nginx 以前的博客我有写,这里就不写了 http://www.cnblogs.com/wt11/p/6420442.html 二.安装mysql 我用的mysql5.7  64位的二进制包 ...

  6. nginx+uwsgi部署django项目

    1.django项目部署前需要生成admin的静态资源文件 (1)生成admin的静态资源文件 # 关闭debug模型 DEBUG = False # 允许所有域名访问 ALLOWED_HOSTS = ...

  7. Nginx + uWSGI 部署Django 项目,并实现负载均衡

    一.uWSGI服务器 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI ...

  8. CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

    写在前面的话 最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客. 对于不会搭建 Python 3 环境的朋友可以参考前面的博客[CE ...

  9. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

随机推荐

  1. 003 Jwt登录流程图

    用户\角色\权限 用户是一个基本的单位 用户和角色的关系是多对多,所以要有一张保存用户和角色关系的中间表 角色也不能直接决定这个用户能做什么操作,有哪些权限, 需要再关联权限表决定 角色和权限也是多对 ...

  2. Java学习_常见异常

    JAVA常见异常 Java.io.NullPointerException null 空的,不存在的 NullPointer 空指针 空指针异常,该异常出现在我们操作某个对象的属性或方法时,如果该对象 ...

  3. 第2章 开始学习C++

    说明 看<C++ Primer Plus>时整理的学习笔记,部分内容完全摘抄自<C++ Primer Plus>(第6版)中文版,Stephen Prata 著,张海龙 袁国忠 ...

  4. 谷歌的SRE和开发是如何合作的

    本文是一篇比较有价值的.介绍SRE的文章.国内的所谓SRE职责其实并不明确,大部分其实还是干普通运维的事.但文中介绍的谷歌的运作方式起点还是相对比较高的,无论对SRE.对开发,甚至对公司都有很高的要求 ...

  5. WebWorker:工作者线程初探

    WebWorker:工作者线程初探 参考资料: 1.Web Worker 使用教程 - 阮一峰:http://www.ruanyifeng.com/blog/2018/07/web-worker.ht ...

  6. 【AGC】增长服务1-远程配置示例

    ​ [AGC]增长服务1-远程配置示例 前言:上一次笔者给大家带来了AGC领域的性能管理服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读 ...

  7. BMP位图之代码实现

    从16位开始,不存在调色板,顶多存在一个RGBQUAD的掩码. 16位位图,我没有拿到对应的素材,但是根据官方文档的描述和代码验证后,我总结为下: 当biCompression为BI_RGB时,此时是 ...

  8. Reactive UI -- 反应式编程UI框架入门学习(二)

    前文Reactive UI -- 反应式编程UI框架入门学习(一)  介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...

  9. 8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路

    ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选)   大数据是一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,而大数据作为企业运转的基础,只有经过提 ...

  10. Apache DolphinScheduler 项目笔记 — 1. 问题定位和排查问题

    导语: Yuanhao Ji 同学是<暑期 2021 - API 模块 UT 测试问题解决>项目负责人,本文记录了他是如何排查和定位问题. 1. 背景 问题:在部分 UT 中使用 Powe ...