从零开始的网站搭建(以照片/文本/视频信息通信网站为例)
本文面向已经有一些编程基础(会至少一门编程语言,比如python),但是没有搭建过web应用的人群,会写得尽量细致。重点介绍流程和部署云端的步骤,具体javascript代码怎么写之类的,这里不会涉及。
搭建网站分为两步:首先在本地搭建网站,测试可以运行;然后把网站移动到服务器,让大家都可以访问。
本地搭建网站
首先了解web程序的运行逻辑:
- 用户通过浏览器输入网址(URL)
- 浏览器通过域名系统(DNS)将用户输入的网址转换为服务器的 IP 地址
- 浏览器根据解析到的 IP 地址,向相应的服务器发起请求
- 服务器接收到请求后,返回结果(这个结果可能是一个html网页,或者一张图片,或者一段文本,之类的)
- 浏览器收到服务器响应后,开始解析 HTML、CSS 和 JavaScript 等文件(HTML 定义网页结构,CSS 控制网页样式,JavaScript 负责动态交互和功能实现)
- 浏览器将解析后的内容渲染并展示给用户
要先搭建一个可以在本地运行的web程序,然后再把它部署到云端,让大家都可以访问。我以手头的项目为例,讲解web网站的搭建过程。
设计网站界面和功能
这个web网站的功能是这样的:它有两个页面,问询方和回答方。
- 问询方可以拍摄照片或者录制视频,针对拍摄到的内容提出问题,然后把拍摄到的内容发送给回答方;
- 发送之后,回答方会收到图片或视频,然后回答方输入答案的文本,点击发送;
- 然后问询方收到答案,并且在无障碍模式下可以自动朗读出来
我设计的问询方网页如下(问询方在手机端使用):上面四个按钮,下面一行文本显示答案。
回答方的网页如下(回答方在pc端使用):上面显示视频(图片),下面输入框可以输入文本,然后一个发送按钮
这部分的代码会上传到 github
根据设计的网页,写前端代码
根据设计的界面,使用 html 和 css 和 javascript 把前端写好(HTML 定义网页内容,有哪些文字、图片之类的;CSS 控制网页样式,字体多大、按钮颜色、大小之类的;JavaScript 负责动态交互和功能实现,例如点下按钮之后拍摄照片,之类的功能);这些都比较简单,实在不行你问问 ai 也能帮你搞定大部分。
这部分代码贴在这里非常累赘,所以就不贴了;如果有需求可以去找github上的仓库。
根据设计的功能,写后端代码
选择你熟悉的后端语言,这里选择 python;
然后选择合适的框架,python 写的 web 框架有 Django、Flask等,因为这是个小项目,所以这里选择 python;
另外,根据设计的网站功能,这里要实现双向通信(就是一方发送消息之后,另一方要实时收到该信息),在后端用 flask_socketio
这个包;在前端用 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js"></script>
Flask 入门的教程非常多,这里不赘述了。
需要强调的地方:因为这里用 Socket.io,在 javascript 里面,本地部署的时候是这么写的:
var socket = io.connect('http://127.0.0.1:8099');
但是部署到服务器的时候,需要修改:
const socket = io.connect('https://你的域名.com');
不然实时通信通不了的!
把网站部署到服务器
要把能够在本地运行的程序部署到云端,需要:
- 一个云服务器,一般是租
- 一个公网ip,一般是租一个弹性公网ip
- 一个备份过的域名,备份流程大约是半个月左右,建议尽早准备
这里以阿里云服务器租赁为例:
租好服务器之后,进入服务器控制台,选择“安全组”选项卡,选择操作中的“管理规则”,选择手动添加,添加常用端口,例如:
- 80端口 - 用于HTTP(超文本传输协议)通信,即普通的Web浏览。
- 443端口 - 用于HTTPS(HTTP Secure)通信,即安全的Web浏览,通过SSL/TLS加密。
- 22端口 - 用于SSH(安全壳协议),用于安全登录到远程服务器。
- 53端口 - 用于DNS(域名系统),负责将域名解析为IP地址。
- 自己的web程序使用的端口
然后登陆到服务器,把本地文件上传到服务器,然后开始部署程序。
首先要学习一下部署web程序需要的软件:反向代理和WSGI服务器。它们具体是什么作用呢?
用户的请求通过互联网到达你的云服务器之后:
- 首先通过反向代理服务器(通常是nginx)接收用户的请求
- 然后 nginx 将动态请求转发给WSGI(Web Server Gateway Interface)服务器(对于python后端的程序而言,常用的有Gunicorn、uWSGI、Waitress等,这里用的是简单的Gunicorn);Nginx 会添加一些请求头信息(例如 Host、X-Real-IP),以便 Gunicorn 和 Flask 能够正确处理请求
- Gunicorn 接收到 Nginx 转发的请求后,根据请求的 URL 和方法(GET、POST 等),调用 Flask 应用中对应的路由函数
- Flask 程序处理请求,并生成响应,将生成的响应(HTML、JSON 或其他数据)返回给 Gunicorn
- Gunicorn 将 Flask 生成的响应(包括状态码、响应头和响应体)返回给 Nginx
- Nginx 将最终的响应返回给用户的浏览器
此处Nginx的作用:
- 负载均衡:
- 将请求分发到多个后端服务器,提升系统性能和可靠性。(但一般个人网站都只有一个后端服务器啦)
- 安全性:
- 隐藏后端服务器的真实 IP 地址,防止直接攻击。
- 提供 SSL 终止,加密客户端与反向代理之间的通信。
- 静态文件处理:
- 直接处理静态文件请求,减轻后端服务器的负担。
- 缓存:
- 缓存常用资源,减少后端服务器的负载,提升响应速度。
此处 WSGI 服务器的作用:Python Web 应用与 Web 服务器之间的标准接口。它定义了 Web 服务器如何将请求传递给 Python Web 应用,以及应用如何返回响应。此时,WSGI 服务器作为中间层,连接 Web 服务器(如 Nginx)和 Python Web 应用。
所以我们先安装和配置 nginx,然后再安装和配置 WSGI(这里选择 Gunicorn)
安装和配置 nginx
请看保姆教程:
Linux系统下安装配置nginx(保姆级教程)
Linux系统下安装配置 Nginx 超详细图文教程
这里主要是配置比较难,因为该项目用了 Socket.io,而且还有服务器网址和本地网址傻傻分不清楚。Nginx 的配置文件通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/sites-available/
路径下面。这里贴上我的配置文件:
server {# listen 80 default_server;# listen [::]:80 default_server;# listen 80;listen 443 ssl; # 因为我这要访问摄像头,所以需要 https 协议,监听443端口,并且安装 ssl 证书server_name yourDomainName.com; # 换成你的域名,要通过实名备份才能访问ssl_certificate /etc/nginx/cert/pem文件; # 替换成你申请的ssl证书,把证书放在这个地址下面。这个文件夹是你自己创建的。ssl_certificate_key /etc/nginx/cert/key文件; # 同上ssl_session_cache shared:SSL:10m;ssl_session_timeout 4h;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 设置加密套件ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;client_max_body_size 100m; # 这个参数需要调整,因为我要传视频,如果这个参数比较小,长一点点的视频就传不上来# SSL configuration## listen 443 ssl default_server;# listen [::]:443 ssl default_server;## Note: You should disable gzip for SSL traffic.# See: https://bugs.debian.org/773332## Read up on ssl_ciphers to ensure a secure configuration.# See: https://bugs.debian.org/765782## Self signed certs generated by the ssl-cert package# Don't use them in a production server!## include snippets/snakeoil.conf;# root /var/www/html;# Add index.php to the list if you are using PHP# index index.html index.htm index.nginx-debian.html;# server_name _;location / {proxy_pass http://0.0.0.0:8099; # 将匹配到的请求转发给指定的后端服务器,该参数指定后端服务器的地址,这个参数很重要proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 解决跨域问题add_header Access-Control-Allow-Origin *; #解决跨域问题add_header Access-Control-Allow-Methods 'GET,POST';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Origin,Accept'; #解决跨域问题# proxy_set_header X-Forwarded-Proto $scheme; # fix flask redirect生产环境 从https到http跳转# First attempt to serve request as file, then# as directory, then fall back to displaying a 404.# try_files $uri $uri/ =404;}#用Nginx访问Flask静态文件 #静态文件在static的子目录或更低层的子目录中location /static/(.*) {root /home/eye_help_flask/; # 这里的路径是绝对路径,xxx是指static目录的上级目录,一般是网站根目录}location /wss/ { proxy_pass http://0.0.0.0:8099/; #通过配置端口指向部署websocker的项目proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-real-ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;}# 因为该程序用了 Socket.IO 双向通信,所以得配置这个location /socket.io/ {proxy_set_header Origin '';proxy_pass http://127.0.0.1:8099/socket.io/;proxy_http_version 1.1; # WebSocket 需要 HTTP/1.1 协议proxy_set_header Host $host; # 传递客户端请求的 Host 头。proxy_set_header X-Real-IP $remote_addr;proxy_set_header Upgrade $http_upgrade; # 将请求头 Upgrade 设置为 websocket,表示协议升级。proxy_set_header Connection "upgrade"; # 将请求头 Connection 设置为 upgrade,表示连接升级。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_read_timeout 600s;}
}
解释一些关键的参数,这些参数配错了会很麻烦:
location /path/ {proxy_pass http://backend_server} : proxy_pass
用于将匹配到的请求转发给指定的后端服务器。它是 Nginx 反向代理功能的核心配置之一。其中location /path/
是匹配请求的 URL 路径,http://backend_server
:指定后端服务器的地址。协议与后端使用的保持一致,后端用https
这里也用https
,反之亦然。这里填的是http://0.0.0.0:8099
,其中0.0.0.0
表示监听所有可用的网络接口(即所有 IP 地址),如果你的后端服务器(如 Gunicorn)运行在同一台机器上,通常会绑定到 0.0.0.0
,以便 Nginx 可以通过本地网络访问它。如果后端服务运行在其他服务器上,可以使用外部 IP 或域名,例如http://192.168.1.100:8080;
。8099
是端口号,因为我的 Gunicorn 设置监听该端口,所以填这个。如果你的不是监听该端口,要修改该参数,不然会出错的。Nginx 需要通过这个端口与后端服务器通信。
另外,这里的尾部斜杠也是有影响的。proxy_pass
的 URL 是否以斜杠结尾会影响 Nginx 如何转发请求路径。具体规则如下:
proxy_pass
的 URL 以斜杠结尾,Nginx 会将 location 匹配的路径部分去掉,然后将剩余部分附加到proxy_pass
的 URL 后。- 例如
location /api/ {proxy_pass http://backend-server/;}
- 请求:
http://yourdomain.com/api/user
- 转发:
http://backend-server/user
(/api/
被去掉)
- 例如
proxy_pass
的 URL 不以斜杠结尾,Nginx 会将 location 匹配的完整路径附加到proxy_pass
的 URL 后。- 例如
location /api/ {proxy_pass http://backend-server;}
- 请求:
http://yourdomain.com/api/user
- 转发:
http://backend-server/api/user
(/api/
被保留)
- 例如
如何判断后端服务使用的是 HTTP 还是 HTTPS?
如果你有后端服务的访问权限,可以直接查看其配置文件或启动命令。例如,Gunicorn 的启动命令:gunicorn -b 0.0.0.0:8000 your_app:app
默认使用 HTTP。如果使用 HTTPS,通常会指定证书和密钥:gunicorn -b 0.0.0.0:8000 --keyfile key.pem --certfile cert.pem your_app:app
最后,配置好之后记得重启一下 nginx!
安装和配置 Gunicorn
请看保姆教程:Gunicorn简介、安装、配置、启动
这里我的配置文件如下:
bind = '0.0.0.0:8099'
user = 'root'
workers = 1
threads = 1
daemon = True
backlog = 512
worker_class = 'eventlet'
chdir = '/home/eye_help_flask'
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
loglevel = 'info'
errorlog = chdir + '/logs/error.log'
accesslog = chdir + '/logs/access.log'
pidfile = chdir + '/logs/ddq.pid'
我的启动命令如下:
gunicorn -c gunicory_conf.py app:app
重启 gunicorn命令如下:
- 通过执行如下命令,可以获取Gunicorn进程树:
pstree -ap|grep gunicorn
- 重启Gunicorn任务
kill -HUP 主进程号
遇到过的一些奇怪 bug
- iOS 摄像头画面黑屏:在 video 的属性上加上 playsinline
- 调用
Navigator.vibrate()
但没反应:ios不许而且Safari会有奇怪的错误 - ios 自动播放声音失效:因为 ios 不许,别想了,换一个方法吧
- 点拍摄照片,用 createObjectUrl 生成前缀为 blob 的 url ,图片无法显示,报错为 net::ERR_FILE_NOT_FOUND
在 edge 浏览器内拍照,另一个页面可以显示;但是在 Google 浏览器的就无法显示。查到 图片路径前缀有blob?图片渲染不出来? 说如果数据库的图片地址前缀带有blob://,那么可能是因为在上传图片时,使用了Blob URL来表示图片。在JavaScript中,Blob URL是通过URL.createObjectURL(blob)方法创建的,其格式为blob://加上一个由浏览器自动生成的32位十六进制的字符串。用Blob URL表示的图片是存储在浏览器的内存中,而不是存储在硬盘上,所以当你在另一个页面中打开这个URL时,就无法访问该图片。
相关文章:
从零开始的网站搭建(以照片/文本/视频信息通信网站为例)
本文面向已经有一些编程基础(会至少一门编程语言,比如python),但是没有搭建过web应用的人群,会写得尽量细致。重点介绍流程和部署云端的步骤,具体javascript代码怎么写之类的,这里不会涉及。 搭…...
netcore 启用gzip压缩及缓存
public void ConfigureServices(IServiceCollection services) {....// 配置gzip 与 br的压缩等级为最优services.Configure<BrotliCompressionProviderOptions>(options > {options.Level CompressionLevel.Optimal;});services.Configure<GzipCompressionProvid…...
c++入门-------命名空间、缺省参数、函数重载
C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…...
elf_loader:一个使用Rust编写的ELF加载器
本文介绍一个使用Rust实现的ELF加载器。 下面是elf_loader的仓库链接: github: https://github.com/weizhiao/elf_loaderhttps://github.com/weizhiao/elf_loader crates.io: https://crates.io/crates/elf_loaderhttps://crates.io/cra…...
postman调用ollama的api
按照如下设置,不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住:110,1-12,之后所有数学计算必…...
鸿蒙5.0实战案例:基于ArkUI的验证码实现
往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…...
通俗理解什么是云原生?
by deepseek。 一、核心理念:云原生到底是什么? 1. 一句话定义 云原生(Cloud Native) 是一种构建和运行应用程序的方法论,它利用云计算的优势(弹性、分布式、自动化),让软件从设计…...
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matlab2024b 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频…...
什么是完全前向保密(PFS)?
在当今数字化时代,信息安全至关重要。而密码学中的完全前向保密(Perfect Forward Secrecy,简称PFS)技术,已经成为保障信息安全的关键一环。如果没有完全前向保密,一旦长期密钥被泄露,攻击者就可…...
Oracle备库srvctl start丢失某个原有的service_names的案例
最近在测试主备环境中使用srvctl添加新的service之后,srvctl start发现其中一个原本用于主备同步的service丢失了。 原始的参数文件中的service_names参数值如下(数据库中service_names的值也一样,省略查看步骤): [oraclesmartdbstb01 202502…...
重学SpringBoot3-怎样优雅停机
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机?2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制 3.1 Tomcat 优雅停机3.2 Reactor Netty 优…...
SkyWalking集成Kafka实现日志异步采集经验总结
SkyWalking日志异步采集架构 【重点知识】 1、【Agent】kafka-reporter-plugin-x.x.x.jar包放plugins目录后必走kafka(kafka没有正确配置就会报错) 2、【Agent】异步如不开启数据压缩,日志数据较大,pod多、业务大时容易造成网络…...
图论 之 BFS
文章目录 3243.新增道路查询后的最短距离1311.获取你好友已观看的视频 BFS:广度优先搜索(BFS) 是一种常用的算法,通常用于解决图或树的遍历问题,尤其是寻找最短路径或层级遍历的场景。BFS 的核心思想是使用队列(FIFO 数…...
rust学习笔记5-所有权机制
rust核心就是所有权机制,是其内存管理的核心特性,旨在消除内存安全问题(如空指针、悬垂指针、内存泄漏等)而无需依赖垃圾回收(GC) 1.首先看一下语义模型 当声明一个变量 let a "32";它的语义模…...
网站快速收录:如何优化网站404页面?
优化网站404页面是提升用户体验和SEO效果的重要一环。以下是一些优化404页面的建议: 一、设计友好的404页面 简洁明了的提示信息:使用清晰的语言告诉用户该页面不存在或已被删除,避免使用过于技术化的术语。 提供导航链接:在40…...
关于order by的sql注入实验
实验描述 本实验基于sqli-lab的第46关进行测试 本关的sql 语句为$sql "SELECT * FROM users ORDER BY $id" 利用sort进行sql注入,我们可以利用报错注入,延时注入来爆出数据 1.报错注入 1.手工测试 爆出数据库 ?sort(extractvalue(1, c…...
Docker(Nginx)部署Vue
简介:目标使用docker将vue生成的dist文件,结合nginx生成镜像,然后运行; 1、首选确保vue项目正确运行,并能正确打包dist文件; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件…...
从函数到神经网络
一、从函数到神经网络 所有一切的前提是,你要相信这个世界上的所有逻辑和知识,都可以用一个函数来表示。Functions describe the world ! 比如输入物体的质量和加速度,根据牛顿第二定律,就可以得到物体施加的力,这就是…...
Python 字符串格式化 print
Python 字符串格式化 print flyfish 1. 使用百分号(%)操作符进行字符串格式化 百分号(%)操作符是 Python 中比较传统的字符串格式化方式,它的使用方式类似于 C 语言中的 printf 函数。 # 格式化整数 num 10 print…...
LabVIEW 中的 Bluetooth.llb 库
Bluetooth.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录,它是 LabVIEW 平台下用于蓝牙通信相关操作的重要库。该库为 LabVIEW 开发者提供了一系列工具,用于实现设备间的蓝牙连接、数据传输与交互等功能&…...
MySQL | MySQL库、表的基本操作01
MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…...
抖音试水AI分身;腾讯 AI 战略调整架构;百度旗下小度官宣接入DeepSeek...|网易数智日报
抖音试水AI分身,字节旗下AI智能体平台扣子已与抖音打通,相关功能内测中 2月19日消息,钛媒体App独家获悉,字节旗下AI智能体开发平台扣子(Coze)已与抖音打通,抖音创作者可在扣子智能体平台打造AI分…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
前端 fetch API 调用 Tushare 的数据接口获取免费的基金股票信息数据
要在前端使用 JavaScript 的 fetch API 调用 Tushare 的数据接口,您需要遵循以下步骤: 1. 注册 Tushare 账号并获取 Token 首先,访问 Tushare 官网 注册账号。注册成功后,登录账号,在个人中心获取您的 API Token。 …...
【SpringMVC】十分钟跑起来一个SpringMVC项目
目录标题 1 项目概述1.项目结构解析2. MVC项目的结构和每个组件的作用:3. 项目的工作流程:4 后期可以扩展的点:2.源码学习1. HelloController 类,Spring MVC控制器2 springmvc-servlet.xml - Spring MVC的主要配置文件3.web 目录 …...
LeetCode 热题 100 11. 盛最多水的容器
LeetCode 热题 100 | 11. 盛最多水的容器 大家好,今天我们来解决一道经典的算法题——盛最多水的容器。这道题在LeetCode上被标记为中等难度,要求我们找到两条垂线,使得它们与 x 轴共同构成的容器可以容纳最多的水。下面我将详细讲解解题思路…...
Web自动化之Selenium实战案例1:论文pdf自动下载
在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…...
在VSCode中接入deepseek
注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key,呆会vscode要用,不然401. 打开vscod,电脑能上网。下插件。 下好要配置 点它一下。 要配置,全…...
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望 引言CentOS停服的背景华为openEuler:面向未来的开源操作系统1. 简介2. 特点3. 发展趋势 Rocky Linux:CentOS的精神继承者1. 简介2. 特点3. 发展趋势 其他可选的替代系统1…...
vector的模拟实现
目录 一、构造和析构函数 二、插入删除访问迭代器 三、迭代器失效 四、拷贝构造和赋值 五、tip 一、构造和析构函数 namespace stn {template<class T>class vector{typedef T* iterator;public:vector():_start(nullptr);, _end(nullptr), _endofstorage(nullptr){…...
【高可用】keepalived的试用与学习笔记
版本日期修订人描述V1.02025/2/23nick huang创建文档 背景 最近,预研给现有的Nginx单点实例添加故障转移的功能,以备单实例故障时无法快速恢复。 本文记录Keepalived的学习笔记,供自己或同学日后参考。 Keepalived Keepalived是一个开源的…...
在Dify中实现联网检索功能(模拟DeepSeek)
跟着上一篇博客:Error response from daemon: Get “https://registry-1.docker.io/v2/“: request canceled while的解决办法-CSDN博客 DeepSeek发布之后,感觉联网检索功能变成标配了。这篇博客简单介绍一下怎么在Dify中配置初步的联网检索功能&#x…...
Deepseek-强化学习算法(通俗易懂版)
首先先贴一张Deepseek核心技术的梳理图: 上图详细了讲述了Deepseek主要在哪些阶段用了强化学习方法(GRPO) 1.GRPO算法 GRPO是一种用于提高语言模型推理能力的强化学习算法。它在DeepSeekMath论文中,在数学推理的背景下被提出。G…...
[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植
最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:...
了解 RAG 第二部分:经典 RAG 的工作原理
在本系列的第一篇文章中,我们介绍了检索增强生成 (RAG) ,解释了扩展传统大型语言模型 (LLM)功能的必要性。我们还简要概述了 RAG 的核心思想:从外部知识库检索上下文相关的信息,以确保 LLM 生成准确且最新的信息,而不会…...
剖析IO原理和零拷贝机制
目录 1 Linux的五种IO模型1.1 模型调用的函数1.1.1 recv函数1.1.2 select函数1.1.3 poll函数1.1.4 epoll函数1.1.5 sigaction函数 1.2 IO模型1.2.1 阻塞IO模型1.2.2 非阻塞IO模型1.2.3 IO复用模型1.2.4 信号驱动IO模型1.2.5 异步IO模型1.2.6 IO模型比较 2 Java的BIO、NIO、AIO2…...
【论文精读】MapTR:用于在线矢量化高精地图构建的结构化建模与学习
论文地址: MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 源代码:MapTR 摘要 High-definition(HD Map)map为自动驾驶场景提供了丰富且精确的环境信息,是自动驾驶系统规划中不…...
云图库平台(五)——后端图片模块开发
目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...
Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置
Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置 前言一、RedHat公司背景二、RedHat环境安装步骤三、windows使用远程工具连接环境并上传文件到redhat方法: 前言 在接下来的博客中,我们从基础开始将介绍红帽Linu…...
【Linux】基于UDP/TCP套接字编程与守护进程
目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…...
Linux CentOS 上 Ollama 的安装与部署:从入门到实践
Linux CentOS 上 Ollama 的安装与部署:从入门到实践 随着人工智能技术的快速发展,大语言模型(LLMs)的应用场景越来越广泛。Ollama 作为一个轻量级的 AI 模型管理工具,为开发者提供了便捷的模型部署和管理解决方案。本文将详细介绍如何在 Linux CentOS 系统上安装和部署 O…...
大数据学习之任务流调度系统Azkaban、Superset可视化系统
一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…...
网络空间安全(2)应用程序安全
前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...
UDP、TCP的区别
UDP(用户数据报协议)和TCP(传输控制协议)是两种常用的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别: ### 1. 连接方式 - **TCP**:面向连接。通信前…...
Linux 第二次脚本作业
1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 2、设计一个 Shell 程序,在/userdata 目录下建立50个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权…...
高清下载油管视频到本地
下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…...
Linux 命令大全完整版(07)
2. linux 系统设置命令 ulimit 功能说明:控制 shell 程序的资源。语法:ulimit [-aHS][-c <core 文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小…...
基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…...
Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用
功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…...
高速差分信号的布线
差分信号如何在PCB上布线? 1.差分信号必须保证线间距相等,禁止打过孔或者放置元器件 2.差分信号必须打孔时,必须要保证伴随屏蔽地过孔(缝合定位孔),减少信号干扰问题。 3.差分信号走线弯曲位置推荐&#…...