阿里云ubuntu宝塔面板部署uni-app-flask-websocket前后端项目

1.下载宝塔面板
 

wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

然后去安全组开放对应的端口

========================面板账户登录信息==========================

 【云服务器】请在安全组放行 29725 端口

进入控制面板后修改默认用户名和密码
 

2. 打包uni-app文件并部署到服务器

将上面的前端打包文件放到 /www/wwwroot路径下

然后建站的时候选择前端项目即可

部署成功后,在浏览器输入你的ip即可访问,我们可以看一下宝塔面板的nginx设置

server
{
    listen 80;
    server_name 8.130.*******;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/circle-meeting-qian;
    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/8.130.*****.conf;
    #CERT-APPLY-CHECK--END

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/8.130.********.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /www/wwwlogs/8.130.*****.log;
    error_log  /www/wwwlogs/8.130.*******.error.log;
}

但是令我惊奇的是,我发现,打开ip,不仅仅前端有了,后端也有了,好吧,打包的时候忘记改前端对应的后端ip了,一会再打包一下吧

3.后端部署

我的后端用的是flask

 它这里有三个运行方式,我选择gunicorn

开发阶段:使用 Python 内置服务器,简单快速。
生产环境:
简单需求:选择 Gunicorn,易于配置和使用,性能优异。
复杂需求:选择 uWSGI,功能强大,性能卓越,但需要更多的配置和调优。

还有两个网络协议

WSGI:优点:设计简单,广泛支持,适合大多数传统 Web 应用。
缺点:不支持异步处理,无法有效处理高并发和长连接。
典型框架:Django(在同步模式下)、Flask。
ASGI:优点:支持异步处理,高性能,适合现代 Web 应用和高并发场景。
缺点:设计复杂,学习和实现成本较高。
典型框架:FastAPI、Starlette、Django(在异步模式下)。
选择使用 WSGI 还是 ASGI 主要取决于应用程序的需求。如果你的应用程序需要处理高并发、长连接或异步任务,ASGI 是更好的选择。如果你的应用程序是传统的同步 Web 应用,WSGI 可能更简单且足够用。

但这里后端启动之后报错,说flask和asgi不合适,所以修改如下以后,后端正式启动

 4.善后

现在访问ip还是会报错,原因是打包的前端文件里访问的是本地的后端接口,改为我的ip才对

1)http方面

前端项目中localhost改为ip

2)websocket方面

this.socket = io('http://localhost:5000');改为this.socket = io('http://ip:5000');

完活 

一切似乎都正常,前后端也都通了,但是我发现当进行websocket连接时,是不是的会断开,甚至根本就连接不上

报错

pages-chat-chat.B6oNTNVC.js:1 WebSocket connection to 'ws://8.130.115.10:5000/socket.io/?EIO=4&transport=websocket&sid=h0nfXpwAa2V9_X-RAAAC' failed: pages-chat-chat.B6oNTNVC.js:1 GET http://8.130.115.10:5000/socket.io/?EIO=4&transport=polling&t=P3RB3mt&sid=h0nfXpwAa2V9_X-RAAAC 400 (BAD REQUEST)
pages-chat-chat.B6oNTNVC.js:1 WebSocket 连接关闭
pages-chat-chat.B6oNTNVC.js:1 POST http://8.130.115.10:5000/socket.io/?EIO=4&transport=polling&t=P3RB3nO&sid=h0nfXpwAa2V9_X-RAAAC 400 (BAD REQUEST)
pages-chat-chat.B6oNTNVC.js:1 WebSocket connection to 'ws://8.130.115.10:5000/socket.io/?EIO=4&transport=websocket&sid=oqCU2SaUBDJdX0PpAAAE' failed: 
pages-chat-chat.B6oNTNVC.js:1 连接成功
pages-chat-chat.B6oNTNVC.js:1 WebSocket 连接成功
/#/pages/chat/chat?r…AE%25BA&tableId=2:1 The resource https://8.130.115.10:29725/static/vite/fonts/element-icons.woff was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
/#/pages/chat/chat?r…AE%25BA&tableId=2:1 The resource https://8.130.115.10:29725/static/vite/woff2/svgtofont.woff2?t=1716970518429 was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
pages-chat-chat.B6oNTNVC.js:1 WebSocket 连接关闭"Invalid session"

经过搜索,我好像发现了问题

