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

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

作者头像
武军超
发布2019-02-25 15:14:55
1.1K0
发布2019-02-25 15:14:55
举报
文章被收录于专栏:武军超python专栏

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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档