[{"content":"欢迎 这是我的第一篇博客文章！🎉\n关于这个博客 使用 Hugo + PaperMod 主题搭建。\n特性 ✅ 快速的静态页面生成 ✅ 响应式设计 ✅ 暗黑模式支持 ✅ SEO 友好 开始写作 # 创建新文章 hugo new content posts/my-new-post.md # 本地预览 hugo server --buildDrafts 感谢阅读！\n","permalink":"http://localhost:1313/posts/hello-world/","summary":"第一篇博客文章，记录博客搭建过程。","title":"Hello World"},{"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":"http://localhost:1313/posts/docker-deploy-hermes/","summary":"使用 Docker 快速部署 Hermes Agent 的完整指南。","title":"Docker 部署 Hermes Agent"},{"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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/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":"http://localhost:1313/posts/migrated/post-57/","summary":"\u003ch3 id=\"项目yml\"\u003e项目yml\u003c/h3\u003e\n\u003ch4 id=\"wordpressmariadb\"\u003eWordpress+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\"\u003e0\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\"\u003e9PlLt\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eqQuWvY\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: AAbbcc@112233    # 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: 9PlLt.qQuWvY    # 配置密码\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","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":"http://localhost:1313/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部署"}]