将进程改为1后
 不再出现websocket连接失败问题,但是出现了新问题,新开一个页面后
如果第一个页面依旧存在websocket连接

第二个页面再次进行websocket连接,页面则会不显示
最后终于解决了问题,我修改了gunicorn.conf.py

# 项目目录
chdir = '/www/wwwroot/circle-meeting-hou'# 指定进程数
workers = 1  # 对于 eventlet,建议使用单个 worker# 指定每个进程开启的线程数
threads = 2  # 如果使用 eventlet,这个参数通常会被忽略# 启动用户
user = 'root'# 启动模式
worker_class = 'eventlet'  # 更改为 eventlet 以支持实时通信# 绑定的 ip 与端口
bind = '0.0.0.0:5000' # 设置进程文件目录(用于停止服务和重启服务,请勿删除)
pidfile = '/www/wwwroot/circle-meeting-hou/gunicorn.pid'# 设置访问日志和错误信息日志路径
accesslog = '/www/wwwlogs/python/circle-meeting-hou/gunicorn_access.log'
errorlog = '/www/wwwlogs/python/circle-meeting-hou/gunicorn_error.log'# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
# debug:调试级别,记录的信息最多;
# info:普通级别;
# warning:警告消息;
# error:错误消息;
# critical:严重错误消息;
loglevel = 'info' # 自定义设置项请写到该处
# 最好以上面相同的格式 <注释 + 换行 + key = value> 进行书写, 
# PS: gunicorn 的配置文件是 python 扩展形式,即".py"文件,需要注意遵从 python 语法,
# 如:loglevel的等级是字符串作为配置的,需要用引号包裹起来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML 相册2.0 通过css 获取图片资源 2024/7/22 日志

简单方法通过css 绕过同源策略 以获取资源 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>水面倒影…

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前&#xff0c;我们需要回答两个关键问题&#xff1a;建模的目标用户是谁&#xff1f;他们的具体需求是什么&#xff1f;在一个典型的时序数据管理方案中&#xff0c;数据采集和数据应用是两个主要环节。如下图所示&#xff1a; 对于数据采集工程师…

EXCEL怎么自动添加表格吗?

第一步&#xff0c;选中需要添加表格的范围 第二步&#xff0c;点击开始&#xff0c;选择条件格式&#xff0c;“使用公式确定要设置格式的单元格” 第三步&#xff0c;编辑规则说明加上<>"" 第四步&#xff0c;点击边框&#xff0c;选择外边框确定即可&#x…

电脑没有摄像头怎么用手机当摄像头?虚拟摄像头使用的详细教程来了(全)

随着科技水平以及全球化经济的快速发展&#xff0c;视频会议、在线课程和直播已经成为日常办公或者生活中必不可少的一个环节。然而&#xff0c;在如今仍有许多台式电脑和一些老旧的笔记本电脑并没有内置摄像头&#xff0c;亦或者自带的摄像头质量不够理想&#xff0c;这使得视…

1小时上手Alibaba Sentinel流控安全组件

微服务的雪崩效应 假如我们开发了一套分布式应用系统&#xff0c;前端应用分别向A/H/I/P四个服务发起调用请求&#xff1a; 但随着时间推移&#xff0c;假如服务 I 因为优化问题&#xff0c;导致需要 20 秒才能返回响应&#xff0c;这就必然会导致20秒内该请求线程会一直处于阻…

跟代码执行流程,读Megatron源码(四)megatron训练脚本initialize.py之initialize_megatron()分布式环境初始化

在前文中&#xff0c;我们讲述了pretrain函数的执行流程&#xff0c;其首要步骤是megatron分组的初始化与环境的配置。本文将深入initialize_megatron函数源码&#xff0c;剖析其初始化分布式训练环境的内部机制。 注&#xff1a;在此假设读者具备3D并行相关知识 一. initiali…

react入门到实战-day2-7.21

昨天晚上刚学完已经一点了&#xff0c;来不及写笔记&#xff0c;主要是想睡觉哈&#xff0c;所以今天补上&#xff0c;我发现效率还挺高的&#xff0c;今天重新做笔记&#xff0c;加固了昨天的知识点&#xff0c;要不以后都这样子哈&#xff0c;学完第二天再写哈&#xff0c;要…

【Linux】从零开始认识多线程 --- 线程ID

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 1 前言 上一篇文章中讲解了线程控制的基本接口&#xff1a; 线程创建pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);: pthread_t *thread :输出…

