[{"content":" 来源: 233Boy | GitHub: https://github.com/233boy/sing-box\n设计理念: 高效率，超快速，极易用 — 以多配置同时运行为核心设计\n核心特点 快速安装（通常15秒内完成，条件允许仅需1秒） 自动化 TLS 零学习成本，一条命令完成添加/更改/查看/删除 兼容 sing-box 原生命令 支持所有常用协议 一键启用 BBR、更改伪装网站、更改端口/UUID/密码/域名等 支持协议列表 协议 快捷名称 VLESS-REALITY reality / r VLESS-HTTP2-REALITY rh2 TUIC tuic Trojan trojan AnyTLS anytls Hysteria2 hy / hy2 Shadowsocks 2022 ss VMess-TCP tcp VMess-HTTP http VMess-QUIC quic VMess-WS ws VMess-WS-TLS wss VMess-H2-TLS h2 VMess-HTTPUpgrade-TLS hu VLESS-WS-TLS vws VLESS-H2-TLS vh2 VLESS-HTTPUpgrade-TLS vhu Trojan-WS-TLS tws Trojan-H2-TLS th2 Trojan-HTTPUpgrade-TLS thu Socks socks 安装 系统支持: Ubuntu, Debian, CentOS（推荐 Ubuntu 22，谨慎使用 CentOS）\nbash \u0026lt;(wget -qO- -o- https://github.com/233boy/sing-box/raw/main/install.sh) 指定版本：安装命令后加 -v ver 查看帮助：安装命令后加 -h 安装完成后自动创建一个 VLESS-REALITY 配置，可直接复制 URL 到客户端测试。\n管理面板 sing-box # 或简写 sb # 快捷命令 核心命令速查 添加配置 (add) sb add # 交互式添加 sb add reality # 添加 VLESS-REALITY sb add reality 443 auto dl.google.com # 自定义端口和 SNI sb add r # 等同于 add reality sb add rh2 # 添加 VLESS-HTTP2-REALITY sb add tuic # 添加 TUIC sb add hy # 添加 Hysteria2 sb add ss # 添加 Shadowsocks sb add tcp # 添加 VMess-TCP sb add ws # 添加 VMess-WS sb add wss 233boy.com # 添加 VMess-WS-TLS（需域名） sb add vws 233boy.com # 添加 VLESS-WS-TLS sb add socks # 添加 Socks 规则: 使用 auto 参数让脚本自动处理。仅 *TLS 协议必须提供域名。\n更改配置 (change) sb change # 更改配置 sb change tcp port 233 # 更改 TCP 配置的端口 sb change tcp port auto # 端口自动创建 sb change tuic id auto # UUID 自动创建 sb change reality sni 1.1.1.1 # 更改 SNI 快捷用法（sb [option] [name] [...]）：\nsb port tcp 233 # 更改端口 sb id tcp auto # 更改 UUID sb host tls 233boy.com # 更改域名 sb web tls example.com # 更改伪装网站 sb sni reality 1.1.1.1 # 更改 SNI 可更改选项:\n选项 用途 支持 auto full 更改多个参数 其他 id 更改 UUID ✅ host 更改域名 ❌ port 更改端口 ✅ path 更改路径 ✅ passwd 更改密码 ✅ key 更改密钥 ✅ method 更改加密方式 ✅ sni 更改 serverName ✅ new 更改协议 其他 web 更改伪装网站 ❌ 查看配置 (info) sb info # 查看所有配置 sb info tcp # 查看 TCP 配置 sb info tuic # 查看 TUIC 配置 sb info tls # 查看 TLS 配置 删除配置 (del / ddel) sb del # 删除配置 sb del tcp # 删除 TCP 配置 sb ddel tcp tuic # 同时删除多个配置（仅匹配唯一时执行） ⚠️ 谨慎使用 del 参数\n其他重要命令 URL \u0026amp; 二维码 sb url # 生成配置 URL sb url tcp # 查看 TCP 配置的 URL sb qr # 生成二维码 sb qr hy # 查看 Hysteria2 配置的二维码 no-auto-tls（禁止自动 TLS） sb no-auto-tls wss # 手动配置 TLS（如用 NGINX） sb no-auto-tls vh2 233boy.com 导入配置 sb import # 导入 xray/v2ray 脚本创建的配置（仅限 233boy 的脚本） 生成 JSON（测试用） sb gen ss # 只返回 JSON，不创建配置 sb gen reality 2333 BBR 优化 sb bbr # 启用 BBR 调用 sing-box 核心 sb bin help # 完全兼容 sing-box 原生命令 sb generate uuid # 示例：生成 UUID 修复配置 sb fix-config.json # 修复 config.json 更新 sb update # 更新核心 sb update core v1.8.13 # 更新到指定版本 sb update sh # 更新脚本 sb update caddy # 更新 Caddy 日志管理 sb log # 查看实时日志 sb log debug # 设定日志级别 sb log none # 禁止生成日志文件 sb log del # 删除日志文件 服务管理 sb status # 查看运行状态 sb start # 启动 sb stop # 停止 sb restart # 重启 sb restart caddy # 重启 Caddy 重装 \u0026amp; 卸载 sb reinstall # 重装脚本 sb uninstall # 卸载脚本 故障排除 无法连接端口 检查外部防火墙是否开放端口 测试端口连通性: 打开 https://tcp.ping.pe/，输入 IP:端口，点击 Go successful = 端口可达 failed = 端口不可达 关闭防火墙: systemctl stop firewalld; systemctl disable firewalld; ufw disable 使用 sb ip 查看 VPS IP 端口通但无法使用 sb add ss auto auto aes-256-gcm # 添加 SS 测试 如果 SS 能用 → 客户端内核太旧，请更新客户端 sing-box 内核 尝试不同客户端（v2rayN、v2rayNG 等） 确保客户端与服务端版本一致 某些客户端需设置 VMessAEAD、额外ID(alterid) 填 0 目录结构 /etc/sing-box/ ├── sh/ # 脚本 ├── bin/ # 核心 └── conf/ # 配置 备份方法 sb backup # 备份配置 sb backup list # 查看备份列表 sb backup restore # 恢复备份 ","permalink":"/posts/sing-box-script/","summary":"\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e来源\u003c/strong\u003e: \u003ca href=\"https://233boy.com/sing-box/sing-box-script\"\u003e233Boy\u003c/a\u003e | \u003cstrong\u003eGitHub\u003c/strong\u003e: \u003ca href=\"https://github.com/233boy/sing-box\"\u003ehttps://github.com/233boy/sing-box\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e设计理念\u003c/strong\u003e: 高效率，超快速，极易用 — 以\u003cstrong\u003e多配置同时运行\u003c/strong\u003e为核心设计\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"核心特点\"\u003e核心特点\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e快速安装（通常15秒内完成，条件允许仅需1秒）\u003c/li\u003e\n\u003cli\u003e自动化 TLS\u003c/li\u003e\n\u003cli\u003e零学习成本，一条命令完成添加/更改/查看/删除\u003c/li\u003e\n\u003cli\u003e兼容 sing-box 原生命令\u003c/li\u003e\n\u003cli\u003e支持所有常用协议\u003c/li\u003e\n\u003cli\u003e一键启用 BBR、更改伪装网站、更改端口/UUID/密码/域名等\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"支持协议列表\"\u003e支持协议列表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e协议\u003c/th\u003e\n          \u003cth\u003e快捷名称\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVLESS-REALITY\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ereality\u003c/code\u003e / \u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVLESS-HTTP2-REALITY\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003erh2\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTUIC\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003etuic\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrojan\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003etrojan\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAnyTLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eanytls\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eHysteria2\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ehy\u003c/code\u003e / \u003ccode\u003ehy2\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eShadowsocks 2022\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ess\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-TCP\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003etcp\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-HTTP\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ehttp\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-QUIC\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003equic\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-WS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ews\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-WS-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ewss\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-H2-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eh2\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVMess-HTTPUpgrade-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ehu\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVLESS-WS-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003evws\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVLESS-H2-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003evh2\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eVLESS-HTTPUpgrade-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003evhu\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrojan-WS-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003etws\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrojan-H2-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eth2\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrojan-HTTPUpgrade-TLS\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ethu\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSocks\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esocks\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"安装\"\u003e安装\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e系统支持\u003c/strong\u003e: Ubuntu, Debian, CentOS（推荐 Ubuntu 22，谨慎使用 CentOS）\u003c/p\u003e","title":"sing-box 一键安装脚本综合指南"},{"content":"用久了 Windows，系统里总会攒下一堆\u0026quot;赖着不走\u0026quot;的软件。控制面板卸载不干净，有些程序甚至根本没有自带卸载器。最近找到一款卸载工具 Geek Uninstaller，体验下来相当顺手，分享给大家。\n为什么需要专用卸载工具？ Windows 自带的\u0026quot;添加或删除程序\u0026quot;只能调用软件自带的卸载器，卸载完成后残留的注册表项、配置文件、缓存文件夹一概不管。时间久了，磁盘里到处都是\u0026quot;僵尸\u0026quot;残留，拖慢系统、引发冲突。\nGeek Uninstaller 解决的就是这个问题——它会在标准卸载完成后自动深度扫描残留，把相关的注册表项、空文件夹、遗留文件一并清理。\n核心功能 1. 清理卸载（Clean Removal） 这是最核心的功能。选中程序 → 右键卸载 → 等自带卸载器跑完 → 自动扫描残留 → 勾选删除。一条龙搞定，不留尾巴。\n2. 强制卸载（Force Removal） 遇到没有卸载器的绿色软件、已损坏无法正常卸载的程序、或者卸载到一半报错卡死的情况，用\u0026quot;强制卸载\u0026quot;直接暴力删除注册表关联和残留文件。\n3. 卸载 Microsoft Store 应用 Windows 10/11 里通过 Microsoft Store 安装的应用（UWP）在控制面板里卸载比较麻烦。Geek 支持 Ctrl+Tab 切换桌面应用和 Store 应用视图，直接右键卸载。\n4. 即时搜索 程序多了逐个翻很痛苦，直接在界面中打字就能实时筛选匹配，秒定位。\n5. 高亮标识新安装 最近安装/修改的程序会以紫色/橙色高亮标注，方便快速找到刚装的东西。\n6. 原生便携 + 单文件 整个软件就是一个 geek.exe（约 2.6MB），不需要安装，U 盘里塞一个随时用。支持 32 位和 64位 Windows。40+ 种语言界面，包含中文。\n使用体验 界面非常简洁——左侧程序列表，右键菜单和底部工具栏操作。没有广告、没有捆绑、没有后台服务常驻。右键菜单里除了卸载，还能直接打开注册表项、跳转到安装目录，排查问题时很方便。\n扫描残留的速度也很快，一般几秒就能出结果，比某些动辄扫描一分钟的卸载工具快多了。\n版本说明 版本 特点 适合人群 免费版（Free） 清理卸载、强制卸载、Store 应用卸载、便携单文件 绝大多数个人用户完全够用 Pro 版（付费） 增加实时安装监控、批量卸载、高级管理功能 需要频繁装软件/折腾系统的用户 日常家用免费版绰绰有余，Pro 版需要的话可以走官网购买。\n下载 官方：https://geekuninstaller.com\n用户分享的免费版下载（蓝奏云）：https://wwatz.lanzoum.com/ixxxK3x66yzi\n⚠️ 建议优先走官网，第三方分享链接方便但注意核对文件名和大小（官方免费版约为 2.6MB 的单文件 geek.exe）。\n总结 Geek Uninstaller 属于\u0026quot;小而美\u0026quot;的工具代表——功能聚焦、操作直观、资源占用极低。如果你也受够了 Windows 卸载不干净的问题，值得一试。\n","permalink":"/posts/geek-uninstaller/","summary":"\u003cp\u003e用久了 Windows，系统里总会攒下一堆\u0026quot;赖着不走\u0026quot;的软件。控制面板卸载不干净，有些程序甚至根本没有自带卸载器。最近找到一款卸载工具 \u003cstrong\u003eGeek Uninstaller\u003c/strong\u003e，体验下来相当顺手，分享给大家。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"为什么需要专用卸载工具\"\u003e为什么需要专用卸载工具？\u003c/h2\u003e\n\u003cp\u003eWindows 自带的\u0026quot;添加或删除程序\u0026quot;只能调用软件自带的卸载器，卸载完成后残留的注册表项、配置文件、缓存文件夹一概不管。时间久了，磁盘里到处都是\u0026quot;僵尸\u0026quot;残留，拖慢系统、引发冲突。\u003c/p\u003e\n\u003cp\u003eGeek Uninstaller 解决的就是这个问题——它会在标准卸载完成后\u003cstrong\u003e自动深度扫描残留\u003c/strong\u003e，把相关的注册表项、空文件夹、遗留文件一并清理。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"核心功能\"\u003e核心功能\u003c/h2\u003e\n\u003ch3 id=\"1-清理卸载clean-removal\"\u003e1. 清理卸载（Clean Removal）\u003c/h3\u003e\n\u003cp\u003e这是最核心的功能。选中程序 → 右键卸载 → 等自带卸载器跑完 → 自动扫描残留 → 勾选删除。一条龙搞定，不留尾巴。\u003c/p\u003e\n\u003ch3 id=\"2-强制卸载force-removal\"\u003e2. 强制卸载（Force Removal）\u003c/h3\u003e\n\u003cp\u003e遇到没有卸载器的绿色软件、已损坏无法正常卸载的程序、或者卸载到一半报错卡死的情况，用\u0026quot;强制卸载\u0026quot;直接暴力删除注册表关联和残留文件。\u003c/p\u003e\n\u003ch3 id=\"3-卸载-microsoft-store-应用\"\u003e3. 卸载 Microsoft Store 应用\u003c/h3\u003e\n\u003cp\u003eWindows 10/11 里通过 Microsoft Store 安装的应用（UWP）在控制面板里卸载比较麻烦。Geek 支持 \u003ccode\u003eCtrl+Tab\u003c/code\u003e 切换桌面应用和 Store 应用视图，直接右键卸载。\u003c/p\u003e\n\u003ch3 id=\"4-即时搜索\"\u003e4. 即时搜索\u003c/h3\u003e\n\u003cp\u003e程序多了逐个翻很痛苦，直接在界面中打字就能实时筛选匹配，秒定位。\u003c/p\u003e\n\u003ch3 id=\"5-高亮标识新安装\"\u003e5. 高亮标识新安装\u003c/h3\u003e\n\u003cp\u003e最近安装/修改的程序会以紫色/橙色高亮标注，方便快速找到刚装的东西。\u003c/p\u003e\n\u003ch3 id=\"6-原生便携--单文件\"\u003e6. 原生便携 + 单文件\u003c/h3\u003e\n\u003cp\u003e整个软件就是一个 \u003ccode\u003egeek.exe\u003c/code\u003e（约 2.6MB），不需要安装，U 盘里塞一个随时用。支持 32 位和 64位 Windows。40+ 种语言界面，包含中文。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"使用体验\"\u003e使用体验\u003c/h2\u003e\n\u003cp\u003e界面非常简洁——左侧程序列表，右键菜单和底部工具栏操作。没有广告、没有捆绑、没有后台服务常驻。右键菜单里除了卸载，还能直接打开注册表项、跳转到安装目录，排查问题时很方便。\u003c/p\u003e\n\u003cp\u003e扫描残留的速度也很快，一般几秒就能出结果，比某些动辄扫描一分钟的卸载工具快多了。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"版本说明\"\u003e版本说明\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e版本\u003c/th\u003e\n          \u003cth\u003e特点\u003c/th\u003e\n          \u003cth\u003e适合人群\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e免费版（Free）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e清理卸载、强制卸载、Store 应用卸载、便携单文件\u003c/td\u003e\n          \u003ctd\u003e绝大多数个人用户完全够用\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003ePro 版（付费）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e增加实时安装监控、批量卸载、高级管理功能\u003c/td\u003e\n          \u003ctd\u003e需要频繁装软件/折腾系统的用户\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e日常家用免费版绰绰有余，Pro 版需要的话可以走官网购买。\u003c/p\u003e","title":"Geek Uninstaller — 极简却强大的免费卸载利器"},{"content":"在你的本地机器（发起 rsync 的机器）上执行：\n1. 生成密钥对（如果已有 ~/.ssh/id_rsa 可跳过） ssh-keygen -t rsa -b 2048 一路按回车即可（默认路径，密码留空）。这会生成两个文件：\nid_rsa（私钥）：留在本地，是你的\u0026quot;身份证\u0026quot;。 id_rsa.pub（公钥）：需要发给服务器。 2. 将公钥上传到远程服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_server_ip 这一步需要输入一次服务器密码，目的是把你的公钥写入服务器的 ~/.ssh/authorized_keys 文件。\n3. 确保私钥权限为600（仅所有者可读写） chmod 600 ~/.ssh/id_rsa 4. 验证测试 ssh username@remote_server_ip 如果配置成功，你会发现直接就能登录，不再需要输入密码。此时运行 rsync 命令也会直接静默执行。\n配置好密钥后，rsync脚本即可全自动运行 #!/bin/bash # 现在运行这个脚本，不会再弹出密码提示 rsync -avz -e \u0026#39;ssh -p 22\u0026#39; /local/data/ user@remote_ip:/remote/backup/ ","permalink":"/posts/%E9%85%8D%E7%BD%AEssh%E5%AF%86%E9%92%A5%E5%AE%9E%E7%8E%B0rsync%E5%85%8D%E5%AF%86%E5%90%8C%E6%AD%A5/","summary":"\u003cp\u003e在你的\u003cstrong\u003e本地机器\u003c/strong\u003e（发起 rsync 的机器）上执行：\u003c/p\u003e\n\u003ch2 id=\"1-生成密钥对如果已有-sshid_rsa-可跳过\"\u003e1. 生成密钥对（如果已有 \u003ccode\u003e~/.ssh/id_rsa\u003c/code\u003e 可跳过）\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003essh-keygen -t rsa -b \u003cspan style=\"color:#ae81ff\"\u003e2048\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e一路按回车即可（默认路径，\u003cstrong\u003e密码留空\u003c/strong\u003e）。这会生成两个文件：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eid_rsa\u003c/code\u003e（私钥）：留在本地，是你的\u0026quot;身份证\u0026quot;。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eid_rsa.pub\u003c/code\u003e（公钥）：需要发给服务器。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"2-将公钥上传到远程服务器\"\u003e2. 将公钥上传到远程服务器\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003essh-copy-id -i ~/.ssh/id_rsa.pub username@remote_server_ip\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e这一步需要输入一次服务器密码\u003c/strong\u003e，目的是把你的公钥写入服务器的 \u003ccode\u003e~/.ssh/authorized_keys\u003c/code\u003e 文件。\u003c/p\u003e\n\u003ch2 id=\"3-确保私钥权限为600仅所有者可读写\"\u003e3. 确保私钥权限为600（仅所有者可读写）\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echmod \u003cspan style=\"color:#ae81ff\"\u003e600\u003c/span\u003e ~/.ssh/id_rsa\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"4-验证测试\"\u003e4. 验证测试\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003essh username@remote_server_ip\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e如果配置成功，你会发现直接就能登录，不再需要输入密码。此时运行 rsync 命令也会直接静默执行。\u003c/p\u003e\n\u003ch2 id=\"配置好密钥后rsync脚本即可全自动运行\"\u003e配置好密钥后，rsync脚本即可全自动运行\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e# 现在运行这个脚本，不会再弹出密码提示\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ersync -avz -e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ssh -p 22\u0026#39;\u003c/span\u003e /local/data/ user@remote_ip:/remote/backup/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"配置SSH密钥实现rsync免密同步"},{"content":"简介 当你需要通过 Nginx Proxy Manager（NPM）转发内网服务（如 go-music-dl）时，可以直接在 NPM 中配置 Basic Auth，让访问者在进入目标服务前先弹出登录框。本文记录了 NPM 与目标服务在不同服务器上的配置步骤。\n第一步：在 NPM 所在服务器生成 htpasswd 文件 NPM 容器内使用了 Nginx，Nginx 的 Basic Auth 依赖 htpasswd 文件来存储账号密码。\n# 安装工具（Debian/Ubuntu） apt install -y apache2-utils # 创建目录和文件 mkdir -p /opt/npm/htpasswd htpasswd -c /opt/npm/htpasswd/musicdl admin 运行后输入你想设置的密码，完成后确认文件已生成：\ncat /opt/npm/htpasswd/musicdl 第二步：确认 NPM 容器挂载了该目录 打开 NPM 的 docker-compose.yml，确保 volumes 中包含 htpasswd 目录的挂载：\nvolumes: - ./data:/data - /opt/npm/htpasswd:/etc/nginx/htpasswd 重启 NPM 容器使挂载生效：\ndocker compose down docker compose up -d 第三步：NPM 中创建 Proxy Host 在 NPM 管理界面中：\nDomain Names：填入你绑定的域名或 IP Scheme：http Forward Hostname / IP：go-music-dl 所在服务器的 内网 IP（或公网 IP） Forward Port：8080 保存后，编辑该 Proxy Host → 展开 Advanced（高级） → 填入以下 Nginx 配置：\nlocation / { auth_basic \u0026#34;Music DL Login\u0026#34;; auth_basic_user_file /etc/nginx/htpasswd/musicdl; proxy_pass http://你的music-dl_IP:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ⚠️ 你的music-dl_IP 填 go-music-dl 那台机器的 IP（如 192.168.1.100），确保两台机器的 8080 端口互通（检查防火墙/安全组）。\n第四步：验证 浏览器访问 NPM 绑定的域名，会弹出账号密码框 → 输入 admin 和你设置的密码 → 成功进入 go-music-dl。\n","permalink":"/posts/npm-add-login-auth/","summary":"通过 Nginx Proxy Manager 为内网服务添加 Basic Auth 登录认证的完整步骤。","title":"NPM 跳转添加登录界面"},{"content":"一、检查 Python 是否安装 先确认系统有没有 Python 3：\npython3 --version # 或者 python --version 如果没有安装，执行：\nsudo apt update sudo apt install python3 python3-pip 二、安装依赖库 运行脚本前，可能需要安装第三方库。比如：\npip3 install requests # 或者 pip install requests 三、使用虚拟环境（推荐做法） 适合你要跑自己的脚本 / 项目。\n安装必要组件 一般系统已安装，如果没有：\napt update apt install -y python3-full python3-venv 创建并激活虚拟环境 # 创建虚拟环境 python3 -m venv venv # 激活 source venv/bin/activate # 现在可以随便 pip 了 pip install requests 退出虚拟环境 deactivate 虚拟环境的优点 不污染系统：项目依赖只装在 venv 里，不影响系统全局 安全：不同项目可以装不同版本的库，互不冲突 可复现：把 requirements.txt 交给别人，pip install -r requirements.txt 就能还原环境 虚拟环境是生产环境首选做法。\n四、后台运行脚本 脚本需要长时间运行时，用 nohup 放到后台，关闭终端也不会中断：\nnohup python3 -u heyun.py \u0026gt;monitor.log 2\u0026gt;\u0026amp;1 \u0026amp; 参数说明：\nnohup：忽略挂起信号，终端关闭后进程继续运行 -u：关闭输出缓冲，日志实时写入文件 \u0026gt;monitor.log：标准输出重定向到日志文件 2\u0026gt;\u0026amp;1：错误输出也合并到同一个日志文件 \u0026amp;：后台运行 查看日志：\ntail -f monitor.log 停止后台进程：\npkill -f heyun.py ","permalink":"/posts/ubuntu-run-python/","summary":"\u003ch2 id=\"一检查-python-是否安装\"\u003e一、检查 Python 是否安装\u003c/h2\u003e\n\u003cp\u003e先确认系统有没有 Python 3：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython3 --version\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 或者\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython --version\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e如果没有安装，执行：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt install python3 python3-pip\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"二安装依赖库\"\u003e二、安装依赖库\u003c/h2\u003e\n\u003cp\u003e运行脚本前，可能需要安装第三方库。比如：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epip3 install requests\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 或者\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epip install requests\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"三使用虚拟环境推荐做法\"\u003e三、使用虚拟环境（推荐做法）\u003c/h2\u003e\n\u003cp\u003e适合你要跑自己的脚本 / 项目。\u003c/p\u003e\n\u003ch3 id=\"安装必要组件\"\u003e安装必要组件\u003c/h3\u003e\n\u003cp\u003e一般系统已安装，如果没有：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eapt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eapt install -y python3-full python3-venv\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"创建并激活虚拟环境\"\u003e创建并激活虚拟环境\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 创建虚拟环境\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython3 -m venv venv\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 激活\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esource venv/bin/activate\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 现在可以随便 pip 了\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epip install requests\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"退出虚拟环境\"\u003e退出虚拟环境\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edeactivate\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"虚拟环境的优点\"\u003e虚拟环境的优点\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e不污染系统\u003c/strong\u003e：项目依赖只装在 venv 里，不影响系统全局\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e安全\u003c/strong\u003e：不同项目可以装不同版本的库，互不冲突\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e可复现\u003c/strong\u003e：把 \u003ccode\u003erequirements.txt\u003c/code\u003e 交给别人，\u003ccode\u003epip install -r requirements.txt\u003c/code\u003e 就能还原环境\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e虚拟环境是生产环境首选做法。\u003c/p\u003e","title":"Ubuntu 运行 Python 脚本的完整指南"},{"content":"内网传文件总卡顿？用 iperf3 测测你的真实带宽！ 最近有朋友吐槽：“家里两台电脑连同一个 Wi-Fi，传个大文件半天没反应，难道是我家 Wi-Fi 虚标了？”\n其实内网传输慢，可能是带宽没跑满，也可能是设备/链路掉链子。今天就教大家用 iperf3 这个小工具，5 分钟测出两台电脑的真实内网传输能力，揪出慢的根源！\n为什么需要测内网速度？ 我们常说的“千兆网”“万兆局域网”，指的是理论带宽（比如千兆 ≈ 125MB/s）。但实际传输时，受网线质量、路由器/交换机性能、无线干扰、系统设置等影响，速度可能打折扣。\n用 iperf3 能精准测出两台设备间的 实际可用带宽，帮你判断是“网络拉胯”还是“文件太大”。\n准备工作 两台内网设备：手机/电脑都行，但建议用电脑（系统兼容更好）。\n同一局域网：确保两台设备连同一个 Wi-Fi，或插在同一路由器/交换机下（有线更准）。\n安装 iperf3：跨平台工具，30 秒搞定——\nWindows：官网下载 exe，或用 Chocolatey 安装：\nchoco install iperf3 macOS：\nbrew install iperf3 Linux (Ubuntu)：\nsudo apt install iperf3 3 步测出真实带宽 1. 启动“服务器端” 在其中一台电脑（比如 A）运行命令，作为测试的“接收方”：\niperf3 -s # -s 代表 server（服务器端） 会看到类似输出，提示 Listening on /ip4/192.168.1.100/tcp/5201（5201 是默认端口，IP 是 A 的内网地址）。\n2. 启动“客户端” 在另一台电脑（B）运行命令，作为“发送方”，连接 A 的 IP 和端口：\niperf3 -c 192.168.1.100 # -c 代表 client（客户端），替换成 A 的内网 IP 3. 看结果！ 测试默认持续 10 秒，结束后会输出关键数据：\n[ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.12 GBytes 967 Mbits/sec 0 sender [ 5] 0.00-10.00 sec 1.12 GBytes 967 Mbits/sec receiver Bitrate（比特率）：这里是 967Mbps，接近千兆网的理论值（1000Mbps ≈ 125MB/s），说明带宽跑满了！ 如果结果只有 500Mbps，可能是网线是五类线（最高支持百兆）、Wi-Fi 信道干扰，或路由器性能不足。 进阶玩法：测 UDP / 调整参数 默认测的是 TCP（稳定但受拥塞控制影响），想测 UDP 的极限带宽？加 -u 参数：\niperf3 -c 192.168.1.100 -u -b 1000M # -u 代表 UDP，-b 指定目标带宽（这里测 1000Mbps） 结果里的 Jitter（抖动） 和 Lost/Total Datagrams（丢包率） 很重要：丢包率 \u0026gt; 1% 可能影响视频/游戏体验。\n注意事项 测试时 关闭其他占带宽的程序（比如下载、看视频），避免干扰。 有线比无线更准，想测 Wi-Fi 真实性能，建议用 5GHz 频段 + 靠近路由器。 想测“上传”和“下载”，交换两台设备的服务器/客户端角色再测一次。 总结 iperf3 是个轻量但强大的网络测试工具，几行命令就能定位内网瓶颈。下次传文件慢，别急着换设备，先用它测测——如果是网络问题，升级网线/路由器就能解决；如果是设备性能，可能得换块好点的网卡啦～\n动手试试吧！测完来评论区晒结果，看看谁的内网是“真·千兆”～ 😉\n附：如果测试结果异常，常见原因：\n五类/超五类网线（最高百兆） 路由器 WAN/LAN 口不是千兆 无线信道拥挤 系统防火墙拦截 5201 端口 📥 iperf3 下载：蓝奏云下载链接\n","permalink":"/posts/iperf3-network-speed-test/","summary":"\u003ch2 id=\"内网传文件总卡顿用-iperf3-测测你的真实带宽\"\u003e内网传文件总卡顿？用 iperf3 测测你的真实带宽！\u003c/h2\u003e\n\u003cp\u003e最近有朋友吐槽：“家里两台电脑连同一个 Wi-Fi，传个大文件半天没反应，难道是我家 Wi-Fi 虚标了？”\u003c/p\u003e\n\u003cp\u003e其实内网传输慢，可能是带宽没跑满，也可能是设备/链路掉链子。今天就教大家用 \u003cstrong\u003eiperf3\u003c/strong\u003e 这个小工具，5 分钟测出两台电脑的真实内网传输能力，揪出慢的根源！\u003c/p\u003e\n\u003ch2 id=\"为什么需要测内网速度\"\u003e为什么需要测内网速度？\u003c/h2\u003e\n\u003cp\u003e我们常说的“千兆网”“万兆局域网”，指的是理论带宽（比如千兆 ≈ 125MB/s）。但实际传输时，受网线质量、路由器/交换机性能、无线干扰、系统设置等影响，速度可能打折扣。\u003c/p\u003e\n\u003cp\u003e用 iperf3 能精准测出两台设备间的 \u003cstrong\u003e实际可用带宽\u003c/strong\u003e，帮你判断是“网络拉胯”还是“文件太大”。\u003c/p\u003e\n\u003ch2 id=\"准备工作\"\u003e准备工作\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e两台内网设备\u003c/strong\u003e：手机/电脑都行，但建议用电脑（系统兼容更好）。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e同一局域网\u003c/strong\u003e：确保两台设备连同一个 Wi-Fi，或插在同一路由器/交换机下（有线更准）。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e安装 iperf3\u003c/strong\u003e：跨平台工具，30 秒搞定——\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eWindows\u003c/strong\u003e：官网下载 exe，或用 Chocolatey 安装：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echoco install iperf3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003emacOS\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebrew install iperf3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eLinux (Ubuntu)\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt install iperf3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"3-步测出真实带宽\"\u003e3 步测出真实带宽\u003c/h2\u003e\n\u003ch3 id=\"1-启动服务器端\"\u003e1. 启动“服务器端”\u003c/h3\u003e\n\u003cp\u003e在其中一台电脑（比如 A）运行命令，作为测试的“接收方”：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eiperf3 -s   \u003cspan style=\"color:#75715e\"\u003e# -s 代表 server（服务器端）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e会看到类似输出，提示 \u003ccode\u003eListening on /ip4/192.168.1.100/tcp/5201\u003c/code\u003e（5201 是默认端口，IP 是 A 的内网地址）。\u003c/p\u003e\n\u003ch3 id=\"2-启动客户端\"\u003e2. 启动“客户端”\u003c/h3\u003e\n\u003cp\u003e在另一台电脑（B）运行命令，作为“发送方”，连接 A 的 IP 和端口：\u003c/p\u003e","title":"内网传输速度测试工具 iperf3"},{"content":"安装与配置 fail2ban 防22端口爆破自动封禁\n安装：sudo apt install fail2ban 重启：sudo systemctl restart fail2ban 配置文件：/etc/fail2ban/jail.d/sshd.local 查看被封ip：sudo fail2ban-client get sshd banip 配置文件sshd.local如下： [sshd] # 启用此监狱 enabled = true # 使用 systemd 后端来读取日志，避免找不到日志文件的问题 backend = systemd # 监控的端口（ssh 对应 22 端口） port = ssh # 最大重试次数 maxretry = 3 # 统计时间窗口（秒） findtime = 600 # 封禁时长（秒），-1 为永久封禁，请谨慎使用 bantime = 7200 # 忽略的IP地址段，如本地环回 ignoreip = 127.0.0.1/8 ::1 常用管理命令 配置完成后，你需要使用以下命令来管理和监控 Fail2ban 的运行状态\n操作类别 命令 作用 服务管理 sudo systemctl start fail2ban 启动服务 sudo systemctl stop fail2ban 停止服务 sudo systemctl restart fail2ban 重启服务（修改配置后常用） sudo systemctl status fail2ban 检查服务运行状态 sudo fail2ban-client reload 重新加载配置（不中断服务） 状态查询 sudo fail2ban-client status 查看所有激活的\u0026quot;监狱\u0026quot;(jail) sudo fail2ban-client status sshd 查看特定监狱（如sshd）的详细状态，包括当前被禁IP 手动干预 sudo fail2ban-client set sshd unbanip \u0026lt;IP地址\u0026gt; 解封特定 IP sudo fail2ban-client set sshd banip \u0026lt;IP地址\u0026gt; 手动封禁特定 IP ","permalink":"/posts/linux%E9%98%B222%E7%AB%AF%E5%8F%A3%E7%88%86%E7%A0%B4%E8%87%AA%E5%8A%A8%E5%B0%81%E7%A6%81/","summary":"\u003ch2 id=\"安装与配置-fail2ban\"\u003e安装与配置 fail2ban\u003c/h2\u003e\n\u003cp\u003e防22端口爆破自动封禁\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e安装：\u003ccode\u003esudo apt install fail2ban\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e重启：\u003ccode\u003esudo systemctl restart fail2ban\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e配置文件：\u003ccode\u003e/etc/fail2ban/jail.d/sshd.local\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e查看被封ip：\u003ccode\u003esudo fail2ban-client get sshd banip\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"配置文件sshdlocal如下\"\u003e配置文件sshd.local如下：\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[\u003cspan style=\"color:#ae81ff\"\u003esshd]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 启用此监狱\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003eenabled = true\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 使用 systemd 后端来读取日志，避免找不到日志文件的问题\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003ebackend = systemd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 监控的端口（ssh 对应 22 端口）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003eport = ssh\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 最大重试次数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003emaxretry = 3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 统计时间窗口（秒）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003efindtime = 600\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 封禁时长（秒），-1 为永久封禁，请谨慎使用\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003ebantime = 7200\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 忽略的IP地址段，如本地环回\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003eignoreip = 127.0.0.1/8 ::1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"常用管理命令\"\u003e常用管理命令\u003c/h2\u003e\n\u003cp\u003e配置完成后，你需要使用以下命令来管理和监控 Fail2ban 的运行状态\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e操作类别\u003c/th\u003e\n          \u003cth\u003e命令\u003c/th\u003e\n          \u003cth\u003e作用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e服务管理\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo systemctl start fail2ban\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e启动服务\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo systemctl stop fail2ban\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e停止服务\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo systemctl restart fail2ban\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e重启服务（修改配置后常用）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo systemctl status fail2ban\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e检查服务运行状态\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo fail2ban-client reload\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e重新加载配置（不中断服务）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e状态查询\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo fail2ban-client status\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e查看所有激活的\u0026quot;监狱\u0026quot;(jail)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo fail2ban-client status sshd\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e查看特定监狱（如sshd）的详细状态，包括当前被禁IP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e手动干预\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo fail2ban-client set sshd unbanip \u0026lt;IP地址\u0026gt;\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e解封特定 IP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003esudo fail2ban-client set sshd banip \u0026lt;IP地址\u0026gt;\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e手动封禁\u003c/strong\u003e特定 IP\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e","title":"Linux防22端口爆破自动封禁"},{"content":"哈喽，黑域小伙伴，谈起还原，最初接识影子系统/系统还原恢复类软件是在2008年左右，最初对这些软件感觉很神奇，毕竟那时流氓恶意软件盛行，「还原系统」类的软件特别火，当你进入「影子模式」后软件会瞬间为你当前的操作系统创建一个一模一样的「替身」，你可以照样在电脑上随意安装软件、删除文件、甚至是测试任何软件！\n而今天这款：希沃零度，就是类似冰点还原的利器，帮助你解决系统卡顿、崩坏的问题的一款免费的系统还原软件，并且性能优秀、使用简单。\n希沃零度是一款免费的系统还原软件，类似于高中电脑课上使用的冰点还原，安全性也不错，可以自定义冻结磁盘，免费无广告。\n软件大小23.3Mb，仅支持Windows，需要安装并至少备份好一份快捷方式才能使用。\n这个软件更加简单方便，适合不愿意折腾的人去用，只要把桌面的快捷方式备份好，就能实现一键操作，也不需要去破解。\n你可以看到软件的主界面，选择需要保护的系统盘，点击冰冻即可，重启计算机后生效，就是这么简单！\n你会发现刚刚打开的桌面快捷方式消失不见了，开始菜单内的快捷方式无效，即使卸载程序也不会解除冻结。\n如果你前面没有备份此快捷方式，除非重装系统否则再也无法解冻。好在世上是存有后悔药的，我上传了此快捷方式的备份。\n只需解压后运行该快捷方式，将已保护的系统盘解冻，重启后即可生效。\n最后提醒一下，删除、卸载软件不等于解除还原，必须打开备份的快捷方式才能解除还原。\n总的来说，软件的冰点还原功能可以让电脑快速复原，当我们在使用时遇到死机、蓝屏等场景，只需要重启电脑即可恢复正常使用。\n且随着重启不定期自动还原的设置，也可以让电脑久用如新，再也不用担心安装软件太多而导致桌面文件混乱、电脑卡顿！\n软件信息 项目 信息 软件名称 希沃零度 版本号 V.1.2.6.1294 软件大小 23.3 MB 系统支持 Windows 更新日期 2024-04-15 下载地址 希沃零度 V.1.2.6.1294 下载\n","permalink":"/posts/xiwo-lingdu/","summary":"\u003cp\u003e哈喽，黑域小伙伴，谈起还原，最初接识影子系统/系统还原恢复类软件是在2008年左右，最初对这些软件感觉很神奇，毕竟那时流氓恶意软件盛行，「还原系统」类的软件特别火，当你进入「影子模式」后软件会瞬间为你当前的操作系统创建一个一模一样的「替身」，你可以照样在电脑上随意安装软件、删除文件、甚至是测试任何软件！\u003c/p\u003e\n\u003cp\u003e而今天这款：希沃零度，就是类似冰点还原的利器，帮助你解决系统卡顿、崩坏的问题的一款免费的系统还原软件，并且性能优秀、使用简单。\u003c/p\u003e\n\u003cp\u003e希沃零度是一款免费的系统还原软件，类似于高中电脑课上使用的冰点还原，安全性也不错，可以自定义冻结磁盘，免费无广告。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"软件主界面\" loading=\"lazy\" src=\"https://www.hybase.com/soft/UploadPic/2024-4/202441419494125175.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e软件大小23.3Mb，仅支持Windows，需要安装并至少备份好一份快捷方式才能使用。\u003c/p\u003e\n\u003cp\u003e这个软件更加简单方便，适合不愿意折腾的人去用，只要把桌面的快捷方式备份好，就能实现一键操作，也不需要去破解。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"软件界面\" loading=\"lazy\" src=\"https://www.hybase.com/soft/UploadPic/2024-4/202441419504014291.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e你可以看到软件的主界面，选择需要保护的系统盘，点击冰冻即可，重启计算机后生效，就是这么简单！\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"冻结功能\" loading=\"lazy\" src=\"https://www.hybase.com/soft/UploadPic/2024-4/202441419513364789.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e你会发现刚刚打开的桌面快捷方式消失不见了，开始菜单内的快捷方式无效，即使卸载程序也不会解除冻结。\u003c/p\u003e\n\u003cp\u003e如果你前面没有备份此快捷方式，除非重装系统否则再也无法解冻。好在世上是存有后悔药的，我上传了此快捷方式的备份。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"解冻演示\" loading=\"lazy\" src=\"https://www.hybase.com/soft/UploadPic/2024-4/202441419535861217.gif\"\u003e\u003c/p\u003e\n\u003cp\u003e只需解压后运行该快捷方式，将已保护的系统盘解冻，重启后即可生效。\u003c/p\u003e\n\u003cp\u003e最后提醒一下，删除、卸载软件不等于解除还原，必须打开备份的快捷方式才能解除还原。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"解冻界面\" loading=\"lazy\" src=\"https://www.hybase.com/soft/UploadPic/2024-4/202441419543882212.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e总的来说，软件的冰点还原功能可以让电脑快速复原，当我们在使用时遇到死机、蓝屏等场景，只需要重启电脑即可恢复正常使用。\u003c/p\u003e\n\u003cp\u003e且随着重启不定期自动还原的设置，也可以让电脑久用如新，再也不用担心安装软件太多而导致桌面文件混乱、电脑卡顿！\u003c/p\u003e\n\u003ch2 id=\"软件信息\"\u003e软件信息\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e项目\u003c/th\u003e\n          \u003cth\u003e信息\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e软件名称\u003c/td\u003e\n          \u003ctd\u003e希沃零度\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e版本号\u003c/td\u003e\n          \u003ctd\u003eV.1.2.6.1294\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e软件大小\u003c/td\u003e\n          \u003ctd\u003e23.3 MB\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e系统支持\u003c/td\u003e\n          \u003ctd\u003eWindows\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e更新日期\u003c/td\u003e\n          \u003ctd\u003e2024-04-15\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"下载地址\"\u003e下载地址\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://wwatz.lanzoum.com/iaBa53sap8di\"\u003e希沃零度 V.1.2.6.1294 下载\u003c/a\u003e\u003c/p\u003e","title":"[Windows] 类似冰点还原的利器 希沃零度V.1.2.6.1294"},{"content":"Docker配置代理 创建配置目录 sudo mkdir -p /etc/systemd/system/docker.service.d 配置代理 sudo tee /etc/systemd/system/docker.service.d/proxy.conf \u0026gt;EOF [Service] Environment=\u0026#34;HTTP_PROXY=http://你的代理地址:端口\u0026#34; Environment=\u0026#34;HTTPS_PROXY=http://你的代理地址:端口\u0026#34; Environment=\u0026#34;NO_PROXY=localhost,127.0.0.1,::1\u0026#34; EOF 重启Docker sudo systemctl daemon-reload sudo systemctl restart docker 验证配置 sudo systemctl show docker --property=Environment Linux系统配置代理 临时生效（当前终端） export http_proxy=http://你的代理地址:端口 export https_proxy=http://你的代理地址:端口 export no_proxy=localhost,127.0.0.1,::1 永久生效（所有用户） sudo tee /etc/profile.d/proxy.sh \u0026gt;EOF export http_proxy=http://你的代理地址:端口 export https_proxy=http://你的代理地址:端口 export no_proxy=localhost,127.0.0.1,::1 EOF source /etc/profile.d/proxy.sh 永久生效（当前用户） echo \u0026#39;export http_proxy=http://你的代理地址:端口\u0026#39; \u0026gt;\u0026gt; ~/.bashrc echo \u0026#39;export https_proxy=http://你的代理地址:端口\u0026#39; \u0026gt;\u0026gt; ~/.bashrc echo \u0026#39;export no_proxy=localhost,127.0.0.1,::1\u0026#39; \u0026gt;\u0026gt; ~/.bashrc source ~/.bashrc 验证配置 echo $http_proxy echo $https_proxy curl -I https://www.google.com ","permalink":"/posts/docker-proxy/","summary":"\u003ch2 id=\"docker配置代理\"\u003eDocker配置代理\u003c/h2\u003e\n\u003ch3 id=\"创建配置目录\"\u003e创建配置目录\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo mkdir -p /etc/systemd/system/docker.service.d\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"配置代理\"\u003e配置代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo tee /etc/systemd/system/docker.service.d/proxy.conf \u0026gt;EOF\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003eService\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eEnvironment\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;HTTP_PROXY=http://你的代理地址:端口\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eEnvironment\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;HTTPS_PROXY=http://你的代理地址:端口\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eEnvironment\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;NO_PROXY=localhost,127.0.0.1,::1\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eEOF\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"重启docker\"\u003e重启Docker\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo systemctl daemon-reload\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo systemctl restart docker\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"验证配置\"\u003e验证配置\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo systemctl show docker --property\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eEnvironment\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"linux系统配置代理\"\u003eLinux系统配置代理\u003c/h2\u003e\n\u003ch3 id=\"临时生效当前终端\"\u003e临时生效（当前终端）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport http_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003ehttp://你的代理地址:端口\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport https_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003ehttp://你的代理地址:端口\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport no_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003elocalhost,127.0.0.1,::1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"永久生效所有用户\"\u003e永久生效（所有用户）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo tee /etc/profile.d/proxy.sh \u0026gt;EOF\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport http_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003ehttp://你的代理地址:端口\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport https_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003ehttp://你的代理地址:端口\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eexport no_proxy\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003elocalhost,127.0.0.1,::1\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eEOF\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esource /etc/profile.d/proxy.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"永久生效当前用户\"\u003e永久生效（当前用户）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;export http_proxy=http://你的代理地址:端口\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; ~/.bashrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;export https_proxy=http://你的代理地址:端口\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; ~/.bashrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;export no_proxy=localhost,127.0.0.1,::1\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; ~/.bashrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esource ~/.bashrc\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"验证配置-1\"\u003e验证配置\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho $http_proxy\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho $https_proxy\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecurl -I https://www.google.com\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Docker及Linux系统配置代理"},{"content":"1、环境要求 Windows 10/11 专业版、企业版或教育版\n2、开启还原功能 打开控制面板，启用或关闭 Windows 功能。\n向下滚动找到 \u0026ldquo;设备锁定\u0026rdquo;，勾选确认启用。\n在管理员模式cmd命令中输入以下内容：\n# 开启过滤器 uwfmgr filter enable # 仅保护 C 盘 uwfmgr volume protect c: 重启电脑，C 盘的\u0026quot;重启还原\u0026quot;正式生效。\n3、关闭还原功能 uwfmgr filter disable 重启电脑，还原功能解除。\n4、留一个不还原的口子 uwfmgr file add-exclusion \u0026#34;D:\\会议永久留存\u0026#34; 这样指定的文件夹或文件将不会被还原，可以用于保存重要数据。\n","permalink":"/posts/windows-c-drive-restore/","summary":"\u003ch2 id=\"1环境要求\"\u003e1、环境要求\u003c/h2\u003e\n\u003cp\u003eWindows 10/11 专业版、企业版或教育版\u003c/p\u003e\n\u003ch2 id=\"2开启还原功能\"\u003e2、开启还原功能\u003c/h2\u003e\n\u003cp\u003e打开控制面板，启用或关闭 Windows 功能。\u003c/p\u003e\n\u003cp\u003e向下滚动找到 \u0026ldquo;设备锁定\u0026rdquo;，勾选确认启用。\u003c/p\u003e\n\u003cp\u003e在管理员模式cmd命令中输入以下内容：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 开启过滤器\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euwfmgr filter enable\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 仅保护 C 盘\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euwfmgr volume protect c:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e重启电脑，C 盘的\u0026quot;重启还原\u0026quot;正式生效。\u003c/p\u003e\n\u003ch2 id=\"3关闭还原功能\"\u003e3、关闭还原功能\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euwfmgr filter disable\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e重启电脑，还原功能解除。\u003c/p\u003e\n\u003ch2 id=\"4留一个不还原的口子\"\u003e4、留一个不还原的口子\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euwfmgr file add-exclusion \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;D:\\会议永久留存\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e这样指定的文件夹或文件将不会被还原，可以用于保存重要数据。\u003c/p\u003e","title":"Windows如何重启后C盘还原到使用前"},{"content":"Komari 是一款轻量级服务器探针，支持通过 Docker 快速部署。以下是部署和管理的基本步骤。\n1. 轻量级服务器探针 Komari services: komari: image: ghcr.io/komari-monitor/komari:latest container_name: komari ports: - \u0026#34;25774:25774\u0026#34; volumes: - ./data:/app/data restart: unless-stopped 2. 通过 Docker 安装的 Komari 初始登录信息可以在日志中查看（初始密码） docker logs komari 3. 卸载 Agent 可以直接执行以下命令 sudo systemctl stop komari-agent \u0026amp;\u0026amp; sudo systemctl disable komari-agent \u0026amp;\u0026amp; sudo rm -f /etc/systemd/system/komari-agent.service \u0026amp;\u0026amp; sudo systemctl daemon-reload \u0026amp;\u0026amp; sudo rm -rf /opt/komari/agent /var/log/komari ","permalink":"/posts/docker-deploy-komari/","summary":"\u003cp\u003eKomari 是一款轻量级服务器探针，支持通过 Docker 快速部署。以下是部署和管理的基本步骤。\u003c/p\u003e","title":"Docker部署轻量级服务器探针 Komari"},{"content":"Hermes Agent 默认开启大模型的\u0026quot;思考模式\u0026quot;（reasoning mode），模型会在正式回答前先输出一段 \u0026lt;thinking\u0026gt; 推理过程。对于简单问答、命令补全等场景，这段思考既消耗 token 又会刷屏。本文记录关闭思考模式的三种方式，从临时到永久覆盖全场景。\n一、3 种关闭方式对比 方式 命令/位置 生效范围 持久性 推荐场景 斜杠命令 /reasoning none 当前会话 临时 临时切换、调试 配置文件 display.show_reasoning: false 全局 永久 长期使用偏好 启动参数 hermes chat --reasoning none 单次启动 一次性 一次性任务、CI 二、方法一：斜杠命令（最常用） 在当前交互会话中直接输入：\n/reasoning none 可选级别：\nnone —— 完全关闭思考（最省 token、响应最快） minimal —— 最小化思考 low / medium / high / xhigh —— 思考强度递增 hide —— 思考但不在终端回显（视觉静音） show —— 思考并显示（默认行为） 推荐组合：\n日常命令补全：/reasoning none 既要质量又嫌刷屏：/reasoning hide 三、方法二：配置文件永久生效 编辑 ~/.hermes/config.yaml，在 display 段添加：\ndisplay: show_reasoning: false # 关闭思考内容回显 部分 provider（如 OpenRouter）支持更细粒度控制，可在 model 段加：\nmodel: reasoning_effort: none # 直接关闭思考 或用 CLI 命令直接改：\nhermes config set display.show_reasoning false ⚠️ 改完需要 /reset（CLI）或重启 gateway 才生效。\n四、方法三：启动参数指定 单次启动时通过 --reasoning 参数指定：\nhermes chat --reasoning none -q \u0026#34;你的问题\u0026#34; 适合：\n一次性问答（用完即弃） CI/CD 流水线中调用 Hermes 脚本化批量任务 五、踩坑提醒 display.show_reasoning: false 只是\u0026quot;不显示\u0026quot;，模型仍在思考。 要真正省 token 算力，必须用 none 级。 部分国产模型只支持二值切换（如 medium/high）。遇到 /reasoning none 报错或被忽略时，先用 /reasoning show 查看 provider 实际支持的级别。 配置改动后没生效？ 检查是否需要 /reset 或重启 gateway。Tools/skills 改动也需要 /reset。 /reasoning hide vs none 的取舍：hide 保留内部推理，输出质量更稳；none 真正省算力，但复杂任务可能掉质量。 六、验证是否生效 方法一验证（推荐）：\n/reasoning show 若终端开始显示 \u0026lt;thinking\u0026gt; 块，说明已开启；输入 /reasoning none 后回车应看到提示。\n方法二验证（配置文件）：\ncat ~/.hermes/config.yaml | grep show_reasoning 应输出 show_reasoning: false。\n总结 需求 推荐方案 临时关闭（当前会话） /reasoning none 长期关闭 config.yaml 改 show_reasoning: false + reasoning_effort: none 一次性任务 hermes chat --reasoning none -q \u0026quot;...\u0026quot; 保留思考但嫌刷屏 /reasoning hide 按场景选用即可——日常开发推荐方法一，自动化脚本推荐方法三，长期偏好推荐方法二。\n","permalink":"/posts/hermes-reasoning-mode-disable/","summary":"\u003cp\u003eHermes Agent 默认开启大模型的\u0026quot;思考模式\u0026quot;（reasoning mode），模型会在正式回答前先输出一段 \u003ccode\u003e\u0026lt;thinking\u0026gt;\u003c/code\u003e 推理过程。对于简单问答、命令补全等场景，这段思考既消耗 token 又会刷屏。本文记录关闭思考模式的三种方式，从临时到永久覆盖全场景。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"一3-种关闭方式对比\"\u003e一、3 种关闭方式对比\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e方式\u003c/th\u003e\n          \u003cth\u003e命令/位置\u003c/th\u003e\n          \u003cth\u003e生效范围\u003c/th\u003e\n          \u003cth\u003e持久性\u003c/th\u003e\n          \u003cth\u003e推荐场景\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e斜杠命令\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/reasoning none\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e当前会话\u003c/td\u003e\n          \u003ctd\u003e临时\u003c/td\u003e\n          \u003ctd\u003e临时切换、调试\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e配置文件\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003edisplay.show_reasoning: false\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e全局\u003c/td\u003e\n          \u003ctd\u003e永久\u003c/td\u003e\n          \u003ctd\u003e长期使用偏好\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e启动参数\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003ehermes chat --reasoning none\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e单次启动\u003c/td\u003e\n          \u003ctd\u003e一次性\u003c/td\u003e\n          \u003ctd\u003e一次性任务、CI\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"二方法一斜杠命令最常用\"\u003e二、方法一：斜杠命令（最常用）\u003c/h2\u003e\n\u003cp\u003e在当前交互会话中直接输入：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e/reasoning none\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e可选级别：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003enone\u003c/code\u003e —— 完全关闭思考（最省 token、响应最快）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eminimal\u003c/code\u003e —— 最小化思考\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elow\u003c/code\u003e / \u003ccode\u003emedium\u003c/code\u003e / \u003ccode\u003ehigh\u003c/code\u003e / \u003ccode\u003exhigh\u003c/code\u003e —— 思考强度递增\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehide\u003c/code\u003e —— 思考但不在终端回显（视觉静音）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eshow\u003c/code\u003e —— 思考并显示（默认行为）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e推荐组合：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e日常命令补全：\u003ccode\u003e/reasoning none\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e既要质量又嫌刷屏：\u003ccode\u003e/reasoning hide\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"三方法二配置文件永久生效\"\u003e三、方法二：配置文件永久生效\u003c/h2\u003e\n\u003cp\u003e编辑 \u003ccode\u003e~/.hermes/config.yaml\u003c/code\u003e，在 \u003ccode\u003edisplay\u003c/code\u003e 段添加：\u003c/p\u003e","title":"Hermes Agent 关闭大模型思考模式的 3 种方法"},{"content":"简介 Hermes Agent 是一个强大的 AI 助手框架，可以通过 Docker 快速部署。本文将介绍如何使用 Docker 容器化部署 Hermes Agent。\n快速开始 基础部署命令 docker run -it --rm \\ -v /vol1/1000/docker/hermes:/opt/data \\ nousresearch/hermes-agent \\ setup 简化命令 docker run -it --rm nousresearch/hermes-agent setup 配置说明 数据卷挂载 -v /vol1/1000/docker/hermes:/opt/data: 将本地目录挂载到容器内，用于持久化数据 环境变量配置 部署完成后，需要配置以下服务的 API 密钥：\nBrowser Use 官网: https://browser-use.com 获取 API Key 后配置到环境变量 Fal.ai 官网: https://fal.ai/dashboard/keys 获取 API Key: YOUR_FAL_API_KEY Firecrawl 官网: https://firecrawl.dev 获取 API Key: YOUR_FIRECRAWL_API_KEY 配置示例 创建 .env 文件：\nBROWSER_USE_API_KEY=YOUR_BROWSER_USE_API_KEY FAL_API_KEY=YOUR_FAL_API_KEY FIRECRAWL_API_KEY=YOUR_FIRECRAWL_API_KEY 运行时加载环境变量：\ndocker run -it --rm \\ --env-file .env \\ -v /vol1/1000/docker/hermes:/opt/data \\ nousresearch/hermes-agent \\ setup 常用命令 # 启动 Hermes docker start hermes-agent # 查看日志 docker logs -f hermes-agent # 进入容器 docker exec -it hermes-agent bash # 停止容器 docker stop hermes-agent 注意事项 数据持久化: 确保挂载卷路径正确，避免数据丢失 API 密钥安全: 不要将密钥提交到代码仓库 网络配置: 如需访问外部服务，确保容器网络配置正确 资源限制: 根据需要设置 CPU 和内存限制 故障排查 容器无法启动 # 检查容器状态 docker ps -a # 查看详细日志 docker logs hermes-agent API 连接失败 检查 API 密钥是否正确 确认网络连接正常 验证 API 服务是否可用 参考链接 Hermes Agent 官方文档 Docker Hub - Hermes Agent Browser Use 官网 Fal.ai 官网 Firecrawl 官网 如有问题，欢迎在评论区留言交流。\n","permalink":"/posts/docker-deploy-hermes/","summary":"使用 Docker 快速部署 Hermes Agent 的完整指南。","title":"Docker 部署 Hermes Agent"},{"content":"错误代码：0x800704f8 \u0026ldquo;因组织安全策略阻止未经身份验证的来宾访问\u0026rdquo; 共享问题 方案一：启用SMB 1.0/CIFS客户端协议（兼容性方案） 如果共享设备是较旧的系统（如Win7、老款NAS或某些打印机），可能需要启用旧协议。\n打开 控制面板 \u0026gt; 程序 \u0026gt; 启用或关闭Windows功能 在列表中找到 \u0026ldquo;SMB 1.0/CIFS 文件共享支持\u0026rdquo;，展开并勾选所有子项，点击确定 根据提示重启电脑，然后再次尝试访问 方案二：修改组策略（适用于Windows专业版/企业版） 此方法通过修改本地安全策略，允许不安全的来宾访问。\n按下键盘 Win + R，输入 gpedit.msc 并回车，打开\u0026quot;本地组策略编辑器\u0026quot; 在左侧依次展开：计算机配置 \u0026gt; 管理模板 \u0026gt; 网络 \u0026gt; Lanman 工作站 在右侧找到并双击 启用不安全的来宾登录 在弹出的窗口中，选择 已启用，点击 确定 重启电脑后，再次尝试访问共享 方案三：通过修改注册表实现（适用于Windows家庭版） ⚠️ 警告：修改注册表有风险，操作前建议备份。\n按下 Win + R，输入 regedit，回车以打开注册表编辑器 在地址栏输入或导航到以下路径： 计算机\\HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanWorkstation\\Parameters 在右侧空白处右键，选择 新建 -\u0026gt; DWORD (32位) 值 将这个新值的名称设置为 AllowInsecureGuestAuth 双击它，将其 \u0026ldquo;数值数据\u0026rdquo; 改为 1，\u0026ldquo;基数\u0026rdquo; 保持为 \u0026ldquo;十六进制\u0026rdquo; 点击确定，重启电脑后再次尝试访问 方案四：修复\u0026quot;安全协商\u0026quot;限制 Windows 11 的某些版本会强制要求服务器支持高等级的加密协商，如果对方太旧，握手就会被掐断。\n以管理员身份运行 PowerShell 输入以下命令（每行回车）： Set-SmbClientConfiguration -EnableBandwidthThrottling $false -Confirm:$false Set-SmbClientConfiguration -EnableInsecureGuestLogons $true -Confirm:$false 检查是否有强制签名要求： Set-SmbClientConfiguration -RequireSecuritySignature $false -Confirm:$false ","permalink":"/posts/smb-error-0x800704f8/","summary":"解决Windows访问共享时出现0x800704f8错误，因组织安全策略阻止未经身份验证的来宾访问的问题。","title":"错误代码：0x800704f8 因组织安全策略阻止未经身份验证的来宾访问 共享问题"},{"content":"python源码 import random import re import tkinter as tk a = \u0026#39;abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ!@#%\u0026amp;*()\u0026lt;\u0026gt;{}+?123456789\u0026#39; def generate(n): #n表示密码位 s = 0 ddtt = \\\u0026#34;\\\u0026#34; # 初始化 ddtt 变量 while s == 0: ddtt = [] # 创建一个空列表 for i in range(n): # 循环n次 rand = random.randint(0, len(a)-1) # 生成随机数 ddtt.append(a[rand]) # 将随机数添加到列表中 ddtt = \\\u0026#34;\\\u0026#34;.join(ddtt) # 将列表转换为字符串 if re.search(r\u0026#39;[a-z]\u0026#39;, ddtt): # 判断字符串中是否包含小写字母 if re.search(r\u0026#39;[A-Z]\u0026#39;, ddtt): # 判断字符串中是否包含大写字母 if re.search(r\u0026#39;[0-9]\u0026#39;, ddtt): # 判断字符串中是否包含数字 if re.search(r\u0026#39;[!@#%\u0026amp;*()\u0026lt;\u0026gt;{}+?]\u0026#39;, ddtt): # 判断字符串中是否包含特殊字符 s = 1 # 满足条件，跳出循环 return ddtt # 返回生成字符串 def create_window(): \\\u0026#34;\\\u0026#34;\\\u0026#34;创建一个带有两个文本框的简单GUI窗口\\\u0026#34;\\\u0026#34;\\\u0026#34; # 创建主窗口 window = tk.Tk() window.title(\\\u0026#34;随机密码生成\\\u0026#34;) # 设置窗口大小 window.geometry(\\\u0026#34;220x250\\\u0026#34;) # 宽x高 (像素) # 添加输入文本标签 input_label = tk.Label(window, text=\\\u0026#34;生成几位数：\\\u0026#34;) input_label.pack(pady=5) # 增加上下内边距 # 创建输入文本框 input_entry = tk.Entry(window) input_entry.insert(0, \\\u0026#34;8\\\u0026#34;) input_entry.pack(pady=5) # 增加上下内边距 # 添加显示长度标签 length_label = tk.Label(window, text=\\\u0026#34;随机密码生成：\\\u0026#34;) length_label.pack(pady=5) # 增加上下内边距 # 创建一个框架来放置显示长度文本框和复制按钮 frame = tk.Frame(window) frame.pack(pady=5) # 创建显示长度文本框，初始值为空 length_entry = tk.Entry(frame) length_entry.pack(pady=5) # 增加上下内边距 def copy_text(): text_to_copy = length_entry.get() # 获取要复制的文本内容 window.clipboard_clear() # 清空剪贴板内容 window.clipboard_append(text_to_copy) # 将文本内容添加到剪贴板 # 创建一个按钮 button_1 = tk.Button(frame, text=\\\u0026#34;复制\\\u0026#34;, command=copy_text) button_1.pack(pady=5) # 增加上下内边距 # 定义按钮点击事件的处理函数 def update_length(): input_text = input_entry.get() # 获取输入文本 num = generate(int(input_text)) # 调用generate函数 length_entry.delete(0, tk.END) # 清空长度文本框 length_entry.insert(0, str(num)) # 将生成的密码插入到长度文本框中 # 创建一个按钮 button = tk.Button(window, text=\\\u0026#34;更新密码\\\u0026#34;, command=update_length) button.pack(pady=10) # 增加上下内边距 window.bind(lambda event: button.invoke()) # 绑定回车键触发按钮 # 运行主事件循环 window.mainloop() if __name__ == \\\u0026#34;__main__\\\u0026#34;: create_window() ","permalink":"/posts/migrated/post-176/","summary":"\u003ch5 id=\"python源码\"\u003epython源码\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e random\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e re\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e tkinter \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e tk\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ea \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ!@#%\u0026amp;*()\u0026lt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e{}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e+?123456789\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003egenerate\u003c/span\u003e(n):  \u003cspan style=\"color:#75715e\"\u003e#n表示密码位\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    s \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    ddtt \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e  # 初始化 ddtt 变量\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e s \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        ddtt \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e []  \u003cspan style=\"color:#75715e\"\u003e# 创建一个空列表\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e range(n):  \u003cspan style=\"color:#75715e\"\u003e# 循环n次\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            rand \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e random\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003erandint(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e, len(a)\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 生成随机数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            ddtt\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eappend(a[rand])  \u003cspan style=\"color:#75715e\"\u003e# 将随机数添加到列表中\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        ddtt \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e.join(ddtt)  # 将列表转换为字符串\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esearch(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[a-z]\u0026#39;\u003c/span\u003e, ddtt):  \u003cspan style=\"color:#75715e\"\u003e# 判断字符串中是否包含小写字母\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esearch(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[A-Z]\u0026#39;\u003c/span\u003e, ddtt):  \u003cspan style=\"color:#75715e\"\u003e# 判断字符串中是否包含大写字母\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esearch(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[0-9]\u0026#39;\u003c/span\u003e, ddtt):  \u003cspan style=\"color:#75715e\"\u003e# 判断字符串中是否包含数字\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esearch(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[!@#%\u0026amp;*()\u0026lt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e{}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e+?]\u0026#39;\u003c/span\u003e, ddtt):  \u003cspan style=\"color:#75715e\"\u003e# 判断字符串中是否包含特殊字符\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        s \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# 满足条件，跳出循环\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e ddtt  \u003cspan style=\"color:#75715e\"\u003e# 返回生成字符串\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ecreate_window\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e创建一个带有两个文本框的简单GUI窗口\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\\\u0026#34;\\\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建主窗口\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    window \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eTk()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003etitle(\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;随机密码生成\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 设置窗口大小\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003egeometry(\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;220x250\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e)  # 宽x高 (像素)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 添加输入文本标签\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_label \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eLabel(window, text\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;生成几位数：\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_label\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建输入文本框\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_entry \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eEntry(window)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003einsert(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e, \\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;8\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 添加显示长度标签\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    length_label \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eLabel(window, text\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;随机密码生成：\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    length_label\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建一个框架来放置显示长度文本框和复制按钮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    frame \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eFrame(window)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    frame\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建显示长度文本框，初始值为空\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    length_entry \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eEntry(frame)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    length_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ecopy_text\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        text_to_copy \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e length_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eget()  \u003cspan style=\"color:#75715e\"\u003e# 获取要复制的文本内容\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eclipboard_clear()  \u003cspan style=\"color:#75715e\"\u003e# 清空剪贴板内容\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eclipboard_append(text_to_copy)  \u003cspan style=\"color:#75715e\"\u003e# 将文本内容添加到剪贴板\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建一个按钮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    button_1 \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eButton(frame, text\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;复制\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e, command=copy_text)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    button_1\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 定义按钮点击事件的处理函数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eupdate_length\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        input_text \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eget()  \u003cspan style=\"color:#75715e\"\u003e# 获取输入文本\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        num \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e generate(int(input_text))  \u003cspan style=\"color:#75715e\"\u003e# 调用generate函数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        length_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edelete(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e, tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eEND)  \u003cspan style=\"color:#75715e\"\u003e# 清空长度文本框\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        length_entry\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003einsert(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e, str(num))  \u003cspan style=\"color:#75715e\"\u003e# 将生成的密码插入到长度文本框中\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建一个按钮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    button \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tk\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eButton(window, text\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;更新密码\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e, command=update_length)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    button\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003epack(pady\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e)  \u003cspan style=\"color:#75715e\"\u003e# 增加上下内边距\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ebind(\u003cspan style=\"color:#66d9ef\"\u003elambda\u003c/span\u003e event: button\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003einvoke())   \u003cspan style=\"color:#75715e\"\u003e# 绑定回车键触发按钮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 运行主事件循环\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    window\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003emainloop()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e __name__ \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;__main__\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    create_window()\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"随机密码生产器"},{"content":"python import hashlib import time import requests import re import json import prettytable as pt def md5_hash(date, keyword): text = [ \u0026#39;NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt\u0026#39;, \u0026#39;appid=1014\u0026#39;, \u0026#39;bitrate=0\u0026#39;, \u0026#39;callback=callback123\u0026#39;, f\u0026#39;clienttime={date}\u0026#39;, \u0026#39;clientver=1000\u0026#39;, \u0026#39;dfid=11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;, \u0026#39;filter=10\u0026#39;, \u0026#39;inputtype=0\u0026#39;, \u0026#39;iscorrection=1\u0026#39;, \u0026#39;isfuzzy=0\u0026#39;, f\u0026#39;keyword={keyword}\u0026#39;, \u0026#39;mid=8b5710fdab09aea0e4649de3e430ad23\u0026#39;, \u0026#39;page=1\u0026#39;, \u0026#39;pagesize=30\u0026#39;, \u0026#39;platform=WebFilter\u0026#39;, \u0026#39;privilege_filter=0\u0026#39;, \u0026#39;srcappid=2919\u0026#39;, \u0026#39;token=\u0026#39;, \u0026#39;userid=0\u0026#39;, \u0026#39;uuid=8b5710fdab09aea0e4649de3e430ad23\u0026#39;, \u0026#39;NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt\u0026#39; ] string = \u0026#39;\u0026#39;.join(text) # 创建 MD5 哈希对象 md5 = hashlib.md5() # 更新哈希对象的内容 md5.update(string.encode(\u0026#39;utf-8\u0026#39;)) # 更新哈希对象的内容 signature = md5.hexdigest() print(signature) return signature def save(music_id): link = \u0026#39;https://wwwapi.kugou.com/yy/index.php\u0026#39; params = { \u0026#39;r\u0026#39;: \u0026#39;play/getdata\u0026#39;, # \u0026#39;callback\u0026#39;: \u0026#39;jQuery19105617303032764249_1693890961892\u0026#39;, \u0026#39;dfid\u0026#39;: \u0026#39;11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;, \u0026#39;appid\u0026#39;: \u0026#39;1014\u0026#39;, \u0026#39;mid\u0026#39;: \u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;, \u0026#39;platid\u0026#39;: \u0026#39;4\u0026#39;, \u0026#39;encode_album_audio_id\u0026#39;: music_id, \u0026#39;_\u0026#39;: \u0026#39;1693890961893\u0026#39;, } link_data = requests.get(url=link, params=params, headers=headers).json() play_url = link_data[\u0026#39;data\u0026#39;][\u0026#39;play_url\u0026#39;] audio_name = link_data[\u0026#39;data\u0026#39;][\u0026#39;audio_name\u0026#39;] name = re.sub(r\u0026#39;[\\\\/:\\\u0026#34;?*\u0026lt;\u0026gt;|]\u0026#39;, \u0026#39;\u0026#39;, audio_name) content = requests.get(url=play_url, headers=headers).content with open(\\\u0026#34;./\\\u0026#34; + name + \u0026#39;.mp3\u0026#39;, mode=\u0026#39;wb\u0026#39;) as f: f.write(content) now_time = int(time.time() * 1000) keyword = input(\u0026#39;请输入歌手名字 / 歌曲: \u0026#39;) signature = md5_hash(now_time, keyword) url = \u0026#39;https://complexsearch.kugou.com/v2/search/song\u0026#39; data = { \u0026#39;callback\u0026#39;: \u0026#39;callback123\u0026#39;, \u0026#39;srcappid\u0026#39;: \u0026#39;2919\u0026#39;, \u0026#39;clientver\u0026#39;: \u0026#39;1000\u0026#39;, \u0026#39;clienttime\u0026#39;: now_time, \u0026#39;mid\u0026#39;: \u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;, \u0026#39;uuid\u0026#39;: \u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;, \u0026#39;dfid\u0026#39;: \u0026#39;11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;, \u0026#39;keyword\u0026#39;: keyword, \u0026#39;page\u0026#39;: \u0026#39;1\u0026#39;, \u0026#39;pagesize\u0026#39;: \u0026#39;30\u0026#39;, \u0026#39;bitrate\u0026#39;: \u0026#39;0\u0026#39;, \u0026#39;isfuzzy\u0026#39;: \u0026#39;0\u0026#39;, \u0026#39;inputtype\u0026#39;: \u0026#39;0\u0026#39;, \u0026#39;platform\u0026#39;: \u0026#39;WebFilter\u0026#39;, \u0026#39;userid\u0026#39;: \u0026#39;0\u0026#39;, \u0026#39;iscorrection\u0026#39;: \u0026#39;1\u0026#39;, \u0026#39;privilege_filter\u0026#39;: \u0026#39;0\u0026#39;, \u0026#39;filter\u0026#39;: \u0026#39;10\u0026#39;, \u0026#39;token\u0026#39;: \u0026#39;\u0026#39;, \u0026#39;appid\u0026#39;: \u0026#39;1014\u0026#39;, \u0026#39;signature\u0026#39;: signature, } headers = { \u0026#39;Referer\u0026#39;: \u0026#39;https://www.kugou.com/\u0026#39;, \u0026#39;User-Agent\u0026#39;: \u0026#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36\u0026#39;, } response = requests.get(url=url, params=data, headers=headers) html_data = re.findall(\u0026#39;callback123\\((.*)\\)\u0026#39;, response.text)[0].replace(\u0026#39;)\u0026#39;, \u0026#39;\u0026#39;) tb = pt.PrettyTable() tb.field_names = [\u0026#39;序号\u0026#39;, \u0026#39;歌手\u0026#39;, \u0026#39;歌名\u0026#39;, \u0026#39;专辑\u0026#39;, \u0026#39;ID\u0026#39;] lis = [] num = 1 json_data = json.loads(html_data) for index in json_data[\u0026#39;data\u0026#39;][\u0026#39;lists\u0026#39;]: SingerName = index[\u0026#39;SingerName\u0026#39;] # 歌手 SongName = index[\u0026#39;SongName\u0026#39;] # 歌名 AlbumName = index[\u0026#39;AlbumName\u0026#39;] # 专辑 SongID = index[\u0026#39;EMixSongID\u0026#39;] # ID dit = { \u0026#39;歌手\u0026#39;: SingerName, \u0026#39;歌名\u0026#39;: SongName, \u0026#39;专辑\u0026#39;: AlbumName, \u0026#39;ID\u0026#39;: SongID, } tb.add_row([num, SingerName, SongName, AlbumName, SongID]) lis.append(dit) num += 1 print(tb) page = input(\u0026#39;请输入你要下载的歌曲的序号: \u0026#39;) try: if page == \u0026#39;0\u0026#39;: for li in lis: save(music_id=li[\u0026#39;SongID\u0026#39;]) else: save(music_id=lis[int(page)-1][\u0026#39;ID\u0026#39;]) except Exception as e: print(\u0026#39;输入有问题\u0026#39;, e) ","permalink":"/posts/migrated/post-174/","summary":"\u003ch5 id=\"python\"\u003epython\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e hashlib\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e time\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e requests\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e re\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e json\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e prettytable \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e pt\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emd5_hash\u003c/span\u003e(date, keyword):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    text \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e [\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;appid=1014\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;bitrate=0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;callback=callback123\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;clienttime=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e{\u003c/span\u003edate\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;clientver=1000\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;dfid=11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;filter=10\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;inputtype=0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;iscorrection=1\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;isfuzzy=0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;keyword=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e{\u003c/span\u003ekeyword\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;mid=8b5710fdab09aea0e4649de3e430ad23\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;page=1\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;pagesize=30\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;platform=WebFilter\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;privilege_filter=0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;srcappid=2919\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;token=\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;userid=0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;uuid=8b5710fdab09aea0e4649de3e430ad23\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    ]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    string \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin(text)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 创建 MD5 哈希对象\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    md5 \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e hashlib\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003emd5()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 更新哈希对象的内容\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    md5\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eupdate(string\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eencode(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;utf-8\u0026#39;\u003c/span\u003e))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 更新哈希对象的内容\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    signature \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e md5\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ehexdigest()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(signature)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e signature\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esave\u003c/span\u003e(music_id):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    link \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;https://wwwapi.kugou.com/yy/index.php\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    params \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;r\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;play/getdata\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75715e\"\u003e# \u0026#39;callback\u0026#39;: \u0026#39;jQuery19105617303032764249_1693890961892\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;dfid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;appid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1014\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;mid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;platid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;4\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;encode_album_audio_id\u0026#39;\u003c/span\u003e: music_id,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;_\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1693890961893\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    link_data \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e requests\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eget(url\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003elink, params\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eparams, headers\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eheaders)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejson()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    play_url \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e link_data[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;data\u0026#39;\u003c/span\u003e][\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;play_url\u0026#39;\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    audio_name \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e link_data[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;data\u0026#39;\u003c/span\u003e][\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;audio_name\u0026#39;\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    name \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esub(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e/:\\\u0026#34;?*\u0026lt;\u0026gt;|]\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e, audio_name)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    content \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e requests\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eget(url\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eplay_url, headers\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eheaders)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003econtent\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewith\u003c/span\u003e open(\\\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;./\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e + name + \u0026#39;.mp3\u0026#39;, mode=\u0026#39;wb\u0026#39;) as f:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        f\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ewrite(content)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enow_time \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e int(time\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003etime() \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1000\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ekeyword \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;请输入歌手名字 / 歌曲: \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esignature \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e md5_hash(now_time, keyword)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eurl \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;https://complexsearch.kugou.com/v2/search/song\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edata \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;callback\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;callback123\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;srcappid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;2919\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;clientver\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1000\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;clienttime\u0026#39;\u003c/span\u003e: now_time,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;mid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;uuid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;8b5710fdab09aea0e4649de3e430ad23\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;dfid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;11S5Hd0E3dhq3jHxZ90dzFYU\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;keyword\u0026#39;\u003c/span\u003e: keyword,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;page\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;pagesize\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;30\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;bitrate\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;isfuzzy\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;inputtype\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;platform\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;WebFilter\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;userid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;iscorrection\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;privilege_filter\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;filter\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;10\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;token\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;appid\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;1014\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;signature\u0026#39;\u003c/span\u003e: signature,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eheaders \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Referer\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;https://www.kugou.com/\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;User-Agent\u0026#39;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36\u0026#39;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eresponse \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e requests\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eget(url\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eurl, params\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003edata, headers\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eheaders)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ehtml_data \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003efindall(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;callback123\\((.*)\\)\u0026#39;\u003c/span\u003e, response\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003etext)[\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e]\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ereplace(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;)\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etb \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e pt\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ePrettyTable()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etb\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003efield_names \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e [\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;序号\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;歌手\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;歌名\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;专辑\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ID\u0026#39;\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elis \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e []\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enum \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ejson_data \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e json\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eloads(html_data)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e index \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e json_data[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;data\u0026#39;\u003c/span\u003e][\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;lists\u0026#39;\u003c/span\u003e]:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    SingerName \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e index[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;SingerName\u0026#39;\u003c/span\u003e]  \u003cspan style=\"color:#75715e\"\u003e# 歌手\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    SongName \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e index[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;SongName\u0026#39;\u003c/span\u003e]  \u003cspan style=\"color:#75715e\"\u003e# 歌名\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    AlbumName \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e index[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;AlbumName\u0026#39;\u003c/span\u003e]  \u003cspan style=\"color:#75715e\"\u003e# 专辑\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    SongID \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e index[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;EMixSongID\u0026#39;\u003c/span\u003e]  \u003cspan style=\"color:#75715e\"\u003e# ID\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    dit \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;歌手\u0026#39;\u003c/span\u003e: SingerName,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;歌名\u0026#39;\u003c/span\u003e: SongName,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;专辑\u0026#39;\u003c/span\u003e: AlbumName,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ID\u0026#39;\u003c/span\u003e: SongID,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    tb\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eadd_row([num, SingerName, SongName, AlbumName, SongID])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    lis\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eappend(dit)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    num \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eprint(tb)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epage \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;请输入你要下载的歌曲的序号:  \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003etry\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e page \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e li \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e lis:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            save(music_id\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eli[\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;SongID\u0026#39;\u003c/span\u003e])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        save(music_id\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003elis[int(page)\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e][\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ID\u0026#39;\u003c/span\u003e])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eException\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;输入有问题\u0026#39;\u003c/span\u003e, e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"python编写kugou下载工具"},{"content":"使用 https://github.com/DDS-Derek/xiaoya-alist\nbash -c \\\u0026#34;$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)\\\u0026#34; 备用地址\nbash \u0026lt;(curl --insecure -fsSL https://ddsrem.com/xiaoya/all_in_one.sh) 阿里云盘TOKEN\nhttps://alist.nn.ci/zh/guide/drivers/aliyundrive.html\n9945b93afdde40a8b4658424cbea6635\n阿里云盘Open\n如果你的xiaoya放在公网，为了防止别人蹭网，可以设置强制登入，新增/etc/xiaoya/guestlogin.txt这个文件，重启即可，文件有没有内容无所谓，如果取消强制登入就删除这个文件。强制登入的账号为 dav，密码使用 /etc/xiaoya/guestpass.txt 里设置的，同时webdav连接使用 dav 这个用户上述2个功能设置好后需要重启docker才会生效。\n","permalink":"/posts/migrated/post-169/","summary":"\u003ch4 id=\"使用\"\u003e使用\u003c/h4\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/DDS-Derek/xiaoya-alist\"\u003ehttps://github.com/DDS-Derek/xiaoya-alist\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebash -c \\\u0026#34;$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e备用地址\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebash \u0026lt;(curl --insecure -fsSL https://ddsrem.com/xiaoya/all_in_one.sh)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e阿里云盘TOKEN\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://alist.nn.ci/zh/guide/drivers/aliyundrive.html\"\u003ehttps://alist.nn.ci/zh/guide/drivers/aliyundrive.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e9945b93afdde40a8b4658424cbea6635\u003c/p\u003e\n\u003cp\u003e阿里云盘Open\u003c/p\u003e\n\u003cp\u003e如果你的xiaoya放在公网，为了防止别人蹭网，可以设置强制登入，新增/etc/xiaoya/guestlogin.txt这个文件，重启即可，文件有没有内容无所谓，如果取消强制登入就删除这个文件。强制登入的账号为 dav，密码使用 /etc/xiaoya/guestpass.txt 里设置的，同时webdav连接使用 dav 这个用户上述2个功能设置好后需要重启docker才会生效。\u003c/p\u003e","title":"小雅一键懒人安装"},{"content":"项目地址：https://github.com/frankiejun/serv00-play bash \u0026lt;(curl -Ls https://raw.githubusercontent.com/frankiejun/serv00-play/main/start.sh) 首次运行，无需使用面板，选 1 安装 serv00-play, 它会自动重新登录，输入 ss 回车进入界面。(以后都是输入 ss 回车进入界面) 选择7配置sing-box，选择8运行sing-box。 计划保号： https://github.com/frankiejun/serv00-play\n点击fork将项目转入自己的GITHUB帐户 ","permalink":"/posts/migrated/post-167/","summary":"\u003ch5 id=\"项目地址httpsgithubcomfrankiejunserv00-play\"\u003e项目地址：\u003ca href=\"https://github.com/frankiejun/serv00-play\"\u003ehttps://github.com/frankiejun/serv00-play\u003c/a\u003e\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebash \u0026lt;(curl -Ls https://raw.githubusercontent.com/frankiejun/serv00-play/main/start.sh)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e首次运行，无需使用面板，选 1 安装 serv00-play, 它会自动重新登录，输入 ss 回车进入界面。(以后都是输入 ss 回车进入界面)\u003c/li\u003e\n\u003cli\u003e选择7配置sing-box，选择8运行sing-box。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch5 id=\"计划保号\"\u003e计划保号：\u003c/h5\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/frankiejun/serv00-play\"\u003ehttps://github.com/frankiejun/serv00-play\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e点击fork将项目转入自己的GITHUB帐户\u003c/li\u003e\n\u003c/ol\u003e","title":"serv00服务器搭建科学上网节点"},{"content":"samba新建共享目录 以“商务部”为例\n1.创建文件夹，并修改文件权限（读写） mkdir /disk/部门文件/商务部 chmod 070 -R /disk/部门文件/商务部 # -R 表示递归修改文件夹权限 2.创建用户和用户组 groupadd swb useradd gaoyh -g swb # 如要修改组，或增加hr组的权限 usermod gaoyh -g swb -G hr # -g 代表主组 # -G 代表加入其他组 3.创建samba用户 smbpasswd -a gaoyh # -a 代表增加samba用户 # 如修改密码则不需要-a 4.给文件夹修改拥有者（文件属于谁） chown -R root:swb /disk/部门文件/商务部 5.配置文件操作 vim /etc/samba/smb.conf 6.服务重启 service smb restart systemctl restart smb ","permalink":"/posts/migrated/post-165/","summary":"\u003ch3 id=\"samba新建共享目录\"\u003esamba新建共享目录\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003e以“商务部”为例\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch4 id=\"1创建文件夹并修改文件权限读写\"\u003e1.创建文件夹，并修改文件权限（读写）\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emkdir /disk/部门文件/商务部\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echmod 070 -R /disk/部门文件/商务部\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# -R 表示递归修改文件夹权限\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"2创建用户和用户组\"\u003e2.创建用户和用户组\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003egroupadd swb\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euseradd gaoyh -g swb\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 如要修改组，或增加hr组的权限\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eusermod gaoyh -g swb -G hr\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# -g 代表主组\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# -G 代表加入其他组\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"3创建samba用户\"\u003e3.创建samba用户\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esmbpasswd -a gaoyh\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# -a 代表增加samba用户\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 如修改密码则不需要-a\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"4给文件夹修改拥有者文件属于谁\"\u003e4.给文件夹修改拥有者（文件属于谁）\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echown -R root:swb /disk/部门文件/商务部\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"5配置文件操作\"\u003e5.配置文件操作\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003evim /etc/samba/smb.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"6服务重启\"\u003e6.服务重启\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eservice smb restart\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esystemctl restart smb\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"linux系统安装samba共享"},{"content":"方法一： Windows 11安装卡联网？10秒教你跳过强制联网步骤 解决方法：用隐藏命令跳过联网 步骤1：卡住时按 Shift+F10 打开CMD 当安装界面停在「连接网络」时，同时按下键盘上的 Shift + F10（注意是英文输入法的Shift）。\n这时候会弹出一个黑色的命令提示符（CMD）窗口——这是关键！\n步骤2：输入命令 OOBE\\BYPASSNRO 在CMD窗口里，直接输入 OOBE\\BYPASSNRO（大小写随便，比如 oobe\\bypassnro 也行），然后按回车键。\n步骤3：等重启，继续设置 输入命令后，电脑会自动重启，重新回到安装流程。\n这次到「区域和语言」界面时，保持默认的「中国」，点击「是」。\n步骤4：点击「我没有Internet连接」 再次回到「连接网络」界面时，注意看右下角——会出现一个 「我没有Internet连接」 的选项！\n点击它，然后选择「继续执行有限设置」。\n步骤5：创建本地账户 接下来就能像老版Windows一样，设置用户名和密码（本地账户），完成剩下的安装啦！\n方法二： 在需要登录账户的OOBE屏幕，按Shift+F10打开命令提示符 reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OOBE /v BypassNRO /t REG_DWORD /d 1 /f shutdown /r /t 0 方法三： 在安装界面输入快捷键：Shift+F10 来进入到命令提示 net user 你的用户名 /add net localgroup Administrators 你的用户名 /add cd OOBE msoobe \u0026amp;\u0026amp; shutdown -r 总结 Windows 11的强制联网设置确实有点「不近人情」，但用 OOBE\\BYPASSNRO 命令就能轻松绕过。\n下次装系统时遇到卡联网，试试这几步，10秒搞定，告别「没网装不了系统」的烦恼～\n（小贴士：如果是企业批量装机，这个方法还能省去教同事登录微软账户的麻烦哦！）\n","permalink":"/posts/migrated/post-149/","summary":"\u003ch3 id=\"方法一\"\u003e方法一：\u003c/h3\u003e\n\u003ch3 id=\"windows-11安装卡联网10秒教你跳过强制联网步骤\"\u003eWindows 11安装卡联网？10秒教你跳过强制联网步骤\u003c/h3\u003e\n\u003chr\u003e\n\u003ch4 id=\"解决方法用隐藏命令跳过联网\"\u003e解决方法：用隐藏命令跳过联网\u003c/h4\u003e\n\u003ch4 id=\"步骤1卡住时按-shiftf10-打开cmd\"\u003e步骤1：卡住时按 \u003ccode\u003eShift+F10\u003c/code\u003e 打开CMD\u003c/h4\u003e\n\u003cp\u003e当安装界面停在「连接网络」时，\u003cstrong\u003e同时按下键盘上的 \u003ccode\u003eShift\u003c/code\u003e + \u003ccode\u003eF10\u003c/code\u003e\u003c/strong\u003e（注意是英文输入法的Shift）。\u003cbr\u003e\n这时候会弹出一个黑色的命令提示符（CMD）窗口——这是关键！\u003c/p\u003e\n\u003ch4 id=\"步骤2输入命令-oobebypassnro\"\u003e步骤2：输入命令 \u003ccode\u003eOOBE\\BYPASSNRO\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003e在CMD窗口里，直接输入 \u003ccode\u003eOOBE\\BYPASSNRO\u003c/code\u003e（大小写随便，比如 \u003ccode\u003eoobe\\bypassnro\u003c/code\u003e 也行），然后按回车键。\u003c/p\u003e\n\u003ch4 id=\"步骤3等重启继续设置\"\u003e步骤3：等重启，继续设置\u003c/h4\u003e\n\u003cp\u003e输入命令后，电脑会自动重启，重新回到安装流程。\u003cbr\u003e\n这次到「区域和语言」界面时，保持默认的「中国」，点击「是」。\u003c/p\u003e\n\u003ch4 id=\"步骤4点击我没有internet连接\"\u003e步骤4：点击「我没有Internet连接」\u003c/h4\u003e\n\u003cp\u003e再次回到「连接网络」界面时，注意看右下角——会出现一个 \u003cstrong\u003e「我没有Internet连接」\u003c/strong\u003e 的选项！\u003cbr\u003e\n点击它，然后选择「继续执行有限设置」。\u003c/p\u003e\n\u003ch4 id=\"步骤5创建本地账户\"\u003e步骤5：创建本地账户\u003c/h4\u003e\n\u003cp\u003e接下来就能像老版Windows一样，设置用户名和密码（本地账户），完成剩下的安装啦！\u003c/p\u003e\n\u003ch3 id=\"方法二\"\u003e方法二：\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e在需要登录账户的OOBE屏幕，按Shift+F10打开命令提示符\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ereg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OOBE /v BypassNRO /t REG_DWORD /d 1 /f\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eshutdown /r /t 0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"方法三\"\u003e方法三：\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e在安装界面输入快捷键：Shift+F10 来进入到命令提示\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enet user 你的用户名  /add                          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enet localgroup Administrators 你的用户名 /add                                                          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecd OOBE\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emsoobe \u0026amp;\u0026amp; shutdown -r\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"总结\"\u003e总结\u003c/h3\u003e\n\u003cp\u003eWindows 11的强制联网设置确实有点「不近人情」，但用 \u003ccode\u003eOOBE\\BYPASSNRO\u003c/code\u003e 命令就能轻松绕过。\u003cbr\u003e\n下次装系统时遇到卡联网，试试这几步，10秒搞定，告别「没网装不了系统」的烦恼～\u003c/p\u003e\n\u003cp\u003e（小贴士：如果是企业批量装机，这个方法还能省去教同事登录微软账户的麻烦哦！）\u003c/p\u003e","title":"Win11开机初始化跳过登录微软账号"},{"content":"linux系统映射飞牛SMB盘 飞牛smb高级设置开启NTLMv1协议 ​拉镜像Ubuntu / Debian 系统: sudo apt update \u0026amp;\u0026amp; sudo apt install cifs-utils 创建认证文件 # 在用户家目录下创建并编辑认证文件（例如 .smbcredentials）： vim ~/.smbcredentials # 在文件中写入以下内容，替换你的实际用户名和密码 username=你的飞牛NAS用户名 password=你的飞牛NAS密码 修改文件权限 chmod 600 ~/.smbcredentials ​创建本地挂载点目录​： sudo mkdir -p /mnt/fn-smb 执行挂载命令 sudo mount -t cifs -o credentials=/home/你的用户名/.smbcredentials,vers=3.0,uid=$(id -u),gid=$(id -g) //飞牛NAS的IP/共享文件夹名称 /mnt/fn-smb ​**credentials=/home/你的用户名/.smbcredentials**: 指定认证文件路径。 ​**vers=3.0**: 指定使用 SMB 3.0 协议。如果连接失败，可以尝试 vers=2.0 或 vers=1.0 。* ​**uid=$(id -u),gid=$(id -g)**: 让挂载后的文件归属当前用户，方便操作。\n​**//飞牛NAS的IP/共享文件夹名称**: 替换为飞牛 NAS 的实际 IP 地址和共享名称。 ​**/mnt/fn-smb**: 替换为你实际创建的挂载点路径。 配置开机自动挂载 若希望每次开机自动挂载，需编辑 /etc/fstab 文件。​添加 _netdev 和 nofail 选项非常重要，它们告知系统这是一个网络挂载，若网络未就绪或 NAS 未开机，系统不会无限期等待或启动失败。\n​备份原文件​（安全起见）： sudo cp /etc/fstab /etc/fstab.bak ​在 /etc/fstab 末尾添加一行配置​： sudo vim /etc/fstab 添加如下内容（替换你的实际信息）：\n# ------------------------------------------------------------------- # 飞牛 NAS SMB 共享挂载配置 # ------------------------------------------------------------------- //172.18.0.1/AlistFile /mnt/smb cifs credentials=/root/.smbcredentials,vers=3.0,uid=0,gid=0,iocharset=utf8,file_mode=0664,dir_mode=0775,_netdev,nofail,x-systemd.automount 0 0 ​**_netdev**: 表明这是网络设备，系统会等待网络就绪后再尝试挂载。 ​**nofail**: 即使挂载失败（如启动时 NAS 不可达），系统仍会继续启动。 ​**uid=1000,gid=1000**: 通常桌面版 Linux 的第一个用户 UID 和 GID 是 1000。可通过 id -u 和 id -g 命令确认。 ​**dir_mode=0755,file_mode=0644**: 设置挂载后目录和文件的默认权限。 ","permalink":"/posts/migrated/post-146/","summary":"\u003ch3 id=\"linux系统映射飞牛smb盘\"\u003elinux系统映射飞牛SMB盘\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e飞牛smb高级设置开启NTLMv1协议\u003c/li\u003e\n\u003cli\u003e​拉镜像\u003cstrong\u003eUbuntu / Debian 系统:\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003esudo\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eapt\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eupdate\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003esudo\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eapt\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003einstall\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ecifs-utils\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"3\"\u003e\n\u003cli\u003e创建认证文件\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e在用户家目录下创建并编辑认证文件\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e（\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e例如\u003c/span\u003e .\u003cspan style=\"color:#a6e22e\"\u003esmbcredentials\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e）：\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003evim\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~/\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003esmbcredentials\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e在文件中写入以下内容\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e，\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e替换你的实际用户名和密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eusername\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e你的飞牛NAS用户名\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003epassword\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e你的飞牛NAS密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"4\"\u003e\n\u003cli\u003e修改文件权限\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003echmod\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e600\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~/\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003esmbcredentials\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"5\"\u003e\n\u003cli\u003e​\u003cstrong\u003e创建本地挂载点目录\u003c/strong\u003e​：\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo mkdir -p /mnt/fn-smb\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"6\"\u003e\n\u003cli\u003e\u003cstrong\u003e执行挂载命令\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003esudo\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003emount\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-t\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ecifs\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-o\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ecredentials\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ehome\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e你的用户名\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003esmbcredentials\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003evers\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e3\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003euid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=$(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-u\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e),\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003egid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=$(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-g\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e飞牛NAS的IP\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e共享文件夹名称\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003emnt\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efn-smb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e​**\u003ccode\u003ecredentials=/home/你的用户名/.smbcredentials\u003c/code\u003e**: 指定认证文件路径。\u003c/li\u003e\n\u003cli\u003e​**\u003ccode\u003evers=3.0\u003c/code\u003e**: 指定使用 SMB 3.0 协议。如果连接失败，可以尝试 \u003ccode\u003evers=2.0\u003c/code\u003e 或 \u003ccode\u003evers=1.0\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e。* ​**\u003ccode\u003euid=$(id -u),gid=$(id -g)\u003c/code\u003e**: 让挂载后的文件归属当前用户，方便操作。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e​**\u003ccode\u003e//飞牛NAS的IP/共享文件夹名称\u003c/code\u003e**: 替换为飞牛 NAS 的实际 IP 地址和共享名称。\u003c/li\u003e\n\u003cli\u003e​**\u003ccode\u003e/mnt/fn-smb\u003c/code\u003e**: 替换为你实际创建的挂载点路径。\u003c/li\u003e\n\u003c/ul\u003e\n\u003col start=\"7\"\u003e\n\u003cli\u003e\u003cstrong\u003e配置开机自动挂载\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e若希望每次开机自动挂载，需编辑 \u003ccode\u003e/etc/fstab\u003c/code\u003e 文件。​\u003cstrong\u003e添加 \u003cstrong\u003e\u003cstrong\u003e_netdev\u003c/strong\u003e\u003c/strong\u003e 和 \u003cstrong\u003e\u003cstrong\u003enofail\u003c/strong\u003e\u003c/strong\u003e 选项非常重要\u003c/strong\u003e，它们告知系统这是一个网络挂载，若网络未就绪或 NAS 未开机，系统不会无限期等待或启动失败。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e​\u003cstrong\u003e备份原文件\u003c/strong\u003e​（安全起见）：\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo cp /etc/fstab /etc/fstab.bak\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e​\u003cstrong\u003e在 \u003cstrong\u003e\u003cstrong\u003e/etc/fstab\u003c/strong\u003e\u003c/strong\u003e 末尾添加一行配置\u003c/strong\u003e​：\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-Plain\" data-lang=\"Plain\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo vim /etc/fstab\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e添加如下内容（替换你的实际信息）：\u003c/p\u003e","title":"linux系统映射飞牛SMB盘"},{"content":"version: \u0026#39;3.8\u0026#39; services: app: image: \u0026#39;jc21/nginx-proxy-manager:latest\u0026#39; restart: unless-stopped ports: - \u0026#39;80:80\u0026#39; - \u0026#39;81:81\u0026#39; - \u0026#39;443:443\u0026#39; volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt ","permalink":"/posts/migrated/post-144/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3.8\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003eapp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;jc21/nginx-proxy-manager:latest\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eunless-stopped\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;80:80\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;81:81\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;443:443\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eletsencrypt\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eetc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eletsencrypt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"nginx-proxy"},{"content":"1. 服务端配置 docker-compose.yml version: \u0026#39;3\u0026#39; services: frps: image: stilleshan/frps container_name: frps network_mode: host volumes: - ./frps.toml:/frp/frps.toml restart: always 运行docker-compose.yml docker compose up -d frps.toml 服务端配置文件 bindPort =7000 auth.token =\\\u0026#34;Aa@123456\\\u0026#34; #管理面板配置 webServer.addr =\\\u0026#34;0.0.0.0\\\u0026#34; webServer.port=7500 #管理面板 webServer.user=\\\u0026#34;ccc\\\u0026#34; #用户名 webServer.password=\\\u0026#34;ccc123123\\\u0026#34; #密码 #允许的IP白名单(可选) # allow_ports =7000-8000 2. 客户端配置 docker-compose.yml version: \u0026#39;3\u0026#39; services: frpc: image: stilleshan/frpc container_name: frpc network_mode: host volumes: - ./frpc.toml:/frp/frpc.toml restart: always frpc.toml 客户端配置文件 serverAddr = \\\u0026#34;0.0.0.0\\\u0026#34; # 连接服务器地址 serverPort = 7000 auth.token = \\\u0026#34;abc\\\u0026#34; [[proxies]] name = \\\u0026#34;web\\\u0026#34; # 端口转发 type = \\\u0026#34;tcp\\\u0026#34; localIP =\\\u0026#34;127.0.0.1\\\u0026#34; localPort = 443 remotePort = 443 ","permalink":"/posts/migrated/post-142/","summary":"\u003ch5 id=\"1-服务端配置\"\u003e1. 服务端配置\u003c/h5\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch6 id=\"docker-composeyml\"\u003edocker-compose.yml\u003c/h6\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003estilleshan\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ehost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\n\u003ch6 id=\"运行docker-composeyml\"\u003e运行docker-compose.yml\u003c/h6\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch5 id=\"docker-compose-up--d\"\u003edocker compose up -d\u003c/h5\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch6 id=\"frpstoml----服务端配置文件\"\u003efrps.toml    服务端配置文件\u003c/h6\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003ebindPort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e7000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eauth\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoken\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Aa@123456\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e#管理面板配置\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.addr =\\\u0026#34;0.0.0.0\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.port=7500    #管理面板\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.user=\\\u0026#34;ccc\\\u0026#34;    #用户名\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.password=\\\u0026#34;ccc123123\\\u0026#34;\u003c/span\u003e    #密码\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e#允许的IP白名单\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e可选\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eallow_ports\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e7000-8000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch5 id=\"2-客户端配置\"\u003e2. 客户端配置\u003c/h5\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch6 id=\"docker-composeyml-1\"\u003edocker-compose.yml\u003c/h6\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003estilleshan\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ehost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\n\u003ch6 id=\"frpctoml----客户端配置文件\"\u003efrpc.toml    客户端配置文件\u003c/h6\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eserverAddr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;0.0.0.0\\\u0026#34;    # 连接服务器地址\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eserverPort = 7000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eauth.token = \\\u0026#34;abc\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e[[proxies]]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ename = \\\u0026#34;web\\\u0026#34;    # 端口转发\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003etype = \\\u0026#34;tcp\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003elocalIP =\\\u0026#34;127.0.0.1\\\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003elocalPort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e443\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eremotePort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e443\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"frps安装Docker部署"},{"content":"项目yml version: \u0026#39;3.8\u0026#39; services: # KatelyaTV 主应用 katelyatv: image: ghcr.io/katelya77/katelyatv:latest container_name: katelyatv ports: - \\\u0026#34;3000:3000\\\u0026#34; environment: # 管理员账号（请修改） - USERNAME=admin - PASSWORD=your_strong_password # 启用 Redis 存储 - NEXT_PUBLIC_STORAGE_TYPE=redis - REDIS_URL=redis://katelyatv-redis:6379 # 允许用户注册（可选） - NEXT_PUBLIC_ENABLE_REGISTER=true depends_on: katelyatv-redis: condition: service_healthy restart: unless-stopped # 可选：挂载自定义配置 # volumes: # - ./config.json:/app/config.json:ro # Redis 数据库 katelyatv-redis: image: redis:7-alpine container_name: katelyatv-redis command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - katelyatv-redis-data:/data healthcheck: test: [\\\u0026#34;CMD\\\u0026#34;, \\\u0026#34;redis-cli\\\u0026#34;, \\\u0026#34;ping\\\u0026#34;] interval: 10s timeout: 3s retries: 3 restart: unless-stopped volumes: katelyatv-redis-data: ","permalink":"/posts/migrated/post-139/","summary":"\u003ch3 id=\"项目yml\"\u003e项目yml\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3.8\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eKatelyaTV\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e主应用\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eghcr\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eio\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ekatelya77\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003elatest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;3000:3000\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    environment:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 管理员账号（请修改）\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - USERNAME=admin\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - PASSWORD=your_strong_password\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 启用 Redis 存储\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - NEXT_PUBLIC_STORAGE_TYPE=redis\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - REDIS_URL=redis://katelyatv-redis:6379\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 允许用户注册（可选）\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - NEXT_PUBLIC_ENABLE_REGISTER=true\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    depends_on:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      katelyatv-redis:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e        condition: service_healthy\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    restart: unless-stopped\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    # 可选：挂载自定义配置\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    # volumes:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    #   - ./config.json:/app/config.json:ro\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e  # Redis 数据库\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e  katelyatv-redis:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    image: redis:7-alpine\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    container_name: katelyatv-redis\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    volumes:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - katelyatv-redis-data:/data\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    healthcheck:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      test: [\\\u0026#34;CMD\\\u0026#34;, \\\u0026#34;redis-cli\\\u0026#34;, \\\u0026#34;ping\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003einterval\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e10s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003etimeout\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eretries\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eunless-stopped\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ekatelyatv-redis-data\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"NAS部署(Docker + Redis)——KatelyaTV 主应用"},{"content":"项目 yml Wordpress + mariadb services: wordpress: container_name: wordpress image: wordpress:latest restart: always volumes: - /vol1/1000/docker/wordpress/data:/var/www/html environment: WORDPRESS_DB_HOST: 192.168.0.50:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: 9PlLt.qQuWvY # 配置密码 ports: - \u0026#34;8888:80\u0026#34; network_mode: bridge wordpressdb: image: mariadb:10.5 restart: always volumes: - /vol1/1000/docker/mariadb/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: AAbbcc@112233 # root密码 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: 9PlLt.qQuWvY # 配置密码 ports: - \u0026#34;3306:3306\u0026#34; # 将容器内的 3306 端口映射到宿主机的 3306 端口 network_mode: bridge ","permalink":"/posts/migrated/post-57/","summary":"\u003ch2 id=\"项目-yml\"\u003e项目 yml\u003c/h2\u003e\n\u003ch3 id=\"wordpress--mariadb\"\u003eWordpress + mariadb\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress:latest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      - \u003cspan style=\"color:#ae81ff\"\u003e/vol1/1000/docker/wordpress/data:/var/www/html\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eenvironment\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_HOST\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e192.168.0.50\u003c/span\u003e:\u003cspan style=\"color:#ae81ff\"\u003e3306\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_NAME\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_USER\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_PASSWORD\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e9PlLt.qQuWvY   \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 配置密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      - \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;8888:80\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ebridge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ewordpressdb\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003emariadb:10.5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      - \u003cspan style=\"color:#ae81ff\"\u003e/vol1/1000/docker/mariadb/data:/var/lib/mysql\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eenvironment\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eMYSQL_ROOT_PASSWORD\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eAAbbcc@112233   \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# root密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eMYSQL_DATABASE\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eMYSQL_USER\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eMYSQL_PASSWORD\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e9PlLt.qQuWvY   \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 配置密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      - \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;3306:3306\u0026#34;\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# 将容器内的 3306 端口映射到宿主机的 3306 端口\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ebridge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Wordpress+mariadb"},{"content":"项目yml 1. Wordpress+mariadb services: wordpress: container_name: wordpress image: wordpress:latest restart: always volumes: - /vol1/1000/docker/wordpress/data:/var/www/html environment: WORDPRESS_DB_HOST: 192.168.1.50:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: P@f73!@BVzr2 # 配置密码 ports: - \\\u0026#34;8888:80\\\u0026#34; network_mode: bridge wordpressdb: image: mariadb:10.5 restart: always volumes: - /vol1/1000/docker/mariadb/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password@15224 # root密码 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: P@f73!@BVzr2 # 配置密码 ports: - \\\u0026#34;3306:3306\\\u0026#34; # 将容器内的 3306 端口映射到宿主机的 3306 端口 network_mode: bridge 2. 飞牛NAS部署(Docker + Redis)——KatelyaTV 主应用 version: \u0026#39;3.8\u0026#39; services: # KatelyaTV 主应用 katelyatv: image: ghcr.io/katelya77/katelyatv:latest container_name: katelyatv ports: - \\\u0026#34;3000:3000\\\u0026#34; environment: # 管理员账号（请修改） - USERNAME=admin - PASSWORD=your_strong_password # 启用 Redis 存储 - NEXT_PUBLIC_STORAGE_TYPE=redis - REDIS_URL=redis://katelyatv-redis:6379 # 允许用户注册（可选） - NEXT_PUBLIC_ENABLE_REGISTER=true depends_on: katelyatv-redis: condition: service_healthy restart: unless-stopped # 可选：挂载自定义配置 # volumes: # - ./config.json:/app/config.json:ro # Redis 数据库 katelyatv-redis: image: redis:7-alpine container_name: katelyatv-redis command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - katelyatv-redis-data:/data healthcheck: test: [\\\u0026#34;CMD\\\u0026#34;, \\\u0026#34;redis-cli\\\u0026#34;, \\\u0026#34;ping\\\u0026#34;] interval: 10s timeout: 3s retries: 3 restart: unless-stopped volumes: katelyatv-redis-data: 3. frps安装部署 1. 服务端配置 # frps.toml 服务端配置文件 bindPort =7000 auth.token =\\\u0026#34;Aa@123456\\\u0026#34; #管理面板配置 webServer.addr =\\\u0026#34;0.0.0.0\\\u0026#34; webServer.port=7500 #管理面板 webServer.user=\\\u0026#34;ccc\\\u0026#34; #用户名 webServer.password=\\\u0026#34;ccc123123\\\u0026#34; #密码 #允许的IP白名单(可选) # allow_ports =7000-8000 # docker-compose.yml version: \u0026#39;3\u0026#39; services: frps: image: stilleshan/frps container_name: frps network_mode: host volumes: - ./frps.toml:/frp/frps.toml restart: always 2. 客户端配置 # frpc.toml 客户端配置文件 serverAddr = \\\u0026#34;0.0.0.0\\\u0026#34; # 连接服务器地址 serverPort = 7000 auth.token = \\\u0026#34;abc\\\u0026#34; [[proxies]] name = \\\u0026#34;web\\\u0026#34; # 端口转发 type = \\\u0026#34;tcp\\\u0026#34; localIP =\\\u0026#34;127.0.0.1\\\u0026#34; localPort = 443 remotePort = 443 # docker-compose.yml version: \u0026#39;3\u0026#39; services: frpc: image: stilleshan/frpc container_name: frpc network_mode: host volumes: - ./frpc.toml:/frp/frpc.toml restart: always 4. nginx-proxy version: \u0026#39;3.8\u0026#39; services: app: image: \u0026#39;jc21/nginx-proxy-manager:latest\u0026#39; restart: unless-stopped ports: - \u0026#39;80:80\u0026#39; - \u0026#39;81:81\u0026#39; - \u0026#39;443:443\u0026#39; volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt ","permalink":"/posts/migrated/post-46/","summary":"\u003ch3 id=\"项目yml\"\u003e项目yml\u003c/h3\u003e\n\u003ch4 id=\"1-wordpressmariadb\"\u003e1. Wordpress+mariadb\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003elatest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003evol1\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e1000\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edocker\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003evar\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ewww\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eenvironment\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_HOST\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e192\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003e168\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003e1\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003e50\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003e3306\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_NAME\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_USER\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eWORDPRESS_DB_PASSWORD\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eP\u003c/span\u003e@\u003cspan style=\"color:#66d9ef\"\u003ef73\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003e@\u003cspan style=\"color:#66d9ef\"\u003eBVzr2\u003c/span\u003e    \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e配置密码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;8888:80\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    network_mode: bridge\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e  wordpressdb:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    image: mariadb:10.5\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    restart: always\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    volumes:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - /vol1/1000/docker/mariadb/data:/var/lib/mysql\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    environment:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      MYSQL_ROOT_PASSWORD: password@15224    # root密码\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      MYSQL_DATABASE: wordpress\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      MYSQL_USER: wordpress\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      MYSQL_PASSWORD: P@f73!@BVzr2    # 配置密码\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    ports:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - \\\u0026#34;3306:3306\\\u0026#34;\u003c/span\u003e  \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e将容器内的\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3306\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e端口映射到宿主机的\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3306\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e端口\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ebridge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"2-飞牛nas部署docker--rediskatelyatv-主应用\"\u003e2. 飞牛NAS部署(Docker + Redis)——KatelyaTV 主应用\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3.8\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eKatelyaTV\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e主应用\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eghcr\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eio\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ekatelya77\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003elatest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ekatelyatv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;3000:3000\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    environment:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 管理员账号（请修改）\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - USERNAME=admin\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - PASSWORD=your_strong_password\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 启用 Redis 存储\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - NEXT_PUBLIC_STORAGE_TYPE=redis\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - REDIS_URL=redis://katelyatv-redis:6379\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      # 允许用户注册（可选）\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - NEXT_PUBLIC_ENABLE_REGISTER=true\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    depends_on:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      katelyatv-redis:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e        condition: service_healthy\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    restart: unless-stopped\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    # 可选：挂载自定义配置\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    # volumes:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    #   - ./config.json:/app/config.json:ro\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e  # Redis 数据库\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e  katelyatv-redis:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    image: redis:7-alpine\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    container_name: katelyatv-redis\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    volumes:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      - katelyatv-redis-data:/data\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e    healthcheck:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e      test: [\\\u0026#34;CMD\\\u0026#34;, \\\u0026#34;redis-cli\\\u0026#34;, \\\u0026#34;ping\\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003einterval\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e10s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003etimeout\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eretries\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eunless-stopped\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ekatelyatv-redis-data\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"3-frps安装部署\"\u003e3. frps安装部署\u003c/h4\u003e\n\u003ch5 id=\"1-服务端配置\"\u003e1. 服务端配置\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e    \u003cspan style=\"color:#f92672\"\u003e服务端配置文件\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003ebindPort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e7000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eauth\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoken\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Aa@123456\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e#管理面板配置\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.addr =\\\u0026#34;0.0.0.0\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.port=7500    #管理面板\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.user=\\\u0026#34;ccc\\\u0026#34;    #用户名\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ewebServer.password=\\\u0026#34;ccc123123\\\u0026#34;\u003c/span\u003e    #密码\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e#允许的IP白名单\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e可选\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eallow_ports\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e7000-8000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003edocker-compose\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eyml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003estilleshan\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ehost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrps\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch5 id=\"2-客户端配置\"\u003e2. 客户端配置\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e    \u003cspan style=\"color:#f92672\"\u003e客户端配置文件\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eserverAddr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;0.0.0.0\\\u0026#34;    # 连接服务器地址\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eserverPort = 7000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eauth.token = \\\u0026#34;abc\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e[[proxies]]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ename = \\\u0026#34;web\\\u0026#34;    # 端口转发\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003etype = \\\u0026#34;tcp\\\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003elocalIP =\\\u0026#34;127.0.0.1\\\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003elocalPort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e443\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eremotePort\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e443\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e#\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003edocker-compose\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eyml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003estilleshan\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003econtainer_name\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003enetwork_mode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ehost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003efrpc\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etoml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"4-nginx-proxy\"\u003e4. nginx-proxy\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eversion\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;3.8\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003eapp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;jc21/nginx-proxy-manager:latest\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003erestart\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eunless-stopped\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;80:80\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;81:81\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;443:443\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003evolumes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003edata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e./\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eletsencrypt\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eetc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003eletsencrypt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Docker部署"}]