首页
留言
导航
统计
Search
1
追番推荐!免费看动漫的网站 - 支持在线观看和磁力下载
10,040 阅读
2
推荐31个docker应用,每一个都很实用
1,939 阅读
3
PVE自动启动 虚拟机 | 容器 顺序设置及参数说明
1,366 阅读
4
[Windows] MicroSoft Office LTSC Professional Plus 2024 官方安装部署工具
895 阅读
5
一条命令,永久激活!Office 2024!
833 阅读
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
登录
Search
标签搜索
Java
小程序
Redis
SpringBoot
docker
Typecho
Cloudflare
uni-app
docker部署
虚拟机
WordPress
群晖
CentOS
Vue
Java类库
计算机网络
Linux命令
防火墙配置
Mysql
脚本
微醺
累计撰写
268
篇文章
累计收到
11
条评论
首页
栏目
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
页面
留言
导航
统计
搜索到
268
篇与
的结果
2026-08-10
满血显卡,备同时「Win + 飞牛」AIO 终极方案,零刻ME Pro 13500H 神了
“亦 PC 亦 NAS”,这是零刻推出 ME Pro 系列后的主打品牌词。现在,真正的 AIO 搞定了。只要一台 NAS,安装 Windows 当正常电脑用,同时跑飞牛当 NAS,互不冲突,性能无限接近裸机,NAS 支持转码、人脸识别,Windows 可以剪辑、看视频、玩游戏!处理器从最早的 N150,到如今J5005、N95、龙芯 2K3000、13代酷睿i5、野猫湖、AI 9 HX 370 等等,覆盖了几乎所有架构、平台。但真正能够承担 “亦 PC 亦 NAS” 的,并不是所有型号!我先来说说我对这句话的理解吧。1、一台设备两个有用途设备的结构和性能,既可以作为 PC 台式机使用,又可以作为 NAS 使用。零刻ME Pro 从全新的散热结构、设备外观、整体能耗上来看,作为 NAS 绝对没问题。而作为 PC 裸机代替非游戏台式机也绝对没问题。2、一台设备两个有用途利用强大的虚拟化平台,在裸机内安装 Windows 、NAS 两个操作系统,同时实现 PC 和 NAS 的双重用途。最理想的情况,肯定是第二种,一台设备摆在桌面上,同时实现了两种场景的使用功能,而且性能都不弱。但现实非常残酷,第二种模式的成熟方案几乎没有。原因也很简单,GPU 很难分配,传统的直通只能保证一个系统有显卡能力,而虚拟化方案挑硬件。直到 13 代酷睿 i5-13500H 出现,强大的 CPU、Iris Xe 核显、Quick Sync 媒体引擎,再结合社区 i915 SR-IOV 方案。在切分 GPU 后,剩余 CPU 和 GPU 能力依然足够支撑两个完整系统运行,这才让真正具备 “一颗核显拆给两个系统同时使用” 的可能。是的,一台设备,两套系统同时使用,且均具备较完整的 GPU 能力,这个真正的“亦 PC 亦 NAS”场景,在零刻ME Pro i5-13500H 这台设备上,真正落地了。二。零刻 ME Pro,PC、NAS 共用 GPU具体的实操环节比较复杂,我这边也分步骤一点点讲,如果你恰好购买了零刻ME Pro 13500H 这台设备,可以跟着我的操作来走。1. 安装 PVE 9.1虚拟化方案,以 i915-sriov-dkms 为优,当前 13500H 的 SR-IOV 场景里,PVE 9.1 是比较成熟的方案,其内核 6.17.2-1-pve 恰好卡在 6.17.x~7.0.x 之间,对应 SR-IOV 驱动 2026.05.06。而我们的系统选型里,NAS 选型为 飞牛OS,内置商店的三方驱动包也提供了 i915 且飞牛版本也在 6.18.18.c877-trim,整体下来可以少很多折腾。登录 PVE 官方 —— ProxMox,在 proxmox-ve_9.2.iso 下方点击 Show more 可以下载 9.1-1.iso 的镜像。然后使用 rufus 在空白 U 盘里烧录 PVE 的 iso 镜像。具体的 PVE 安装过程就不说了,插入零刻 ME Pro 后进入 BIOS,在启动项里以 U 盘启动为第一优先级,然后安装部署。2. PVE 安装 dkmsPVE 默认只能看到一颗完整核显,而不能创建 VF。所以第一步需要安装 i915-sriov-dkms,让 Iris Xe 开启 SR-IOV 能力。1、备份 apt### 第一步 mkdir -p /root/apt-sources-backup ### 第二步 cp -a /etc/apt/sources.list /root/apt-sources-backup/ 2>/dev/null || true ### 第三步 cp -a /etc/apt/sources.list.d /root/apt-sources-backup/2、禁用企业源和 ceph### 第一步 [ -f /etc/apt/sources.list.d/pve-enterprise.sources ] && \ mv /etc/apt/sources.list.d/pve-enterprise.sources \ /etc/apt/sources.list.d/pve-enterprise.sources.disabled ### 第二步 [ -f /etc/apt/sources.list.d/ceph.sources ] && \ mv /etc/apt/sources.list.d/ceph.sources \ /etc/apt/sources.list.d/ceph.sources.disabled ### 第三步 grep -R "enterprise.proxmox.com" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null3、添加 PVE 9 无订阅源cat > /etc/apt/sources.list.d/proxmox.sources <<'EOF' Types: deb URIs: http://download.proxmox.com/debian/pve Suites: trixie Components: pve-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF4、更新 apt 并安装### 第一步 apt clean && apt update ### 第二步 apt install -y build-essential dkms sysfsutils wget proxmox-headers-$(uname -r)5、安装 SR-IOV 驱动### 第一步 wget -O /tmp/i915-sriov-dkms_2026.05.06_amd64.deb https://github.com/strongtz/i915-sriov-dkms/releases/download/2026.05.06/i915-sriov-dkms_2026.05.06_amd64.deb ### 第二步 dpkg -i /tmp/i915-sriov-dkms_2026.05.06_amd64.deb完成安装后,输入下面的指令检查状态dkms status确认 dkms status 显示 installed 后,代表安装成功,我们继续再配置 GRUB 和两个 VF。1、GRUB 配置### 第一步 cp /etc/default/grub /etc/default/grub.bak ### 第二步 sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=2 module_blacklist=xe"/' /etc/default/grub2、VF 配置### 第一步 sed -i '\|sriov_numvfs|d' /etc/sysfs.conf ### 第二步 echo 'devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2' >> /etc/sysfs.conf3、更新启动文件### 第一步 update-grub ### 第二步 update-initramfs -u -k 6.17.2-1-pve确认两条命令都没有报错,再重启整个零刻ME Pro。等重启完了,我们会发现两个 VF 仍被宿主机的 i915 驱动占用。这个时候我们需要继续在 PVE 宿主端屏蔽 VF,避免宿主软件误用 VF,并提高虚拟机启停时的稳定性。PF 继续由 i915 管理,只有 VF 绑定 vfio-pci,执行下面的指令。echo "vfio-pci" > /etc/modules-load.d/vfio.conf创建规则,只S处理两个 VF。cat > /etc/udev/rules.d/99-i915-vf-vfio.rules <<'EOF' ACTION=="add", SUBSYSTEM=="pci", KERNEL=="0000:00:02.[1-2]", ATTR{vendor}=="0x8086", ATTR{device}=="0xa7a0", DRIVER!="vfio-pci", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/pci/devices/$kernel/driver/unbind; echo vfio-pci > /sys/bus/pci/devices/$kernel/driver_override; modprobe vfio-pci; echo $kernel > /sys/bus/pci/drivers/vfio-pci/bind'" EOF之后更新并重启。### 第一步 update-initramfs -u -k 6.17.2-1-pve ### 第二步 reboot重启后验证。lspci -nnk -s 00:02.0 lspci -nnk -s 00:02.1 lspci -nnk -s 00:02.2 ls -l /dev/dri如果输出下面的内容,就代表 PVE 侧的驱动安装完成了。3. 配置 Windows 和 飞牛OS 虚拟机接下来,我们来安装 PVE 里的两台虚拟机。windows 我选择了 win11,然后飞牛直接从官网下载最新版本即可。注意无论是 windows 还是飞牛os,机型都要选择 q35。配置方面,win11 我给了 12 核 16G 内存,然后飞牛给了 4 核 4G 内存。这对于 13500H 这个处理器来说,并没有什么压力。虚拟机一直跑到正确安装完系统,然后关机等待。Windows 在安装的时候需要配置 Pin,这个时候记得下载 virtio-win 这个驱动包,然后重新关机到 CD/DVD 驱动器里替换 win11 ios 为新的镜像包,然后安装页面里面选择 kvm-win11-x86 给 windows 安装上网卡驱动。OK 现在最关键的部分来了,两套系统都安装完成后,记得都关机。然后来到对应的硬件标签页下,选择添加硬件,选择添加 PCI 设备,选择原始设备,在这里可以看到顶部的 0000:00:02:1 和 0000:00:02:2 这俩东西,他们就是新增加的 VF 。分别给飞牛OS 配置上 0000:00:02:2 。再给 Windows 配上 0000:00:02:1 。别着急,还没有完。飞牛 OS 因为本身提供了 webui 和 SSH 的能力,所以我们是不需要单独给飞牛配置显示器的。但 Windows 就不一样了,使用 VF 分配后的 Windows,是无法直接直通 HDMI 输出到屏幕的。那如果还需要 VNC 或者远程操作的话,那根本没办法实现我们的一台设备又当 PC 又当 NAS 的需求,也没办法精简桌面设备。所以我们还需要另外一个东西 —— USB 显卡。这个玩意儿我之前介绍过,它是通过 USB 内置芯片,将虚拟机的 USB 转换成 HDMI 输出口,然后通过 CPU 编解码再转换 GPU 能力。这个东西现在咸鱼 100 多我买进来的,新的价格大家可以搜搜看,我不是很确定了。零刻 ME Pro 13500H 的设备背面,有 2个 USB-A 口,1个雷电口,这款 USB 显卡刚好可以使用上雷电口,再加上操作 windows 需要的键盘鼠标,我们还要直通 1 个 USB-A 口到系统里。将键鼠套装收发器、USB 显卡都接入后,依旧在 PVE 的硬件标签里选择添加设备,选择直通 USB 端口,分别添加 Silcon_Motion 的两个 HDMI 输出口,以及 2.4G 的键盘鼠标收发器。直通后,这俩 USB 口就只能 Windows 使用了,如果考虑到 Windows 后期要插拔 U 盘的,可以把背部 3 个 USB 口全部直通给 Windows,保留零刻 ME Pro 前置的一个 USB 口作为灵活使用。直通了之后,在 PVE 控制台连接 Windows,然后访问 SiliconMotion 的驱动官网,下载 USB 显卡的驱动程序。完成之后继续重启,就可以在 HDMI 输出 Windows 画面了。四、双系统实测 GPU 能力好了,回到测试环节。前面在文章开头我发过一些简单的测试,接下来我们具体还是来看看两个系统里实际 GPU 的情况。1、飞牛OS GPU 测试先来看飞牛 OS,如果之前不直通 GPU 的,那么飞牛 OS 里是看不懂 GPU 的模块的。而现在直通 VF 后,可以在资源管理里看到 GPU 模块,并且名字变成了 Iris Xe Graphics。回到飞牛的 SSH 里,输入lspci -nnk | grep -A4 -Ei 'VGA|Display' 可以查询到内容。再输入 ls -l /dev/dri 也可以看到显卡信息。那为了完整能力,我们还需要到飞牛的应用中心里,去安装 i915-sriov-dkms 这个驱动,安装完成以后重启飞牛。虽然工具里面写了仅适用 Intel UHD7XX 系列,但是实测下来是可以正常调用的。等重启完成,回到 SSH 里,继续去看 ls -l /der/dri,就可以看到大家熟悉的显卡能力 renderD128 已经出现了,这就说明 13500H 的显卡能力正确被接入飞牛。如果平时使用 docker 的,也可以继续给 docker 映射这个显卡来实现更多的服务。好了,再看看显卡支持的编解码能力,H264/H265 编解码、VP9/AV1解码 ,这就是 13500H 的能力,完美的整合到了 飞牛 OS 里。接着我们打开飞牛影视,在系统设置里,可以看到 GPU 加速转码功能可以正确打开。直接关闭 CPU 编解码来看看。由于驱动的问题,在飞牛 OS 里目前还看不到 GPU 的实际使用占比,但是我们可以通过 PVE 的 intel-gpu-top 来查看调用情况。我使用浏览器打开飞牛影视,播放了一个 4K 的影片,然后转码成 720P 播放,可以看到在 PVE 里已经展示了飞牛OS 调用 Video、Render/3D 能力进行在线转码播放了。2、Windows GPU 测试回到 Windows 里,先拿图吧工具箱看看参数,处理器正确展示 13500H。再跑个分吧。虚拟机状态下,CPU-Z 多核跑到 5375.4 分,单核在 713.7 分;裸机状态下,CPU-Z 多核跑到 5895.0 分,单核在 735.9 分,性能损耗在 8% ~ 10% 之间。然后用 GPU-Z 打开看显卡,也可以读取 Iris Xe Graphics。直接上手剪影做一个视频剪辑吧,我挑选了一部影片,导出为 HEVC 4:2:2 格式,可以看到 Windows 里的任务管理器性能一栏,GPU 3D 和 Video Decode 都有了使用占比,这说明显卡能力被正确执行和调用。虽然 Windows 侧目前可以跑一些简单的 GPU 服务,但是它还有一个问题就是 D3D11 无法使用,我们需要将 Windows 的驱动降级到 32.0.101.6460 版本。只有降级到这个版本之后,D3D11 才可以正确被 Windows 调用。3、Windows 裸机和虚拟机 GPU 对比那么很多人又会问,零刻 ME Pro 13500H 这样子跑的话,Windows 使用 GPU 的损耗又有多少呢?这个问题其实我也很关注,于是我通过 6 个对比,测试了 PVE 虚拟机下的 Windows 剪辑场景,以及裸机 Windows 剪辑场景的对比。先看看测试项目:H264、H265 的硬编解码,以及 422 到 420 10bit 的转码等。通过 QSV 无论是虚拟机状态下,还是裸机状态下,都可以正常运行。六个模式下,性能损耗最大的是 QSV 4:2:2 转码 4:2:0 10bit ,虚拟机比裸机性能下降 10.9%,而 HEVC 422 10bit 解码则只有约 4.2% 的损耗,直接忽略不计。那如果虚拟机 Win11 和飞牛同时跑显卡工作的话,又会如何?这个我也测试了,因为 VF 目前是 1:1 的配置,所有实际两边都同时工作的时候,单侧性能损耗降低 45% 左右,实际上就是两台虚拟机一起抢 GPU 了。但是考虑到实际情况下,转码、Clip 等工作并不是一直在跑的,Windows 也不是一直在剪辑,所以并不会有太多实际的抢 GPU 现象发生。但是将一个 GPU 分成两个 GPU,再分别提供给 PC 和 NAS 带来的收益,却非常的高。
2026年08月10日
14 阅读
0 评论
0 点赞
2026-04-13
网工必备的8款神器
今天分享的这8款工具,都是我亲测好用的。从模拟实验到生产排障,覆盖网工日常工作的各个场景。1. eNSP:华为模拟器适用场景: 学习华为设备配置、考证实验、方案验证华为官方出的模拟器,支持路由器、交换机、防火墙、无线AC/AP等全套设备模拟。为什么推荐: • 完全免费,官网就能下载• 学习和熟悉华为设备的配置• 设备型号较多,从AR1220到NE40E都有• 支持抓包,配合Wireshark分析报文很方便2. Wireshark:网络封包分析软件适用场景: 抓包分析、协议学习、故障定位这个不用多介绍,网工人手一个。但很多人只会基本的抓包,其实它的过滤功能才是精髓。常用过滤表达式:ip.addr == 192.168.1.1 # 过滤特定IP tcp.port == 80 # 过滤特定端口 http.request.method == "GET" # 过滤HTTP GET请求 icmp # 只看ICMP报文实战案例: 整个网段卡顿、掉线、ping 丢包严重先用 Wireshark 抓包,过滤 arp 一看:同一网段内 ARP 报文暴增,大量广播包 ,数据包大量 重复转发、循环翻滚 。解决方法:大道至简,拔线。3. SecureCRT:远程访问软件适用场景: 远程连接交换机、路由器、服务器Windows自带的超级终端太简陋,PuTTY功能又不够强。SecureCRT在功能和易用性之间平衡得最好。核心功能: • 支持SSH/Telnet/Serial多种协议• 会话管理,常用设备一键连接• 脚本自动化,批量执行命令• 日志记录,方便事后追溯4. MobaXterm:我心中的全能终端适用场景: 多功能终端、文件传输、远程桌面这款工具我用了三年,越用越离不开。优点: 一个顶好几个。 SSH客户端、SFTP文件传输、X11转发、VNC远程桌面 ,全集成在一起。图形化SFTP。连上SSH后,左侧自动显示文件列表,拖拽就能上传下载。比命令行的scp方便多了。多标签页。同时连多台设备,切换很方便。内置Unix命令。Windows下也能用grep、awk、sed这些命令。5. Visio:画拓扑图软件适用场景: 网络拓扑图绘制、方案设计、文档输出做网络方案,光会配设备不够,还得会画图。为什么网工需要它: • 专业网络图标库,路由器、交换机、防火墙都有标准图形• 画拓扑图比PPT专业,比手绘清晰• 方案文档必备,投标、验收、交接都用得上6. XMind:思维导图工具适用场景: 故障排查思路整理、学习笔记、方案规划网络故障有时候很复杂,涉及多个环节。脑子容易乱,这时候用思维导图把思路理清楚,效率翻倍。网工可以用它做: • 故障排查流程图——从现象到根因,一步步拆解• 学习笔记——协议原理、命令整理,结构化记忆• 项目规划——割接步骤、风险评估,提前想周全7. CAD 快速看图适用场景: 机房图纸查看、布线规划、现场施工为什么推荐: 秒开DWG图纸,打印蓝图不需要额外安装字体,不卡顿支持面积/长度测量,算线材用量很方便文字提取功能,一键提取图纸上的设备型号手机电脑都能用,现场用手机看图纸比带纸质图方便8. Python + Netmiko:自动化运维适用场景: 批量配置、定时巡检、自动化脚本前面说的都是图形化工具,最后推荐一个编程方向。Netmiko是什么: 一个 Python 库,专门用来做网络设备的SSH连接和命令下发。几行代码就能实现批量配置。简单示例:from netmiko import ConnectHandler device = { 'device_type': 'huawei', 'ip': '192.168.1.1', 'username': 'admin', 'password': 'password', }能做什么: • 批量备份配置• 定时巡检,自动发报告• 批量修改密码、VLAN等• 配合Excel,实现"填表即配置"不用精通 Python ,掌握 基础语法+Netmiko 就够用了。结尾工具是手段,不是目的。再牛逼的软件,用不好也是白搭。关键还是理解网络原理,知道什么时候该用什么工具。
2026年04月13日
40 阅读
0 评论
0 点赞
2026-03-26
UniApp 微信无感登录实战:小程序 + 公众号 H5 静默授权全通关
做微信生态开发的同学,大概率都被这两个问题折磨过:一弹授权框就流失用户;小程序和公众号 H5 登录逻辑混用,BUG 越改越多;想实现用户打开就自动识别身份,却总踩各种配置坑、接口坑、安全坑……,今天这篇实战文章,把 UniApp 适配 微信小程序 + 公众号 H5 的静默登录拆透,全程无弹窗、用户零感知,附可直接复制的源码 + 高频避坑指南,看完就能落地!一、先搞懂:静默登录到底在解决什么?简单说:不弹框、不打扰,悄悄拿到用户 openid,实现自动登录。openid 就是微信用户在当前 小程序 / 公众号 下的唯一 ID,拿到它,就能精准识别用户、同步数据、无感登录。微信两大生态,静默逻辑完全不同,千万别混用:平台实现方式核心 API用户体验微信小程序直接调用登录接口uni.login完全无感知公众号 H5OAuth2.0 静默跳转snsapi_base页面快闪一次,无感知下面分场景手把手实现。二、场景 1:微信小程序静默登录(零弹窗)核心结论 uni.login 本身就是静默的,不会弹出任何授权框!前端只拿 code,openid 必须由后端换取,这是铁律。完整可运行代码import { onLoad } from'@dcloudio/uni-app' onLoad(() => { // 1. 先查本地是否已缓存openid const openid = uni.getStorageSync('openid') if (openid) { console.log('老用户,openid:', openid) return } // 2. 静默获取code uni.login({ provider: 'weixin', success: (loginRes) => { console.log('临时code:', loginRes.code) // 3. 传给后端换openid uni.request({ url: 'https://your-server.com/api/wx/login', data: { code: loginRes.code }, success: (res) => { // 4. 缓存openid,下次直接用 uni.setStorageSync('openid', res.data.openid) } }) } }) })执行流程(闭眼记) 用户打开小程序 → uni.login 静默拿 code → 后端用 code+AppSecret 换 openid → 前端缓存 → 全程无弹窗⚠️ 小程序必踩 4 大坑前端直接拿 openiduni.login 只返回 code,openid 必须后端请求微信jscode2session接口换取。AppSecret 写在前端等同于泄露账号权限,绝对禁止出现在客户端代码。iOS App 打包后弹授权非小程序环境,需配置manifest.json的universalLinks,属于微信开放平台登录逻辑。多小程序 openid 串号缓存 key 建议用openid_${小程序appid},避免共用 storage 冲突。三、场景 2:公众号 H5 静默登录(快闪无感知核心结论 H5 没有 uni.login,靠OAuth2.0 静默跳转,微信自动带 code 返回页面,用户仅感觉页面闪一下。完整可运行代码(App.vue)export default { async onLaunch(e) { const appid = '你的公众号AppID' // 回调域名必须在公众号后台配置,且编码 const redirect_uri = encodeURIComponent('https://你的域名.com/') // 1. 本地有openid直接跳过 const openid = uni.getStorageSync('openid') if (openid) { console.log('已登录,openid:', openid) return } // 2. URL带回code,直接换openid if (e.query.code) { const res = await uni.request({ url: 'https://你的服务器.com/api/wx/h5-login', data: { code: e.query.code } }) uni.setStorageSync('openid', res.data.openid) return } // 3. 无openid无code,跳转微信静默授权 const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect` window.location.replace(authUrl) } }执行流程 访问 H5 → 无 openid → 跳微信静默授权 → 秒回页面带 code → 后端换 openid → 缓存完成登录⚠️ H5 专坑 3 个redirect_uri 报错后台必须配置网页授权域名,代码中必须用encodeURIComponent编码。跳回白屏 / 页面栈错乱跳转前存历史长度,返回时用history.go回退。H5 里用 uni.login直接报错is not a function,H5 只能用 OAuth2.0 跳转。四、经典翻车案例(90% 人中招)有学员把小程序登录代码直接搬到公众号 H5:onLoad() { uni.login({ // ❌ 致命错误:H5无此API provider: 'weixin' }) }结果控制台直接报错,排查半小时才发现 ——API 用错场景!记住一句口诀:✅ 小程序静默 → uni.login✅ H5 静默 → OAuth2.0 跳转❌ 混用 → 必报错五、开发自查清单(上线前逐条核对)小程序端只传 code 给后端,前端不解析 openidAppSecret 从未出现在前端代码openid 缓存 key 带 appid 防串号做缓存判断,避免重复登录H5 端网页授权域名已配置redirect_uri 已编码用 snsapi_base 静默而非 snsapi_userinfo 弹窗处理跳转回退,避免白屏坚决不用 uni.login六、最后总结静默登录的本质,就是前端拿临时 code,后端换用户唯一标识 openid。小程序是 “悄悄递码”,H5 是 “快速跳转递码”,核心都是让用户无感完成身份识别。
2026年03月26日
67 阅读
0 评论
0 点赞
2026-02-10
BatoceraV42游戏系统 含最新switch模拟器 含游戏ROM整合包 保姆级使用教程
BatoceraV42游戏系统 含最新 Switch模拟器 含游戏 ROM整合包 保姆级使用教程 Batocera【中文译:巴托塞拉】 是一个非常强大的模拟器集成游戏系统,以 linux 为内核,可以装进硬盘内,也可以装进一个U盘,随时随地可以享受经典游戏机种带来的乐趣,一开始被玩家称为 “复古游戏系统” ,因为可以在十多年前的老电脑上运行,并且可以玩对电脑配置要求不高的主机游戏,比如 NES,SFC,MD,GBA 等等,如果电脑配置主流,那么又可以玩到 PS2,DC,3DS ,等等近世代的游戏,广受模拟器玩家的好评,Batocera 还内置了 Kodi,支持几乎所有的媒体文件格式,包括视频(包括高清视频)、音频、图片和流媒体。它提供了一个直观、易用、美观的用户界面,用户可以使用Kodi来组织、浏览、播放和管理他们的媒体文件,同时也可以通过各种插件访问网络内容,例如视频流服务、电视直播、音乐流服务、新闻、天气等。用户还可以使用Kodi来查看和记录电视节目。Kodi的界面可以根据个人喜好进行高度的自定义,而且可以通过众多第三方插件来扩展其功能。Kodi的插件库中有许多插件,用户可以选择安装适合自己的插件。Kodi可以用一个智能遥控器或游戏手柄等多种方式进行控制,同时还支持远程控制。Batocera系统可以安装在U盘上,也可以直接安装在硬盘上,可以根据自己的需求选择安装安装方式一安装在U盘内启动此方法可以把 Batocera系统 安装到 U盘,可随身携带,移动使用,对硬盘内原有的系统不影响准备工具:2G或8G以上U盘一个Batocera系统镜像文件Rufus写盘工具写入系统前备份好个人需要数据(制作启动U盘会格式化U盘,U盘内的重要文件也要事先备份好)。镜像和工具下载: Batocera系统镜像文件:含500G整合游戏包和最新Batocerav42游戏系统镜像{cloud title="Batocera系统镜像文件" type="default" url="https://pan.quark.cn/s/9f47cb51b930" password=""/}Batocera游戏ROM下载 {cloud title="下载模拟器游戏合集" type="default" url="https://sway.cloud.microsoft/PeUX2m6dTsv7Na2H" password=""/}有街机 (CPS1,CPS2,CPS3,IGS) + (FBA、MAME、PGM2)、3DS、WII、NGC、DC、SS、DOS、MD、WSC、NDS、JAVA、PCE、FC、SFC、GBA、GBC、PSP、PS 、N64、PS1、PS2、PS3、switch、WIIIU等游戏 Rufus写盘工具:已经内附安装步骤:首先下载好Batocera系统镜像文件和Rufus写盘工具插入U盘,双击打开Rufus写盘工具,点击选择,加载下载好的Batocera系统镜像文件点击开始进行写入Batocera系统镜像文件写入完成后,拔掉U盘,插入到主机,按下电源进行启动,当屏幕出现Logo,迅速按下【F7】键,进入引导启动菜单选择你的U盘,按回车键进入耐心等待系统加载加载完成后就可以正常使用了注意事项 :因为使用的是启动菜单进行引导启动,重启后默认会进入硬盘启动系统,如果想默认从 U盘启动系统 可以进 BIOS 调整启动顺序磁盘为U盘即可调整启动磁盘默认为U盘启动教程(可选教程)按下电源键启动主机,当屏幕出现Logo,迅速按下【Del】键,进入BIOS使用方向键切换到【Boot】选项调整【Boot Option #1】选项为U盘即可按【F4】保存并退出,重启电脑后默认就是从U盘启动了安装方式二安装在硬盘内启动此方法可以直接把 Batocera系统 安装到硬盘,无需再进行U盘引导启动准备工具:8G或8G以上U盘一个Batocera系统镜像文件WePE写盘工具physdiskwrite镜像写盘工具写入系统前备份好个人需要数据(制作启动U盘会格式化U盘,U盘和安装系统的硬盘内的重要文件也要事先备份好)。文件和工具下载:Batocera系统镜像文件:https://pan.quark.cn/s/9f47cb51b930WePE下载:官网下载:https://www.wepe.com.cn/download.htmlphysdiskwrite镜像写盘工具下载:https://pan.quark.cn/s/92c64bd62472安装步骤:首先下载好Batocera系统镜像文件、WePE和physdiskwrite镜像写盘工具打开WePE写盘工具,制作一个PE系统安装环境,启动软件后,选择安装PE到U盘插入U盘后,刷新一下设备,点击立即安装到U盘,耐心等待制作完成即可安装前请务必被备份好U盘数据再进行写入,点击开始制作打开U盘,把Batocera系统镜像文件和physdiskwrite镜像写盘工具拷贝到U盘根目录拷贝完成后,拔掉U盘,插入到主机,按下电源进行启动,当屏幕出现Logo,迅速按下【F7】键,进入引导启动菜单选择你的U盘,按回车键进行启动接下来会进自动加载进入PE系统,双击打开分区工具如果磁盘有分区,可以先删除所有分区,在进行写入操作,以免写入失败,如果是空白分区则无需操作删除分区步骤注意事项:如果硬盘内有数据,删除分区前务必进行备份操作,以免硬盘内数据丢失。删除完分区后,点击左上角保存更改确定,操作完成后即可关闭分区软件双击打开U盘根目录,按【Shift+鼠标右键】打开命令提示窗口输入命令:C:\physdiskwrite.exe -u batocera-x86_64-37-CN-0428dev.img ,会看到硬盘信息命令说明:这里文件放在C盘根目录( C:\ ),C:\physdiskwrite.exe -u xxx.img ← 这个 xxx.img 按需要改成自己使用的 IMG文件名 !一般来说 0 是你系统的硬盘,1是移动硬盘或者U盘,如果你有多个硬盘,那移动硬盘应该是序号最大那个,这里我们写入硬盘就输入0,回车确认是否写入,输入【y】回车即可写入完成后,拔掉U盘就可以进行重启了开机后会直接进启动进入系统batocera系统使用说明 :上下左右 = 移动回车(鼠标左)= 确定空格 = 主菜单ESC,(鼠标右)= 退出,Backspace(退格)= 快速菜单(内有手柄操作手册)强退 ALT+F4F1 文件管理 ,F2 开小时钟 ,F3语音导航 (关闭也是按F3)重点 :系统操作建议使用手柄,功能齐全的手柄,接上手柄之后第一件事,请先设置好手柄按键不要偷懒,不要以为接上了能控制了就没问题了,强烈建议设置手柄,看一次手柄操作手册设置手柄 :按空格,或者START键,即手柄的开始键 ,选择这个”手柄、蓝牙手柄设置“选择手柄设置点击 确定 进入设置,这一步随便按住一个按键后就会出现这个。重要说明 :请一定,一定设置一个热键,如果没有多余的按键,请把选择键设置成热键共用即可KODI进入方法:按键盘空格键或者手柄上的菜单键,打开菜单按回车键,或者手柄上的确认键即可进入 KODI如果需要开机默认进入 KODI,可在 系统设置-KODI设置 里,开机默认进入 KODI选项关于游戏导入整个系统至少支持 73个 以上模拟器,主界面没有仅因为你没有放入游戏,放入游戏之后更新出来就会出现,否则这么多模拟器,选到自己想要的都很麻烦,所以大部份都是没有 Rom 或者扫描到有可用文件都是隐藏起来,并不会展现在系统主界面在 Batocera 图形界面按 F1 进入文件管理系统选择左侧的 Roms 可以看到这些模拟器文件夹可以看到总计有 179 个文件夹,相应的也是代表每个支持的应用类型,少数的十来个文件夹是独立模拟器的 ROM 存放区应用程序内,可以看到,应用程序里也就几个独立模拟器,像 WIIU 3DS WII 等几个,那么有部分是混合型的,也就是即可以用 RA 加载,也可以用独立模拟器加载,各有各的优势、像 PSP,WII,MAME街机 ,都是即有独立,也有插件的存在重要说明 下载游戏请遵守平台类型对应相应的文件夹,否则会导致无法运行或者无法识别等情况例如 PS1 的游戏要放到 PSX 目录世嘉MD 放入 megadrive FC 放入 NES SFC 放入 SNES 对应的文件夹应该是以美版机器命名,不懂只能自己查资料看看自己要放入的ROM平台名称是什么再放入Batocera游戏ROM下载下载模拟器游戏合集 有街机 (CPS1,CPS2,CPS3,IGS ) +(FBA、MAME、PGM2)、3DS、WII、NGC、DC、SS、DOS、MD、WSC、NDS、JAVA、PCE、FC、SFC、GBA、GBC、PSP、PS 、N64、PS1、PS2、PS3、switch 、WIIIU
2026年02月10日
36 阅读
0 评论
0 点赞
2026-01-22
Docker 一键部署 WireGuard VPN,支持可视化管理与监控
🌟 引言随着远程办公、跨地域访问与隐私保护需求的不断增长,VPN(虚拟专用网络) 正在成为个人与企业必备的基础设施之一。而传统的 WireGuard VPN 配置流程对于普通用户而言存在一定门槛,需要大量命令行操作与手动配置。WG-Easy 正是在这种背景下应运而生的高效解决方案,它将 WireGuard 的强大性能与可视化管理相结合,大大降低部署和维护难度。💡 项目简介WG-Easy(WireGuard Easy) 是一个将 WireGuard VPN 核心服务与 Web 可视化管理界面深度集成的开源项目。它通过直观的浏览器操作界面,让用户无需掌握复杂的命令行知识,即可快速完成 VPN 的部署、配置与监控。设计理念:📦 开箱即用:基于 Docker 容器化部署,一条命令即可启动🖱️ 可视化优先:所有操作均可在 Web 界面完成,告别配置文件🚀 性能卓越:基于 WireGuard 协议,提供媲美直连的网络速度🔒 安全可靠:采用现代密码学套件,代码简洁易审计🎯 核心特性WireGuard Easy 提供了一套完整的 VPN 管理功能,主要特性包括:🧩 一体化架构:将 WireGuard 核心 VPN 与 Web 管理界面整合在一起。🚀 快速部署:基于 Docker 容器化,一条命令即可启动完整 VPN 服务。🖥️ 可视化管理面板:客户端创建、编辑、禁用、删除全部图形化完成。📱 二维码一键接入:自动生成配置二维码,便于移动设备一键连接。🔗 一次性分享链接:生成临时配置链接,分享后自动失效,提升安全性📊 实时连接与流量监控:显示每个客户端的在线状态、上传 / 下载流量。🌗 多语言 & 深浅色模式:自动适配浏览器语言,支持暗黑模式。📈Prometheus 监控支持:原生支持 Prometheus,便于接入 Grafana 统一监控体系。🔑 双因素认证(2FA):支持 TOTP 双因素认证,提升账户安全。🔐 继承 WireGuard 的安全模型:公钥认证、现代加密算法,无密码、无证书链复杂度。ℹ️ 环境信息🔍 WireGuard 内核支持检查在部署前,请确认服务器内核已支持 WireGuard:uname -r加载 WireGuard 内核模块:modprobe wireguard验证是否成功:lsmod | grep wireguard说明:Linux Kernel ≥ 5.6 已内置 WireGuardUbuntu 20.04+ / 22.04 LTS 默认支持若加载失败,请检查内核版本或云厂商是否裁剪模块基础环境云服务器(VPS / 轻量云 / 物理机)操作系统:Ubuntu 22.04 LTS(推荐)具有域名 或 公网 IP已安装 Docker / Docker Compose网络与安全组要求UDP 51820(WireGuard 通信端口)TCP 51821(wg-easy Web 管理界面)出口网络允许访问公网(用于 VPN 转发)🔥 配置防火墙规则# Ubuntu/Debian (使用 ufw) sudo ufw allow 51820/udp comment 'WireGuard VPN' sudo ufw allow 51821/tcp comment 'WG-Easy Web UI'⚠️ 若云厂商启用防火墙 / 安全组,务必同步放行端口。📦 部署教程🚀 方式一:Docker 命令行部署(快速上手)1️⃣ 创建网络docker network create \ -d bridge --ipv6 \ --subnet 10.42.42.0/24 \ --subnet fdcc:ad94:bacf:61a3::/64 \ wg2️⃣ 启动容器docker run -d \ --net wg \ -e INSECURE=true \ --name wg-easy \ --ip6 fdcc:ad94:bacf:61a3::2a \ --ip 10.42.42.42 \ -v ~/.wg-easy:/etc/wireguard \ -v /lib/modules:/lib/modules:ro \ -p 51820:51820/udp \ -p 51821:51821/tcp \ --cap-add NET_ADMIN \ --cap-add SYS_MODULE \ --sysctl net.ipv4.ip_forward=1 \ --sysctl net.ipv4.conf.all.src_valid_mark=1 \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --sysctl net.ipv6.conf.all.forwarding=1 \ --sysctl net.ipv6.conf.default.forwarding=1 \ --restart unless-stopped \ ghcr.io/wg-easy/wg-easy:153️⃣ 访问 Web 界面访问浏览器 http://服务器IP:51821 即可进入界面。🐳 方式二:Docker Compose 部署(推荐)1️⃣ 安装 Docker Compose# Ubuntu/Debian # sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo apt install -y docker-compose-plugin2️⃣ 创建配置目录mkdir ~/wg-easy/ && mkdir ~/wg-easy/3️⃣ 下载 Docker Compose 文件sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml4️⃣ 修改配置编辑docker-compose.yml文件并取消environment注释INSECURE设置INSECURE为true允许通过非安全http连接访问 Web UI。完整 docker-compose.yml 文件如下:volumes: etc_wireguard: services: wg-easy: volumes: etc_wireguard: services: wg-easy: environment: - INSECURE=true image: ghcr.nju.edu.cn/wg-easy/wg-easy:15 container_name: wg-easy networks: wg: ipv4_address: 10.42.42.42 ipv6_address: fdcc:ad94:bacf:61a3::2a volumes: - etc_wireguard:/etc/wireguard - /lib/modules:/lib/modules:ro ports: - "51820:51820/udp" - "51821:51821/tcp" restart: unless-stopped cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 - net.ipv6.conf.all.disable_ipv6=0 - net.ipv6.conf.all.forwarding=1 - net.ipv6.conf.default.forwarding=1 networks: wg: driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: 10.42.42.0/24 - subnet: fdcc:ad94:bacf:61a3::/645️⃣ 启动服务# 启动容器 docker compose up -d # 查看日志 docker compose logs -f wg-easy # 查看容器状态 docker compose ps访问浏览器 http://服务器IP:51821 即可进入界面。⚙️ 初始配置🔐 创建管理员账号📱 创建客户端配置🔀 配置路由规则(重要)修改客户端配置,添加允许的 IP ,决定哪些流量走 VPN:# 全局代理(所有流量走 VPN) 0.0.0.0/0, ::/0 # 仅访问特定网段(分流模式,推荐) 10.42.42.0/24 # WireGuard 内网 10.7.0.0/22 # 服务器内网 172.17.0.0/24 # docker 192.168.1.0/24 # 家庭网络💡 分流模式的优势:✅ 仅内网流量走 VPN,外网直连✅ 节省 VPN 服务器带宽✅ 访问国内网站速度更快保存后即可通过扫描二维码或下载配置文件连接📊 启用 Prometheus 监控1️⃣ 在 WG-Easy 中启用进入 管理面板 > 通用设置 > Prometheus,启用监控并设置密码。 2️⃣ 配置 Prometheus在 Prometheus 配置文件中添加:以下是一个示例:scrape_configs: - job_name: 'wg-easy' scrape_interval: 30s metrics_path: /metrics/prometheus static_configs: - targets: - '服务器IP:51821' authorization: type: Bearer credentials: '上一步设置的密码'导入 Grafana 仪表盘Grafana Dashboard ID:21733🖥️ 项目界面预览📊 仪表盘💻 客户端连接Windows客户端 iPhone客户端 🎯 适用场景WG-Easy 适用于多种实际应用场景,从个人隐私保护到企业级远程访问,都能提供高效的解决方案:🧑💻 远程办公 / 内网访问安全访问公司内网服务(Git、Jenkins、数据库、K8s 等)。🌍 跨地域统一出口网络多终端统一出口 IP,便于访问特定区域网络资源。🏡 家庭网络远程访问安全访问家中 NAS、路由器、智能家居设备、监控摄像头、内网服务。👥 小型团队 VPN 管理无需专业网络运维即可维护团队 VPN。🧪 测试 / 沙箱 / 运维环境快速搭建临时 VPN,随用随删,配置可追溯。🔗 相关链接📖 官方文档官方网站:https://wg-easy.github.io/wg-easy/latest/GitHub 仓库:https://github.com/wg-easy/wg-easy快速开始:https://wg-easy.github.io/wg-easy/latest/getting-started/部署示例:https://wg-easy.github.io/wg-easy/latest/examples/tutorials/basic-installation/🔧 高级配置Caddy 反向代理:https://wg-easy.github.io/wg-easy/latest/examples/tutorials/caddy/Traefik 反向代理:https://wg-easy.github.io/wg-easy/latest/examples/tutorials/traefik/可选配置项:https://wg-easy.github.io/wg-easy/latest/advanced/config/optional-config/API 接口文档:https://wg-easy.github.io/wg-easy/latest/advanced/api/📱 客户端下载平台下载地址Windowshttps://download.wireguard.com/windows-client/🍎 macOShttps://apps.apple.com/app/wireguard/id1451685025🤖 Androidhttps://play.google.com/store/apps/details?id=com.wireguard.android📱 iOShttps://apps.apple.com/app/wireguard/id1441195209🐧 Linuxsudo apt install wireguard 或各发行版包管理器💬 社区支持问题反馈:https://github.com/wg-easy/wg-easy/issues讨论区:https://github.com/wg-easy/wg-easy/discussions贡献指南:https://wg-easy.github.io/wg-easy/latest/contributing/general/WireGuard vs IPsec vs OpenVPN 核心对比选择 WireGuard,如果你需要:✅ 极致性能:低延迟、高吞吐量的网络体验✅ 移动场景:频繁切换网络(4G/5G ↔ WiFi)✅ 简单部署:快速上手,无需复杂配置✅ 物联网/嵌入式:资源受限的设备🎯 适用场景:个人 VPN、移动办公、物联网、云原生环境选择 IPsec,如果你需要:✅ 企业合规:满足 FIPS、CC 等安全认证要求✅ 站点互联:分支机构与总部的网络互联✅ 原生集成:操作系统内置支持,无需额外客户端✅ 传统设备:需要与老旧设备兼容🎯 适用场景:企业站点互联、合规要求高的场景、金融行业选择 OpenVPN,如果你需要:✅ 最大兼容性:严格的防火墙环境(可伪装 HTTPS)✅ 灵活认证:用户名密码、双因素认证等✅ 成熟生态:丰富的第三方工具和管理系统✅ 细粒度控制:复杂的访问控制和策略路由🎯 适用场景:企业远程访问、严格防火墙环境、需要灵活认证的场景🎉 总结WG-Easy 以其实用性和易用性,将传统 WireGuard VPN 的部署门槛大幅降低,使得 VPN 架构不仅对开发者友好,同时对非专业用户亦极易上手。无论是个人搭建,还是企业内网 VPN 管理,WG-Easy 都能提供简洁、高效、安全的解决方案,是值得推荐的开源 VPN 工具。
2026年01月22日
51 阅读
0 评论
0 点赞
2025-11-22
Linux环境下卸载Oracle数据库并重新安装的详细指南
引言在 Linux 环境下管理和维护 Oracle 数据库是许多系统管理员和数据库管理员的日常工作之一。无论是出于升级、迁移还是解决故障的需要,卸载和重新安装 Oracle数据库 都是一项重要的技能。本文将为您提供一份详尽的指南,帮助您在 Linux 环境下彻底卸载 Oracle数据库,并重新安装。一、准备工作在开始卸载之前,确保您已经备份了所有重要的数据文件和配置信息,以防万一。同时,确保您具有足够的权限(通常是root用户)来执行以下操作。二、停止Oracle服务停止数据库实例使用 SQL Plus 停止数据库实例sqlplus /nolog SQL> connect / as sysdba SQL> shutdown immediate SQL> exit停止Listener服务使用 lsnrctl 命令停止Listenerlsnrctl stop停止HTTP服务如果您的环境中启用了HTTP服务,停止它:service httpd stop三、卸载Oracle软件切换到root用户如果您当前不是 root 用户,请切换到 rootsu - root删除Oracle安装目录删除 Oracle 的安装目录,通常是/u01/app/oraclerm -rf /u01/app/oracle删除相关文件和目录删除与Oracle相关的文件和目录rm /usr/local/bin/dbhome rm /usr/local/bin/oraenv rm /usr/local/bin/coraenv rm /etc/oratab rm /etc/oraInst.loc删除Oracle用户和用户组删除 Oracle 用户和相关的用户组userdel -r oracle groupdel oinstall groupdel dba groupdel oper删除启动服务删除与 Oracle 相关的启动服务chkconfig --del dbora四、清理环境变量编辑 /etc/profile 或 ~/.bash_profile 文件,删除与 Oracle 相关的环境变量设置。五、重新安装Oracle数据库前置条件确保系统满足Oracle的安装要求,如磁盘空间、内存等。安装并配置好Java环境。下载Oracle数据库安装包。创建Oracle用户和用户组groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle设置环境变量编辑 ~/.bash_profile 文件,添加以下内容export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH安装Oracle数据库解压安装包并运行安装脚本unzip linuxx64_19c_database.zip cd database ./runInstaller按照安装向导的提示完成安装。配置数据库安装完成后,运行 root.sh 脚本/u01/app/oracle/product/19.0.0/dbhome_1/root.sh初始化数据库dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname ORCL -sid ORCL -responseFile NO_VALUE -characterSet AL32UTF8 -memoryPercentage 40 -emConfiguration LOCAL -pdbName PDBORCL -sysPassword syspassword -systemPassword systempassword六、验证安装启动数据库sqlplus /nolog SQL> connect / as sysdba SQL> startup检查数据库状态SQL> select status from v$instance;七、常见问题及解决方案libaio问题如果在启动数据库时遇到 libaio 相关的错误,安装或重新安装 libaio 库yum install libaio防火墙问题如果无法通过Navicat等工具连接数据库,检查防火墙设置或开放1521端口firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload结语通过以上步骤,您应该能够在 Linux 环境下成功卸载并重新安装 Oracle数据库。尽管过程中可能会遇到一些问题,但只要按照指南逐步操作,大多数问题都可以得到解决;希望本文对您有所帮助,祝您工作顺利!
2025年11月22日
79 阅读
0 评论
0 点赞
2025-11-22
Oracle11.2.0.4打补丁实践
本文介绍如何给Oracle数据库打补丁,数据库版本为Oracle11.2.0.4,单实例,操作系统为CentOS7.9,Linux系统应该都可以。下载升级包因为没有MOS帐号,从网上下载了升级包p30670774_112040_Linux-x86-64.zip:数据库补丁p6880880_112000_Linux-x86-64.zip:opatch升级包百度云链接:https://pan.baidu.com/s/1ZvTQr-gI889mylgzUXkdPw提取码:plhp微云链接:https://share.weiyun.com/k8CbxL3Kopatch 是安装补丁的程序,数据库软件安装完成后,就自带了 opatch ,但是版本太旧了,所以这里下载最新的 opatch ,p6880880_112000_Linux-x86-64.zip 包就是用来升级 opatch 用的。升级opatchopatch 的升级只要将新版本的包解压,覆盖系统原始的文件即可。1.查看原始opatch信息[oracle@node1 ~]$ cd $ORACLE_HOME/OPatch [oracle@node1 OPatch]$ ./opatch version # 查看原始版本 OPatch Version: 11.2.0.3.4 OPatch succeeded.2.查看补丁情况[oracle@node1 OPatch]$ ./opatch lsinventory # 查看补丁情况 Oracle 中间补丁程序安装程序版本 11.2.0.3.4 版权所有 (c) 2012, Oracle Corporation。保留所有权利。 Oracle Home : /home/oracle/app/oracle/product/11.2.0/dbhome_1 Central Inventory : /home/oracle/app/oraInventory from : /home/oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc OPatch version : 11.2.0.3.4 OUI version : 11.2.0.4.0 Log file location : /home/oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2020-07-02_16-23-35下午_1.log Lsinventory Output file location : /home/oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2020-07-02_16-23-35下午.txt ---------------------------------------------------------------------------- 已安装的顶级产品 (1): Oracle Database 11g 11.2.0.4.0 此 Oracle 主目录中已安装 1 个产品。 此 Oracle 主目录中未安装任何中间补丁程序。 ---------------------------------------------------------------------------- OPatch succeeded.3.备份原opatch[oracle@node1 OPatch]$ cd $ORACLE_HOME [oracle@node1 dbhome_1]$ mv OPatch OPatch.bak4.解压新下载的opatch包将下载的 opatch 包上传到 oracle 的home目录,上传完后,解压到 $ORACLE_HOME 下[oracle@node1 dbhome_1]$ cd ~ [oracle@node1 ~]$ unzip p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME5.检查opatch是否升级成功[oracle@node1 ~]$ cd $ORACLE_HOME/OPatch [oracle@node1 OPatch]$ ./opatch version # 查看版本信息 OPatch Version: 11.2.0.3.21 OPatch succeeded.现在版本为 11.2.0.3.21,说明升级成功数据库打补丁1.关闭监听、数据库[oracle@node1 OPatch]$ lsnrctl stop # 关闭监听 [oracle@node1 ~]$ sqlplus / as sysdba SQL> shutdown immediate SQL> quit2.解压补丁包将下载的补丁包上传到 oracle home目录,并解压[oracle@node1 ~]$ cd ~ [oracle@node1 ~]$ unzip p30670774_112040_Linux-x86-64.zip3.校验冲突[oracle@node1 ~]$ cd 30670774/ [oracle@node1 30670774]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ Oracle 临时补丁程序安装程序版本 11.2.0.3.21 版权所有 (c) 2020, Oracle Corporation。保留所有权利。 PREREQ session Oracle 主目录 :/home/oracle/app/oracle/product/11.2.0/dbhome_1 主产品清单:/home/oracle/app/oraInventory 来自 :/home/oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc OPatch 版本 :11.2.0.3.21 OUI 版本 :11.2.0.4.0 日志文件位置:/home/oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2020-07-02_16-54-06下午_1.log Invoking prereq "checkconflictagainstohwithdetail" Prereq "checkConflictAgainstOHWithDetail" passed. OPatch succeeded.由于这个测试库之前并没有打补丁,所以这里就没有补丁冲突的问题,如果这里显示有冲突,再去网MOS上查找相关解决方案。4.执行打补丁[oracle@node1 30670774]$ $ORACLE_HOME/OPatch/opatch apply这里要输入3次y和一次回车,打补丁的过程耗是比较久的,耐心等待5.检查打补丁情况[oracle@node1 30670774]$ $ORACLE_HOME/OPatch/opatch lsinventory # 检查打补丁情况这里会列出系统已打的补丁情况6.启动数据库,并运行sql文件[oracle@node1 30670774]$ cd $ORACLE_HOME/rdbms/admin [oracle@node1 30670774]$ sqlplus / as sysdba SQL> startup SQL> @catbundle.sql psu apply SQL> quit7.启动监听[oracle@node1 admin]$ lsnrctl start至此数据库打补丁已经全部完成回退数据库补丁数据库在做变更时,需要考虑回退方案,接下来介绍如何回退数据库补丁1.关闭监听、数据库[oracle@node1 ~]$ lsnrctl stop # 关闭监听 [oracle@node1 ~]$ sqlplus / as sysdba SQL> shutdown immediate SQL> quit2.回退补丁[oracle@node1 ~]$ $ORACLE_HOME/OPatch/opatch rollback -id 30670774这里要回复一次y,回退过程比较耗时,需耐心等待3.启动数据库,并运行sql文件[oracle@node1 ~]$ cd $ORACLE_HOME/rdbms/admin [oracle@node1 admin]$ sqlplus / as sysdba SQL> startup SQL> @catbundle_PSU_ORCL_ROLLBACK.sql # 这里的ORCL为实例名称 SQL> quit4.检查回退情况[oracle@node1 admin]$ $ORACLE_HOME/OPatch/opatch lsinventory # 检查打补丁情况 Oracle 临时补丁程序安装程序版本 11.2.0.3.21 版权所有 (c) 2020, Oracle Corporation。保留所有权利。 Oracle 主目录 :/home/oracle/app/oracle/product/11.2.0/dbhome_1 主产品清单:/home/oracle/app/oraInventory 来自 :/home/oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc OPatch 版本 :11.2.0.3.21 OUI 版本 :11.2.0.4.0 日志文件位置:/home/oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2020-07-02_18-24-48下午_1.log Lsinventory Output file location : /home/oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2020-07-02_18-24-48下午.txt -------------------------------------------------------------------------------- Local Machine Information:: Hostname: localhost ARU platform id: 226 ARU platform description:: Linux x86-64 已安装的顶级产品 (1): Oracle Database 11g 11.2.0.4.0 此 Oracle 主目录中已安装 1 个产品。 此 Oracle 主目录中未安装任何临时补丁程序。 -------------------------------------------------------------------------------- OPatch succeeded.可以看到,补丁已经被卸载了5.启动监听[oracle@node1 admin]$ lsnrctl start这样补丁回退就结束了总结本文介绍了单实例数据库打补丁的步骤,仅做参考,实际应以补丁包中的readme为准。
2025年11月22日
57 阅读
0 评论
0 点赞
2025-11-20
境外IP天天扫你网站?3步彻底封杀,还不用编译Nginx!
你的服务器是否每天被 /admin、/wp-login.php、/.env 扫描刷屏?这些攻击 90% 来自境外。如果你的业务只服务中国大陆用户,那完全没必要开放全球访问!更重要的是:你不需要编译 Nginx,不需要 MaxMind 账号,甚至不用装额外模块只需利用 亚太网络信息中心(APNIC)公开的官方 IP 数据,配合 Nginx 原生功能,3步实现精准拦截!为什么推荐 APNIC 方案?APNIC 官方方案 ✅ 完全公开免费✅ 原生支持,不需要重新编译Nginx✅ 亚太官方机构发布(数据权威性)✅ 所有 Linux + 任意 Nginx 版本实战:3 步实现“仅限中国大陆访问”📌 本方案适用于:任何 Linux 系统 + 任何来源的 Nginx(官方源、宝塔、LNMP、手动编译等)第一步:获取中国大陆 IP 段(来自 APNIC 官方)APNIC 每天更新各国 IP 分配清单,地址永久免费开放:http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest# 下载到文件 wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest # 直接输出到终端 curl -sSL https://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest创建自动转换脚本(保存为 /usr/local/bin/gen-cn-allow.sh):#!/bin/bash # 从 APNIC 官方数据生成 Nginx allow 规则 # 适用于任意 Linux 系统(CentOS/Ubuntu/Debian/Alma/Rocky 等) OUTPUT_DIR="/etc/nginx/conf.d" mkdir -p "$OUTPUT_DIR" echo "正在下载 APNIC 最新数据..." wget -qO- http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest | \ awk -F'|' ' $2 == "CN" && $3 == "ipv4" { prefix = $4; len = 32 - log($5) / log(2); print "allow " prefix "/" len ";"; } $2 == "CN" && $3 == "ipv6" { print "allow " $4 "/" $5 ";"; } ' > /tmp/cn_allow.list # 分离 IPv4 和 IPv6(避免混合导致 Nginx 报错) grep -E 'allow [0-9]+\.' /tmp/cn_allow.list > "$OUTPUT_DIR/china-ipv4.conf" grep -E 'allow [0-9a-fA-F:]+' /tmp/cn_allow.list > "$OUTPUT_DIR/china-ipv6.conf" # 添加注释头 sed -i "1i# Auto-generated from APNIC — $(date)" "$OUTPUT_DIR/china-ipv4.conf" sed -i "1i# Auto-generated from APNIC — $(date)" "$OUTPUT_DIR/china-ipv6.conf" rm -f /tmp/cn_allow.list echo "✅ 中国 IP 白名单已生成:" echo " IPv4: $OUTPUT_DIR/china-ipv4.conf" echo " IPv6: $OUTPUT_DIR/china-ipv6.conf"赋权并运行:chmod +x /usr/local/bin/gen-cn-allow.sh sudo /usr/local/bin/gen-cn-allow.sh🕒 建议每日自动更新(防止新 IP 段遗漏):echo "0 3 * * * root /usr/local/bin/gen-cn-allow.sh >/dev/null 2>&1" | sudo tee /etc/cron.d/update-cn-ip第二步:配置 Nginx 仅放行中国 IP编辑你的站点配置文件(如 /etc/nginx/conf.d/your-site.conf):server { listen 80; listen [::]:80; server_name your-domain.com; # 引入中国 IP 白名单(顺序很重要!) include /etc/nginx/conf.d/china-ipv4.conf; include /etc/nginx/conf.d/china-ipv6.conf; # 可选:放行本地回环(避免自己被拦) allow 127.0.0.1; allow ::1; # 拒绝所有未匹配的请求 deny all; location / { root /var/www/html; index index.html; # 你的其他配置... } }⚠️ 关键规则:Nginx 按顺序匹配 allow/deny,必须先写 allow,再写 deny all!第三步:重载生效 & 验证# 检查语法 nginx -t # 重载配置(平滑生效,不影响在线用户) nginx -s reload # 或 systemctl reload nginx验证方法: 国内手机 4G 访问 → 应正常打开;使用境外代理或 VPS 访问 → 应返回 403 Forbidden;查看日志:tail -f /var/log/nginx/access.log | grep '403'⚠️ 重要注意事项CDN 用户请特别注意!如果你使用了 Cloudflare、阿里云 CDN、腾讯云 CDN 等:用户真实 IP 被隐藏,Nginx 看到的是 CDN 节点 IP(多为境外);直接启用此规则会导致 所有用户被拦截!✅ 解决方案:在 CDN 后台开启 “回源携带真实IP”(如 Cloudflare 的 CF-Connecting-IP);或改用 CDN 自带的地域封禁功能(更简单可靠)。IPv6 支持按需启用若服务器未启用IPv6,可删除listen [::]:80;和china-ipv6.conf引用。性能影响极小中国大陆IP段约6000+条,Nginx 使用高效前缀匹配,实测无明显延迟。写在最后:屏蔽境外访问,不等于“技术复杂”。用官方数据 + Nginx 原生能力,就能构建一道高效、透明、低成本的“数字国境线”。你试过哪种防境外攻击的方法?有没有因为 CDN 导致误拦的经历?欢迎评论区分享!
2025年11月20日
108 阅读
0 评论
0 点赞
2025-11-15
还在手动封 IP?这 3 种 Nginx 动态封禁方案
还在靠 vim 手动加 deny 1.2.3.4 ;,然后 nginx -s reload ?不仅效率低,还容易误操作、漏封、重启抖动……别担心!本文为你带来三种真正 “动态”、无需复杂开发、生产可用的 Nginx 封 IP 方案,全部附带 完整配置 + 一行命令操作,让你的防护能力秒级生效,运维效率直接翻倍!方案一:OpenResty + Redis 毫秒级动态封禁实时生效|无需 reload|支持自动解封1. 安装 OpenResty + Redis# Ubuntu 示例 sudo apt install redis-server -y wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/openresty-archive-keyring.gpg] http://openresty.org/package/debian $(lsb_release -sc) openresty" | sudo tee /etc/apt/sources.list.d/openresty.list sudo apt update && sudo apt install -y openresty2. 配置 /etc/openresty/nginx.confworker_processes auto; events { worker_connections 1024; } http { server { listen 80; location / { access_by_lua_block { local redis = require "resty.redis" local red = redis:new() red:set_timeout(1000) local ok, err = red:connect("127.0.0.1", 6379) if not ok then return end local ip = ngx.var.remote_addr if red:get("blacklist:" .. ip) ~= ngx.null then ngx.exit(403) end red:close() } proxy_pass http://127.0.0.1:8080; } } }3. 动态封/解 IP(一行命令)# 封 1 小时 redis-cli SETEX blacklist:1.2.3.4 3600 "abuse" # 解封 redis-cli DEL blacklist:1.2.3.4方案二:fail2ban + Nginx 日志 —— 自动分析恶意行为自动封|防爆破|开箱即用1. 安装 fail2bansudo apt install fail2ban -y2. 创建过滤器 /etc/fail2ban/filter.d/nginx-bad.conf[Definition] failregex = ^<HOST>.*"(GET|POST).*" (400|403|444|404) .* ignoreregex =3. 配置 jail /etc/fail2ban/jail.local[nginx-bad] enabled = true port = http,https filter = nginx-bad logpath = /var/log/nginx/access.log maxretry = 5 findtime = 600 bantime = 3600 action = iptables-multiport[name=nginx, port="80,443"]4. 启动sudo systemctl restart fail2ban注:默认用 iptables 封 IP。如坚持只用 Nginx ,请看方案三。方案三:纯 Shell + 文件驱动 —— 最简原生 Nginx 封禁零依赖|只用 Nginx|运维只需写文件核心思想: 维护一个纯文本黑名单文件:/etc/nginx/blacklist.txt(每行一个 IP)用一个 Shell 脚本自动转成 deny 配置并 reload通过 inotifywait 监听文件变化,改完即生效第一步:安装 inotify-tools(监听文件变动)sudo apt install inotify-tools -y第二步:创建黑名单目录和初始文件sudo mkdir -p /etc/nginx/dynamic echo "# 黑名单IP,每行一个,如:1.2.3.4" | sudo tee /etc/nginx/blacklist.txt sudo touch /etc/nginx/dynamic/blacklist.conf第三步:编写转换脚本 /usr/local/bin/gen_nginx_blacklist.sh#!/bin/bash INPUT="/etc/nginx/blacklist.txt" OUTPUT="/etc/nginx/dynamic/blacklist.conf" # 清空输出文件 echo "# Auto-generated from blacklist.txt. DO NOT EDIT." > "$OUTPUT" # 读取 blacklist.txt,跳过注释和空行,生成 deny 规则 while IFS= read -r line; do line=$(echo "$line" | xargs) # 去除前后空格 if [[ -n "$line" && "$line" != \#* ]]; then echo "deny $line;" >> "$OUTPUT" fi done < "$INPUT" #测试配置 & 重载 nginx -t && systemctl reload nginx赋予执行权限:sudo chmod +x /usr/local/bin/gen_nginx_blacklist.sh第四步:在 Nginx 配置中引入黑名单server { listen 80; include /etc/nginx/dynamic/blacklist.conf; # ← 关键! location / { proxy_pass http://127.0.0.1:8080; } }第五步:启动监听服务(后台运行)# 创建 systemd 服务(推荐)或直接运行: nohup inotifywait -m -e modify,move,create,delete /etc/nginx/blacklist.txt \ --format '%f' | while read file; do echo "[$(date)] blacklist.txt changed, regenerating..." /usr/local/bin/gen_nginx_blacklist.sh done &更优雅做法:写成 systemd 服务使用方式 运维只需编辑 /etc/nginx/blacklist.txt# 示例内容 1.2.3.4 5.6.7.8 192.168.100.50保存文件后,3 秒内自动封禁!无需任何命令!优点: 只需一个文本文件 + 一个 Shell 脚本完全兼容原生 Nginx三大方案怎么选?场景推荐方案高并发、API 网关、需要毫秒响应✅ 方案一(OpenResty + Redis)防暴力破解、WordPress、中小站点✅ 方案二(fail2ban)不想装新软件、只要原生 Nginx、运维习惯改文件✅✅✅ 方案三(Shell + 文件监听)写在最后:封 IP 不该是体力活!无论你是技术大牛还是初级运维,总有一款方案让你 告别手动 reload ,把时间留给更有价值的事。
2025年11月15日
39 阅读
0 评论
0 点赞
2025-11-01
从 0 搭建 Nginx 安全网关:堵住 90% 的 Web 漏洞!
你的网站是否曾被扫描出以下高危问题?🔸 Host 头注入:攻击者伪造 Host 头,窃取密码重置链接🔸 敏感文件泄露:.git、.env、backup.zip 被直接下载🔸 目录遍历:访问 /static/../../../etc/passwd🔸 Nginx 版本号暴露:让黑客精准利用已知漏洞别再依赖“防火墙万能”了!Nginx本身就是一个强大的安全网关 ,只需几行配置,就能实现企业级防护。✅ 无需额外软件✅ 零成本加固✅ 符合等保 2.0 要求今天,手把手教你从 0 搭建一个安全、干净、合规的 Nginx 网关!🛡️ 第一步:隐藏身份 —— 隐藏 Nginx 版本号攻击者第一步就是探测你的服务版本。暴露版本 = 送漏洞地图!🔧 配置方法在 nginx.conf 的 http 块中添加:server_tokens off;✅ 效果: 原响应头:Server: nginx/1.24.0 优化后:Server: nginx📌 额外建议如果使用了 error_page 自定义错误页,确保页面中也不包含版本信息!🚫 第二步:封堵入口 —— 禁止敏感文件与目录访问很多数据泄露,都是因为一个 .env 或 .git 文件被公开下载!通用防护配置(推荐放在 http 或 server 块)# 禁止访问隐藏文件(以 . 开头) location ~ /\. { deny all; return 404; } # 禁止访问特定敏感文件 location ~* \.(env|git|svn|htaccess|htpasswd|bak|log|sql|zip|tar\.gz)$ { deny all; return 403; } # 禁止访问备份文件(如 config.php.bak) location ~* \.bak$ { deny all; return 403; } # 禁止目录遍历(Nginx 默认已防,但显式加固更安全) location ~ \.\./ { deny all; return 403; }原理说明: ~ 表示正则匹配 ~* 表示不区分大小写 deny all 直接拒绝访问,不返回文件内容🌐 第三步:锁定身份 —— 防 Host 头攻击(关键!)什么是 Host 头攻击?当 Nginx 配置了宽松的 server_name(如 server_name _; 或未设置默认拒绝 server)时,攻击者可构造恶意 Host 头:GET /password-reset HTTP/1.1 Host: attacker.com如果后端代码使用 Host 头生成重置链接(如 https://attacker.com/reset?token=xxx),攻击者就能窃取用户凭证!安全配置方案1. 设置默认拒绝的 server 块在所有 server 块之前,添加一个“兜底”配置:server { listen 80 default_server; listen 443 ssl default_server; server_name _ ""; return 403; } 此配置会拒绝所有未明确匹配的域名请求。2. 明确指定合法域名在你的业务 server 块中,只允许真实域名:server { listen 80; server_name www.yourdomain.com yourdomain.com; # 你的业务配置... }3. (可选)在应用层二次校验即使 Nginx 层做了防护,后端也应校验 Host 是否在白名单内,形成纵深防御。🛠️ 第四步:添加安全响应头(提升浏览器防护)现代浏览器支持多种安全策略,通过响应头启用:add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "DENY" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:" always;说明: X-Frame-Options: DENY:防点击劫持 X-Content-Type-Options: nosniff:防 MIME 嗅探 always:确保错误页面也携带这些头🧪 验证是否生效1. 检查版本是否隐藏curl -I http://your-domain.com→ 确保 Server 字段不含版本号。2. 测试敏感文件访问curl -I http://your-domain.com/.env→ 应返回 403 或 404,不能返回 200。3. 测试 Host 头攻击curl -H "Host: evil.com" http://your-server-ip/→ 应返回 403,而非业务页面。📋 完整安全配置模板(推荐收藏)# /etc/nginx/nginx.conf 或站点配置 # 隐藏版本 server_tokens off; # 默认拒绝 server(放在最前面!) server { listen 80 default_server; listen 443 ssl default_server; server_name _ ""; return 403; } # 业务 server server { listen 80; server_name yourdomain.com www.yourdomain.com; # 安全响应头 add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "DENY" always; add_header X-XSS-Protection "1; mode=block" always; # 敏感文件防护(可放 http 块全局生效) location ~ /\. { deny all; return 404; } location ~* \.(env|git|bak|log|sql|zip)$ { deny all; return 403; } # 你的业务 location... location / { proxy_pass http://backend; } }🌟 总结:安全网关 4 大核心原则原则配置要点最小暴露隐藏版本、关闭无用模块最小权限只允许合法域名、拒绝未知 Host纵深防御Nginx + 应用层双重校验主动防护添加安全头、阻断敏感路径一个配置完善的 Nginx,胜过十台 WAF!
2025年11月01日
62 阅读
0 评论
0 点赞
1
2
...
27