Django+uWSGI+Nginx的部署

2.Django 前后端数据交互 2. 项目准备 2.1 新建项目 3.1 路由层 3.2 视图层 3.3 静态文件 1.介绍 2. 存放位置 3. 创建目录划分子目录 4.项目需要的静态文件 3.5 静态路径开放 3.6 浏览器缓存 4.1 GET请求访问服务端 4.2 GET请求提交表单数据 4.3 POST请求提交表单 4.4 Csrf中间件问题 4.5 获取POST请求数据 4.6 获取GET请求数据 4.7 获取POST后面的数据 5. 连接数据库 5.1 选择数 阅读详情

  终于,自己的第二个项目写完啦,又到了部署上线阶段,犹记得上一个项目传到服务器上只有,自己基础知识太差,捣鼓了好久都没部署成功,于是就让它运行着Django自带的简易服务器(python manage.py runserver)运行着,心里想着,这次怎么都要配置上Nginx和uWSGI,于是花了一晚上加一早上,总算是部署成功了,过程也并不是一帆风顺,遇到了很多坎,查看了很多文档、博客,但是功夫不负有心人,于是打算把这一过程记录一下。
  先了解一下大概流程,这对于我们配置这两个软件有很大的帮助,防止自己配置着配置着就迷糊了。(宽容)
  这里写图片描述


一、uWSGI部分
  说到uWSGI就不得不说WSGI,后者是python web 服务器网关接口,为一种协议,规定了django如何接收http请求并返回response,但是这仅仅是种协议、规范。uWSGI是实现了WSGI的由C语言编写的软件,通过uWSGI能获得更好的性能,uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器软件。

  • uWSGI的安装
 pip install uwsgi
  • 启动方式1:命令行模式

  • 启动方式2:配置ini文件通过固定命令启动(还有xml格式)

 `uwsgi --ini /路径/uwsgi.ini`    #通过ini配置文件启动uwsgi
 `uwsgi --stop /路径/uwsgi.pid`   #通过.pid(记录uwsgi进程号)来停止uwsgi
 `uwsgi --reload /路径/uwsgi.pid`  #通过.pid来重载uwsgi
  • ini配置文件
 [uwsgi]
    socket = 本地ip:项目所占端口   #当配合Nginx使用的时候使用socket
    http = 本地ip:项目所占端口    # 当只用uwsgi时用http
    chdir=/root/home/fog_detect_env/FogDetect   # 更改路径到项目目录
    wsgi-file=fog_test/wsgi.py   # 项目里的wsgi文件位置
    processes=4    # 代表启用4个进程
    threads=2        # 代表每4个进程使用2个线程
    master=true
    pidfile=%(chdir)/fog_uwsgi/uwsgi.pid      # 存放uwsgi进程号的文件存放位置
    daemonize=%(chdir)/fog_uwsgi/uwsgi.log     # 存放uwsgi进程日志的文件存放位置

    vacuum = true
    home = //root/home/fog_detect_env    # 若果项目放在虚拟环境中,则这个指向虚拟环境存放路径
    max-requests = 5000       # 最大同时连接数
一些其他的常见的配置选项(参考自 http://www.cnblogs.com/fnng/p/5268633.html )
http : 协议类型和端口号

processes : 开启的进程数量

workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)

chdir : 指定运行目录(chdir to specified directory before apps loading)

wsgi-file : 载入wsgi-file(load .wsgi file)

stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)

threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 允许主进程存在(enable master process)

daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

pidfile : 指定pid文件的位置,记录主进程的pid号。

vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

如果是先测试uwsgi, 可以先将socket 改为 http = 本地ip:项目所占端口
uwsgi就好像是连接Nginx与django应用的桥梁。


二、Nginx部分
  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,它占有内存少,并发能力强.

  • 负载均衡:将接收到的请求按某种算法合理地分配到各个性能不一的服务器上面。
  • 反向代理:隐藏真实的服务器。
  • 静态文件处理:将项目的静态文件收集起来,将静态文件的请求交给Nginx处理。

  • Nginx的安装:
    sudo apt-get install nginx #默认安装到/etc/nginx 下面

  • Nginx的使用:

 /etc/init.d/nginx  start    # 启动Nginx
