django 生产环境部署手册
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 生产环境部署手册的更多相关文章
- django 生产环境部署建议
参考django官方建议 一种优秀的作法是使用前缀/ws/来区分WebSocket连接和普通HTTP连接,以便修改配置后,使Channels更容易部署到生产环境中. 特别是对于大型站点,可以配置像ng ...
- django生产环境部署
测试环境:linux centos7下 1.安装uwsgi python3下安装: pip3 install uwsgi python2下安装: pip install uwsgi 如果是系统自带的p ...
- 【Python之路】特别篇--Django生产环境部署
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中H ...
- uwsgi+nginx+django生产环境部署
1.升级python到2.7版本 2.安装uwsgi 出现uwsgi未找到 yum groupinstall "Development tools"yum install zlib ...
- Django + Uwsgi + Nginx 的生产环境部署
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
- 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1
第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...
- 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6
第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步 ...
随机推荐
- 【喜讯】Apache DolphinScheduler 荣获 “2020 年度十大开源新锐项目”
经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...
- 自己做一个RTOS
什么是操作系统?其实就是一个程序, 这个程序可以控制计算机的所有资源,对资源进行分配,包括CPU时间,内存,IO端口等,按一定规则分配给所需要的进程(进程?也就是一个程序,可以单独执行),并且自动控制 ...
- Elasticsearch-Kibana-学习笔记
1.背景 1.1 简介 Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elasticsearch的水平伸缩性, ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- 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 ...
- 「CCO 2017」专业网络
Kevin 正在一个社区中开发他的专业网络.不幸的是,他是个外地人,还不认识社区中的任何人.但是他可以与 N 个人建立朋友关系 . 然而,社区里没几个人想与一个外地人交朋友.Kevin 想交朋友的 N ...
- ServletFileUpload 文件上传
import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadExcepti ...
- SpringMVC--从理解SpringMVC执行流程到SSM框架整合
前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...
- 华南理工大学 Python第3章课后小测-1
1.(单选)给出如下代码 s = 'Hello scut' print(s[::-1]) 上述代码的输出结果是(本题分数:4)A) HelloB) Hello scutC) olleH tucsD) ...
- docker学习笔记一-docker安装与卸载
环境查看 # 1 查询当前centOS的版本,官方要求版本为7以上 uname -r 查询系统内核 cat /etc/os-release 系统版本 安装 # 1.卸载旧版本 yum remove d ...