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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券