实际采用的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. Python图像处理丨三种实现图像形态学转化运算模式

    摘要:本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算.图像闭运算和梯度运算 本文分享自华为云社区<[Python图像处理] 九.形态学之图像开运算.闭运算.梯度运 ...

  2. kubernetes下kubelet无法启动

    错误如下: 09:58:45 kubernetes-node01 kubelet[6248]: F0124 09:58:45.902571 6248 server.go:265] failed to ...

  3. 「Python实用秘技09」更好用的函数运算缓存

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第9期 ...

  4. mysql主从复制学习笔记

    一.musql主从复制原理 MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以&q ...

  5. 搞懂前端二进制系列(一):🍇 认识Blob对象

    参考资料: https://juejin.cn/post/6844904183661854727 [你不知道的Blob] https://juejin.cn/post/6844904144453517 ...

  6. websocket理解

    简介 在实际开发中,可能会出现一个需求场景,要求网页的数据可以实时更新.在这种情况下,我们一般会采用轮询的方式,间隔性获取数据,即通过定时器间隔性请求相应接口获取数据,此方式由于是不断请求服务器,资源 ...

  7. odoo 14 Debug 调试

    1 # PDB的用法 2 # PDB是用来调试运行代码的. 3 # 如何启动PDB(启动之后你可以调用odoo任何模块中的方法) 4 # ./odoo-bin shell --log-level=de ...

  8. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  9. 万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文转载自微信公众号"老叶茶馆" MGR整个集群挂掉后,如能 ...

  10. OSSCore 开源解决方案介绍

    基于.NetCore的积木化服务框架,主要将常规解决方案进行进一步的抽象下沉形成相关基础可选框架单元(在Framework 目录),并在此基础上实现常规系统模块(在Modules 目录),如用户管理, ...