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. 解决linux下U盘变成只读模式

    在最近的一个项目里,需要将linux下的些文件拷贝出来.插入U盘后,发现是只读模式. U盘可以写出,不能写入. 折腾了一翻: 最后这样解决的: 将U盘插入到windows下 执行 chkdsk g: ...

  2. C++ 运行单个实例,防止程序多次启动

    利用内核对象 封装的类,使用运行单个实例,防止多次启动Demo 例子下载地址:http://pan.baidu.com/share/link?shareid=3202369154&uk=303 ...

  3. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  4. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的QPI/OPI模式. 我们知道 Flash 读时序里有五大子序列 CMD + ADDR + MO ...

  5. Tablesaw——Java统计、机器学习库

    资源 java二维数组处理可可视化库 https://github.com/jtablesaw/tablesaw plotly JS库的Java封装 https://github.com/jtable ...

  6. xtrabackup增量备份MySQL-5.7操作说明

    下载工具 本方法利用xtrabackup二进制包,版本是2.4.26 # 从官网下载二进制包:wget https://downloads.percona.com/downloads/Percona- ...

  7. 如何守护数据安全? 这里有一份RDS灾备方案为你支招

    当今世界是一个充满着数据的互联网世界,生活的方方面面都在不断产生着数据,比如出行记录.消费记录.浏览的网页.发送的消息等等.除了文本类型的数据,图像.音乐.声音都是数据.对于企业而言,数据更是重要的生 ...

  8. KingbaseES OUT 类型参数过程与函数的调用方法

    对于含有 out 类型参数的过程或者函数,只能通过块方式调用,这是因为,ksql 还不支持类似 Oracle 那样通过 var 定义变量. 一.带OUT的procedure 调用 创建过程: crea ...

  9. 二进制redis集群部署

    二进制redis集群部署 〇.前言 无聊想学罢了 准备环境: 三台centos7 1C1GB即可 三个路相连的地址 主机 IP 节点-角色-实例(端口) redis1 172.16.106.128 M ...

  10. Servlet小结

    1.sevlet的生命周期 用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了.并且执行的是无参数构造方法.) AServlet对象被创建出来之后,Tomcat服 ...