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. Ansible yaml 剧本(傻瓜式)

    优化ansible安装MySQL: Ansible部署MySQL编译安装 - xiao智 - 博客园 (cnblogs.com) Ansible yaml 剧本(傻瓜式): --- - hosts: ...

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

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

  3. Matery主题添加Pjax

    如何给matery主题添加Pjax? Pjax优点 1.减轻服务端压力 2.按需请求,每次只需加载页面的部分内容,而不用重复加载一些公共的资源文件和不变的页面结构,大大减小了数据请求量,以减轻对服务器 ...

  4. PHP为任意页面设访问密码

    使用方法 把下面的代码存为php文件,下面的整段代码是验证过程,然后在你入口页进行调用例如命名为MkEncrypt.php,那么在入口页进行       require_once('MkEncrypt ...

  5. java基础———break,continue

    break通常用在循环语句之中用来跳出循环: continue终止某次循环过程,跳过尚未执行的语句:接着执行下次是否执行循环的判定:

  6. 如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇

    本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章. 整洁架构粗略介绍 下图为整洁架构最原始的结构图: Entities/Models:实体层,官方说法就是封装了企业里最通用 ...

  7. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(15)-Fiddler弱网测试,知否知否,应是必知必会

    1.简介 现在这个时代已经属于流量时代,用户对于App或者小程序之类的操作界面的数据和交互的要求也越来越高.对于测试人员弱网测试也是需要考验自己专业技术能力的一种技能.一个合格的测试人员,需要额外关注 ...

  8. 这三大特性,让 G1 取代了 CMS!

    大家好,我是树哥. 之前我们聊过 CMS 回收器,但那时候我们说 CMS 回收器已经落伍了,现在应该是用 G1 回收器的时候了.那么 G1 回收器到底有什么魔力,它比 CMS 回收器相比强在哪里呢?今 ...

  9. Linux虚拟机报错grub rescue解决步骤

    /boot 分区内核文件丢失 实验准备 1) 准备:rm -rf /boot/* 2) 系统启动报错截图 修复步骤 重启显示logo时 按 Esc,选择从光驱启动 或者关机再选择打开电源时进入固件 移 ...

  10. 如何高效解决 C++内存问题,Apache Doris 实践之路|技术解析

    导读:Apache Doris 使用 C++ 语言实现了执行引擎,C++ 开发过程中,影响开发效率的一个重要因素是指针的使用,包括非法访问.泄露.强制类型转换等.本文将会通过对 Sanitizer 和 ...