Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.Net语言 APP开发平台——Smobiler学习日志:快速实现手机上常见的GridView
新建MobileForm项,命名为MessageShow2,并拖入一个Image控件和三个Label控件,如图1
Amanda.li
2018/08/30
5870
.Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现线状图表
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
6040
.Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现线状图表
VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
获取或设置获取图像模式,默认设置为“File”, 表示直接从文件中读取图像,如图 4;
Amanda.li
2018/08/30
5510
VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
.Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
6920
.Net语言 APP开发平台——Smobiler学习日志:如何快速在手机上实现ContextMenu
新创建MobileForm项,并命名为MessageShow,并拖入一个Label控件和一个Image控件,如图1;
Amanda.li
2018/08/30
7730
.Net语言 APP开发平台——Smobiler学习日志:在应用中添加WeiXin组件
2. 微信开发平台注册的应用ios的Bundle ID和安卓版本的包名需和smobiler云平台应用包名一致,如图:
Amanda.li
2018/08/30
6080
.Net语言 APP开发平台——Smobiler学习日志:在应用中添加WeiXin组件
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一、目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil
Amanda.li
2018/08/30
6660
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上显示类似EXCEL表格
其中包括Height属性(列标题高度)、FontSize属性(列标题文本大小)、BackColor属性(列标题背景颜色)和ForeColor属性(列标题文本颜色),见下图;
Amanda.li
2018/08/30
9310
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上显示类似EXCEL表格
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现条形图的展示
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一、目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil
Amanda.li
2018/08/30
7300
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现条形图的展示
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现散落点图表功能
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
4750
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现散落点图表功能
.Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
4460
.Net语言 APP开发平台——Smobiler学习日志:在手机应用中开发蛛网表格
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
5780
.Net语言 APP开发平台——Smobiler学习日志:在手机应用中开发蛛网表格
.Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView
打开集合编辑器,并点击“添加”,ID属性(用于标识菜单组),Items属性(菜单项集合),Title属性(菜单组文本),Value属性(菜单组值),如图1、图2
Amanda.li
2018/08/30
6750
.Net语言 APP开发平台——Smobiler学习日志:Poplist控件的正确打开方式以及如何快速实现
PopList控件显示包括两种模式:展开模式和筛选分类模式;两种模式只能选其中一种
Amanda.li
2018/08/30
6020
.Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现跳转地图
一、目标样式 我们要实现上图中的效果,需要如下的操作: 二、跳转地图代码 VB: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.Gps1.GetGpsAsyn(Sub(s As Object, args As GPSData) Me.ShowMap(args.Latitude, args.Long
Amanda.li
2018/08/30
4910
.Net语言 APP开发平台——Smobiler学习日志:如何实现快速跳转网页
Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便
Amanda.li
2018/08/30
6480
Gridview行上下移动自己做的一个小例子(第一种方法)
今天没有什么事做,就写了一个GridView行上下移动的小例子。 方法有好多种,我先写第一种。 没有什么技术含量 思路: 把要上移或下移的id 与它的临近行的id进行互换 效果: 前台页面: 1 <
lpxxn
2018/01/31
9080
Gridview行上下移动自己做的一个小例子(第一种方法)
.Net语言 APP开发平台——Smobiler学习日志:实现在手机上调用摄像头进行扫描
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一、目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobiler Components”拖动一个Button控件到窗体界面上 2.修改Button按钮的属性 a.Size属性 设置控件的宽度和高度,见下图; b.BarcodeScanned事件代码 VB: Private Sub BarcodeButton1_BarcodeScanned(sen
Amanda.li
2018/08/30
9780
GridView实战一:自定义分页、排序、修改、插入、删除
前言:   在某次公司面试时被问到对GridView操作的熟悉程度,在那之前一直用Repeater内嵌table标签对GridView操作确实很少,于是最近在项目的后台上对GridView进行了一番实操,本文和后面的另一篇GridView实战二:使用ObjectDataSource数据源控件均是这段时间的一些总结。   GridView优点就是集数据绑定、分页、排序、删、改于一身,提高了开发效率;缺点嘛,就是运行效率低,并且它本身不带添加功能。于是GridView用于后台开发是一个不错的选择,而前台页面还是
^_^肥仔John
2018/01/18
2.9K0
GridView实战一:自定义分页、排序、修改、插入、删除
C#进阶-ASP.NET常用控件总结
ASP.NET Panel 控件用于将一组控件组织在一起,并可以通过控件的 Visible 属性来控制它们的可见性。
Damon小智
2024/03/15
4470
C#进阶-ASP.NET常用控件总结
推荐阅读
.Net语言 APP开发平台——Smobiler学习日志:快速实现手机上常见的GridView
5870
.Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现线状图表
6040
VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
5510
.Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果
6920
.Net语言 APP开发平台——Smobiler学习日志:如何快速在手机上实现ContextMenu
7730
.Net语言 APP开发平台——Smobiler学习日志:在应用中添加WeiXin组件
6080
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
6660
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上显示类似EXCEL表格
9310
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现条形图的展示
7300
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现散落点图表功能
4750
.Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能
4460
.Net语言 APP开发平台——Smobiler学习日志:在手机应用中开发蛛网表格
5780
.Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView
6750
.Net语言 APP开发平台——Smobiler学习日志:Poplist控件的正确打开方式以及如何快速实现
6020
.Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何实现跳转地图
4910
.Net语言 APP开发平台——Smobiler学习日志:如何实现快速跳转网页
6480
Gridview行上下移动自己做的一个小例子(第一种方法)
9080
.Net语言 APP开发平台——Smobiler学习日志:实现在手机上调用摄像头进行扫描
9780
GridView实战一:自定义分页、排序、修改、插入、删除
2.9K0
C#进阶-ASP.NET常用控件总结
4470
相关推荐
.Net语言 APP开发平台——Smobiler学习日志:快速实现手机上常见的GridView
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档