/etc/init.d/nginx  stop     # 停止Nginx
/etc/init.d/nginx  restart    # 重启Nginx
  • Nginx的配置:
      Nginx的主要配置文件为/nginx/nginx.conf ,我们可以将要配置的项目信息写到这里,但是最新版的nginx配置文件中,将项目配置信息通过include xxx给解耦到同级目录下的sites-enable文件夹下了,这样,我们就可以在sites目录下配置我们每个项目的配置文件了。(跟Django中的urlconf模式一样)
    我们先在sites-avaliable目录下创建一个xxx.conf文件存放项目的配置信息,配置信息如下
 server {
    listen 8080;  # 监听端口
    server_name fog_detect;   # 服务器名称
    charset utf-8;   #指定字符集
    client_max_body_size 75M;

   location / {
       uwsgi_pass 172.31.135.11:8001;   # 重点,这个文件与uwsgi.ini里的socket一样,
       include /etc/nginx/uwsgi_params;   # 这个就是在nginx目录下自带的,通过着两个配置,将Nginx与uwsgi关联起来
   }

   location /static {
       alias /var/www/fog_detect/static;  # 项目的静态文件存放地址(收集静态文件之后的存放地址)
   }

   location /media {
       alias /root/home/fog_detect_env/FogDetect/media;    # 上传到项目中的文件存放地址
   }

    }

三、静态文件收集
  其实静态文件可以交给Nginx来处理,而不必再令uwsgi来处理,这样耦合度更低,效率更高。
收集静态文件首先要配置Django里的settings文件。在末尾添加
   

STATIC_ROOT = '/var/www/项目名/static/'

 这里要先在该位置创建对应的文件夹,然后给予读写权限(chmod 777 /xx/xx),至于为什么选择放在这里,我暂时还没有研究过,不知道是不是能随便选个文件目录。总之以后每增加一个项目,都将之收集到这里来。
settings配置完之后,进入到manage.py文件所在目录,如果是有虚拟环境,那么要先进入虚拟环境,运行
   

python manage.py collectstaic

 这样,所有的静态文件(除了自己写的css,js,图片文件,还有django自带的admin后台静态文件)都被收集(复制?)到static_root所指定的路径下了

最后,重新启动uwsgi和Nginx,然后通过浏览器访问自己设置的域名或者公网ip:server里监听的端口号就可以看到项目已经被部署好了。
这样,我的项目部署也算是完成了。对于nginx和uwsgi也算是入门了吧。


一些我遇到的坎(待续):

1.nginx安装不成功,错误为nginx-core以及另外两个包安装不成功
 原因:之前我已经配置安装过一次,但是没成功,就暂时搁置了,后来有些文件没删除干净,导致产生了冲突,
办法: 将上一次配置的烂摊子全部删除掉
参考办法:https://segmentfault.com/a/1190000014027697?utm_source=tag-newest

2.uwsgi.ini文件配置好后启动不成功
 原因未知,删除了uid和pid配置选项后就正常运行了。

3.nginx -t出现错误
 原因: .conf配置文件中键值对中间写成了 : (冒号),应该为空格
4.nginx一直启动失败:
 我是因为没有意识到我装了两个Nginx,一个是之前编译安装的,一个是我get-apt install nginx的,两中安装方式文件存放位置不一样,前者默认位置为/usr/local/nginx/, 后者默认位置为/etc/nginx,等我意识到这之后,我已经来来回回辗转着两个文件夹n次了
 解决办法: 根除上次安装过的Nginx就行了。

我未完成的(待续):

1.一个nginx配置多个项目

  • emperor/vassal皇帝/臣子模式
  • uwsgi 的vhost模式

一些看了很有帮助的参考文档:
uwsgi官方文档(中文) : https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/index.html
django+nginx+uwsgi部署教程: http://www.cnblogs.com/fnng/p/5268633.html

OpenWebUI联网搜索实战:如何用SearXNG让本地大模型获取实时信息(附百度/360配置) 本文详细介绍了如何通过部署开源元搜索引擎SearXNG,为本地运行的OpenWebUI大语言模型(如Qwen、Llama)配置联网搜索功能,解决其知识库过时的问题。文章重点讲解了SearXNG的Docker部署、集成国内搜索引擎(如百度、360)的配置方法,以及如何与OpenWebUI无缝对接,从而实现本地大模型获取实时、准确的中文信息,提升其实用性。 阅读详情

相关推荐

基于8086微机原理数字钟计时器系统设计

*单片机设计介绍,基于8086微机原理数字钟计时器系统设计。

