Django 部署

it2026-02-01  4

本节内容

Django项目配置

准备CentOS+Python+Nginx环境

Django 生产部署理论

Nginx+Gunicorn+Django生产部署

Nginx+uWSGI+Django生产部署

 

 

一   Django项目配置

1.  关闭Debug模式

用命令 django-admin.py startproject 创建了一个项目,其中settings的DEBUG设置默认为True,

Django会根据这个设置来改变相应的行为,Debug设置为True意味着:

所有的数据库查询将被保存在内存中,以django.db.connection.queries的形式,占用内存

任何404错误都将呈现django的特殊404页面,这个页面包含敏感信息

应用中任何捕获的异常,从基本的Python语法错误到数据库错误以及模板语法错误都会返回到Django错误页面,暴露敏感信息

所以 “DEBUG”设置为“False”

# SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOWED_HOSTS = ['*']

2.  实现一个404模板

当 “DEBUG”设置为“False”,显示404错误页面时,回去模板的根目录中寻找 “404.html”的模板

3.  实现一个500模板

类似404页面,在模板的根目录下新增“500.html”页面

 

二   准备CentOS+Python+Nginx环境

测试环境: 

CentOS  7.3

Python 3.6.1

Virtualenv

Nginx 1.10.2

 

系统环境准备

1.  禁用防火墙

systemctl stop firewalld.service        # 关闭防火墙

systemctl disable firewalld.service   # 禁止防火墙开机启动

2.  禁用selinux    vim /etc/sysconfig/selinux   -->  SELINUX=disabled

3.  配置IP地址

 

编译安装 Python 3.6.1

1.  安装依赖包

# yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel sqlite-devel

2.  编译安装 Python 3.6.1 

""" mkdir /application cd /application wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz tar -zxvf Python-3.6.1.tgz cd Python-3.6.1 ./configure --prefix=/usr/local/python3 make && make install ln -s /usr/local/python3/bin/python3 /usr/bin/python3 """

3.  配置Python3 路径

# vim ~/.bash_profile

# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/local/python3/bin export PATH

# source ~/.bash_profile

4.  检查python3和pip3是否安装正确

[root@localhost Python-3.6.1]# python3 -V Python 3.6.1 [root@localhost Python-3.6.1]# pip3 -V pip 9.0.1 from /usr/local/python3/lib/python3.6/site-packages (python 3.6)

 

virtualenv 安装与使用

pip3 install virtualenv mkdir /usr/local/envs # 创建存储环境的总目录 cd /usr/local/envs virtualenv env_jms # 存储具体的应用环境 cd env_jms source bin/activate # 启动,注意提示名的变化 deactivate # 退出

在虚拟环境中可以安装各种第三方包,注意虚拟环境中为 pip

 

补充pip 常用命令:

1.  查看当前虚拟环境安装的第三方包信息

# pip freeze 

(env_jms) [root@localhost env_jms]# pip freeze Django==1.11.5 djangorestframework==3.6.4 pytz==2017.2 (env_jms) [root@localhost env_jms]#

2.  将当前虚拟环境安装的第三包信息导出到文件

# pip freeze > requirements.txt

3.  批量安装requirements.txt文件中的第三方包

# pip install -r requirements.txt

4.  为具体项目创建虚拟环境,并批量安装第三方包

yum install -y git makedir /usr/local/projects cd /usr/local/projects/ git clone https://github.com/ibuler/jms.git cd jms virtualenv env_jms source env_jms/bin/activate pip install -r requirements.txt # 注意所在目录pip freeze # 查看是否正确安装第三方包python manage.py runserver 0.0.0.0:8080 # 运行django测试

 

Nginx 安装

说明:Apache和Nginx都是基于http协议来传输超文本,提供web服务。Apache功能较多,比较重,

而Nginx专注web服务,轻量级,采用不同的网络IO,epoll模型,效率高(处理速度快,并发高)

测试版本 nginx 1.10.2

 

安装方式一:yum 安装

1.  安装扩展源,nginx软件

# yum install -y epel-release

# yum install -y nginx

2.  修改配置文件

vim  /etc/nginx/nginx.conf

root  /usr/share/nginx/html --> 根目录

3.  启动服务

systemctl start nginx

