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. SQL SERVER数据库服务器CPU不能全部利用原因分析

    背景 客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢,严重影响到业务运行.   1.现象 通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大 ...

  2. SpringMvc 如何同时支持 Jsp 和 Json 接口?

    后端同学基本都会见过这种场景:在同一个工程中,有些页面使用jsp模版渲染,同时还有其他接口提供Json格式的返回值.为了同时支持这两种场景,我们一般是如何处理的呢? 其实非常简单: 1.在项目中为 S ...

  3. 436. 寻找右区间--LeetCode_暴力

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-right-interval 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出 ...

  4. C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>

    作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...

  5. Excelize 2.3.2 发布,Go 语言 Excel 文档基础库,2021 年首个更新

    Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...

  6. ABC206 F - Interval Game 2 (区间DP,博弈论,SG函数)

    题面 题意很简单 A l i c e \tt Alice Alice 和 B o b \tt Bob Bob 在博弈.摆在他们面前有 N \rm N N 个区间 [ l i , r i ) \rm[l ...

  7. Little Girl and Problem on Trees

    题意 给定一棵无边权的树,最多只有一个点度数超过2,有两种操作 1)(0 u x d)将距离u节点d距离之内的节点的值加上x 2)(1 u)询问u节点的值 n<=100000,q<=100 ...

  8. 【Java】学习路径52-Timer计时器实例

    import java.util.Timer; import java.util.TimerTask; public class TimerClass { public static void mai ...

  9. Html飞机大战(六):移动飞机

    好家伙,这篇移动主角   我们先来看看一个好东西, addEventListener() 方法 (他真的很好用)   我们直译一下,就叫他添加事件监听器方法   而可监听的对象就有很多啦 我们来了解一 ...

  10. Currtid 函数与性能问题

    对于Oracle ,一条tuple 的 rowid正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表收缩),因此,应用设计上可以方便的使用rowid,加快访问速度 ...