2201_75940997的博客 1279

Django后端接收VUE前端数据的两种方法

vue前端向Django后端传输数据,最大的区别是Django后端的接收方式,下面会针对两种不同的Django后端接收方式进行说明。

m0_56118578的博客 3544

Matlab实战:用递归最小二乘法(RLS)搞定动态系统参数辨识(附完整代码)

本文通过Matlab实战,详细介绍了如何利用递归最小二乘法(RLS)进行动态系统参数辨识。文章从理论优势切入,提供了完整的仿真数据生成、RLS算法核心实现代码,并对参数收敛过程、预测误差及不同遗忘因子的影响进行了可视化分析与性能评估,为工程实践提供了清晰的指南。

weixin_29035405的博客 504

Django接受前端数据的几种方法

菲律宾猴子真是逗,各种被国际打脸,什么乱七八糟的狗屁裁决,是中国的就是中国的,祖国领土是神圣不可侵犯的。背景测试工具箱写到一半,今天遇到了一个前后端数据交互的问题,就一起做一下整理。环境版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:PyCharmDjango: 1.8.2注: 我测试的是Get方法,POST方法也同样适用字符型字符型的数据相对好获取,前

点点寒彬的博客 8671

RGB接口电容触摸屏驱动(一)模块介绍

RGB接口电容触摸屏驱动(一)模块介绍

杰克拉力船长个人博客 7877

2021年J题:基于STM32F103的周期信号波形识别与参数测量系统设计(立创EDA+SZPT_ZXL)

本文详细复盘了2021年全国大学生电子设计竞赛J题获奖项目,手把手教你如何基于STM32F103微控制器设计并实现周期信号波形识别与参数测量系统。文章深入剖析了硬件电路设计(包括程控放大、工作点抬升与滞回比较器)与核心软件算法(如动态采样、FFT频谱分析与波形识别逻辑),并分享了DMA传输、FFT库使用等实战要点与避坑指南,为嵌入式信号处理与电赛备赛提供了宝贵经验。

weixin_32673065的博客 230

django接收数据

1、params django 中接收前端post传递的params class IntoLibraryViews(APIView): def get(self, *args): data = { 'msg': '成功', 'status': status.HTTP_200_OK } return Response(data) def post(self, request, *args):

watermelon 663

用 SemanticObject 把字段变成可点击链接:Fiori Elements Navigation Using a Link 的工程化实践

SAP Fiori elements 通过 Common.SemanticObject 注解可将字段转为可点击链接,实现应用间跳转。当源字段名与目标属性名不一致时,需使用 Common.SemanticObjectMapping 进行映射。该功能依赖 Fiori Launchpad 的目标映射配置,确保正确解析 semantic object + action 并传递参数。常见误区包括未配置目标映射或字段映射错误,需逐一检查语义标注、intent 解析和参数传递链路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

django http 收发_django 接收 post请求

post请求根据 request header 中的 Content-Type 的不同,相应的处理也不同1、Content-Type : multipart/form-data 或者 application/x-www-form-urlencoded 类型。x-www-form-urlencoded 类型必须 符合 key=value&key=value 的书写方式,可以在前端 imp...

weixin_28725407的博客 732

QT里获取UUID当做唯一文件名称

QT里获取UUID当做唯一文件名称

545

这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%!

大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的!

BUG猿的博客 1182

用Docker部署Django+uWSGI+Nginx

部署Django+uWSGI+Nginx+Docker选择一台主机登入创建centos容器安装Python解释器安装Django项目的依赖库尝试运行Django测试服务器运行uWSGI服务器运行Nginx服务器制作Docker镜像 部署Django+uWSGI+Nginx+Docker 在生产环境中部署Django项目时,有挺多麻烦,本文分成多个步骤: 选择一台主机登入 安装Python解释器...

LeoHsiao的博客 5815

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Django项目进行进行uwsgi+nginx部署

19/100发布文章 博文管理我的博客退出 Trash Temp Django项目uwsgi+nginx 添加摘要 添加摘要 @TOC 使用uwsgi、nginx进行Django项目的服务器部署 文章使用前提: Django项目已经开发完成 已经将文件上传至服务...

qq_17328759的博客 7350

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

nginx+uwsgi部署django