user nginx; # 用户 nginx worker_processes auto; # 扫描CPU核数,开并发进程数 error_log /var/log/nginx/error.log; # 错误日志文件 pid /run/nginx.pid; # pid文件 include /usr/share/nginx/modules/*.conf; # 扩展模块包 events{ workder_connections 1024; # 进程资源单位,线程执行单位,该配置表示一个进程下启动的线程数 } http { log_format main xxxxxx; # 定义日志格式 access_log /var/log/nginx/access.log main; # 访问日志,按照main定义的格式 ...... # 各种优化参数 include /etc/nginx/conf.d/*.conf; # 导入额外配置 # 学习的重点 server { listen 80 default_server; listen [::]:80 default_server; server_name ; root /usr/share/nginx/html; # 网站访问文件的根目录 include /etc/nginx/default.d/*.conf # 导入额外配置 location / { # /a/b/c.txt / 开始 # 默认是没有 root 配置的,就读全局的root /usr/share/nginx/html; # 可以自定义设置 root /var/www/html; # 分号结束,重新定义root 目录 index index.html index.htm; } } } 配置文件解析 """ url 定位到某台主机 http://192.168.1.2:80 uri 定位到某台主机的具体资源 http://192.168.1.2:80/a/b/c.txt 192.168.1.2:80/a/b/c.txt ---> /usr/share/nginx/html/a/b/c.txt http://192.168.1.2:80/a/b/c.txt 三段说明 第一段: http:// ---> server 端是基于http协议给client发送数据的 第二段: 192.168.1.2:80 ---> 定位到全世界范围内唯一一款软件 第三段: /a/b/c.txt ---> /usr/share/nginx/html/a/b/c.txt """ 访问地址解析 """ systemctl start nginx systemctl restart nginx # 先stop 再start,生产中用reload systemctl reload nginx # 不会stop,重新读配置文件 systemctl stop nginx systemctl status nginx """ yum安装nginx常用命令 """ 正向代理 A访问B,A把自己的请求让C代理,C去访问B 正向代理时A明确知道自己的代理C的存在,A明确指定自己的代理地址是C,让C去访问B,拿到结果再给A,通常用来FQ 反向代理 用户请求发给nginx后,由nginx负载给代理的机器,拿到结果,再由nginx返回给客户端 nginx便把一堆自己代理的机器隐藏到后端,外界访问的就是nginx 透明代理 用户不知道代理的存在,用户->交换机->路由器->代理服务器,代理服务器可以控制用户上网行为, 比如限制用户可以访问和不可以访问的网站,多用于用户行为管理 """ 各种代理说明

负载均衡 LB:http://nginx.org/en/docs/http/load_balancing.html

 

安装方式二:编译安装

yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -y cd /application wget http://nginx.org/download/nginx-1.10.2.tar.gz tar -zxvf nginx-1.10.2.tar.gz cd nginx-1.10.2 ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --without-http_rewrite_module make && make install

说明:

''' pcre:用来作地址重写的功能 zlib:nginx的gzip模块,传输数据打包,省流量(但消耗资源) openssl:提供ssl加密协议 安装:http://www.cnblogs.com/crazyacking/p/5138146.html 相关参数:http://blog.csdn.net/xifeijian/article/details/20956605 location:http://www.tuicool.com/articles/Jr63qy '''

编译安装常用命令:

/usr/local/nginx/nginx -t # 检查配置文件nginx.conf是否正确 /usr/local/nginx/nginx # 启动nginx /usr/local/nginx/nginx -s reload # 重新载入配置文件 /usr/local/nginx/nginx -s reopen # 重启 Nginx /usr/local/nginx/nginx -s stop # 停止 Nginx

 

三  Django 生产部署理论

Python的Web框架(Flask, Django)自带的Web服务器是用户开发调试,而不是生产环境

 

用于生产环境的Python web项目部署方式

浏览器  <--> Web服务器 <--> WSGI容器 <--> Web框架

 

Web服务器:提供Web服务,常见Nginx、Apache等

WSGI:全称Web Server Gateway Interface,规定了一种在Web服务器和Web应用程序之间的推荐标准接口

常见WSGI容器(软件)

Gunicorn 易于配置,兼容性好,CPU消耗极少

uWSGI是C编写,实现了自有协议uwsgi的Web服务器,性能十分强大

 

Django项目的几种启动方式

1.  runserver 直接启动

2.  通过uWSGI或Gunicorn启动Django

3.  完整 Nginx + uWSGI或Gunicorn + Django 方式启动

 

四  Nginx+Gunicorn+Django生产部署

待续

五  Nginx+uWSGI+Django生产部署

1.  安装  uWSGI

cd /usr/local/projects/jms source env_jms/bin/activate pip install uwsgi uwsgi --version

2.  收集项目静态文件配置

STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')

将django admin和django app的静态文件收集到STATIC_ROOT目录下:

#  python manage.py collectstatic

3.  修改nginx.conf 配置

确保配置文件目录下有uwsgi_params,没有时可下载

https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

location / { uwsgi_pass unix:/usr/local/projects/jms/jms.sock; include uwsgi_params; root html; index index.html index.htm; } location /static/ { alias /usr/local/projects/jms/static_files/; }

4.  重启nginx服务

/usr/local/nginx/nginx -s reopen

5.  通过uWSGI启动Django项目

uwsgi --socket jms.sock --module jms.wsgi --chmod-socket=666

注:unix socket 不同进程间文件共享 

 

附:除了 uWSGI除了sock 启动,还可以把相关参数写成配置文件启动 jms_uwsgi.ini

1.  在项目目录下 新增文件 jms_uwsgi.ini

# 项目目录 chdir= /usr/local/projects/jms/ # 启动uwsgi的用户名和用户组 uid=root gid=root # 指定项目的application module=jms.wsgi:application # 指定sock的文件路径 socket=/usr/local/projects/jms/jms.sock master=true workers=5 pidfile=/usr/local/projects/jms/uwsgi.pid vacuum=true thunder-lock=true enable-threads=true harakiri=30 post-buffering=4096 # 设置日志目录 daemonize=/usr/local/projects/jms/uwsgi.log

 2.   通过uwsgi --ini jms_uwsgi.ini启动

(env_jms) [root@localhost jms]# uwsgi --ini jms_uwsgi.ini [uWSGI] getting INI configuration from jms_uwsgi.ini

 

 

更多信息参考:

http://edu.51cto.com/course/9039.html

http://www.pythontip.com/study/books/djangobook-py3k-cn

http://www.cnblogs.com/linhaifeng/articles/6045600.html#_label19

转载于:https://www.cnblogs.com/jonathan1314/p/7550863.html

相关资源:数据结构—成绩单生成器
最新回复(0)