前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ubuntu上web项目的部署,:uwsgi, uwsgi + nginx, uwsgi+nginx分布式部署

ubuntu上web项目的部署,:uwsgi, uwsgi + nginx, uwsgi+nginx分布式部署

作者头像
武军超
发布于 2019-02-25 07:14:55
发布于 2019-02-25 07:14:55
1.1K0
举报

Ubuntu中pip和pip3区别: pip默认给python2用,pip3默认给Python3使用

django中有runserver可以运行项目为什么还要部署: 因为runserver是一个单线程的服务器,不支持多线程访问

项目部署有三种方式: 1. uwsgi 2. uwsgi + nginx(充当静态资源服务器和反向代理) 3. uwsgi + nginx分布式部署(充当静态资源服务器和负载均衡)

########################################################################################## 项目部署需要在ubuntu服务器上安装的东西: 1. python 2. Django 3. MySQL 4. 项目依赖的库

win需要安装的东西: xshell, xftp ########################################################################################## Ubuntu: 可以先更新一下软件包: sudo apt-get update 1.安装python3: sudo apt-get instal python3 2.安装pip3: sudo apt-get install pip3 如果无法定位软件包: apt install python3-pip 3.安装MySQL数据库: sudo apt-get install mysql-server 4. 安装Django sudo apt-get install django==1.11 5.也可以一次性安装所有的依赖库: 进入本机项目开发的环境下,把文件通过xftp传送到ubuntu中: pip freeze > requirements.txt 到ubunu的环境下: pip3 install -r requirements.txt

6.uWSGI项目部署,uwsgi是python的一个模块,要确保它的安装 pip3 instal uwsgi ########################################################################################## 4. 在ubuntu上安装xshell和xftp的服务器实现远程访问和文件传输。 ubuntu上实现远程访问: 1.sudo apt-get install  openssh-server 2.cd /etc/ssh 3.sudo vim sshd_config 4.修改:PermitRootLogin yes 5.重启服务 service sshd restart 6.ifconfig  查看IP 远程连接 7.在另一台电脑上可以通过xsheel这样的工具输入ubuntu的IP和设置的root密码即可访问!

