如何在腾讯云Ubuntu服务器上部署Node.js项目
最近弄了一个Node.js项目,包含前端用户前台,管理后台和服务端API服务三个项目,本地搭建好了,于是在腾讯云上新建了个Ubuntu 24.04服务器,想要将本地的Node.js项目部署上去,包括环境配置和数据库搭建。
本文主要讲解如何部署Node.js项目,通常需要以下步骤:
-
服务器初始设置(创建用户,SSH配置,防火墙)
-
安装Node.js和npm
-
安装和配置数据库(MySQL/MongoDB)
-
部署项目代码(通过Git或SCP)
-
安装项目依赖,配置环境变量
-
使用PM2管理进程
-
配置Nginx反向代理(可选)
-
配置SSL证书(可选)
-
最终测试和故障排除
现在,开始第一步,服务器初始设置。我们需要创建新用户、配置SSH密钥、更新系统包,并设置防火墙。
第1步:服务器初始设置(安全与基础配置)
1.1 登录服务器
- 使用SSH登录到你的腾讯云服务器(替换
your_username
和your_server_ip
):ssh root@your_server_ip
📌 如果是首次登录,腾讯云可能要求你通过Web控制台重置root密码或使用SSH密钥。
1.2 创建新用户(避免使用root)
# 创建新用户(例如命名为deploy)
sudo adduser deploy# 赋予sudo权限
sudo usermod -aG sudo deploy# 切换到新用户
su - deploy
1.3 配置SSH密钥登录(提高安全性)
- 本地机器操作:生成SSH密钥(如果已有可跳过):
ssh-keygen -t ed25519
- 将公钥上传到服务器(替换
your_server_ip
):ssh-copy-id deploy@your_server_ip
- 禁用密码登录(可选但推荐):
找到并修改:sudo nano /etc/ssh/sshd_config
重启SSH服务:PasswordAuthentication no
sudo systemctl restart sshd
1.4 更新系统
sudo apt update && sudo apt upgrade -y
1.5 配置防火墙(UFW)
sudo ufw allow OpenSSH # 允许SSH
sudo ufw allow 80 # HTTP端口(后续Web服务)
sudo ufw allow 443 # HTTPS端口
sudo ufw enable # 启用防火墙
sudo ufw status # 检查规则
第2步:安装Node.js环境
2.1 安装Node.js(推荐使用LTS版本)
Ubuntu 24.04 默认仓库中的Node.js可能不是最新版本,建议通过NodeSource安装指定版本(以Node.js 18.x为例):
# 下载并运行NodeSource安装脚本
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -# 安装Node.js和npm
sudo apt install -y nodejs# 验证安装
node -v # 应输出 v18.x.x
npm -v # 应输出对应版本
📌 如果需要其他版本(如20.x),替换脚本中的
setup_18.x
为setup_20.x
,详见 NodeSource文档。
2.2 安装PM2(进程管理工具)
PM2 用于守护Node.js进程,确保应用崩溃或重启后自动运行:
sudo npm install -g pm2# 验证安装
pm2 --version
2.3 配置项目依赖(可选,后续步骤会详细操作)
如果已有项目的package.json
,可提前安装依赖:
# 假设项目目录为/home/deploy/app
cd /home/deploy/app
npm install --production
好的!接下来是 第3步:部署代码到服务器。这一步需要将本地的Node.js项目代码上传到服务器的 /home/lifire
目录。以下是具体操作:
第3步:部署代码到服务器
3.1 将本地代码传输到服务器
有两种常用方法:SCP(直接复制文件)或 Git(从仓库拉取)。选择其中一种方式操作。
方法1:使用SCP传输文件(推荐简单项目)
- 本地机器操作(替换
/your/local/path
为本地项目路径,your_server_ip
为服务器IP):# 传输整个项目目录到服务器的 /home/lifire scp -r /your/local/project/path deploy@your_server_ip:/home/lifire/# 示例: # scp -r ./my-node-app deploy@123.45.67.89:/home/lifire/
📌 输入服务器用户
deploy
的密码(如果配置了SSH密钥则无需密码)。
方法2:使用Git克隆仓库(推荐已有Git管理的项目)
- 服务器操作(确保已安装Git):
# 安装Git sudo apt install git -y# 进入项目目录 cd /home/lifire# 克隆你的Git仓库(替换为你的仓库URL) git clone https://github.com/yourusername/your-repo.git .# 如果是私有仓库,配置SSH密钥: # 1. 在服务器生成SSH密钥(一路回车): # ssh-keygen -t ed25519 # 2. 将公钥 `cat ~/.ssh/id_ed25519.pub` 添加到GitHub/GitLab的SSH Keys设置中
3.2 安装项目依赖
- 服务器操作:
# 进入项目目录 cd /home/lifire# 安装依赖(根据项目实际情况选择) npm install # 安装所有依赖(开发+生产) # 或 npm install --production # 仅安装生产依赖
3.3 配置环境变量(如有需要)
如果项目使用了环境变量(如数据库密码、API密钥),需在服务器配置:
# 创建.env文件(示例)
nano .env# 填写你的环境变量,例如:
# DB_HOST=localhost
# DB_USER=root
# DB_PASSWORD=your_password
按 Ctrl+O
保存,Ctrl+X
退出。
3.4 启动项目(使用PM2守护进程)
# 进入项目目录
cd /home/lifire# 启动项目(假设入口文件为app.js)
pm2 start app.js --name "my-node-app"# 设置PM2开机自启动
pm2 save
pm2 startup
# 执行最后一行输出的命令(例如 `sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u deploy --hp /home/deploy`)
3.5 验证服务是否运行
# 查看PM2进程列表
pm2 list# 检查应用日志
pm2 logs my-node-app
如果看到应用正常启动且无报错,说明部署成功。
3.6 开放应用端口(如3000、8080等)
如果项目监听的是非80/443端口(例如3000),需开放防火墙:
sudo ufw allow 3000
sudo ufw reload
第4步:配置MySQL数据库
4.1 安装MySQL Server
# 更新软件包列表
sudo apt update# 安装MySQL Server
sudo apt install mysql-server -y# 验证安装
sudo systemctl status mysql
- 如果状态显示
active (running)
,说明安装成功。
4.2 运行安全配置脚本
sudo mysql_secure_installation
按提示操作:
- 设置密码强度验证插件(建议选择
Y
)。 - 设置root用户密码(输入一个强密码并记住)。
- 移除匿名用户(选择
Y
)。 - 禁止远程root登录(选择
Y
)。 - 移除测试数据库(选择
Y
)。 - 重新加载权限表(选择
Y
)。
4.3 登录MySQL并创建专用数据库和用户
# 以root身份登录MySQL(使用刚设置的密码)
sudo mysql -u root -p
在MySQL命令行中执行以下操作(替换 your_db_name
、your_db_user
和 your_db_password
):
-- 创建数据库
CREATE DATABASE your_db_name;-- 创建专用用户并设置密码(推荐强密码)
CREATE USER 'your_db_user'@'localhost' IDENTIFIED BY 'your_db_password';-- 授予用户对数据库的完全权限
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_db_user'@'localhost';-- 刷新权限
FLUSH PRIVILEGES;-- 退出MySQL
EXIT;
4.4 配置MySQL允许远程访问(可选)
如果Node.js应用与MySQL不在同一服务器,需开放远程访问(注意:仅限内网环境或配置IP白名单):
# 修改MySQL配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address
并修改为:
bind-address = 0.0.0.0
重启MySQL服务:
sudo systemctl restart mysql
然后开放防火墙端口:
sudo ufw allow 3306
4.5 在Node.js项目中配置数据库连接
在项目的 .env
文件中添加数据库信息:
DB_HOST=localhost
DB_PORT=3306
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_NAME=your_db_name
4.6 测试数据库连接
在Node.js代码中,使用 mysql2
或 sequelize
等库测试连接:
const mysql = require('mysql2/promise');async function testConnection() {const connection = await mysql.createConnection({host: process.env.DB_HOST,user: process.env.DB_USER,password: process.env.DB_PASSWORD,database: process.env.DB_NAME});console.log('数据库连接成功!');await connection.end();
}testConnection().catch(console.error);
运行测试:
node test-db.js
如果输出 数据库连接成功!
,说明配置正确。
关键注意事项
- 安全建议:
- 不要使用root用户直接连接应用。
- 生产环境避免开放MySQL到公网,建议通过内网或SSH隧道访问。
- 备份数据库:
mysqldump -u your_db_user -p your_db_name > backup.sql
第5步:配置Nginx反向代理
5.1 安装Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx # 设置开机自启
5.2 配置反向代理
-
创建Nginx配置文件(替换
your_domain.com
为你的域名或服务器IP):sudo nano /etc/nginx/sites-available/your_domain.conf
-
粘贴以下配置(假设Node.js运行在
127.0.0.1:3000
):server {listen 80;server_name your_domain.com www.your_domain.com; # 无域名可改为 server_name _;location / {proxy_pass http://127.0.0.1:3000; # 转发到Node.js端口proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}# 静态文件处理(可选)location /static/ {alias /home/lifire/blog-server/static/;expires 30d;}# 错误页面配置error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;} }
-
保存并退出(
Ctrl+O
→Enter
→Ctrl+X
)。
5.3 启用配置并测试
# 创建符号链接到sites-enabled目录
sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/# 测试Nginx配置语法
sudo nginx -t # 应显示 "test is successful"# 重启Nginx
sudo systemctl restart nginx
5.4 配置防火墙(如果未开放80/443端口)
sudo ufw allow 'Nginx Full' # 允许HTTP(80)和HTTPS(443)
sudo ufw reload
5.5 验证反向代理
访问 http://your_domain.com
或 http://服务器IP
,应显示Node.js应用页面。
可选:配置HTTPS(Let’s Encrypt免费证书)
5.6 安装Certbot
sudo apt install certbot python3-certbot-nginx -y
5.7 获取SSL证书
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
按提示操作(输入邮箱、同意条款等),Certbot会自动修改Nginx配置并启用HTTPS。
5.8 验证证书自动续签
sudo certbot renew --dry-run # 模拟续签测试
关键检查点
-
Nginx状态:
systemctl status nginx # 确保状态为 "active (running)"
-
防火墙规则:
sudo ufw status # 确保80和443端口允许
-
Node.js应用监听地址:
确保Node.js应用绑定到0.0.0.0
或127.0.0.1
,而非仅本地回环地址。例如:app.listen(3000, '0.0.0.0', () => {console.log('Server running on port 3000'); });
第6步:部署后的优化与监控
6.1 启用PM2集群模式(提升性能)
如果你的应用支持多进程,使用PM2集群模式充分利用多核CPU:
# 停止现有应用
pm2 delete blog-server-v2# 启动集群模式(假设使用4个进程)
pm2 start app.js -i 4 --name "blog-server-v2"# 保存配置
pm2 save
6.2 配置日志轮转(防止日志占满磁盘)
-
安装PM2日志轮转模块:
pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 100M # 单个日志最大100MB pm2 set pm2-logrotate:retain 30 # 保留30个历史日志
-
手动触发日志切割:
pm2 flush # 清理旧日志
6.3 设置基础监控
-
PM2内置监控:
pm2 monit # 实时查看进程资源占用
-
系统级监控(推荐安装
htop
):sudo apt install htop htop # 查看CPU、内存、进程详情
6.4 配置自动化备份
-
备份数据库(每日凌晨3点备份):
# 创建备份脚本 nano ~/backup-db.sh
内容:
#!/bin/bash mysqldump -u your_db_user -p'your_db_password' your_db_name > /home/deploy/backups/db_$(date +\%Y\%m\%d).sql
# 赋予执行权限 chmod +x ~/backup-db.sh# 添加定时任务 crontab -e
添加一行:
0 3 * * * /home/deploy/backup-db.sh
-
备份项目代码(每周日备份):
crontab -e
添加:
0 4 * * 0 tar -czf /home/deploy/backups/app_$(date +\%Y\%m\%d).tar.gz /home/lifire/blog-server
6.5 安全加固
-
定期更新系统:
# 配置自动安全更新 sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades # 选择"Yes"
-
防火墙加固:
sudo ufw deny 3306 # 禁止MySQL默认端口暴露(如果之前开放过) sudo ufw limit OpenSSH # 防止SSH暴力破解
6.6 配置健康检查端点(可选)
在Node.js应用中添加一个健康检查路由:
app.get('/health', (req, res) => {res.status(200).json({ status: 'ok', timestamp: Date.now() });
});
然后通过Nginx或外部监控服务定期访问 http://your_domain.com/health
确认应用存活。
后续建议
-
持续集成/部署(CI/CD):
可配置GitHub Actions或Jenkins,实现代码推送后自动部署。 -
高级监控:
使用 Prometheus + Grafana 或 New Relic 监控应用性能。 -
负载均衡:
流量大时,可在腾讯云添加多个服务器并使用负载均衡器。
至此,你的Node.js应用已完成完整部署!
相关文章:
如何在腾讯云Ubuntu服务器上部署Node.js项目
最近弄了一个Node.js项目,包含前端用户前台,管理后台和服务端API服务三个项目,本地搭建好了,于是在腾讯云上新建了个Ubuntu 24.04服务器,想要将本地的Node.js项目部署上去,包括环境配置和数据库搭建。 本文…...
【NLP 67、知识图谱】
你像即将到来的夏季一样鲜明, 以至于我这样寡淡的生命, 竟山崩般为你着迷 —— 25.4.18 一、信息 VS 知识 二、知识图谱 1.起源 于2012年5月17日被Google正式提出,初衷是为了提高搜索引擎的能力,增强用户的搜索质量以及搜索体验 …...
Java写数据结构:栈
1.概念: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插…...
跨境电商行业新周期下的渠道突围策略
2024年初,跨境电商圈动荡不断,多家卖家平台股价大跌,引发行业舆论热议。而作为东南亚主战场的Shopee,仅仅几个月时间跌幅已达23%。在这一波冲击中,大多数卖家都在"止血",但有棵树却逆势而上&…...
Docker如何更换镜像源提高拉取速度
在国内,由于网络政策和限制,直接访问DockerHub速度很慢,尤其是在拉取大型镜像时。为了解决这个问题,常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源,并提供当前可用的镜像源。 换源方法 方法1&#x…...
平方根倒数快速算法
一、平方根倒数算法的由来 在制作3D游戏的时候,曲面是由许多平面构成的,要求出光线在物体表面反射后的效果,就需要知道平面的单位法向量,法向量的长度的平方R很容易求出,单位法向量 坐标值 / R的平方根。电脑每次都要…...
详解.vscode 下的json .vscode文件夹下各个文件的作用
1.背景 看一些开源项目的时候,总是看到vscode先有不同的json文件,再次做一下总结方便之后查看 settings.json肯定不用多说了 vscode 编辑器分为 全局用户配置 和 当前工作区配置 那么.vscode文件夹下的settings.json文件夹肯定就是当前工作区配置了 在此文件对单个的项目进行配…...
【消息队列RocketMQ】二、RocketMQ 消息发送与消费:原理与实践
一、RocketMQ 消息发送原理与模式 1.1 消息发送原理 RocketMQ 消息发送的核心流程围绕 Producer、NameServer 和 Broker 展开。Producer 启动时,会向 NameServer 请求获取 Topic 的路由信息,这些信息包括 Topic 对应的 Broker 列表以及 Broker 上的…...
WPF的发展历程
文章目录 WPF的发展历程引言起源与背景(2001-2006)从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…...
新书速览|OpenCV计算机视觉开发实践:基于Qt C++
《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写,全面系统地介绍OpenCV的使用及实战案例,并配套提供全书示例源码、PPT课件与作…...
本地搭建一个简易版本的 Web3 服务
一、环境搭建与工具准备 (一)安装 Node.js 和 npm Node.js 是一个基于 JavaScript 的运行时环境,npm 是其默认的包管理器。在 Web3 开发中,Node.js 和 npm 是必不可少的工具。 访问 Node.js 官网 并下载最新的 LTS 版本。 安装…...
电脑安装CentOS系统
前言 电脑是Windows10系统,安装CentOS之前要将硬盘格式化,这个操作会将Windows10系统以及电脑上所有资料抹除,操作前务必谨慎复查是否有重要资料需要备份。 准备工作 准备两个U盘,一台电脑。提前把镜像下载好。镜像在百度网盘里…...
【Linux专栏】zip 多个文件不带路径
Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天发现 Linux 解压缩的文件中,不光包含需要的文件,还保留了目录层级,不是想要的结果。因此,本文关于…...
邀请函 | 「软件定义汽车 同星定义软件」 TOSUN用户日2025·杭州站
参会邀请函 尊敬的客户及合作伙伴: 新能源汽车智能化浪潮席卷全球,杭州作为中国技术创新高地,正引领行业变革。为助力工程师伙伴应对行业挑战,解决工程难题,同星智能将于2025年5月9日(周五)在…...
start_response详解
start_response 是Python的WSGI(Web Server Gateway Interface)中的一个重要概念,它是一个可调用对象(通常是一个函数),在WSGI应用程序里发挥着关键作用,下面为你详细介绍。 作用 在WSGI规范里…...
记一次 .NET某旅行社酒店管理系统 卡死分析
一:背景 1. 讲故事 年初有位朋友找到我,说他们的管理系统不响应了,让我帮忙看下到底咋回事? 手上也有dump,那就来分析吧。 二:为什么没有响应 1. 线程池队列有积压吗? 朋友的系统是一个web系统&#…...
[预备知识]1. 线性代数基础
线性代数基础 线性代数是深度学习的重要基础,本章节将介绍深度学习中常用的线性代数概念和操作。 1. 标量、向量、矩阵与张量 1.1 标量(Scalar) 标量是单个数值,用 x ∈ R x \in \mathbb{R} x∈R 表示。在深度学习中常用于表…...
RESTful学习笔记(二)---简单网页前后端springboot项目搭建
新建项目: 项目结构 Pom.xml中添加依赖: 要有用于启动的父进程,有启动依赖,有lombok用于自动构建getter和setter方法等 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…...
C++ AI模型部署优化实战:基于TensorRT的高效推理引擎开发
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
在AI技术快速发展的今天,编程方式正在经历一场革命性的变革。从传统的"人写代码"到"AI辅助编程",再到"AI自主编程",开发效率得到了质的提升。Cline作为一款基于VSCode的AI编程助手,通过其独特的pro…...
DevOps功能详解
DevOps 详解 1. 什么是 DevOps? DevOps 是 Development(开发) 和 Operations(运维) 的组合词,代表一种通过 自动化工具、协作文化 和 流程优化 来加速软件开发与交付的 方法论。其核心目标是打破开发与运维…...
忽略 CS8616 警告在 Visual Studio 2022 中【C# 8.0 】
CS8616 警告是 C# 8.0 引入的可空引用类型(NRT)相关警告,表示"由于可空引用类型的特性,某个不可为 null 的字段可能未被初始化"。 编辑项目csproj,直接删除<Nullable>enable</Nullable> 或者修改为disable或者annota…...
[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析
[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析 服务展示: 运行脚本: 剩余服务: 一、脚本设计背景与核心价值 在Linux服务器运维中,服务管理是日常操作的重要环节。本文介绍的智能服务管理脚本&a…...
23种设计模式-结构型模式之外观模式(Java版本)
Java 外观模式(Facade Pattern)详解 🧭 什么是外观模式? 外观模式是结构型设计模式之一,为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用。 就像是酒店前台,帮你处理入住、叫…...
《数据结构之美--双向链表》
引言 之前我们学习了单链表这一数据结构,虽然单链表的功能比较多,但是也存在着一些局限性,因为在单链表中节点的指向都是单向的,因此我们想从某个节点找到它的上一个节点比较困难,来不及再迷恋单链表了,接…...
如何判断设备是否支持带电插拔——从原理到实操的全面解析
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 一、带电插拔的核心原理 带电插拔(热插拔)的本质是通过电气隔离设计和顺序通断控制,避免电流突变对设备造成损害。 • 触点分级设计:支持热…...
Google Store 如何利用 glTF 3D 模型改变产品教育
Google 为全球广大用户提供种类繁多、持续改进的硬件产品。Google 的智能手机、智能手表、耳机、平板电脑、智能家居设备等产品均通过 Google Store(谷歌商店) 以及遍布全球的实体和数字第三方零售商销售。作为一个以在人工智能、智能家居和个人设备体验方面不断开拓创新而闻名…...
Flutter 状态管理 Riverpod
Android Studio版本 Flutter SDK 版本 将依赖项添加到您的应用 flutter pub add flutter_riverpod flutter pub add riverpod_annotation flutter pub add dev:riverpod_generator flutter pub add dev:build_runner flutter pub add dev:custom_lint flutter pub add dev:riv…...
flutter 专题 六十六 Flutter Dio包网络请求抓包解决方案
在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库、HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求库。因为相比Http请求库和HttpClient请…...
DSL(Domain Specific Language,领域特定语言)
DSL的定义和作用 DSL是为特定业务领域设计的专门语言,这里特指为欺诈检测场景设计的规则描述语言通过DSL,业务人员可以用接近自然语言的方式定义欺诈检测规则,而不需要编写复杂的代码DSL的具体实现:使用ANTLR4作为语法解析工具支…...
基于SpringBoot的心情疗愈平台-项目分享
基于SpringBoot的心情疗愈平台-项目分享 项目介绍项目摘要管理员功能图用户实体图心理咨询师功能图系统功能图项目预览情感树洞发布帖子讲座信息心理医生心理医生管理 最后 项目介绍 使用者:管理员、用户、心理咨询师 开发技术:MySQLJavaSpringBootVue …...
富文本图片过大问题
在做若依的项目,碰到了若依自带的公告功能的图片上传后,再显示会出现图片过大的问题。在修改若依代码无果后,退而求其次修改展示页面的代码。 问题描述: 在若依框架的打卡系统中,公告使用富文本上传图片后࿰…...
Python-Django系列—部件
部件是 Django 对 HTML 输入元素的表示。部件处理 HTML 的渲染,以及从对应于部件的 GET/POST 字典中提取数据。 内置部件生成的 HTML 使用 HTML5 语法,目标是 <!DOCTYPE html>。例如,它使用布尔属性,如 checked…...
开发者视角:轻量便捷的AI视觉训推一体机如何实现AI模型快速开发
一、行业背景 1)数据与算力基础夯实:互联网、物联网和移动互联网的普及使得视觉数据呈爆发式增长,为AI视觉训推技术提供了丰富的“燃料”。同时,GPU、TPU等计算芯片的广泛使用,以及云计算的兴起,让计算能力…...
基于Python(Django)+SQLite实现(Web)校园助手
校园助手 本校园助手采用 B/S 架构。并已将其部署到服务器上。在网址上输入 db.uplei.com 即可访问。 使用说明 可使用如下账号体验: 学生界面: 账号1:123 密码1:123 账户2:201805301348 密码2:1 # --------------…...
Django 入门指南:构建强大的 Web 应用程序
什么是 Django? Django 是一个开源的高层次 Python Web 框架,旨在快速开发安全且可维护的网站。它通过简化常见的 Web 开发任务,帮助开发者专注于开发应用的核心功能。Django 实现了“快速开发”和“尽量少的重复”的理念,提供了…...
一文了解相位阵列天线中的真时延
本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板,以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络,而宽带通信系统正在努力满…...
LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南
如何用LangChain实现PDF多模态数据向量化及RAG应用实战指南 在大模型应用中,PDF文档因包含文本、表格、图片等异构数据,成为RAG(检索增强生成)系统的核心挑战。本文基于LangChain框架,结合多模态处理技术,…...
OkHttp入门
OkHttp 简介与使用示例 OkHttp 是一个高效的 HTTP 客户端,用于 Android、Java 应用程序以及 Kotlin 应用程序。它支持同步阻塞调用和异步调用,同时提供了强大的拦截器和重定向处理功能。OkHttp 由 Square 公司开发,因其高性能和易用性而广受…...
在ARM Linux应用层下驱动MFRC522
文章目录 1、前言2、IC卡 和 IC卡读卡器3、MFRC5223.1、寄存器集3.2、命令集3.3、数据操作3.4、基础函数编写3.4.1、MFRC522接线3.4.2、编写SPI操作函数3.4.3、编写MFRC522基础函数3.4.3.1、完整的mfrc522.h3.4.3.2、写寄存器和读寄存器3.4.3.3、复位引脚操作3.4.3.4、天线操作…...
力扣第446场周赛
有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下:力扣 给你两个数组:instructions 和 values,数组的长度均为 n。 你需要根据以下规则模拟一个过程: 从下标 i 0 的第一个指令开始…...
close和shutdown
1.shutdown() 控制 TCP 连接的读写方向,不会关闭文件描述符,也不会触发四次挥手。 shutdown(sockfd, SHUT_RD): 关闭套接字的读方向。套接字不能再接收数据。 shutdown(sockfd, SHUT_WR): 关闭套接字的写方向。套接字不能再发送数据。 shutdown(sockfd…...
LeetCode算法题(Go语言实现)_54
题目 给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success &a…...
.NET应用UI框架DevExpress XAF v24.2新版亮点:支持.NET 9
DevExpress XAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在DevEx…...
前端通过jenkins和docker打包部署流程
通过jenkins实现镜像打包和上传 1.在jenkins上创建流水线任务 点击新建任务 填写任务名称 选多分支流水线 增加分支源 选git 添加并选择凭据(有项目权限的git账号密码) 填写分支的正则表达式,多分支使用^(分支名|分支名)$ 保存 …...
SpringBoot自定义验证器:企业级参数校验架构设计与实践
一、需求分析与技术选型 在复杂业务场景中,标准校验注解(如@NotBlank、@Pattern)往往无法满足特殊业务规则验证需求。例如: 需要校验字段值在预定义的枚举范围内多字段之间存在关联性校验(如起始时间不能晚于结束时间)需要动态查询数据库进行业务规则校验架构设计原则:…...
4U带屏基于DSP/ARM+FPGA+AI的电力故障录波装置设计方案,支持全国产化
4U带屏DSP/ARMFPGAAI电力故障录波分析仪,支持国产化,含有CPU主控模块,96路模拟量采集,256路开关量,通讯扩展卡等#电力故障录波#4U带屏#新能源#电力监测 主要特点 1)是采用嵌入式图形系统,以及…...
笔试题——第五周
目录 Day1 排序子序列 消减整数 最长上升子序列 Day2 爱吃素 相差不超过k的最多数 最长公共子序列(一) Day3 小红的口罩 春游 数位染色 Day4 素数回文 活动安排 合唱团 Day5 跳台阶扩展问题 包含不超过两种字符的最长子串 字符串的排列 Day6 ISBN号码 k…...
图论-Floyd算法
在搜索中bfs只适合无权图 若是碰到有权图最简单的方法就是用邻接矩阵-二维矩阵存储每个点对之间的权重,然后用floyd 并且邻接矩阵还可以处理重边的问题(用min) INFfloat(inf) ma[[INF]*n for _ in range(n)]for i in range(n):ma[i][i]0for i in rang…...
使用pyinstaller打包fastapi项目的问题记录
文章目录 PyInstaller 相关介绍作用使用方式Spec 文件介绍 FastAPI 相关介绍什么是 FastAPI?使用方式 使用 PyInstaller 打包 FastAPI 项目常见问题与解决方案 PyInstaller 相关介绍 作用 PyInstaller 是一个将 Python 程序打包成独立可执行文件的工具,…...