Nginx+ uWSGI +django进行部署
一:uWSGI的安装
sudo pip install uwsgi
如果安装报错:
conda install -c conda-forge uwsgi
conda install -c conda-forge libiconv
测试 test.py:
uwsgi --http :8020 --chdir /mnt/d/hegh/projects/0806/data_plot(项目路径) -w data_plot.wsgi
一个重要的任何就是监控。知道发生了什么在生产环境中是极其重要的。stats 子系统允许你 用 JSON 输出 uWSGI 的内部数据:
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
启动测试, 可以正常访问就安装没有问题
在项目的根目录下建立以自己项目命名的配置文件data_plot.ini:
[uwsgi]
project = data_plot
base = /mnt/d/hegh/projects/0806/
socket = 127.0.0.1:8030 # 指定项目执行的端口号,用nginx的时候就要配socket
chdir = %(base)/%(project) # 指定项目的目录
wsgi-file=%(base)/%(project)/%(project)/wsgi.py # 项目上wsgi.py所在的位置,与settings目录相同
master = true # master :允许主线程存在(true)
processes = 5 # 开启的进程数量
threads=2
pidfile=data_plot.pid
daemonize=data_plot.log # 日志,uwsgi无法启动时来这查看错误日志
这将会产生 4 个进程(每个进程 2 个线程),一个主进程(当你的进程死掉时会重新 spawn 一个新的)以及 HTTP 路由器
老版(1.4 以下)的 Django(没有wsgi.py 文件) 发行版需要设置 evn, module 和 pythonpath (.. 使得我们可以访问 myproject.settings 模块)
uwsgi --ini data_plot.ini # 启动uwsgi, 一定要在django实际使用的conda环境下,否则会报错 uwsgi --stop data_plot.pid # 停止uwsgi uwsgi --reload data_plot.pid # 重启uwsgi
或者 建立一个自启脚本
sudo vi /etc/init/uwsgi.conf
内容如下 setuid的值改为你的项目名:
description "uWSGI application server in Emperor mode"
start on runlevel [2345]
stop on runlevel [!2345]
setuid data_plot
setgid www-data exec exec /mnt/d/hegh/miniconda3/envs/data_plot/bin/uwsgi --emperor /mnt/d/hegh/projects/0806/data_plot
二: 方向代理: Nginx的安装和配置
1:安装: sudo apt-get install nginx
2: 创建配置文件: sudo vim /etc/nginx/sites-available/data_plot
server{
listen 8030;
server_name localhost;
access_log /mnt/d/hegh/projects/0806/data_plot/nginx.access.log;
error_log /mnt/d/hegh/projects/0806/data_plot/nginx.error.log; location /static/ {
root /mnt/d/hegh/projects/0806/data_plot; 或者:alias /mnt/d/hegh/projects/0806/data_plot/static;
}
location /favico.ico {
root mnt/d/hegh/projects/0806/data_plot/static/img/favico.ico;
}
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8030;
}
}
然后链接文件:
sudo ln -s /etc/nginx/sites-available/data_plot /etc/nginx/sites-enabled/
检查是否有错误:
sudo service nginx configtest
出现错误,那就是配置文件写错了,自己检查一下,没有就直接启动!
sudo service nginx restart
最后输入,启动uwsgi :
uwsgi /mnt/d/hegh/projects/0806/data_plot/data_plot.ini -d /mnt/d/hegh/projects/0806/data_plot/data_plot.log
Django项目setting.py设置:
DEBUG = False
一般在开发环境中: 即settings.py中的DEBUG = True 时 , Django 会自动帮助我们处理静态文件,所以不用操心静态文件404的问题,但是在部署时,出于安全考虑,我们必须关闭DEBUG!保证自己网站的信息不泄露。只是当DEBUG关闭后,Djang就不会帮我们处理静态文件了,所以会出现样式丢失,静态文件404问题
STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
1.MEDIA_ROOT:媒体文件,所有上传的文件。示例:图像,文件
2.STATIC_ROOT 在开发过程中无用,只需要部署。
在开发中,STATIC_ROOT什么都不做。你甚至不需要设置它。Django在每个应用程序目录(myProject/appName/static)中查找静态文件,并自动提供。
当你的项目部署时,事情有所不同。很可能你将使用Django提供动态内容,Nginx将提供静态文件。为什么?因为Nginx的效率非常高,并且会减少Django的工作量。
这时候STATIC_ROOT才有用,因为Nginx不知道你的django项目,不知道在哪里找到静态文件。
所以你设置STATIC_ROOT = '/some/folder/', 并告诉Nginx寻找静态文件/some/folder/。然后运行manage.py collectstatic,Django将会从所有应用程序复制静态文件/some/folder/。
3.STATICFILES_DIRS : 静态文件的额外目录
STATICFILES_DIRS用于包含要查找的其他目录。例如,默认情况下,Django无法识别/myProject/static/。所以你可以把它设置一下。
Nginx+ uWSGI +django进行部署的更多相关文章
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- 使用Nginx+uWSGI+Django方法部署Django程序
第一步先解决uwsgi与django的桥接.解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器. 第二步解决uwsgi与Nginx的桥接.通过nginx与uws ...
- 使用Nginx+uWSGI+Django方法部署Django程序(下)
在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...
- 使用Nginx+uWSGI+Django方法部署Django程序(上)
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- Nginx+uwsgi+django+vue部署项目
购买服务器 # 购买阿里云服务器 # 短期或是测试使用,创建 按量收费 服务器,可以随时删除,删除后不再计费,但要保证账户余额100元以上 连接服务器 1)账号 >: ssh root@39.9 ...
- Nginx+Uwsgi+Django 项目部署到服务器。
首先先说一下思路: 1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的 ...
- 使用nginx+uwsgi+Django环境部署
环境准备 Python点这里 nginx点这里 uwsgi点这里
- debian完整部署 Nginx + uWSGI + Django
手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...
- [技术博客]ubuntu+nginx+uwsgi+Django+https的部署
ubuntu+nginx+uwsgi+Django+https部署文档 配置机器介绍 操作系统:Ubuntu 18.04.2 LTS 64位 python版本:Python 3.6.7 Django版 ...
随机推荐
- WebSocket实现简易的FTP客户端
WebScoket的简单应用,实现一个简易的FTP,即文件上传下载,可以查看上传人,下载次数,打开多个Web可以多人上传. 说在前面的话 文件传输协议(File Transfer Protocol,F ...
- 【故障公告】突然猛增的巨量请求冲垮一共92核CPU的k8s集群
非常抱歉,今天下午2点左右开始,博客站点突然猛增的巨量请求让k8s集群的节点服务器不堪重负,造成网站无法正常访问,由此给您带来麻烦,请您谅解. 当时k8s集群一共6台node服务器,2台32核64G, ...
- SpringCloud 2020.0.4 系列之 Stream 消息出错重试 与 死信队列 的实现
1. 概述 老话说的好:出错不怕,怕的是出了错,却不去改正.如果屡次出错,无法改对,就先记下了,然后找援军解决. 言归正传,今天来聊一下 Stream 组件的 出错重试 和 死信队列. RabbitM ...
- 印象最深的一个bug:sessionStorage缓存在移动端失效
无bug,不程序:作为程序员的我,不是修bug就是在写bug的路上. 移动端sessionStorage缓存失效是我"印象最深的一个bug"之一,为啥呢,因为这个问题导致我加班到很 ...
- [loj2504]小H爱染色
以下考虑直接对所有$F(A)$求和,并给出两种做法-- 做法1: 枚举答案$A$,对应方案数为${n-A\choose m}^{2}-{n-A-1\choose m}^{2}$,即答案为$\sum_{ ...
- javascript-初级-day01-属性操作、图片切换、短信发送模拟
大多数js就是操作一些css和html的技巧,如果你会html和css学习js更加轻松哦! js中如何获取元素: 通过id名称来获取元素; document get element by id 'li ...
- .Net Core中使用ElasticSearch(二)
.Net的ElasticSearch 有两个版本,Elasticsearch.Net(低级) 和 NEST(高级),推荐使用 NEST,低级版本的更灵活,水太深 把握不住.有个需要注意,使用的版本号必 ...
- 微信小程序-物流api
原来用的快递100的接口有变动,现有系统上不能使用了.查看快递100提供的api,探寻微信小程序端的使用情况.有几个是比较合适的:1.跳转api(https://www.kuaidi100.com/o ...
- 随笔:关于.net core单文件AOT编译
.Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...
- JavaWeb Cookie,Session
Cookie 1.Cookie翻译过来是饼干的意思.Cookie是服务器通知客户端保存键值对的一种技术.客户端有了Cookie 后,每次请求都发送给服务器.每个Cookie的大小不能超过4kb. 2. ...