OpenCV分水岭算法watershed函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 我们将学会使用基于标记的分水岭算法来进行图像分割。我们将看到&#xff1a;watershed()函数的用法。 任何灰度图像都可以被视为一个地形表…

【数据结构_C语言】归并排序—文件类型

文章目录 1.排序定义2. 代码实现 1.排序定义 内排序&#xff1a;数据量相对少一些&#xff0c;可以放到内存中排序。 外排序&#xff1a;数据量较大&#xff0c;内存中放不下&#xff0c;数据放到磁盘文件中&#xff0c;需要排序。 归并排序&#xff1a; 2. 代码实现 void…

Flask 框架 redirect() url_for()

url_for url_for 函数根据传入的端点名称&#xff08;即路由函数名&#xff09;生成对应的 URL。 1. url_for() url_for 函数根据传入的端点名称&#xff08;即路由函数名&#xff09;生成对应的 URL。 它接受一个或多个参数&#xff0c;其中第一个参数是路由的名称&#x…

挖掘基于边缘无线协同感知的低功耗物联网 (LPIOT) 的巨大潜力

关键词&#xff1a;边缘无线协同感知、低功耗物联网(LPIOT)、无线混合组网、用电监测、用电计量、多角色、计量插座、无线场景感知、多角色运用、后台边缘层&#xff0c;网络边缘层&#xff0c;场景能效管理&#xff0c;场景能耗计算 在数字化和智能化日益加速的今天&#xff…

甄选范文“论面向方面的编程技术及其应”,软考高级论文,系统架构设计师论文

论文真题 针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程(Aspect Oriented Programming,AOP)技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一般系统中的某些通用功能,如安全性、持续性、日…

C++ —— STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本…

【Java】中的List集合

目录 一、什么是List集合二、List的常用方法List的初始化元素操作1.添加元素2.删除元素3.修改元素4.查询元素 三、List集合的遍历1.for循环遍历2.增强for循环3.迭代器遍历 一、什么是List集合 List集合是最常用的一种数据结构之一。它具有动态扩容、元素添加、删除和查询等基础…

【Linux学习】常用基本指令

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a;Linux学习 目录 &#x1f308;前言&#x1f525;XShell的一些使用查看Linux主机IP使用XShell登录主机XShell下的复制粘贴 &#x1f525;Linux下常用基本指令ls指令pwd指令cd指定touch指令…

MSP430单片机快速上手CSS开发环境(24电赛省赛)

前言&#xff1a;3天学完MSP430单片机&#xff0c;为了对应电赛&#xff0c;同时写下这篇笔记&#xff0c;用来熟悉对应开发环境&#xff0c;看的懂对应代码。 #MSP430开发环境安装 MSP单片机是TI&#xff08;德州仪器&#xff09;半导体厂家产的&#xff0c;一款16位单片机…

【机器学习】机器学习解决的问题特点、机器学习学的是什么、怎么学、如何构建高效机器学习模型的策略、机器学习的分类以及机器学习、模式识别、数据挖掘和人工智能的区别

引言 机器学习是人工智能的一个重要分支&#xff0c;主要解决的是如何通过算法让机器从数据中自动学习规律和知识&#xff0c;以完成特定任务或解决特定问题。 文章目录 引言一、机器学习解决的是什么样的问题1.2 数据驱动的预测问题1.3 数据理解与挖掘1.4 优化与决策问题1.5 异…

如何开启或者关闭 Windows 安全登录?

什么是安全登录 什么是 Windows 安全登录呢&#xff1f;安全登录是 Windows 附加的一个组件&#xff0c;它可以在用户需要登录的之前先将登录界面隐藏&#xff0c;只有当用户按下 CtrlAltDelete 之后才出现登录屏幕&#xff0c;这样可以防止那些模拟登录界面的程序获取密码信息…

华为云技术精髓笔记(四)-CES基础入门实战

华为云技术精髓笔记(四) CES基础入门实战 一、监控ECS性能 1、 远程登录ECS 步骤一 双击实验桌面的“Xfce终端”打开Terminal&#xff0c;输入以下命令登录云服务器。注意&#xff1a;请使用云服务器的公网IP替换命令中的【EIP】。 LANGen_us.UTF-8 ssh rootEIP说明&#x…