Django 是 python 的 web 框架,以下是其部署到生产环境的详细步骤,包含 Apache 和 nginx 版本。

部署环境

  • 操作系统:centeros7.3
  • 数据库:MySQL5.6.51
  • 编程语言:python3.6.5
  • 虚拟环境:virtualenv
  • 反向代理:apache2.4.6 / Nginx
  • 中间件:mod_wsgi / uwsgi

基础环境安装

安装 MySQL5.6.51

查看所有的版本,选择合适的版本下载

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-server
yum install mysql-devel
# /etc/my.cnf 的 [mysqld] 中加入 character-set-server=utf8
service mysqld start
mysql -u root -p
use mysql;
UPDATE user SET password=password("新密码") WHERE user='root';
FLUSH PRIVILEGES;
mysql -h 127.0.0.1 -u root -p
create database if not exists 新数据库名
grant all privileges on *.* to 'root'@'%' identified by '新密码' with grant option;
service mysqld restart

安装 python3.6.5

查看所有的版本,选择合适的版本下载

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar -xvJf Python-3.6.5.tar.xz
cd Python-3.6.5
./configure prefix=/usr/local/python36
make && make install
ln -s /usr/local/python36/bin/python3 /usr/bin/python36
ln -s /usr/local/python36/bin/pip3 /usr/bin/pip36
python36 -V
pip36 -V

注意事项:

  • python 要用 ln -s 建立链接,否则可能会导致 mod_wsgi 的安装失败
  • 遇到No module named '_ssl' 模块问题,执行yum install openssl-devel
  • 进入 python 解压后的目录,在 Modules 找到 Setup 文件,修改如下:

  • 重新 make && make install

virtualenv虚拟环境

pip install virtualenv
virtualenv -p /usr/bin/python36 py3
source py3/bin/activate
source py3/bin/deactivate

基于Apache的web服务

安装 apache

yum install httpd
yum install httpd-devel
systemctl start httpd.service
nano /etc/httpd/conf/httpd.conf
service httpd restart

安装中间件 mod_wsgi

wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/$ mod_wsgi-4.5.7.tar.gz
tar -zxvf mod_wsgi-4.5.7.tar.gz && cd mod_wsgi-4.5.7
./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python36
make && make install

修改 apache 配置

修改 wsgi.conf 文件,如下:

LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix /var/run/wsgi <VirtualHost *:443>
ServerName xxxxxx.com #SLL证书
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/Apache/a.crt
SSLCertificateKeyFile /etc/httpd/ssl/Apache/b.key
SSLCertificateChainFile /etc/httpd/ssl/Apache/chain.crt
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common # 存放用户上传图片等文件的位置,注意去掉#号
Alias /media/ /var/www/mysite/static/ # 静态文件(js/css/images)
Alias /static/ /var/www/mysite/static/ # 允许通过网络获取static的内容
<Directory /var/www/mysite/static/ >
#Require all granted
</Directory> # 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIDaemonProcess http://127.0.0.1:80 python-path=/var/www/mysite:/var/www/py3/lib/python3.6/site-packages
WSGIProcessGroup http://127.0.0.1:80
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py <Directory /var/www/mysite/mysite/>
<Files wsgi.py>
#Require all granted
</Files>
</Directory> </VirtualHost>

80端口自动跳转443

<VirtualHost *:80>
DocumentRoot "/"
<Directory />
AllowOverride All
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
</Directory>
</VirtualHost>

基于Nginx的web服务

安装 WSGI

pip install uwsgi

如果安装失败,尝试安装 yum install python3-devel

配置 uWSGI

在项目路径下创建 uwsgi.ini 文件,内容如下:

[uwsgi]
# 使用nginx连接时使用(生产环境)
# socket=127.0.0.1:8000
# 直接做web服务器使用(测试启动)
http=0.0.0.0:80
# 项目目录
chdir=/var/www/myserver
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=myserver/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log

uWSGI的常用命令

uWSGI启动之后会在项目目录下生成uswgi.log日志文件和uwsgi.pid存放的服务的进程号

uwsgi --ini uwsgi.ini  # 启动
ps ajx | grep uwsgi # 查看进程
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭

安装nginx

nginx 的配置文件一般在/etc/nginx/下,日志文件一般在/var/log/nginx

yum install nginx -y
nginx # 启动
nginx -s stop # 关闭
nginx -s reload # 重启

80自动跳转443

server {
listen 80;
server_name yourdomain; #需要将yourdomain替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
index index.html index.htm;
}
}

配置 nginx

编辑 /etc/nginx/nginx.conf,内容如下:

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /var/www/myserver/static/;
}

uwsgi_pass 的值要和 uwsgi.ini 中socket的值一致

django 生产环境部署手册的更多相关文章

  1. django 生产环境部署建议

    参考django官方建议 一种优秀的作法是使用前缀/ws/来区分WebSocket连接和普通HTTP连接,以便修改配置后,使Channels更容易部署到生产环境中. 特别是对于大型站点,可以配置像ng ...

  2. django生产环境部署

    测试环境:linux centos7下 1.安装uwsgi python3下安装: pip3 install uwsgi python2下安装: pip install uwsgi 如果是系统自带的p ...

  3. 【Python之路】特别篇--Django生产环境部署

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中H ...

  4. uwsgi+nginx+django生产环境部署

    1.升级python到2.7版本 2.安装uwsgi 出现uwsgi未找到 yum groupinstall "Development tools"yum install zlib ...

  5. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  6. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  7. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

  8. 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1

    第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...

  9. 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6

    第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步 ...

随机推荐

  1. 【喜讯】Apache DolphinScheduler 荣获 “2020 年度十大开源新锐项目”

    经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...

  2. 自己做一个RTOS

    什么是操作系统?其实就是一个程序, 这个程序可以控制计算机的所有资源,对资源进行分配,包括CPU时间,内存,IO端口等,按一定规则分配给所需要的进程(进程?也就是一个程序,可以单独执行),并且自动控制 ...

  3. Elasticsearch-Kibana-学习笔记

    1.背景 1.1 简介 Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elasticsearch的水平伸缩性, ...

  4. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  5. HandInDevil 的头发 (分 块)

    题面 H a n d I n D e v i l \rm HandInDevil HandInDevil 的头发很油,因此随时有跳蚤跳上 H a n d I n D e v i l \rm HandI ...

  6. 「CCO 2017」专业网络

    Kevin 正在一个社区中开发他的专业网络.不幸的是,他是个外地人,还不认识社区中的任何人.但是他可以与 N 个人建立朋友关系 . 然而,社区里没几个人想与一个外地人交朋友.Kevin 想交朋友的 N ...

  7. ServletFileUpload 文件上传

    import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadExcepti ...

  8. SpringMVC--从理解SpringMVC执行流程到SSM框架整合

    前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...

  9. 华南理工大学 Python第3章课后小测-1

    1.(单选)给出如下代码 s = 'Hello scut' print(s[::-1]) 上述代码的输出结果是(本题分数:4)A) HelloB) Hello scutC) olleH tucsD)  ...

  10. docker学习笔记一-docker安装与卸载

    环境查看 # 1 查询当前centOS的版本,官方要求版本为7以上 uname -r 查询系统内核 cat /etc/os-release 系统版本 安装 # 1.卸载旧版本 yum remove d ...