ubuntu上实现xftp远程传输 1. sudo apt-get install vsftpd 2.cd /etc/ 3.sudo vim vsftpd.conf 4.修改以下(把前面的#删掉):     write_enable=YES     local_umask=022     anon_upload_enable=YES     anon_mkdir_write_enable=YES 5.重启服务     service vsftpd restart 6.在另一台电脑上可以通过xftp这样的工具输入ubuntu的IP和设置的root密码即可进行文件传输! ########################################################################################## 一:将项目部署在uwsgi服务器上: 首先在ubuntu的主目录下创建一个文件夹用于放置项目: mkdir work 修改部署文件的文件夹权限chmod 777 work 将本机的整个项目压缩成一个压缩包通过xftp放到work文件夹下 解压zip文件, unzip 压缩包名,检查项目完整性 进入项目的setting文件查看项目连接的是哪种数据库以及数据库名称:more setting.py, 如果是mysql 进入Mysql: mysql -u root -p 连接接入数据库 创建setting文件中指定的数据库:create database 数据库名称 default charset 'utf8'; show databases; use 数据库名称

同步数据,切换到项目主目录下: python manage.py makemigrations python manage.py migrate

如果有初始数据需要先从本机数据库的可视化工具中以SQL格式导出数据,查看的时候只需用inset语句,用于同步完迁移文件生成表后,mysql命令行执行insert语句插入原始数据

查看表,查看插入的原始数据 select * from 表明; 查看所有的插入数据

ubuntu在主项目下创建静态文件夹用于收集静态文件: mkdir static_file 使用pwd复制绝对路径,在setting文件的静态文件区域添加,让django知道静态文件应该去哪里找: STATIC_ROOT='将静态文件的绝对路径复制过来' 保存退出之后运行命令收集静态文件: python manage.py collectstatic

两种项目运行方式: 1.uwsgi --http=本机Ip:port --file=shopping/wsgi.py --static-map=/static=static_file 2.uwsgi --http=本机Ip:port --file=shopping/wsgi.py --static-map=/static=static_file & 表示在后台运行,前台就看不到了 ########################################################################################## 但是这样运行太过繁琐,推荐使用的方式: 在项目的主目录下创建usigi.ini文件,通过配置所需要的选项启动uwsig服务: vim uwsgi.ini  [uwsgi] http: 192.168.37.128:8000 chdir = /home/damu/work/shopping(写自己项目主目录) wsgi-file = shopping/wsgi.py(wsgi文件的路径) processes = 4 (开启四个进程) threads = 2(每个进程开启两个线程) master = true pidfile=uwsgi.pid daemonize = uwsgi.log(记录日志) static-map=/static=static_file wq! 保存退出 运行: uwsgi --ini uwsgi.ini 可以去usgi的官方文档查看更详细的配置 ########################################################################################## 二:uwsgi + nginx(反向代理)项目部署 使用第一种方式对静态文件支持不是太友好 uwsgi: 用于部署web程序应用 nginx作用: 反向代理,静态文件服务器 使uwsgi服务器停止运行: uwsgi --stop uwsgi.pid 检查服务是否停止: ps -ef|grep uwsgi

修改uwsgi.ini文件: 将http注释掉,修改为: socket: 127.0.0.1:8000 static-map注释掉 wq! 保存退出

安装nginx: apt-get install nginx 也可以下载nginx源代码(nginx.tar.gz)->解压->make & make install

1.修改nginx配置文件: /etc/nginx/nginx.conf 添加虚拟服务器配置[server]:     添加反向代理路由配置[location - uwsgi_pass]     添加静态文件服务器路由配置[location - alias] 重启nginx 修改nginx配置文件具体步骤: vim nginx.conf找到http{}这一个模块,配置服务器,直接在模块内部的最后追加: server{     listen 80;     server_name 服务器ip或者域名;     # 下面是反向代理的配置     location / {         include uwsgi_params;         uwsgi_pass 127.0.0.1:8000;     }     # 下面是静态文件的配置     location / static{         alias /home/damu/work/shopping/static_file;(前面收集的静态文件的文件夹路径)     } } wq!保存退出 输入nginx启动nginx服务器 ps -ef|grep nginx 查看服务是否启动

然后在地址栏输入服务器Ip不需要加端口就可以直接访问

备注: nginx对于静态文件的处理优于uwsgi uwsgi对于动态请求的操作非常优秀,所以用nginx反向代理让uwsgi处理动态请求 也可以把django项目单独部署在nginx服务器上,但是步骤非常繁琐 ##########################################################################################

三:uwsgi + nginx 分布式部署 当并发请求数据特别巨大的情况下,第二种部署方式就不一定能满足! 此时就需要分布式项目部署操作 1.单服务器模式[伪分布式] 在一台服务上边用uwsgi部署多个项目或者多个相同的项目,使用nginx做静态资源服务器和负载均衡,负载均衡就是当客户端发来请求,负责请求的分发,发往不同的uwsgi服务器,静态服务器直接去静态文件查询对应的数据,这就是一台服务器的配置模型 先把服务器停下: uwsgi --stop uswgi.pid

1.uwsgi.ini改造: 将uwsgi的接受请求的方式,修改为http方式[nginx由反向代理的角色->请求分发] 进入主项目下的uwsgi.ini文件: [uwsgi] http = 127.0.0.1:8001 ... 下面的都一样 wq!保存 启动项目: uwsgi --ini uwsgi.ini

然后将同一个项目部署多份: cp -rf shopping shopping2 然后修改shopping2中的uwsgi文件端口改为8002 chdir最后边改成shopping2 wq!保存 启动项目: uwsgi --ini uwsgi.ini

2.nginx配置 cd /etc/nginx vim nginx.conf 在http{}中server中配置静态文件服务器 location / static {     alias /home/damu/work/shopping/static_file;(前面收集的静态文件的文件夹路径) }

同时在nginx.conf的http中配置负载均衡: upstream myweb {     server ip:port;(本地ip127.0.0.1:不同的端口号)     server ip:port;     ... } http的server中: location / {     proxy_pass http://myweb; } wq!保存 退出一下nginx nginx -s quit 再启动nginx nginx 使用xshell另外开两个链接窗口分别进入两个shopping项目: tail -f uwsgi.log 命令是实时查看uwsgi.log最后10行的日志更新。

备注: 默认情况下, nginx的负载均衡,请求轮询发给所有的后端服务器 一般会把项目部署多份uwsgi服务器,当有内容需要更新的时候,先进入一个项目的主目录停止一个uwsgi服务器uwsgi --stop uwsgi.pid,这时另外的uwsgi服务器是会正常工作的,更新完内容后再启动这个服务器就会自动恢复与nginx的连接(因为nginx一直在于后台服务器发送心跳连接,实时监控后台服务器的运行情况),以这样的方式依次把所有的项目都更新完成

2.多服务器模式[分布式集群] 模型就是把项目部署到多台服务器上,然后在任何一台服务器上部署nginx都可以,只需部署一个nginx,然后修改nginx的 在uwsgi.ini的http中末尾配置负载均衡: upstream myweb {     server ip:port; (ip和端口写各个服务器的IP和端口)     server ip:port;     ... }

百度不同省份都有自己的nginx前端服务器 nginx + uwsgi整个称为web的服务端,nginx在软件架构上称为前端服务器,uwsgi在软件架构上称为后端服务器

########################################################################################## uwsgi服务器的启动: uwsgi --ini uwsgi.ini uwsgi服务器的停止: uwsgi --stop uwsgi.pid

退出nginx: nginx -s quit 启动nginx: nginx

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
传统图像处理算法总结
normalize = true 时,方框滤波就变成了均值滤波。也就是说,均值滤波是方框滤波归一化(normalized)后的特殊情况。
全栈程序员站长
2022/08/29
2.2K0
传统图像处理算法总结
数字图像处理知识点总结概述
1.直方图:一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。
小白学视觉
2022/09/28
1.8K0
手背静脉识别的图像处理算法
手背静脉识别技术作为一种全新的特征识别技术,相比于传统的生物识别技术(如指纹识别)具有许多明显的优势,然而对于该技术的研究尚处于刚刚起步阶段,使用计算机来直接进行静脉识别与身份匹配仍然较为困难,为了方便后续特征识别,提高静脉识别的准确度和优越性,有必要对获取的静脉图像进行一系列处理,得到静脉的骨架结构。 题目主要要求为: 1.对采集图像进行背景去除,取得手背部分; 2.计算采集手背的质心并提取手背有效区域; 3.提取手背静脉走势; 4.对提取的静脉进行细化处理,去除毛刺; 5.改进算法,提高程序的通用性和适普性; 6.在图像分割上尝试不同的方法,并比较结果的好坏。
全栈程序员站长
2022/08/29
9381
手背静脉识别的图像处理算法
OpenCV与图像处理(十)
图像处理是利用计算机对图像进行去噪、增强、复原、重建、编码、压缩、几何变换、分割,提取特征等的理论、方法和技术。图像处理中,输入的是低质量的图像,输出的是改善质量后的图像。
Must
2020/07/27
1.4K0
OpenCV图像处理笔记(二):图片操作进阶
一、图像模糊 1、模糊原理 Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算 通常这
MiChong
2020/09/24
1.2K0
OpenCV图像处理笔记(二):图片操作进阶
【深度学习】图像数据增强部分笔记
图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计算的是图像的边缘信息。
杨丝儿
2022/02/28
1.1K0
【OpenCV】Chapter8.形态学图像处理
形态学的基本思想是利用结构元素测量或提取输入图像中的形状或特征,以便进行图像分析和目标识别。
zstar
2022/09/27
1.2K0
【OpenCV】Chapter8.形态学图像处理
图像处理开发者必读
小编作为一个图像与计算机视觉的开发者,总结了一下作为图像处理开发工程师应该知道或者掌握的图像处理知识点。跟大家分享一下,以备大家学习方便。 图像像素操作 - 几何运算-加减乘除 - 逻辑运算-与或非取反 - 像素读写 - 通道混合与调整 - 对比度与亮度调整 图像几何变换 - 插值(zoom in或out) - 旋转(rotate) - 透视变换 - 错切变换 - 翻转 像素统计 - 计算均值与方差 - 计算直方图 - 计算最大最小 - 计算像素内方差 色彩空间 - RGB
OpenCV学堂
2018/04/04
7400
万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文
期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~
全栈程序员站长
2022/11/04
2.1K0
万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文
OpenCV图像处理常用手段
模糊处理在边沿检测和去噪声方面有较为广泛的应用。OpenCV中提供了4种模糊算法,列举如下:
小白学视觉
2020/08/19
8690
数字图像处理测验题
V={0,1,2}时,D4=无穷大,D8=无穷大,Dm=无穷大;V={2,3,4}时,D4=无穷大,D8=4,Dm=5。
客怎眠qvq
2022/11/01
1.3K0
数字图像处理测验题
荐读:FPGA设计经验之图像处理
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
1.4K0
荐读:FPGA设计经验之图像处理
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
HSV 的色相范围为 [0,179],饱和度范围为 [0,255],值范围为 [0,255]。不同的软件使用不同的规模。
机器视觉CV
2019/07/15
3.1K0
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
【计算机视觉】基础图像知识点整理
在数字图像中,各像素点的亮度或色彩信息,即每个像素点的取值称为灰度,一幅图像所包含的灰度总数称为灰度级。
zstar
2022/06/14
1.6K0
【计算机视觉】基础图像知识点整理
OpenCV图像处理(二)
zeros 相当于创建一张黑色的图,每个像素的每个通道都为0,Scalar(0,0,0);
AnieaLanie
2021/12/24
5530
利用MATLAB进行图像处理-基础技术与实例
图像处理是计算机科学和工程中一个重要的领域,广泛应用于医疗、工业、安防等多个行业。MATLAB作为一种强大的数学软件,提供了丰富的工具箱和函数,方便进行图像处理。本篇文章将介绍MATLAB图像处理的基础技术,并结合代码实例进行详细解析。
一键难忘
2025/01/13
2850
[图像处理] Python+OpenCV实现车牌区域识别
这里原理推荐我以前C++图像处理的文章,如下:https://blog.csdn.net/column/details/eastmount-mfc.html
统计学家
2019/04/23
4.7K0
[图像处理] Python+OpenCV实现车牌区域识别
形态学运算与仿真:图像处理中形态学操作的简单解释
形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。
deephub
2023/08/28
6730
形态学运算与仿真:图像处理中形态学操作的简单解释
Python生成图像API
常用的图像处理技术有图像读取,写入,绘图,图像色彩空间转换,图像几何变换,图像形态学,图像梯度,图像边缘检测,图像轮廓,图像分割,图像去噪,图像加水印以及修复水印等
KINGLIFE
2022/04/20
6920
【计算机视觉】基础图像知识点整理
在数字图像中,各像素点的亮度或色彩信息,即每个像素点的取值称为灰度,一幅图像所包含的灰度总数称为灰度级。
zstar
2022/06/09
1.5K0
【计算机视觉】基础图像知识点整理
推荐阅读
相关推荐
传统图像处理算法总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档