django框架全面讲解(Django uwsgi Nginx 的生产环境部署详解)
django框架全面讲解
Django uwsgi Nginx 的生产环境部署详解配置生产环境
|
#setting.py 文件中 DEBUG = False # 生产环境 # 允许访问的域名,域名前加一个点表示允许访问该域名下的子域名,比如 www.zmrenwu.com、 # test.zmrenwu.com 等二级域名同样允许访问。如果不加前面的点则只允许访问 zmrenwu.com ALLOWED_HOSTS = [ "127.0.0.1" , ".blogzjl.site" ] |
创建Python虚拟环境
安装 virtualenv
|
sudo pip3 install virtualenv |
克隆Python的环境
|
#先到指定目录下运行, 我的虚拟环境是在 blogzjl.site 目录下 #指定--python=python3 克隆Python3的环境 virtualenv - - python = python3 env #进入虚拟环境 source / home / zjl / sites / blogzjl.site / env / bin / activate #用户名前,会出现 (env) zjl@ ,表示进入 #后面基本上都是在虚拟环境中完成的 |
收集静态文件
先在settings中配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
同时在mysite_nginx.conf 中将静态文件的路径改为 static 的绝对路径
|
#在settings中配置 # STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹 STATIC_ROOT = os.path.join(BASE_DIR, 'static' ) #在命令行输入 python3 manage.py collectstatic #将静态文件copy到统一的目录static下 |
uwsgi配置
安装 uwsgi
|
pip3 install uwsgi #可能需要更新pip才能安装,根据提示输入命令更新 pip install - - upgrade pip |
测试 uwsgi
在项目目录下执行
|
uwsgi - - http 127.0 . 0.1 : 8080 - - file BlogProject / wsgi.py - - static - map = / static = static #--http 这个就和runserver一样指定IP 端口 #--file Django 项目中wsgi.py文件的路径,和setting.py在同一个目录下 #-- static 做一个映射,指定静态文件 #可能会启动/访问失败,请检查端口是否占用,file 或 static 路径是否正确 #使用命令 netstat -nultp 查看端口使用情况 #关掉相关经常 killall -9 uwsgi 或 kill -9 进程号 |
执行Linux命令 curl http://127.0.0.1:8080 访问,查看是否是访问成功后的页面(可以启动DEBUG 对错误页面的相关调试)
配置文件
相当于将 uwsgi --http 127.0.0.1:8080 --file BlogProject/wsgi.py --static-map=/static=static 这一长串命令配置到文件里,简化以后的启动命令
在自定义目录或项目主目录下创建uwsgi配置文件:blogzjl_uwsgi.ini(自定义命名,以 .ini 结束),我这里是在/home/zjl/sites/blogzjl.site/blogzjl/
路径下自定义的一个目录 script 存放所有配置(包括nginx)相关的文件
|
[uwsgi] #the local unix socket file than commnuincate to Nginx socket = / home / zjl / sites / blogzjl.site / blogzjl / script / uwsgi.sock # 项目路径 chdir = / home / zjl / sites / blogzjl.site / blogzjl / BlogProject / # Django's wsgi file 项目中wsgi的位置 wsgi - file = BlogProject / wsgi.py #进程相关设置 # 进程数 同 processes worker = 5 #processes = 4 #线程数 #threads = 2 #指定静态文件 static - map = / static = / home / zjl / sites / blogzjl.site / blogzjl / BlogProject / static #主进程启动 master = true pidfile = / home / zjl / sites / blogzjl.site / blogzjl / script / uwsgi.pid #static-map = /static = /home/zjl/sites/blogzjl.site/blogzjl/BlogProject/static #启动uwsgi的用户名和用户组 uid = zjl gid = zjl #启用线程 enable - threads = True #设置自中断时间 harakir = 30 #设置缓冲 post - buffering = 4096 #设置后台运行 daemonize = / home / zjl / sites / blogzjl.site / blogzjl / script / uwsgi.log #monitor uwsgi status #stats = 127.0.0.1:9191 # clear environment on exit 退出时清除环境 vacuum = true |
uwsgi 执行的相关命令
|
#启动命令 #在项目目录下 uwsgi - - ini .. / script / blogzjl - uwsgi.ini #停止 uwsgi - - stop .. / script / uwsgi.pid #重启 uwsgi - - reload .. / script / uwsgi.pid #uwsgi.pid 为 配置文件中 pidfile 设置的值 ,用来控制uwsgi重启或停止, |
uwsgi 相关配置文件参数
|
master = true #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。 chdir = / web / www / mysite #在app加载前切换到当前目录, 指定运行目录 module = mysite.wsgi # 加载一个WSGI模块,这里加载mysite/wsgi.py这个模块 py - autoreload = 1 #监控python模块mtime来触发重载 (只在开发时使用) lazy - apps = true #在每个worker而不是master中加载应用 socket = / test / myapp.sock #指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字 processes = 2 #启动2个工作进程,生成指定数目的worker/进程 buffer - size = 32768 #设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。 daemonize = / var / log / myapp_uwsgi.log # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器 log - maxsize = 5000000 #设置最大日志文件大小 disable - logging = true #禁用请求日志记录 vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件。 listen = 120 #设置socket的监听队列大小(默认:100) pidfile = / var / run / uwsgi.pid #指定pid文件 enable - threads = true #允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程 reload - mercy = 8 #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束) max - requests = 5000 #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏 limit - as = 256 #通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。 harakiri = 60 #一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启) |
nginx配置
安装nginx
|
#安装nginx sudo apt install nginx #测试是否安装成功 sudo /etc/init .d /nginx start #访问域名或地址,出现欢迎界面 #重启 sudo /etc/init .d /nginx restart #重载 sudo /etc/init .d /nginx reload #停止 sudo /etc/init .d /nginx stop |
配置文件
在在前面自定义的 script 目录下创建blogzjl_nginx.conf(文件名以nginx结尾),同时做一个软连接,把此文件生成一个快捷方式到/etc/nginx/site-enabled/目录下
|
#nginx ifconfig_file server { # 监听端口 listen 80; # 服务器的域名 或ip server_name .blogzjl.site; # substitute your machine's IP address or FQDN charset utf-8; #存放日志文件 access_log /var/log/nginx/blogzjl_access .log; #error_log /var/log/nginx/blogzjl_error.log error; gzip_types text /plain application /x-javascript text /css text /javascript application /x-httpd-php application /json text /json image /jpeg image /gif image /png application /octet-stream ; # 支持压缩的类型 # 最大上传 client_max_body_size 75M; # Django 媒体相关文件 # location /media { # alias /; # your Django project's media files - amend as required # } #Django 静态相关文件 location /static/ { alias /home/zjl/sites/blogzjl .site /blogzjl/BlogProject/static/ ; # your Django project's static files - amend as required #index index.html index.htm; expires 30d; } # 所有非媒体、静态相关通过uwsgi 交给Django服务器 处理 location / { include uwsgi_params; # the uwsgi_params file you installed uwsgi_read_timeout 60; uwsgi_send_timeout 60; uwsgi_pass unix: /home/zjl/sites/blogzjl .site /blogzjl/script/uwsgi .sock; } } |
创建软连接
|
ln -s /home/zjl/sites/blogzjl .site /blogzjl/script/blogzjl_nginx .conf /etc/nginx/site-enabled # ln -s 源文件绝对 目标文件绝对路径 #到 /etc/nginx/site-enabled/ 目录下将 default 文件删除防止其覆盖 blogzjl_nginx.conf 中的配置 |
启动 nginx 和 uwsgi
在启动前最好查看端口号,将相关进程关掉
|
#查看端口 netstat -nultp #关掉相关进程,最好关彻底,相关端口被占用的都关掉,或自行换一个端口 killall -9 uwsgi killall -9 nginx #对于还没有关掉的 kill -9 进程号 |
最后启动 uwsgi 和 nginx
|
#在项目目录下执行 #启动uwsgi uwsgi --ini .. /script/blogzjl-uwsgi .ini #启动nginx /etc/init .d /nginx start |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:http://www.cnblogs.com/crazy-zjl/p/9804275.html
- tomcat部署web项目操作(Tomcat首次部署web项目流程图解)
- docker部署高性能服务器(Docker部署SQL Server 2019 Always On集群的实现)
- docker怎么部署node-exporter(Docker搭建部署Node项目的方法步骤)
- 日常操作docker命令(SEATA事务服务DOCKER部署的过程详解)
- nginxdocker界面(Docker部署nginx实现过程图文详解)
- tomcat详细配置(Tomcat多实例部署及配置原理)
- windows server 2016 远程桌面(Windows Server 2016快速入门部署远程桌面服务的详细图文步骤)
- 阿里云申请ssl证书要好久(阿里云部署SSL证书详解)
- iis部署后浏览没有主界面(IIS 浏览aspx页面出现无法显示XML页的解决方法分享)
- docker swarm 集群(用Docker swarm快速部署Nebula Graph集群的教程)
- docker如何简化部署(Docker使用Portainer搭建可视化界面的方法)
- nginx 可以部署java吗(Java-利用Nginx负载均衡实现Web服务器)
- docker和k8s怎么部署(在docker中部署k8s的方法)
- VMware ESXi 5.5部署与配置图解过程(VMware ESXi 5.5部署与配置图解过程)
- 如何在windows上搭建ftp服务器(Windows Server 2016如何搭建部署FTP服务器)
- mac使用docker部署项目(如何在mac上用docker对Oracle进行部署使用)
- 《无敌破坏王2》 不聊彩蛋,聊聊我从动画里看到的现实那些事儿(无敌破坏王2不聊彩蛋)
- 《寄生虫》 三观不正 人类悲欢从来不相通,感同身受也并非本能(寄生虫三观不正)
- 这部动漫中的女孩子,可比101女孩更加励志(这部动漫中的女孩子)
- 《白狐的人生》热拍 贾征宇偶像包袱难自弃 图(白狐的人生热拍)
- 七夕取消了,牛郎织女没做核酸七夕已经取消(牛郎织女没做核酸七夕已经取消)
- 网友抵制 多地取消 夏日祭 为何惹众怒(网友抵制多地取消)
热门推荐
- react怎么添加动态html(react中的DOM操作实现)
- 免备案服务器云服务器(香港免备案云服务器的优势有哪些?)
- docker查看运行容器参数(Docker容器时区调整操作)
- thinkphp3.2.3 接口开发(ThinkPHP3.2.3框架Memcache缓存使用方法实例总结)
- 怎么python爬取网页图片(详解Python静态网页爬取获取高清壁纸)
- dedecms快速建站(Dedecms 生成静态页面速度优化方法)
- cssbackground(用 CSS background 实现刻度线的呈现)
- html5的占位符(html5 冒号分隔符对齐的实现)
- dockernacos教程(Docker+nacos+seata1.3.0安装与使用配置教程)
- linux搭建dhcp服务器命令(超详细讲解Linux DHCP服务)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9