前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >uwsgi部署

uwsgi部署

作者头像
lesM10
发布于 2019-08-26 09:16:32
发布于 2019-08-26 09:16:32
1.6K02
代码可运行
举报
运行总次数:2
代码可运行
  1. django项目目录下 新建uwsgi.ini文件, 并写入以下的配置。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[uwsgi]
# 使用nginx连接时 使用
#socket=127.0.0.1:8080
# web服务器(web服务器 监听的ip:port)的地址, 即 未部署uwsgi 运行django项目(runserver), 所访问的地址前缀(127.0.0.1:8000/index)
http=127.0.0.1:8080
# Django项目 所在的绝对路径
chdir=/Users/leesam/PycharmProjects/dailyfresh
# 相对于项目目录,wsgi.py文件所在的相对路径
wsgi-file=dailyfresh/wsgi.py
# 指定(用来接收 用户请求的)工作进程数目,整个uwsgi服务的 进程数 多于 该数目
processes=4
# 指定工作进程中的线程数
threads=2
# 指定 在所有的工作进程中 有个master进程
master=True
# 保存 工作进程中的master进程 的pid,uwsgi.pid文件的位置 在项目目录下
pidfile=uwsgi.pid
# 使uwsgi后台运行,日志保存在uwsgi.log
daemonize=uwsgi.log
# 虚拟环境所在绝对路径
virtualenv=/Users/leesam/PycharmProjects/dailyfresh/venv
  1. uwsgi的启动与停止
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动
# 如果不在 uwsgi.ini文件所在的目录,需要指定uwsgi.ini的路径
$ uwsgi --ini /Users/leesam/PycharmProjects/dailyfresh/uwsgi.ini
# 执行该命令后,会在项目目录下 生成uwsgi.pid uwsgi.log两个文件

# 停止
# uwsgi --stop /Users/leesam/PycharmProjects/dailyfresh/uwsgi.pid
  1. 修改dailyfresh/uwsgi.py, 来对接 调度nginx(该nginx在mac上) 修改dailyfresh/uwsgi.py,去掉http=127.0.0.1:8080, 加上socket=127.0.0.1:8080
  2. 配置nginx, 把请求转发给uwsgi 修改mac上的nginx配置,来对接uwsgi
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       server {
                listen 80;
                server_name localhost;

                # the splash '/' below this line represents: 
                # 不管你是什么地址,只要配置“location /” 一律是执行该配置
                location / {

                        # 包含uwsgi的请求参数
                        include uwsgi_params;
                        # 转交请求给uwsgi,下面的127.0.0.1:8080是uwsgi的ip:port
                        uwsgi_pass 127.0.0.1:8080;
                }
        }
  1. 在/usr/local/var/www/目录下,新建static目录,用来存放 静态文件。

$ mkdir /usr/local/var/www/static

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在nignx中添加配置
server {
                listen 80;
                server_name localhost;

                # the splash '/' below this line represents: 
                # 不管你是什么地址,只要配置“location /” 一律是执行该配置
                location / {

                        # 包含uwsgi的请求参数
                        include uwsgi_params;
                        # 转交请求给uwsgi,下面的127.0.0.1:8080是uwsgi的ip:port
                        uwsgi_pass 127.0.0.1:8080;
                }

                location /static {
                        # 指定静态文件存放的路径
                        alias /usr/local/var/www/static/;
                }
        }

6 . 在Django项目settings.py文件中 添加静态目录配置项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定 DJANGO静态文件存放的路径
STATIC_ROOT = '/usr/local/var/www/static/'

修改/usr/local/var/www/static/目录的权限,使得django可以向其中 写入文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ chmod 777 /usr/local/var/www/static/

django收集静态文件的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 该命令会把项目中用到的静态文件 放到STATIC_ROOT指定的路径中
$ python manage.py collectstatic

重启nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 重启nginx
$ nginx -s reload