上次有一篇写了centos7上Django的安装与服务器的搭建,但每次运行项目都要执行 python manage.py runserver 0.0.0.0:8000 在开发测试的时候这样是可以的,但是在实际运营中,肯定是不能这样的,所以需要部署一下。 有好几种部署方法,这里就介绍nginx+uwsgi部署的方法。   首先确保服务器上装好了python、pip、django,并确保都可

smile的博客 6454

使用Nginx+uWSGI部署Django项目

Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目。本教程介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。创建部署Django项目的ECS实例,ECS实例必须满足以下条件:实例已分配公网IP地址或绑定弹性公网IP(EIP)。具体操作,请参见。

1891

Nginx+uwsgi部署Django项目

上篇文章,记录了我使用了Apache部署django项目,然而现在的主流是使用Nginx+uwsgi来部署,这里记录了nginx部署的过程,并趟了一些小坑。 环境 Ubuntu 18.04 Anaconda python3.5 安装 sudo apt-get install python-dev nginx sudo pip install uwsgi --upgrade Djnago项目 在这...

lsj1342的博客 958

Nginx+uWSGI部署Django项目

Django作为一个Web框架,需要一个Web服务器才能运行。Django主要部署平台是WSGI,它是Web服务器和应用程序的Python 标准。通常使用Nginx与uwsgi配合使用。

积跬步,至千里。 2613

利用uWSGI和Nginx部署Django

主要内容来自于 https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html 系统情况: Ubuntu 14.04.2 LTS (实际是麒麟版) python3 version 3.5.2(源上直接apt-get) pip3 version 8.1.1(源上直接apt-get) 若无特殊指代,loca...

风海流的豪赌 1114

Linux下Nginx+uwsgi部署Django项目

Linux下Nginx+uwsgi部署Django项目 前言 Hey,大家好呀,我是码农,星期八! 通常情况下,要求不是太苛刻的,不是鸡蛋里挑骨头的需求,为了快和方便! 使用Python的web框架Django是一个不错的选择! 但是默认情况下,直接跑性能是很差的!需要借助其他方式,提高性能! 一般在Linux系统下,采用的方式为Nginx+uwsgi+Django。 项目 项目已经放在了gitee上! 备份的sql文件也在上面,导入即可! gitee地址:https://gitee.com/stark30

tianyi19的博客 2041

django+uwsgi+nginx 部署笔记

以下是我的真实配置,其中server_name用过_来表示所有IP遇到nginx报错冲突大概意思是配置文件只能有一处有这种通配所有IP地址的设置,翻了下nginx.conf应该是没有,但anyway用了公网IP地址在这里是正确的配置,表明nginx会监听这个IP地址的80端口,下面uwsgi_pass配置的是nginx会转发的端口,用公网IP地址行不行没试过。ini文件的名称可以随便其,文件的内容参考如下,里面还可以加一些参数如输出的日志文件的地址,pid文件的地址等。更加详细的部署细节可以参考。

m0_66899341的博客 832

使用nginx和uwsgi部署django项目

使用nginx和uwsgi部署django项目 首先在服务器安全组添加: 8000/8000 9000/9000 80/80 3306/3306 1、安装数据库,数据库可以使用mysql或者mariadb。 (1)mysql数据库 yum install -y mysql-server mysql yum install -y mysql-devel service mysqld start #启动mysql服务 (2)mariadb数据库 yum install -y mariadb-serv

qq_42486675的博客 9869

Django + uWSGI + Nginx 的生产环境部署,及WSGI & uwsgi & uWSGI 的作用

uWSGI的 介绍 看这里 Nginx Nginx是一个Web服务器,其中的HTTP服务器功能和uWSGI功能很类似 但是Nginx还可以用作更多用途,比如最常用的反向代理、负载均衡、拦截攻击等,而且性能极高 Django Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。 所以如何部署Django不是Django所需...

H_sen's Blog 3178

Nginx+uWsgi部署Django项目

最近需要部署一个Django项目但是不能用宝塔面板!呜呜呜 不能懒人式一键部署了那就学习一下黑框框部署吧。

lonelysnowman的博客 1286

django项目中nginx+uwsgi 部署

完成了python的安装,接下来安装python的依赖包和项目的依赖包 命令: yum -y install python-devel 安装Django1.8.2 pillow django-ckeditor5.4.0 pip3 install django==1.8.2 pip3 install pillow ...

jkx521的博客 714
上一篇: 优雅地合并python里的字典
下一篇: 工作准备(1)...(待续)
codeMore++
博客等级 码龄9年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值