Nginx Proxy Manager 中文版安装部署
目录
- Nginx Proxy Manager 中文版安装部署教程
- 一、项目简介
- 1.1 主要功能特点
- 1.2 项目地址
- 1.3 系统架构与工作原理
- 1.4 适用场景
- 二、系统要求
- 2.1 硬件要求
- 2.2 软件要求
- 三、Docker环境部署
- 3.1 CentOS系统安装Docker
- 3.2 Ubuntu系统安装Docker
- 3.3 安装Docker Compose
- 四、安装Nginx Proxy Manager中文版
- 4.1 创建项目目录
- 4.2 创建docker-compose.yml文件
- 4.3 启动服务
- 五、初始配置和使用
- 5.1 访问管理界面
- 5.2 首次登录
- 5.3 添加代理主机
- 5.4 SSL证书配置
- 六、高级配置
- 6.1 添加访问控制
- 6.2 配置自定义SSL证书
- 6.3 配置TCP/UDP流代理
- 七、日常维护
- 7.1 查看日志
- 7.2 备份配置
- 7.3 升级操作
- 八、故障排除
- 8.1 无法访问管理界面
- 8.2 SSL证书申请失败
- 8.3 代理转发失败
- 8.4 详细故障排查指南
- 问题1: NPM容器无法启动
- 问题2: SSL证书申请失败
- 问题3: 反向代理504超时错误
- 问题4: WebSocket连接失败
- 问题5: 管理界面密码遗忘
- 九、最佳实践
- 9.1 安全加固
- 9.1.1 修改默认管理端口
- 9.1.2 使用反向代理保护管理界面
- 9.1.3 Docker容器安全加固
- 9.1.4 定期安全更新
- 9.2 性能优化
- 9.2.1 高级缓存配置
- 9.2.2 调整工作进程数
- 9.2.3 启用Gzip压缩
- 十、参考资料
- 十、应用场景示例
- 10.1 WordPress网站反向代理
- 10.2 内部服务访问集成
- 10.3 API网关应用
- 10.4 媒体流服务代理
Nginx Proxy Manager 中文版安装部署教程
一、项目简介
Nginx Proxy Manager (NPM) 是一个基于Nginx的开源反向代理管理工具,提供了友好的Web界面,让用户可以轻松管理Nginx代理配置,而无需深入了解Nginx的复杂配置语法。本文档介绍的是由GitHub用户xiaoxinpro基于原版翻译的中文版本,为中文用户提供了更友好的使用体验。
1.1 主要功能特点
- 通过Web界面管理Nginx反向代理配置
- 自动申请和管理SSL证书(Let’s Encrypt集成)
- 支持HTTP重定向到HTTPS
- 支持自定义SSL证书
- 支持访问控制(基本身份验证)
- 支持流代理(TCP/UDP)
- 完整的中文用户界面
1.2 项目地址
- 中文版项目:https://github.com/xiaoxinpro/nginx-proxy-manager-zh
- 原版项目:https://nginxproxymanager.com/
1.3 系统架构与工作原理
Nginx Proxy Manager(NPM)的系统架构主要由以下几部分组成:
┌─────────────────────────────────┐
│ 客户端浏览器/应用程序 │
└───────────────┬─────────────────┘│▼
┌─────────────────────────────────┐
│ Nginx Proxy Manager │
│ │
│ ┌─────────────┐ ┌───────────┐ │
│ │ Nginx服务器 │ │ 管理API │ │
│ └──────┬──────┘ └─────┬─────┘ │
│ │ │ │
│ ┌──────▼──────┐ ┌─────▼─────┐ │
│ │ 配置生成器 │ │ Web界面 │ │
│ └──────┬──────┘ └───────────┘ │
│ │ │
│ ┌──────▼──────────────────┐ │
│ │ Let's Encrypt客户端 │ │
│ └─────────────────────────┘ │
└─────────────────┬───────────────┘│▼
┌─────────────────────────────────┐
│ 后端服务/应用程序 │
└─────────────────────────────────┘
工作原理:
-
配置管理:
- 用户通过Web界面进行配置操作
- 管理API接收请求并处理配置变更
- 配置生成器将用户配置转换为Nginx配置文件
-
请求处理流程:
- 客户端请求发送到NPM服务器(80/443端口)
- Nginx根据配置规则匹配请求域名
- 请求被路由到对应的后端服务
- 响应返回给客户端
-
SSL证书管理:
- 用户通过界面申请SSL证书
- Let’s Encrypt客户端自动完成验证和申请
- 证书自动应用到对应的代理配置
- 证书自动更新(90天有效期)
1.4 适用场景
Nginx Proxy Manager特别适合以下应用场景:
- 多站点托管:在单一服务器上托管多个网站或Web应用
- 内部服务暴露:安全地将内部服务暴露到公网
- HTTP转HTTPS:为所有服务提供统一的SSL加密访问
- 开发环境代理:整合不同端口和服务到域名
- 家庭/小型企业服务器:简化服务访问管理
二、系统要求
2.1 硬件要求
- CPU: 1核心以上
- 内存: 512MB以上
- 存储空间: 1GB以上
2.2 软件要求
- Docker 19.03.0+
- Docker Compose 1.24.0+
- 具有公网IP的服务器(用于SSL证书申请)
- 开放端口: 80, 81, 443
三、Docker环境部署
在开始安装Nginx Proxy Manager之前,我们需要先在服务器上安装Docker和Docker Compose。
3.1 CentOS系统安装Docker
# 1. 安装必要的依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 2. 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 3. 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io# 4. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker# 5. 验证Docker安装
sudo docker --version
3.2 Ubuntu系统安装Docker
# 1. 更新apt包索引
sudo apt-get update# 2. 安装必要的依赖
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release# 3. 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 4. 添加Docker仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 5. 更新apt包索引并安装Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 6. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker# 7. 验证Docker安装
sudo docker --version
3.3 安装Docker Compose
# 1. 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 2. 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose# 3. 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 4. 验证安装
docker-compose --version
四、安装Nginx Proxy Manager中文版
4.1 创建项目目录
# 创建并进入项目目录
mkdir -p ~/npm
cd ~/npm
4.2 创建docker-compose.yml文件
# 创建配置文件
vi docker-compose.yml
将以下内容复制到docker-compose.yml文件中:
version: '3'
services:app:image: 'chishin/nginx-proxy-manager-zh:latest'restart: alwaysports:- '80:80'- '81:81'- '443:443'volumes:- ./data:/data- ./letsencrypt:/etc/letsencrypt
4.3 启动服务
# 在后台启动服务
docker-compose up -d
五、初始配置和使用
5.1 访问管理界面
通过浏览器访问 http://服务器IP:81
打开Nginx Proxy Manager的管理界面。
登录页面如下(中文版):
┌────────────────────────────────────────────┐
│ │
│ Nginx Proxy Manager │
│ │
│ ┌────────────────────────────────────┐ │
│ │ 登录 │ │
│ │ │ │
│ │ 电子邮箱: │ │
│ │ ┌────────────────────────────┐ │ │
│ │ │ admin@example.com │ │ │
│ │ └────────────────────────────┘ │ │
│ │ │ │
│ │ 密码: │ │
│ │ ┌────────────────────────────┐ │ │
│ │ │ ******** │ │ │
│ │ └────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────┐ │ │
│ │ │ 登录 │ │ │
│ │ └──────────────┘ │ │
│ └────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────┘
5.2 首次登录
首次登录使用以下默认管理员账号:
Email: admin@example.com
Password: changeme
登录后,系统会立即要求您修改管理员信息和密码。请务必设置一个安全性高的密码以保护您的服务器安全。
5.3 添加代理主机
-
登录管理界面后,点击顶部菜单中的"代理主机"
-
点击"添加代理主机"按钮
-
填写表单:
- 域名:您要代理的域名(例如:example.com)
- 转发目标:目标服务器地址和端口(例如:http://192.168.1.100:8080)
- 选择SSL配置:可以启用自动SSL证书
-
点击"保存"按钮完成配置
5.4 SSL证书配置
- 在添加代理主机时,切换到"SSL"选项卡
- 选择"请求新的SSL证书"
- 勾选"使用赛迪测试" - 适用于测试环境
- 勾选"我同意Let’s Encrypt服务条款"
- 点击"保存"按钮
六、高级配置
6.1 添加访问控制
- 在代理主机详情页,点击"编辑"
- 切换到"高级"选项卡
- 启用"基本身份验证"
- 添加用户名和密码
- 点击"保存"按钮
6.2 配置自定义SSL证书
- 在管理界面,点击"SSL证书"
- 点击"添加SSL证书"
- 选择"自定义"
- 上传您的证书和私钥文件
- 点击"保存"按钮
6.3 配置TCP/UDP流代理
-
在管理界面,点击"流"
-
点击"添加流"
-
配置:
- 连接类型:TCP或UDP
- 转发主机名: 目标主机名或IP
- 转发端口: 目标端口
- 入站端口: 接收连接的端口
-
点击"保存"按钮
七、日常维护
7.1 查看日志
# 查看容器日志
docker-compose logs -f
7.2 备份配置
Nginx Proxy Manager的所有配置都保存在 ~/npm/data
目录中,您可以定期备份此目录:
# 备份数据目录
tar -czvf npm-backup-$(date +%Y%m%d).tar.gz ~/npm/data ~/npm/letsencrypt
7.3 升级操作
当需要升级Nginx Proxy Manager时,可以按照以下步骤操作:
# 进入项目目录
cd ~/npm# 停止容器
docker-compose down# 拉取最新镜像
docker-compose pull# 启动容器
docker-compose up -d
八、故障排除
8.1 无法访问管理界面
- 检查服务器防火墙是否开放81端口
- 检查服务是否正常运行:
docker-compose ps
- 检查容器日志:
docker-compose logs
8.2 SSL证书申请失败
- 确保域名已正确解析到服务器IP
- 确保80和443端口可以从公网访问
- 检查Let’s Encrypt限制(短时间内申请过多证书会受限)
8.3 代理转发失败
- 检查目标服务是否正常运行
- 检查网络连接是否通畅
- 检查代理配置是否正确
8.4 详细故障排查指南
问题1: NPM容器无法启动
症状: docker-compose up -d
后容器立即退出
排查步骤:
- 查看详细日志:
docker-compose logs
- 检查端口占用情况:
netstat -tulpn | grep -E '80|81|443'
- 检查挂载目录权限:
ls -la ~/npm/
解决方案:
- 如果端口被占用: 停止占用端口的服务或修改NPM端口映射
- 如果是权限问题:
sudo chown -R $(whoami):$(whoami) ~/npm/
- 如果数据库损坏: 备份并重新初始化数据库
# 备份数据
cp -r ~/npm/data ~/npm/data_backup# 重新初始化(注意会丢失所有配置)
rm -rf ~/npm/data
docker-compose down
docker-compose up -d
问题2: SSL证书申请失败
症状: 在界面操作中SSL证书申请失败,出现"Challenge Failed"错误
排查步骤:
- 检查域名DNS解析:
dig +short 你的域名
- 检查80端口可访问性:
curl -I http://你的域名
- 查看详细错误日志:
docker-compose logs | grep -i "lets\|error\|certificate"
解决方案:
-
DNS问题: 确保域名正确解析到服务器IP,等待DNS生效(可能需要48小时)
-
防火墙问题: 确保80和443端口对外开放
# iptables开放端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT service iptables save# 或使用firewalld firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
-
申请频率限制: Let’s Encrypt有频率限制,等待一段时间后重试
问题3: 反向代理504超时错误
症状: 访问代理网站时出现504 Gateway Timeout错误
排查步骤:
- 检查目标服务状态:
curl -I http://目标IP:端口
- 检查NPM与目标服务器网络连接
- 查看nginx错误日志:
docker exec -it npm-app cat /var/log/nginx/error.log
解决方案:
-
增加超时设置: 在代理主机的高级选项中增加超时设置
-
添加自定义Nginx配置:
proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; send_timeout 300s;
-
检查目标服务器性能,可能需要优化后端服务
问题4: WebSocket连接失败
症状: 网站WebSocket功能无法正常工作
排查步骤:
- 在浏览器开发者工具中查看WebSocket连接错误
- 检查代理配置中是否启用了WebSocket支持
解决方案:
-
在代理主机设置中启用WebSocket支持
-
添加自定义配置支持WebSocket:
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1;
问题5: 管理界面密码遗忘
症状: 无法登录NPM管理界面
解决方案:
通过重置数据库中的管理员密码:
# 进入容器
docker-compose exec app /bin/sh# 安装SQLite工具
apk add --no-cache sqlite# 连接到数据库并重置密码
sqlite3 /data/database.sqlite
在SQLite提示符下执行:
-- 查看用户列表
SELECT id, name, email FROM users;-- 重置ID为1的用户密码为"changeme"
UPDATE users SET
password = '$2a$08$EbEwC10JJT92XD7n7rCQMuHLE8JHWqmYqQECYZbs.n9M6R7bJVlUO'
WHERE id = 1;-- 退出
.exit
九、最佳实践
9.1 安全加固
- 更改默认管理端口(81)
- 使用强密码保护管理员账号
- 定期更新容器镜像
- 限制管理界面的访问IP
以下是更详细的安全加固建议:
9.1.1 修改默认管理端口
默认管理端口(81)可能成为攻击目标,可通过修改docker-compose.yml文件来更改:
version: '3'
services:app:image: 'chishin/nginx-proxy-manager-zh:latest'restart: alwaysports:- '80:80'- '8888:81' # 将管理界面端口从81修改为8888- '443:443'volumes:- ./data:/data- ./letsencrypt:/etc/letsencrypt
修改后重启容器:docker-compose down && docker-compose up -d
9.1.2 使用反向代理保护管理界面
可以设置NPM自身管理界面的反向代理,添加以下安全措施:
- 为管理界面设置专用域名
- 启用SSL加密
- 配置IP访问限制
- 启用双重认证
配置示例:
域名: npm-admin.example.com
方案: http
转发主机名/IP: 127.0.0.1
转发端口: 81
访问限制: 允许xxx.xxx.xxx.xxx/32
基本认证: 启用
SSL: Let's Encrypt
强制SSL: 启用
9.1.3 Docker容器安全加固
限制Docker容器的权限和资源使用:
version: '3'
services:app:image: 'chishin/nginx-proxy-manager-zh:latest'restart: alwaysports:- '80:80'- '81:81'- '443:443'volumes:- ./data:/data- ./letsencrypt:/etc/letsencrypt# 安全加固配置security_opt:- no-new-privileges:truecap_drop:- ALLcap_add:- NET_BIND_SERVICE# 资源限制mem_limit: 512mcpus: 1
9.1.4 定期安全更新
创建一个更新脚本scheduled-update.sh并设置定期执行:
#!/bin/bash
# 更新NPM容器
cd /path/to/npm
docker-compose pull
docker-compose down
docker-compose up -d# 备份配置
tar -czvf /path/to/backups/npm-backup-$(date +%Y%m%d).tar.gz ./data ./letsencrypt# 清理旧备份(保留最近30天)
find /path/to/backups/ -name "npm-backup-*.tar.gz" -mtime +30 -delete
将此脚本添加到crontab定期执行:
0 2 * * 0 /path/to/scheduled-update.sh >> /var/log/npm-update.log 2>&1
9.2 性能优化
- 为频繁访问的站点启用缓存
- 适当调整Nginx工作进程数
- 监控系统资源使用情况
9.2.1 高级缓存配置
NPM默认缓存配置较为基础,可添加自定义Nginx配置提升性能:
# 设置缓存路径
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
proxy_temp_path /data/nginx/temp;# 缓存配置
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
9.2.2 调整工作进程数
为Nginx服务器优化工作进程数量,创建自定义配置文件:
# 设置工作进程数为自动(根据CPU核心数)
worker_processes auto;# 调整每个工作进程的连接数
events {worker_connections 1024;multi_accept on;use epoll;
}# 调整超时设置
http {keepalive_timeout 65;keepalive_requests 100;client_body_timeout 10;client_header_timeout 10;send_timeout 10;
}
9.2.3 启用Gzip压缩
启用Gzip压缩可以显著减少传输数据大小:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
十、参考资料
- 中文版项目地址:https://github.com/xiaoxinpro/nginx-proxy-manager-zh
- 原版项目文档:https://nginxproxymanager.com/
- Docker官方文档:https://docs.docker.com/
- Docker Compose文档:https://docs.docker.com/compose/
- Let’s Encrypt文档:https://letsencrypt.org/docs/
十、应用场景示例
10.1 WordPress网站反向代理
场景:将运行在内部服务器上的WordPress站点通过HTTPS安全地发布到互联网。
配置步骤:
-
确保您的域名(如example.com)已正确解析到NPM服务器IP
-
在NPM中添加新的代理主机:
- 域名:
example.com
和www.example.com
- 转发目标:
http://内部服务器IP:80
- SSL: 申请Let’s Encrypt证书
- 高级选项: 启用WebSocket支持、启用缓存
- 域名:
配置示例:
域名: example.com, www.example.com
方案: http
转发主机名/IP: 192.168.1.10
转发端口: 80
缓存资源: 开启
WebSockets支持: 开启
SSL: Let's Encrypt
强制SSL: 开启
HTTP/2 支持: 开启
10.2 内部服务访问集成
场景:公司内部有多个服务(监控系统、文档系统、开发工具等)需要通过统一的域名访问。
配置步骤:
-
使用子域名区分不同服务
-
为每个服务配置代理:
- 监控系统:
monitor.internal.com
→http://监控服务器:8080
- 文档系统:
docs.internal.com
→http://文档服务器:3000
- 开发工具:
dev.internal.com
→http://开发服务器:9000
- 监控系统:
-
为每个子域名配置基本认证,限制访问
配置示例:
域名: monitor.internal.com
方案: http
转发主机名/IP: 192.168.1.20
转发端口: 8080
基本认证: 开启用户名: monitor-admin密码: 安全密码
SSL: 自定义证书(内部CA签发)
10.3 API网关应用
场景:为多个微服务API提供统一的访问入口,并添加安全层。
配置步骤:
-
使用路径区分不同API服务
-
配置路径转发:
- 用户服务:
api.example.com/users
→http://用户服务:8001
- 订单服务:
api.example.com/orders
→http://订单服务:8002
- 产品服务:
api.example.com/products
→http://产品服务:8003
- 用户服务:
-
添加适当的请求头和CORS配置
配置注意:NPM默认不支持路径级别的代理转发,需要通过自定义Nginx配置实现:
# 用户服务配置
location /users {proxy_pass http://用户服务IP:8001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
}# 订单服务配置
location /orders {proxy_pass http://订单服务IP:8002;proxy_set_header Host $host;# ... 其他头信息 ...
}
10.4 媒体流服务代理
场景:通过HTTPS提供流媒体服务,如视频直播或音频流。
配置步骤:
- 添加代理主机用于HTTP直播服务
- 启用WebSocket支持
- 配置较长的超时时间
- 为TCP流添加流代理配置
配置示例:
# HTTP流配置
域名: stream.example.com
方案: http
转发主机名/IP: 192.168.1.30
转发端口: 1935
WebSockets支持: 开启
缓存资源: 关闭
客户端超时: 300
SSL: Let's Encrypt# RTMP流配置(通过流代理)
流类型: TCP
转发主机名: 192.168.1.30
转发端口: 1935
入站端口: 1935
相关文章:
Nginx Proxy Manager 中文版安装部署
目录 Nginx Proxy Manager 中文版安装部署教程一、项目简介1.1 主要功能特点1.2 项目地址1.3 系统架构与工作原理1.4 适用场景 二、系统要求2.1 硬件要求2.2 软件要求 三、Docker环境部署3.1 CentOS系统安装Docker3.2 Ubuntu系统安装Docker3.3 安装Docker Compose 四、安装Ngin…...
类和对象(拷贝构造和运算符重载)下
类和对象(拷贝构造和运算符重载)下 这一集的主要目标先是接着上一集讲完日期类。然后再讲一些别的运算符的重载,和一些语法点。 这里我把这一集要用的代码先放出来:(大家拷一份代码放在编译器上先) Date.h #include <iostream> #include <cassert> …...
Codeforces Round 1008 (Div. 2) C
C 构造 题意:a的数据范围大,b的数据范围小,要求所有的a不同,考虑让丢失的那个a最大即可。问题变成:构造一个最大的a[i] 思路:令a2是最大的,将a1,a3,a5....a2*n1,置为最大的b,将a4,a…...
操作系统(1)多线程
在当今计算机科学领域,多线程技术已成为提高程序性能和响应能力的关键手段。无论是高性能计算、Web服务器还是图形用户界面应用程序,多线程都发挥着不可替代的作用。本文将全面介绍操作系统多线程的概念、实现原理、同步机制以及实际应用场景,…...
系统架构设计师:设计模式——创建型设计模式
一、创建型设计模式 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 随着系统演化得越来越依赖于对象复合而不是类…...
使用Set和Map解题思路
前言 Set和Map这两种数据结构,在解决一些题上,效率很高。跟大家简单分享一些题以及如何使用Set和Map去解决这些题目。 题目链接 136. 只出现一次的数字 - 力扣(LeetCode) 138. 随机链表的复制 - 力扣(LeetCode) 旧…...
Java 算法入门:从基础概念到实战示例
在计算机科学领域,算法如同魔法咒语,能够将无序的数据转化为有价值的信息。对于 Java 开发者而言,掌握算法不仅是提升编程能力的关键,更是解决复杂问题的核心武器。本文将带领你走进 Java 算法的世界,从基础概念入手&a…...
【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
深度解析ESRGAN:增强型超分辨率生成对抗网络的革命性突破 技术演进与架构创新核心改进亮点 环境配置与快速入门硬件要求安装步骤 实战全流程解析1. 单图像超分辨率重建2. 自定义数据集训练3. 视频超分处理 核心技术深度解析1. 残差密集块(RRDB࿰…...
记录搭建自己的应用中心-需求看板搭建
记录搭建自己的应用中心-需求看板搭建 人员管理新增用户组织用户登录和操作看板状态看板任务通知任务详情 人员管理 由于不是所有人都有应用管理权限,所以额外做了一套应用登录权限,做了一个新的组织人员表,一个登录账户下的所有应用人员共享…...
探秘数据结构:构建高效算法的灵魂密码
摘要 数据结构作为计算机科学的基石,其设计与优化直接影响算法效率、资源利用和系统可靠性。本文系统阐述数据结构的基础理论、分类及其核心操作,涵盖数组、链表、栈、队列、树、图、哈希表与堆等经典类型。深入探讨各结构的应用场景与性能对比…...
多节点监测任务分配方法比较与分析
多监测节点任务分配方法是分布式系统、物联网(IoT)、工业监测等领域的核心技术,其核心目标是在资源受限条件下高效分配任务,以优化系统性能。以下从方法分类、对比分析、应用场景选择及挑战等方面进行系统阐述: 图1 多…...
spring-boot-maven-plugin 将spring打包成单个jar的工作原理
spring-boot-maven-plugin 是 Spring Boot 的 Maven 插件,它的核心功能是将 Spring Boot 项目打包成一个独立的、可执行的 Fat JAR(包含所有依赖的 JAR 包)。以下是它的工作原理详解: 1. 默认 Maven 打包 vs Spring Boot 插件打包…...
盐化行业数字化转型规划详细方案(124页PPT)(文末有下载方式)
资料解读:《盐化行业数字化转型规划详细解决方案》 详细资料请看本解读文章的最后内容。 该文档聚焦盐化行业数字化转型,全面阐述了盐化企业信息化建设的规划方案,涵盖战略、架构、实施计划、风险及效益等多个方面,旨在通过数字化…...
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡 一、开源的本质与行业意义 1.1 开源软件的定义与内涵 当卓伊凡被问及”软件开源是什么”时,他给出了一个生动的比喻:”开源就像将食谱公之于众的面包师,…...
解锁 C++26 的未来:从语言标准演进到实战突破
一、C26 的战略定位与开发进展 C26 的开发已进入功能冻结阶段,预计 2026 年正式发布。作为 C 标准委员会三年一迭代的重要版本,其核心改进聚焦于并发与并行性的深度优化,同时在内存管理、元编程等领域实现重大突破。根据 ISO C 委员会主席 H…...
terraform实现本地加密与解密
在 Terraform 中实现本地加密与解密(不依赖云服务),可以通过 OpenSSL 或 GPG 等本地加密工具配合 External Provider 实现。以下是完整的安全实现方案: 一、基础架构设计 # 文件结构 . ├── secrets │ ├── encrypt.sh …...
黄雀在后:外卖大战新变局,淘宝+饿了么开启电商大零售时代
当所有人以为美团和京东的“口水战”硝烟渐散,外卖大战告一段落时,“螳螂捕蝉,黄雀在后”,淘宝闪购联合饿了么“闪现”外卖战场,外卖烽火再度燃起。 4 月30日,淘宝天猫旗下即时零售业务“小时达”正式升级…...
基本功能学习
一.enum枚举使用 E_SENSOR_REQ_NONE 的定义及用途 在传感器驱动开发或者电源管理模块中,E_SENSOR_REQ_NONE通常被用来表示一种特殊的状态或请求模式。这种状态可能用于指示当前没有活动的传感器请求,或者是默认初始化状态下的一种占位符。 可能的定义…...
59常用控件_QComboBox的使用
目录 代码示例:使用下拉框模拟麦当劳点餐 代码示例:从文件中加载下拉框的选项 QComboBox表示下拉框 核心属性 属性说明currentText当前选中的文本currentIndex当前选中的条目下标。 从 0 开始计算。如果当前没有条目被选中,值为 -1editable是否允许修改…...
卡洛诗西餐的文化破圈之路
在餐饮市场的版图上,西餐曾长期被贴上“高端”“舶来品”“纪念日专属”的标签,直到卡洛诗以高性价比西餐的定位破局,将意大利风情与家庭餐桌无缝衔接。这场从异国符号到家常选择的转型,不仅是商业模式的创新,更是一部…...
Python-57:Base32编码和解码问题
问题描述 你需要实现一个 Base32 的编码和解码函数。 相比于 Base32,你可能更熟悉 Base64,Base64 是非常常见的用字符串形式表示二进制数据的方式,在邮件附件、Web 中的图片中都有广泛的应用。 Base32 是 Base64 的变种,与 Bas…...
【排序算法】八大经典排序算法详解
一、直接选择排序(Selection Sort)算法思想算法步骤特性分析 二、堆排序(Heap Sort)算法思想关键步骤特性分析 三、直接插入排序(Insertion Sort)算法思想算法步骤特性分析 四、希尔排序(Shell …...
近端策略优化PPO详解:python从零实现
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
C# System.Text.Json终极指南(十):从基础到高性能序列化实战
一、JSON序列化革命:System.Text.Json的架构优势 1.1 核心组件解析 1.2 性能基准测试(.NET 8) 操作Newtonsoft.JsonSystem.Text.Json性能提升简单对象序列化1,200 ns450 ns2.7x大型对象反序列化15 ms5.2 ms2.9x内存分配(1k次操作)45 MB12 MB3.75x二、基础序列化操作精解 …...
Centos7.9 安装mysql5.7
1.配置镜像(7.9的镜像过期了) 2.备份原有的 CentOS 基础源配置文件 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 3.更换为国内镜像源 sudo vi /etc/yum.repos.d/CentOS-Base.repo 将文件内容替换为以下内容&am…...
Qt指南针
Qt写的指南针demo. 运行结果 滑动调整指针角度 实现代码 h文件 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QColor>class Compass : public QWidget {Q_OBJECT// 可自定义属性Q_PROPERTY(QColor backgroundColor READ backgroundColor WRI…...
杜邦分析法
杜邦分析法(DuPont Analysis)是一种用于分析企业财务状况和经营绩效的综合分析方法,由美国杜邦公司在20世纪20年代率先采用,故得名。以下是其相关内容介绍: 核心指标与分解 净资产收益率(ROE):杜邦分析法的核心指标,反映股东权益的收益水平,用以衡量公司运用自有资本…...
给U盘加上图标
电脑插入U盘后,U盘的那个标志没有特色,我们可以换成有意义的照片作为U盘图标,插上U盘就能看到,多么地浪漫。那该如何设置呢?一起来看看吧 选择一张ICO格式的图片到U盘里 PNG转ICO - 在线转换图标文件PNG转ICO - 免费…...
人工智能对未来工作的影响
人工智能对未来工作的影响是多方面的,既包括对就业结构的改变,也涉及工作方式、职业技能需求以及社会政策的调整。以下是对人工智能对未来工作影响的详细分析: 一、就业结构的变革 岗位替代与消失 人工智能技术在许多领域展现出强大的自动化…...
RocketMQ常见面试题一
1. RocketMQ 是什么?它的核心组件有哪些? 答:RocketMQ 是阿里巴巴开源的一款分布式消息中间件,支持高吞吐、低延迟、高可用的消息发布与订阅。 核心组件: NameServer:轻量级注册中心,管理 Broker 的元数据(路由信息),无状态。 Broker:消息存储和转发节点,分为 Mas…...
C++调试(壹):初步认识WinDbg和dump文件
目录 1.前言 2.WinDbg是什么? 3.WinDbg安装 4.Dump文件是什么? 5.生成Dump文件的场景 前言 这是一个关于C调试的博客,该系列博客主要是讲解如何使用WinDbg工具结合dump文件调试程序。在日常开发过程中,我们往往无法完…...
centos7 离线安装python3 保留python2
一、事前准备: (1)查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) (2)查看linux中当前python版本 centos7 默认安装python2.7.5 (3)查看python3的依赖&#…...
【dify—9】Chatflow实战——博客文章生成器
目录 一、创建Chatflow 二、创建变量 三、添加时间工具 四、编写提示词 五、回复输出 六、运行 第一部分 安装difydocker教程:【difydocker安装教程】-CSDN博客 第二部分 dock重装教程:【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像&…...
华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
3.2/Q2,Charls最新文章解读
文章题目:Internet usage elevates elderly obesity: evidence from a difference-in-differences analysis of the broadband China policy DOI:10.1186/s13690-025-01565-9 中文标题:互联网使用导致老年人肥胖:中国宽带政策差异…...
Seata服务端开启事务核心源码解析
文章目录 概述一、doGlobalBegin1.1、createGlobalSession1.2、addSessionLifecycleListener1.3、begin 概述 Seata服务端作为TC角色,用于接收客户端标注了GlobalTransactional也就是TM角色的开启事务,提交/回滚事务请求,维护全局和分支事务的…...
Seata服务端回滚事务核心源码解析
文章目录 前言一、doGlobalRollback3.1、changeGlobalStatus3.2、doGlobalRollback 前言 本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。 一、doGlobalRollback doGlobalRollback是全局回滚的方法: 首先依旧…...
PMP-第九章 项目资源管理(一)
项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以完成项目的各个过程资源主要分为实物资源和人力资源;实物资源包括设备、材料和基础设施等团队资源或人员指的是人力资源团队资源管理与项目干系人管理有重叠的部分,本章重点关注组成项目团…...
【Unity】MVP框架的使用例子
在提到MVP之前,可以先看看这篇MVC的帖子: 【Unity】MVC的简单分享以及一个在UI中使用的例子 MVC的不足之处: 在MVC的使用中,会发现View层直接调用了Model层的引用,即这两个层之间存在着一定的耦合性,而MV…...
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟 前言一、PWM调制技术基本原理二、仿真模型中加入PWM调制三、逆变电路MOS管添加体二极管四、模拟添加机械负载五、仿真模型与控制框图文章相关模型文件下载链接参考链接 前言 本系列文…...
x86架构详解:定义、应用及特点
一、x86架构的定义 x86 是由Intel公司开发的复杂指令集(CISC)处理器架构,起源于1978年的Intel 8086处理器,后续扩展至32位(IA-32)和64位(x86-64)。其名称来源于早期处理器型号的“8…...
C++学习-入门到精通-【3】控制语句、赋值、自增和自减运算符
C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符 控制语句、赋值、自增和自减运算符 C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符一、什么是算法二、伪代码三、控制结构顺序结构选择结构if语句if...else语句switch语句 循环结构while语句 四、算法详述&a…...
【Bootstrap V4系列】学习入门教程之 页面内容排版
Bootstrap V4 学习入门教程之 页面内容排版 按钮上的指针排版一、Global settings 全局设置二、Headings 标题2.1 Customizing headings 自定义标题2.2 Display headings 显示标题2.3 Lead 引导 三、Blockquotes 块引用3.1 Naming a source 命名源3.2 Alignment 对齐 四、Lists…...
GTA5(传承/增强) 13980+真车 超跑 大型载具MOD整合包+最新GTA6大型地图MOD 5月最新更新
1500超跑载具 1000普通超跑 1500真车超跑 各种军载具1000 各种普通跑车 船舶 飞机 1000 人物1500 添加式led载具1000 超级英雄最新版 添加添加式武器MOD1000 添加地图MOD500 添加超跑载具2000 当前共计1.2wMOD 4月2日更新 新增770menyoo地图 当前共计12770 新增48款超级英雄最新…...
目标文件的段结构及核心组件详解
目标文件(如 .o 或 .obj)是编译器生成的中间文件,其结构遵循 ELF(Linux)或 COFF(Windows)格式。以下是其核心段(Section)和关键机制的详细解析: 1. 目标文件的…...
60常用控件_QSpinBox的使用
目录 代码示例:调整麦当劳购物车中的份数 使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰ "微调框", 它是带有按钮的输⼊框. 可以⽤来输⼊整 数/浮点数. 通过点击按钮来修改数值⼤⼩. 由于 SpinBox 和 QDoubleSpinBox ⽤法基本相同, 就只介绍 SpinBox 的…...
数据库Mysql_约束
将失败当作自己的老师,即使他会使自己难堪 ----------陳長生. 1.什么是数据库约束 数据库约束是在数据库中对表中的内容设定条件或者规则,设置了这些规则能使得数据更具体有准确性,可靠性。 2.约束类型 NOT NULL设置列不能为空UNIQUE设置列…...
C++笔记-继承(下)(包含派生类的默认成员函数,菱形继承等)
一.派生类的默认成员函数 1.14个常见默认成员函数 默认成员函数,默认的意思就是指我们不写,编译器会自动为我们生成一个,那么在派生类中,这几个成员函数是如何生成的呢? 1.派生类的构造函数必须调用基类的构造函数初…...
DeepSeek V3 训练策略:FP8混合精度与多Token预测
近年来,大规模语言模型取得重大突破,但其训练与部署成本也随之攀升。DeepSeek 系列开源模型致力于通过优化模型结构和训练策略来降低成本、提升性能。DeepSeek V3 融合了多种先进技术(如 FP8 低精度训练、DualPipe 双流水线机制、多Token 预测目标等),在保证模型能力的同时…...
开始一个vue项目
一、创建vite项目和配置 1、查看npm版本: npm --version 根据版本选择创建命令 # npm 6.x npm create vitelatest my-vue-product --template vue # npm 7 npm create vitelatest my-vue-product -- --template vue 2、依次执行: npm install n…...