用户请求-服务流程

  1. 配置调度nginx服务器(即mac上的nginx),使其 可以访问celery所在的nginx服务器。 鉴于 调度nginx服务器 和 celery所在的nginx服务器 在同一台主机上,是不是就不用配置了?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        server {
                listen 80;
                server_name localhost;

                # the splash '/' below this line represents: 不管你是什么地址,只要配置“location /” 一律是执行该配置
                location / {

                        # 包含uwsgi的请求参数
                        include uwsgi_params;
                        # 转交请求给uwsgi
                        uwsgi_pass 127.0.0.1:8080;
                }

                # 请求的地址 以/static开头,会匹配到该目录下
                location /static {
                        # 指定静态文件存放的路径
                        alias /usr/local/var/www/static/;
                }

                # 'location = / {}' 表示只匹配'/',多点东西 或者 少点东西 都不行
                location = / {
                        # 传递请求 给celery服务器上的 nginx,但是celery和调度nginx在同一台主机上,是不是就不用传递了?
                        proxy_pass http://10.211.55.2:8989;
                }
        }
  1. 调度nginx负载均衡
  • 复制django项目 下的 uwsgi.ini 为 uwsgi2.ini。并修改各自文件中的socket=127.0.0.1:8080 socket=127.0.0.1:8081。
  • 配置调度nginx的负载均衡
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加
upstream dailyfresh {

                server 127.0.0.1:8080;
                server 127.0.0.1:8081;

}

server {
                listen 80;
                server_name localhost;

                # the splash '/' below this line represents: 不管你是什么地址,只要配置“location />一律是执行该配置
                location / {

                        # 包含uwsgi的请求参数
                        include uwsgi_params;
                        # 转交请求给uwsgi
                        #uwsgi_pass 更改为dailyfresh;
                        uwsgi_pass dailyfresh;
                }

                # 请求的地址 以/static开头,会匹配到该目录下
                location /static {
                        # 指定静态文件存放的路径
                        alias /usr/local/var/www/static/;
                }

                # 'location = / {}' 表示只匹配'/',多点东西 或者 少点东西 都不行
                location = / {
                        # 传递请求 给celery服务器上的 nginx,但是celery和调度nginx在同一台主机上,是>不是就不用传递了?
                        proxy_pass http://10.211.55.2:8989;
                }
        }

配置 提供静态页面的nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
                listen 8989;
                server_name localhost;

                location /static {
                        alias /Users/leesam/dailyfresh/static/;
                }
                location / {
                        root /Users/leesam/dailyfresh/static/;
                        index index.html index.htm;
                }
        }

由于当初 提供静态页面的nginx 没有和 fdfs的nginx放在一起,导致静态页面 可能获取不到图, css 和js等资源。


配置完后的访问模型图:

uwsgi+nginx 部署图

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
Vue自定义组件:解密v-model,轻松实现双向数据绑定
Vue.js作为一款现代化的JavaScript框架,以其简洁、高效和灵活的特性,成为了前端开发的热门选择。在Vue中,v-model指令是实现双向数据绑定的重要工具,它使得开发者可以轻松地将数据绑定到表单元素上,并能自动响应用户的输入。
anyup
2023/11/17
1K0
Vue自定义组件:解密v-model,轻松实现双向数据绑定
Vue 自定义组件实现v-model双向绑定
现在就可以灵活自定义自己的双向绑定组件了,如果组件使用频繁的话,可以注册到全局组件,就不用一次次引入了。
前端小tips
2021/12/10
2.6K0
Vue 自定义组件实现v-model双向绑定
Vue自定义组件如何使用v-model
我们在使用vue的时候如果想实现双向数据绑定,就会使用v-model,代码如下:
挥刀北上
2019/07/19
3.4K0
vue v-model 双向绑定
v-model 双向绑定,用于处理表单输入绑定,类似于 react 中的受控组件。
jgrass
2024/12/25
1270
vue v-model 双向绑定
Vue2/3 自定义组件的 v-model 到底怎么写?💎
在使用第三方UI组件库时会发现可以在他们的组件上使用 v-model ,比如 Element-UI 或者 Element-plus 的 el-input 就可以使用 v-model 进行数据绑定。
德育处主任
2022/09/09
8600
Vue2/3 自定义组件的 v-model 到底怎么写?💎
Vue - 自定义组件双向绑定
无论在任何的语言或框架中,我们都提倡代码的复用性。对于Vue来说也是如此,相同的代码逻辑会被封装成组件,除了复用之外,更重要的是统一管理提高开发效率。我真就接手过一个项目,多个页面都会用到的列表,没有去封装列表组件,只要有一点改动,每个页面都得加上。很肯定的说,没有用组件化开发的Vue项目是没有灵魂的。所以如何封装一个优雅且复用性高的组件成为我们必需的技能。
WahFung
2020/08/24
1.1K0
Vue - 自定义组件双向绑定
Vue组件的操作-自定义组件,动态组件,递归组件
创建双向数据绑定,v-model指令用来在input,select,checkbox,radio等表单控件。v-model指令在内部使用不同的属性为不同的输入元素抛出不同的事件。
达达前端
2019/12/20
2.1K0
Vue实现双向数据绑定的4个方法
使用 v-model 指令可以很方便地实现双向数据绑定。以下是使用 v-model 指令实现双向数据绑定的步骤:
王小婷
2023/09/02
4.7K0
如何实现 Vue 自定义组件中 hover 事件以及 v-model
在Vue中,它会变得更复杂一些,因为我们没有内置这个功能。我们必须自己实现这些。不过别担心,工作量不是很大。
前端小智@大迁世界
2020/05/11
21.2K0
vue-自定义组件传值
项目中,我们经常会遇到自定义组件传值的问题,方法很多种,但是原理很简单,下述文档总结实际项目中使用的传值方式。
庞小明
2018/08/01
6420
vue-自定义组件传值
vue v-model与.sync详解
用过vue的小伙伴应该都知道,使用表单绑定值的时候,我们通常会用到一个 v-model 指令,它可以在表单以及元素上面创建双向数据绑定
用户4396583
2024/09/27
1500
Vue3 | 父子组件间通信、组件间双向绑定的高级内容、插槽详解、动态组件、异步组件
前面的笔记 —— 《Vue3 | 组件的定义及复用性、局部组件、全局组件、组件间传值及其校验、单项数据流、Non-props属性》,单向数据流的概念, 即子组件无法修改来自父组件的数据字段, 如果确要修改,可以使用下面说的方式进行通信: 首先,在子组件的UI点击回调方法中,调用this.$emit('【自定义事件名】'), 向外发送一个事件; 接着各级父组件会收到这个事件, 则在父组件中 调用 子组件标签处, 以 @【事件名】= "回调方法名"的形式,监听该事件以及配置回调方法; 回调方法中即可 对 子组件意图修改 的 父组件数据字段 进行修改;
凌川江雪
2021/03/23
6.4K0
Vue3 | 父子组件间通信、组件间双向绑定的高级内容、插槽详解、动态组件、异步组件
vue ---- 组件传值之间使用 v-model
  1、父组件使用:msg.sync="aa" 子组件使用$emit('update:msg', 'msg改变后的值xxx')
小蔚
2019/09/11
1.3K0
关于 v-model 你需要知道的这一切!
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2021/04/01
1.1K0
关于 v-model 你需要知道的这一切!
vue中的v-model刨根问底
关于v-model用过vue的应该都知道,用着那是相当的丝滑,但很多人可能并没有深究过其原理,而且随着vue版本的更新,也有些新的用法被大家遗漏,所以就有了这一篇对v-model的刨根问底。
人人都是码农
2023/11/16
3230
使用v-model对父子组件进行双向绑定
在vue中,通常父子组件通信,我们使用的是props,但是有的场景,我们需要对父子组件进行双向绑定。这时我们会用到v-model自定义组件。
_kyle
2020/09/10
2.8K0
Vue3从入门到精通(二)
在Vue3中,侦听器的使用方式与Vue2相同,可以使用watch选项或$watch方法来创建侦听器。不同之处在于,Vue3中取消了immediate选项,同时提供了新的选项和API。
明志德道
2023/10/21
4730
7.vue组件(二)--双向绑定,父子组件访问
子组件通过属性props: ["cmessage"], 来接收父组件的message属性. 并且父组件修改message的值, 子组件跟随改变
用户7798898
2021/03/04
1.1K0
7.vue组件(二)--双向绑定,父子组件访问
vue3封装一个自定义v-model的hooks
1.props中定义一个modelValue值,并绑定到input的value属性上;
CRMEB商城源码
2022/07/27
2K0
Vue03基础语法--Vue组件+样式绑定+修饰符+常用控件+自定义指令+自定义事件
定义语法:new Vue({el:'#d1',components:{组件名:{配置选项}}})
天蝎座的程序媛
2022/11/18
1.3K0
推荐阅读
相关推荐
Vue自定义组件:解密v-model,轻松实现双向数据绑定
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档