[{"data":1,"prerenderedAt":2096},["ShallowReactive",2],{"article-\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用-Docker-部署-Ollama-与-Open-WebUI-搭建本地大模型":3,"article-around-\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用-Docker-部署-Ollama-与-Open-WebUI-搭建本地大模型":1878},{"id":4,"title":5,"author":6,"body":7,"category":1862,"cover":1863,"date":1864,"description":1865,"draft":1866,"extension":1867,"image":1868,"license":1863,"meta":1869,"minutes":395,"navigation":391,"path":1870,"pinned":1866,"seo":1871,"stem":1872,"tags":1873,"__hash__":1877},"blog\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用 Docker 部署 Ollama 与 Open WebUI 搭建本地大模型.md","用 Docker 部署 Ollama 与 Open WebUI 搭建本地大模型","张萌萌",{"type":8,"value":9,"toc":1829},"minimark",[10,15,28,39,61,64,68,75,80,86,106,110,113,124,127,221,233,237,299,308,312,319,323,330,482,485,494,497,501,508,531,538,804,807,861,874,878,958,961,965,968,972,992,996,1205,1207,1230,1234,1240,1259,1263,1267,1344,1353,1357,1458,1461,1465,1468,1472,1485,1510,1521,1525,1531,1589,1593,1596,1645,1654,1658,1662,1672,1675,1699,1703,1709,1719,1738,1755,1759,1765,1769,1786,1795,1799,1822,1825],[11,12,14],"h2",{"id":13},"_1-序言","1 序言",[16,17,18,19,23,24,27],"p",{},"用别人的 API 有两个绕不开的问题：一是",[20,21,22],"strong",{},"数据要出内网","，你问的任何东西都会先经过人家服务器；二是",[20,25,26],{},"按量计费","，用得多了心慌。",[16,29,30,31,34,35,38],{},"而家里那台常年开机的 NAS，其实已经具备跑大模型的条件——只要它能跑 Docker。本文记录我在 Debian 12 \u002F 飞牛 OS 上用 Docker 部署 ",[20,32,33],{},"Ollama（推理服务）"," + ",[20,36,37],{},"Open WebUI（网页对话界面）"," 的完整过程，重点解决三个问题：",[40,41,42,49,55],"ul",{},[43,44,45,48],"li",{},[20,46,47],{},"我这台机器到底能跑多大的模型","（第二章先算硬件账，别装完才发现跑不动）；",[43,50,51,54],{},[20,52,53],{},"怎么用 docker-compose 一次装好","（第三、四章）；",[43,56,57,60],{},[20,58,59],{},"怎么让速度可接受","（第六章，默认参数下 GPU 利用率往往只有一半）。",[16,62,63],{},"全程只用到 Docker，不需要编译、不需要装 Python 环境。",[11,65,67],{"id":66},"_2-先算硬件账","2 先算硬件账",[16,69,70,71,74],{},"这一步别跳过。很多人部署失败不是命令写错，是",[20,72,73],{},"模型选大了","。",[76,77,79],"h3",{"id":78},"_21-三条硬指标","2.1 三条硬指标",[16,81,82,83,74],{},"跑大模型只看三样东西：",[20,84,85],{},"显存、内存、磁盘",[40,87,88,94,100],{},[43,89,90,93],{},[20,91,92],{},"显存","：决定模型能不能跑在 GPU 上。放不下就会自动降级到 CPU，速度掉一个数量级。",[43,95,96,99],{},[20,97,98],{},"内存","：CPU 推理时模型权重全部加载到内存；GPU 推理时也需要内存存放 KV Cache 的溢出部分。",[43,101,102,105],{},[20,103,104],{},"磁盘","：模型文件体积，通常是显存的 1.2 倍左右。",[76,107,109],{"id":108},"_22-显存怎么估","2.2 显存怎么估",[16,111,112],{},"一个够用的经验公式：",[114,115,120],"pre",{"className":116,"code":118,"language":119},[117],"language-text","显存需求 ≈ 参数量(亿) × 量化位数 ÷ 8 (GB) + KV Cache 余量\n","text",[121,122,118],"code",{"__ignoreMap":123},"",[16,125,126],{},"以 Q4 量化（4 bit）为例，各规格的参考值：",[128,129,130,149],"table",{},[131,132,133],"thead",{},[134,135,136,140,143,146],"tr",{},[137,138,139],"th",{},"模型参数",[137,141,142],{},"Q4 量化显存",[137,144,145],{},"模型文件大小",[137,147,148],{},"运行内存建议",[150,151,152,167,181,194,208],"tbody",{},[134,153,154,158,161,164],{},[155,156,157],"td",{},"1.5B",[155,159,160],{},"约 1.5 GB",[155,162,163],{},"约 1 GB",[155,165,166],{},"4 GB",[134,168,169,172,175,178],{},[155,170,171],{},"7B \u002F 8B",[155,173,174],{},"约 5 GB",[155,176,177],{},"约 4.7 GB",[155,179,180],{},"8 GB",[134,182,183,186,189,191],{},[155,184,185],{},"14B",[155,187,188],{},"约 9 GB",[155,190,188],{},[155,192,193],{},"16 GB",[134,195,196,199,202,205],{},[155,197,198],{},"32B",[155,200,201],{},"约 20 GB",[155,203,204],{},"约 19 GB",[155,206,207],{},"32 GB",[134,209,210,213,216,218],{},[155,211,212],{},"70B",[155,214,215],{},"约 40 GB",[155,217,215],{},[155,219,220],{},"64 GB",[222,223,224],"blockquote",{},[16,225,226,229,230,74],{},[20,227,228],{},"必须留余量","。上表是「刚好装下」的数，实际还要给 KV Cache（上下文越长占用越大）和系统留 1–3 GB。所以 ",[20,231,232],{},"8 GB 显存跑 7B\u002F8B 是舒服的，跑 14B 就会爆",[76,234,236],{"id":235},"_23-三种部署形态","2.3 三种部署形态",[128,238,239,255],{},[131,240,241],{},[134,242,243,246,249,252],{},[137,244,245],{},"部署形态",[137,247,248],{},"典型硬件",[137,250,251],{},"7B 模型速度预期",[137,253,254],{},"适合什么",[150,256,257,271,285],{},[134,258,259,262,265,268],{},[155,260,261],{},"纯 CPU",[155,263,264],{},"无独显，普通 x86",[155,266,267],{},"2–5 tokens\u002Fs",[155,269,270],{},"偶尔问答，能接受慢",[134,272,273,276,279,282],{},[155,274,275],{},"核显 \u002F 小主机",[155,277,278],{},"Intel N100、ARM 盒子",[155,280,281],{},"3–8 tokens\u002Fs",[155,283,284],{},"轻量问答、翻译",[134,286,287,290,293,296],{},[155,288,289],{},"独立显卡",[155,291,292],{},"RTX 3060 12G 及以上",[155,294,295],{},"30–80 tokens\u002Fs",[155,297,298],{},"日常主力，体验接近在线服务",[222,300,301],{},[16,302,303,304,307],{},"我自己的建议：",[20,305,306],{},"核显和纯 CPU 只适合「能用就行」的场景","。如果你打算天天用，一张 12G 显存的二手卡（如 3060 12G）性价比最高，7B、8B、14B 都能舒服跑。",[11,309,311],{"id":310},"_3-部署-ollama","3 部署 Ollama",[16,313,314,315,318],{},"Ollama 负责加载模型、对外提供 API，是整套方案的引擎，默认监听 ",[121,316,317],{},"11434"," 端口。",[76,320,322],{"id":321},"_31-前置nvidia-显卡需装容器工具包","3.1 前置：NVIDIA 显卡需装容器工具包",[16,324,325,326,329],{},"只有用 ",[20,327,328],{},"NVIDIA 独显"," 才需要这一步，核显和纯 CPU 跳过。",[114,331,335],{"className":332,"code":333,"language":334,"meta":123,"style":123},"language-bash shiki shiki-themes github-light github-dark","# 添加 NVIDIA 容器工具包源\ncurl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey \\\n  | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg\n\ncurl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list \\\n  | sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' \\\n  | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list\n\nsudo apt update\nsudo apt install -y nvidia-container-toolkit\nsudo systemctl restart docker\n","bash",[121,336,337,346,364,386,393,409,422,435,440,452,468],{"__ignoreMap":123},[338,339,342],"span",{"class":340,"line":341},"line",1,[338,343,345],{"class":344},"sJ8bj","# 添加 NVIDIA 容器工具包源\n",[338,347,349,353,357,361],{"class":340,"line":348},2,[338,350,352],{"class":351},"sScJk","curl",[338,354,356],{"class":355},"sj4cs"," -fsSL",[338,358,360],{"class":359},"sZZnC"," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[338,362,363],{"class":355}," \\\n",[338,365,367,371,374,377,380,383],{"class":340,"line":366},3,[338,368,370],{"class":369},"szBVR","  |",[338,372,373],{"class":351}," sudo",[338,375,376],{"class":359}," gpg",[338,378,379],{"class":355}," --dearmor",[338,381,382],{"class":355}," -o",[338,384,385],{"class":359}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg\n",[338,387,389],{"class":340,"line":388},4,[338,390,392],{"emptyLinePlaceholder":391},true,"\n",[338,394,396,398,401,404,407],{"class":340,"line":395},5,[338,397,352],{"class":351},[338,399,400],{"class":355}," -s",[338,402,403],{"class":355}," -L",[338,405,406],{"class":359}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[338,408,363],{"class":355},[338,410,412,414,417,420],{"class":340,"line":411},6,[338,413,370],{"class":369},[338,415,416],{"class":351}," sed",[338,418,419],{"class":359}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[338,421,363],{"class":355},[338,423,425,427,429,432],{"class":340,"line":424},7,[338,426,370],{"class":369},[338,428,373],{"class":351},[338,430,431],{"class":359}," tee",[338,433,434],{"class":359}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list\n",[338,436,438],{"class":340,"line":437},8,[338,439,392],{"emptyLinePlaceholder":391},[338,441,443,446,449],{"class":340,"line":442},9,[338,444,445],{"class":351},"sudo",[338,447,448],{"class":359}," apt",[338,450,451],{"class":359}," update\n",[338,453,455,457,459,462,465],{"class":340,"line":454},10,[338,456,445],{"class":351},[338,458,448],{"class":359},[338,460,461],{"class":359}," install",[338,463,464],{"class":355}," -y",[338,466,467],{"class":359}," nvidia-container-toolkit\n",[338,469,471,473,476,479],{"class":340,"line":470},11,[338,472,445],{"class":351},[338,474,475],{"class":359}," systemctl",[338,477,478],{"class":359}," restart",[338,480,481],{"class":359}," docker\n",[16,483,484],{},"装完先验证宿主机能识别显卡：",[114,486,488],{"className":332,"code":487,"language":334,"meta":123,"style":123},"nvidia-smi\n",[121,489,490],{"__ignoreMap":123},[338,491,492],{"class":340,"line":341},[338,493,487],{"class":351},[16,495,496],{},"只要能看到显卡型号和显存占用表，就说明驱动正常。",[76,498,500],{"id":499},"_32-docker-composeyaml","3.2 docker-compose.yaml",[16,502,503,504,507],{},"我沿用「yaml 文件与数据分开」的目录习惯，路径建在 ",[121,505,506],{},"\u002Fdocker\u002Fapps\u002Fdocker-compose\u002F"," 下：",[114,509,511],{"className":332,"code":510,"language":334,"meta":123,"style":123},"mkdir -p \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Follama\ncd \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Follama\n",[121,512,513,524],{"__ignoreMap":123},[338,514,515,518,521],{"class":340,"line":341},[338,516,517],{"class":351},"mkdir",[338,519,520],{"class":355}," -p",[338,522,523],{"class":359}," \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Follama\n",[338,525,526,529],{"class":340,"line":348},[338,527,528],{"class":355},"cd",[338,530,523],{"class":359},[16,532,533,534,537],{},"新建 ",[121,535,536],{},"docker-compose.yaml","：",[114,539,543],{"className":540,"code":541,"language":542,"meta":123,"style":123},"language-yaml shiki shiki-themes github-light github-dark","# 官方文档\n# https:\u002F\u002Fhub.docker.com\u002Fr\u002Follama\u002Follama\n# https:\u002F\u002Fgithub.com\u002Follama\u002Follama\n\n---\nname: ollama\n# 最后编辑时间：2026-09-23\nservices:\n  ollama:\n    # 镜像地址\n    image: ollama\u002Follama:latest\n    # 容器名\n    container_name: ollama\n    # 主机名\n    hostname: ollama\n    # 调用宿主机 GPU（无独显请整段删除）\n    gpus: all\n    volumes:\n      # 模型与配置持久化，重装容器不丢模型\n      - \u002Fdocker\u002Fapps\u002Follama:\u002Froot\u002F.ollama\n    environment:\n      # 时区\n      TZ: Asia\u002FShanghai\n      # 模型在显存中空闲驻留时长，-1 表示不卸载\n      OLLAMA_KEEP_ALIVE: \"30m\"\n      # 单模型最大并行请求数，显存小的机器保持 1\n      OLLAMA_NUM_PARALLEL: \"2\"\n      # 同时常驻显存的模型数量上限\n      OLLAMA_MAX_LOADED_MODELS: \"1\"\n    ports:\n      # API 端口，局域网内其他设备也靠它调用\n      - 11434:11434\n    # 重启策略，总是重启\n    restart: always\n","yaml",[121,544,545,550,555,560,564,569,582,587,595,602,607,617,623,633,639,649,655,666,674,680,689,697,703,714,720,731,737,748,754,765,773,779,787,793],{"__ignoreMap":123},[338,546,547],{"class":340,"line":341},[338,548,549],{"class":344},"# 官方文档\n",[338,551,552],{"class":340,"line":348},[338,553,554],{"class":344},"# https:\u002F\u002Fhub.docker.com\u002Fr\u002Follama\u002Follama\n",[338,556,557],{"class":340,"line":366},[338,558,559],{"class":344},"# https:\u002F\u002Fgithub.com\u002Follama\u002Follama\n",[338,561,562],{"class":340,"line":388},[338,563,392],{"emptyLinePlaceholder":391},[338,565,566],{"class":340,"line":395},[338,567,568],{"class":351},"---\n",[338,570,571,575,579],{"class":340,"line":411},[338,572,574],{"class":573},"s9eBZ","name",[338,576,578],{"class":577},"sVt8B",": ",[338,580,581],{"class":359},"ollama\n",[338,583,584],{"class":340,"line":424},[338,585,586],{"class":344},"# 最后编辑时间：2026-09-23\n",[338,588,589,592],{"class":340,"line":437},[338,590,591],{"class":573},"services",[338,593,594],{"class":577},":\n",[338,596,597,600],{"class":340,"line":442},[338,598,599],{"class":573},"  ollama",[338,601,594],{"class":577},[338,603,604],{"class":340,"line":454},[338,605,606],{"class":344},"    # 镜像地址\n",[338,608,609,612,614],{"class":340,"line":470},[338,610,611],{"class":573},"    image",[338,613,578],{"class":577},[338,615,616],{"class":359},"ollama\u002Follama:latest\n",[338,618,620],{"class":340,"line":619},12,[338,621,622],{"class":344},"    # 容器名\n",[338,624,626,629,631],{"class":340,"line":625},13,[338,627,628],{"class":573},"    container_name",[338,630,578],{"class":577},[338,632,581],{"class":359},[338,634,636],{"class":340,"line":635},14,[338,637,638],{"class":344},"    # 主机名\n",[338,640,642,645,647],{"class":340,"line":641},15,[338,643,644],{"class":573},"    hostname",[338,646,578],{"class":577},[338,648,581],{"class":359},[338,650,652],{"class":340,"line":651},16,[338,653,654],{"class":344},"    # 调用宿主机 GPU（无独显请整段删除）\n",[338,656,658,661,663],{"class":340,"line":657},17,[338,659,660],{"class":573},"    gpus",[338,662,578],{"class":577},[338,664,665],{"class":359},"all\n",[338,667,669,672],{"class":340,"line":668},18,[338,670,671],{"class":573},"    volumes",[338,673,594],{"class":577},[338,675,677],{"class":340,"line":676},19,[338,678,679],{"class":344},"      # 模型与配置持久化，重装容器不丢模型\n",[338,681,683,686],{"class":340,"line":682},20,[338,684,685],{"class":577},"      - ",[338,687,688],{"class":359},"\u002Fdocker\u002Fapps\u002Follama:\u002Froot\u002F.ollama\n",[338,690,692,695],{"class":340,"line":691},21,[338,693,694],{"class":573},"    environment",[338,696,594],{"class":577},[338,698,700],{"class":340,"line":699},22,[338,701,702],{"class":344},"      # 时区\n",[338,704,706,709,711],{"class":340,"line":705},23,[338,707,708],{"class":573},"      TZ",[338,710,578],{"class":577},[338,712,713],{"class":359},"Asia\u002FShanghai\n",[338,715,717],{"class":340,"line":716},24,[338,718,719],{"class":344},"      # 模型在显存中空闲驻留时长，-1 表示不卸载\n",[338,721,723,726,728],{"class":340,"line":722},25,[338,724,725],{"class":573},"      OLLAMA_KEEP_ALIVE",[338,727,578],{"class":577},[338,729,730],{"class":359},"\"30m\"\n",[338,732,734],{"class":340,"line":733},26,[338,735,736],{"class":344},"      # 单模型最大并行请求数，显存小的机器保持 1\n",[338,738,740,743,745],{"class":340,"line":739},27,[338,741,742],{"class":573},"      OLLAMA_NUM_PARALLEL",[338,744,578],{"class":577},[338,746,747],{"class":359},"\"2\"\n",[338,749,751],{"class":340,"line":750},28,[338,752,753],{"class":344},"      # 同时常驻显存的模型数量上限\n",[338,755,757,760,762],{"class":340,"line":756},29,[338,758,759],{"class":573},"      OLLAMA_MAX_LOADED_MODELS",[338,761,578],{"class":577},[338,763,764],{"class":359},"\"1\"\n",[338,766,768,771],{"class":340,"line":767},30,[338,769,770],{"class":573},"    ports",[338,772,594],{"class":577},[338,774,776],{"class":340,"line":775},31,[338,777,778],{"class":344},"      # API 端口，局域网内其他设备也靠它调用\n",[338,780,782,784],{"class":340,"line":781},32,[338,783,685],{"class":577},[338,785,786],{"class":359},"11434:11434\n",[338,788,790],{"class":340,"line":789},33,[338,791,792],{"class":344},"    # 重启策略，总是重启\n",[338,794,796,799,801],{"class":340,"line":795},34,[338,797,798],{"class":573},"    restart",[338,800,578],{"class":577},[338,802,803],{"class":359},"always\n",[16,805,806],{},"启动：",[114,808,810],{"className":332,"code":809,"language":334,"meta":123,"style":123},"# 拉取镜像并后台启动\ndocker compose pull && docker compose up -d\n# 查看日志，确认没有报错\ndocker compose logs -f ollama\n",[121,811,812,817,841,846],{"__ignoreMap":123},[338,813,814],{"class":340,"line":341},[338,815,816],{"class":344},"# 拉取镜像并后台启动\n",[338,818,819,822,825,828,831,833,835,838],{"class":340,"line":348},[338,820,821],{"class":351},"docker",[338,823,824],{"class":359}," compose",[338,826,827],{"class":359}," pull",[338,829,830],{"class":577}," && ",[338,832,821],{"class":351},[338,834,824],{"class":359},[338,836,837],{"class":359}," up",[338,839,840],{"class":355}," -d\n",[338,842,843],{"class":340,"line":366},[338,844,845],{"class":344},"# 查看日志，确认没有报错\n",[338,847,848,850,852,855,858],{"class":340,"line":388},[338,849,821],{"class":351},[338,851,824],{"class":359},[338,853,854],{"class":359}," logs",[338,856,857],{"class":355}," -f",[338,859,860],{"class":359}," ollama\n",[222,862,863],{},[16,864,865,866,873],{},"⚠️ ",[20,867,868,869,872],{},"没有独显的机器务必删掉 ",[121,870,871],{},"gpus: all"," 这一行","，否则容器会启动失败并提示找不到 GPU。",[76,875,877],{"id":876},"_33-验证","3.3 验证",[114,879,881],{"className":332,"code":880,"language":334,"meta":123,"style":123},"# 看容器状态，STATUS 应为 Up\ndocker ps | grep ollama\n\n# 拉一个小模型测试（首次会下载约 1GB）\ndocker exec -it ollama ollama pull qwen2.5:1.5b\n\n# 命令行直接对话，输入 \u002Fbye 退出\ndocker exec -it ollama ollama run qwen2.5:1.5b\n",[121,882,883,888,903,907,912,932,936,941],{"__ignoreMap":123},[338,884,885],{"class":340,"line":341},[338,886,887],{"class":344},"# 看容器状态，STATUS 应为 Up\n",[338,889,890,892,895,898,901],{"class":340,"line":348},[338,891,821],{"class":351},[338,893,894],{"class":359}," ps",[338,896,897],{"class":369}," |",[338,899,900],{"class":351}," grep",[338,902,860],{"class":359},[338,904,905],{"class":340,"line":366},[338,906,392],{"emptyLinePlaceholder":391},[338,908,909],{"class":340,"line":388},[338,910,911],{"class":344},"# 拉一个小模型测试（首次会下载约 1GB）\n",[338,913,914,916,919,922,925,927,929],{"class":340,"line":395},[338,915,821],{"class":351},[338,917,918],{"class":359}," exec",[338,920,921],{"class":355}," -it",[338,923,924],{"class":359}," ollama",[338,926,924],{"class":359},[338,928,827],{"class":359},[338,930,931],{"class":359}," qwen2.5:1.5b\n",[338,933,934],{"class":340,"line":411},[338,935,392],{"emptyLinePlaceholder":391},[338,937,938],{"class":340,"line":424},[338,939,940],{"class":344},"# 命令行直接对话，输入 \u002Fbye 退出\n",[338,942,943,945,947,949,951,953,956],{"class":340,"line":437},[338,944,821],{"class":351},[338,946,918],{"class":359},[338,948,921],{"class":355},[338,950,924],{"class":359},[338,952,924],{"class":359},[338,954,955],{"class":359}," run",[338,957,931],{"class":359},[16,959,960],{},"到这里 Ollama 已经能用了，只是个命令行。下面给它配个网页界面。",[11,962,964],{"id":963},"_4-部署-open-webui","4 部署 Open WebUI",[16,966,967],{},"Open WebUI 是一个自托管的对话前端，界面接近 ChatGPT，支持多模型切换、对话历史、文件上传，并且默认就能对接 Ollama。",[76,969,971],{"id":970},"_41-docker-composeyaml","4.1 docker-compose.yaml",[114,973,975],{"className":332,"code":974,"language":334,"meta":123,"style":123},"mkdir -p \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Fopen-webui\ncd \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Fopen-webui\n",[121,976,977,986],{"__ignoreMap":123},[338,978,979,981,983],{"class":340,"line":341},[338,980,517],{"class":351},[338,982,520],{"class":355},[338,984,985],{"class":359}," \u002Fdocker\u002Fapps\u002Fdocker-compose\u002Fopen-webui\n",[338,987,988,990],{"class":340,"line":348},[338,989,528],{"class":355},[338,991,985],{"class":359},[16,993,533,994,537],{},[121,995,536],{},[114,997,999],{"className":540,"code":998,"language":542,"meta":123,"style":123},"# 官方文档\n# https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui\n# https:\u002F\u002Fdocs.openwebui.com\n\n---\nname: open-webui\n# 最后编辑时间：2026-09-23\nservices:\n  open-webui:\n    # 镜像地址，CPU 机器可选 :main，追求体积可换 :main-slim\n    image: ghcr.io\u002Fopen-webui\u002Fopen-webui:main\n    # 容器名\n    container_name: open-webui\n    # 主机名\n    hostname: open-webui\n    # 🔴 关键：使用 host 网络，容器与宿主机共享网络栈\n    # 好处是能直接通过 127.0.0.1 访问 Ollama，无需额外建网络\n    # 注意：host 模式下 ports 段会被忽略，WebUI 默认监听 8080，直接访问宿主 IP 即可\n    network_mode: host\n    environment:\n      # 时区\n      TZ: Asia\u002FShanghai\n      # 🔴 关键：告诉 Open WebUI 去哪找 Ollama\n      # host 网络下走本机地址；若两者在自定义 bridge 网络里，则填 http:\u002F\u002Follama:11434\n      OLLAMA_BASE_URL: http:\u002F\u002F127.0.0.1:11434\n      # 关闭首次启动的联网检查，内网环境更快\n      OFFLINE_MODE: \"true\"\n      # 首次访问自动创建的账号（不设则第一个注册的人成为管理员）\n      # WEBUI_AUTH: \"false\"\n    volumes:\n      # 数据持久化（用户、对话、配置）\n      - \u002Fdocker\u002Fapps\u002Fopen-webui:\u002Fapp\u002Fbackend\u002Fdata\n    # 重启策略，总是重启\n    restart: always\n",[121,1000,1001,1005,1010,1015,1019,1023,1032,1036,1042,1049,1054,1063,1067,1075,1079,1087,1092,1097,1102,1112,1118,1122,1130,1135,1140,1150,1155,1165,1170,1175,1181,1186,1193,1197],{"__ignoreMap":123},[338,1002,1003],{"class":340,"line":341},[338,1004,549],{"class":344},[338,1006,1007],{"class":340,"line":348},[338,1008,1009],{"class":344},"# https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui\n",[338,1011,1012],{"class":340,"line":366},[338,1013,1014],{"class":344},"# https:\u002F\u002Fdocs.openwebui.com\n",[338,1016,1017],{"class":340,"line":388},[338,1018,392],{"emptyLinePlaceholder":391},[338,1020,1021],{"class":340,"line":395},[338,1022,568],{"class":351},[338,1024,1025,1027,1029],{"class":340,"line":411},[338,1026,574],{"class":573},[338,1028,578],{"class":577},[338,1030,1031],{"class":359},"open-webui\n",[338,1033,1034],{"class":340,"line":424},[338,1035,586],{"class":344},[338,1037,1038,1040],{"class":340,"line":437},[338,1039,591],{"class":573},[338,1041,594],{"class":577},[338,1043,1044,1047],{"class":340,"line":442},[338,1045,1046],{"class":573},"  open-webui",[338,1048,594],{"class":577},[338,1050,1051],{"class":340,"line":454},[338,1052,1053],{"class":344},"    # 镜像地址，CPU 机器可选 :main，追求体积可换 :main-slim\n",[338,1055,1056,1058,1060],{"class":340,"line":470},[338,1057,611],{"class":573},[338,1059,578],{"class":577},[338,1061,1062],{"class":359},"ghcr.io\u002Fopen-webui\u002Fopen-webui:main\n",[338,1064,1065],{"class":340,"line":619},[338,1066,622],{"class":344},[338,1068,1069,1071,1073],{"class":340,"line":625},[338,1070,628],{"class":573},[338,1072,578],{"class":577},[338,1074,1031],{"class":359},[338,1076,1077],{"class":340,"line":635},[338,1078,638],{"class":344},[338,1080,1081,1083,1085],{"class":340,"line":641},[338,1082,644],{"class":573},[338,1084,578],{"class":577},[338,1086,1031],{"class":359},[338,1088,1089],{"class":340,"line":651},[338,1090,1091],{"class":344},"    # 🔴 关键：使用 host 网络，容器与宿主机共享网络栈\n",[338,1093,1094],{"class":340,"line":657},[338,1095,1096],{"class":344},"    # 好处是能直接通过 127.0.0.1 访问 Ollama，无需额外建网络\n",[338,1098,1099],{"class":340,"line":668},[338,1100,1101],{"class":344},"    # 注意：host 模式下 ports 段会被忽略，WebUI 默认监听 8080，直接访问宿主 IP 即可\n",[338,1103,1104,1107,1109],{"class":340,"line":676},[338,1105,1106],{"class":573},"    network_mode",[338,1108,578],{"class":577},[338,1110,1111],{"class":359},"host\n",[338,1113,1114,1116],{"class":340,"line":682},[338,1115,694],{"class":573},[338,1117,594],{"class":577},[338,1119,1120],{"class":340,"line":691},[338,1121,702],{"class":344},[338,1123,1124,1126,1128],{"class":340,"line":699},[338,1125,708],{"class":573},[338,1127,578],{"class":577},[338,1129,713],{"class":359},[338,1131,1132],{"class":340,"line":705},[338,1133,1134],{"class":344},"      # 🔴 关键：告诉 Open WebUI 去哪找 Ollama\n",[338,1136,1137],{"class":340,"line":716},[338,1138,1139],{"class":344},"      # host 网络下走本机地址；若两者在自定义 bridge 网络里，则填 http:\u002F\u002Follama:11434\n",[338,1141,1142,1145,1147],{"class":340,"line":722},[338,1143,1144],{"class":573},"      OLLAMA_BASE_URL",[338,1146,578],{"class":577},[338,1148,1149],{"class":359},"http:\u002F\u002F127.0.0.1:11434\n",[338,1151,1152],{"class":340,"line":733},[338,1153,1154],{"class":344},"      # 关闭首次启动的联网检查，内网环境更快\n",[338,1156,1157,1160,1162],{"class":340,"line":739},[338,1158,1159],{"class":573},"      OFFLINE_MODE",[338,1161,578],{"class":577},[338,1163,1164],{"class":359},"\"true\"\n",[338,1166,1167],{"class":340,"line":750},[338,1168,1169],{"class":344},"      # 首次访问自动创建的账号（不设则第一个注册的人成为管理员）\n",[338,1171,1172],{"class":340,"line":756},[338,1173,1174],{"class":344},"      # WEBUI_AUTH: \"false\"\n",[338,1176,1177,1179],{"class":340,"line":767},[338,1178,671],{"class":573},[338,1180,594],{"class":577},[338,1182,1183],{"class":340,"line":775},[338,1184,1185],{"class":344},"      # 数据持久化（用户、对话、配置）\n",[338,1187,1188,1190],{"class":340,"line":781},[338,1189,685],{"class":577},[338,1191,1192],{"class":359},"\u002Fdocker\u002Fapps\u002Fopen-webui:\u002Fapp\u002Fbackend\u002Fdata\n",[338,1194,1195],{"class":340,"line":789},[338,1196,792],{"class":344},[338,1198,1199,1201,1203],{"class":340,"line":795},[338,1200,798],{"class":573},[338,1202,578],{"class":577},[338,1204,803],{"class":359},[16,1206,806],{},[114,1208,1210],{"className":332,"code":1209,"language":334,"meta":123,"style":123},"docker compose pull && docker compose up -d\n",[121,1211,1212],{"__ignoreMap":123},[338,1213,1214,1216,1218,1220,1222,1224,1226,1228],{"class":340,"line":341},[338,1215,821],{"class":351},[338,1217,824],{"class":359},[338,1219,827],{"class":359},[338,1221,830],{"class":577},[338,1223,821],{"class":351},[338,1225,824],{"class":359},[338,1227,837],{"class":359},[338,1229,840],{"class":355},[76,1231,1233],{"id":1232},"_42-首次登录","4.2 首次登录",[16,1235,1236,1237,74],{},"浏览器打开 ",[121,1238,1239],{},"http:\u002F\u002F你的内网IP:8080",[40,1241,1242,1249,1256],{},[43,1243,1244,1245,1248],{},"第一个注册的账号",[20,1246,1247],{},"自动成为管理员","，注册后建议在「设置 → 管理员设置」里关掉公开注册。",[43,1250,1251,1252,1255],{},"进入后左上角能看到模型列表。",[20,1253,1254],{},"如果列表是空的","，说明没连上 Ollama，回到 7.1 排查。",[43,1257,1258],{},"中文界面：右上角头像 → Settings → General → Language，选「简体中文」。",[11,1260,1262],{"id":1261},"_5-模型选择与拉取","5 模型选择与拉取",[76,1264,1266],{"id":1265},"_51-中文场景的实用组合","5.1 中文场景的实用组合",[128,1268,1269,1285],{},[131,1270,1271],{},[134,1272,1273,1276,1279,1282],{},[137,1274,1275],{},"用途",[137,1277,1278],{},"推荐模型",[137,1280,1281],{},"拉取大小",[137,1283,1284],{},"建议显存",[150,1286,1287,1301,1315,1329],{},[134,1288,1289,1292,1297,1299],{},[155,1290,1291],{},"日常问答、写作",[155,1293,1294],{},[121,1295,1296],{},"qwen2.5:7b",[155,1298,177],{},[155,1300,180],{},[134,1302,1303,1306,1311,1313],{},[155,1304,1305],{},"强推理、数学",[155,1307,1308],{},[121,1309,1310],{},"deepseek-r1:8b",[155,1312,174],{},[155,1314,180],{},[134,1316,1317,1319,1324,1327],{},[155,1318,284],{},[155,1320,1321],{},[121,1322,1323],{},"qwen2.5:3b",[155,1325,1326],{},"约 2 GB",[155,1328,166],{},[134,1330,1331,1334,1339,1342],{},[155,1332,1333],{},"文字向量（RAG 用）",[155,1335,1336],{},[121,1337,1338],{},"bge-m3",[155,1340,1341],{},"约 1.2 GB",[155,1343,166],{},[222,1345,1346],{},[16,1347,1348,1349,1352],{},"中文场景优先选 ",[20,1350,1351],{},"Qwen 系","。同一参数量下，Qwen 的中文表达和指令遵循明显优于 Llama，这是实测结论不是偏好。",[76,1354,1356],{"id":1355},"_52-常用命令","5.2 常用命令",[114,1358,1360],{"className":332,"code":1359,"language":334,"meta":123,"style":123},"# 拉取模型\ndocker exec -it ollama ollama pull qwen2.5:7b\n\n# 列出本地已有模型\ndocker exec -it ollama ollama list\n\n# 删除模型（释放磁盘）\ndocker exec -it ollama ollama rm qwen2.5:1.5b\n\n# 查看某个模型占了多少显存\ndocker exec -it ollama ollama ps\n",[121,1361,1362,1367,1384,1388,1393,1408,1412,1417,1434,1438,1443],{"__ignoreMap":123},[338,1363,1364],{"class":340,"line":341},[338,1365,1366],{"class":344},"# 拉取模型\n",[338,1368,1369,1371,1373,1375,1377,1379,1381],{"class":340,"line":348},[338,1370,821],{"class":351},[338,1372,918],{"class":359},[338,1374,921],{"class":355},[338,1376,924],{"class":359},[338,1378,924],{"class":359},[338,1380,827],{"class":359},[338,1382,1383],{"class":359}," qwen2.5:7b\n",[338,1385,1386],{"class":340,"line":366},[338,1387,392],{"emptyLinePlaceholder":391},[338,1389,1390],{"class":340,"line":388},[338,1391,1392],{"class":344},"# 列出本地已有模型\n",[338,1394,1395,1397,1399,1401,1403,1405],{"class":340,"line":395},[338,1396,821],{"class":351},[338,1398,918],{"class":359},[338,1400,921],{"class":355},[338,1402,924],{"class":359},[338,1404,924],{"class":359},[338,1406,1407],{"class":359}," list\n",[338,1409,1410],{"class":340,"line":411},[338,1411,392],{"emptyLinePlaceholder":391},[338,1413,1414],{"class":340,"line":424},[338,1415,1416],{"class":344},"# 删除模型（释放磁盘）\n",[338,1418,1419,1421,1423,1425,1427,1429,1432],{"class":340,"line":437},[338,1420,821],{"class":351},[338,1422,918],{"class":359},[338,1424,921],{"class":355},[338,1426,924],{"class":359},[338,1428,924],{"class":359},[338,1430,1431],{"class":359}," rm",[338,1433,931],{"class":359},[338,1435,1436],{"class":340,"line":442},[338,1437,392],{"emptyLinePlaceholder":391},[338,1439,1440],{"class":340,"line":454},[338,1441,1442],{"class":344},"# 查看某个模型占了多少显存\n",[338,1444,1445,1447,1449,1451,1453,1455],{"class":340,"line":470},[338,1446,821],{"class":351},[338,1448,918],{"class":359},[338,1450,921],{"class":355},[338,1452,924],{"class":359},[338,1454,924],{"class":359},[338,1456,1457],{"class":359}," ps\n",[16,1459,1460],{},"拉取完成后回到 Open WebUI 刷新页面，模型就会出现在左上角下拉框里。",[11,1462,1464],{"id":1463},"_6-性能调优","6 性能调优",[16,1466,1467],{},"默认参数下 GPU 利用率往往只有一半，调整下面三项能明显提速。",[76,1469,1471],{"id":1470},"_61-让模型常驻显存","6.1 让模型常驻显存",[16,1473,1474,1477,1478,1481,1482,537],{},[121,1475,1476],{},"OLLAMA_KEEP_ALIVE"," 控制模型空闲多久后从显存卸载。默认 5 分钟，意味着你每聊几句就要重新加载一次（7B 模型加载约 5–10 秒）。改成 ",[121,1479,1480],{},"30m"," 或 ",[121,1483,1484],{},"-1",[114,1486,1488],{"className":540,"code":1487,"language":542,"meta":123,"style":123},"environment:\n  OLLAMA_KEEP_ALIVE: \"-1\"   # 永不卸载，显存充足时最快\n",[121,1489,1490,1497],{"__ignoreMap":123},[338,1491,1492,1495],{"class":340,"line":341},[338,1493,1494],{"class":573},"environment",[338,1496,594],{"class":577},[338,1498,1499,1502,1504,1507],{"class":340,"line":348},[338,1500,1501],{"class":573},"  OLLAMA_KEEP_ALIVE",[338,1503,578],{"class":577},[338,1505,1506],{"class":359},"\"-1\"",[338,1508,1509],{"class":344},"   # 永不卸载，显存充足时最快\n",[222,1511,1512],{},[16,1513,1514,1517,1518,1520],{},[20,1515,1516],{},"代价","：模型会一直占着显存。如果机器还要跑别的吃显存的活（比如相册缩图、转码），建议设 ",[121,1519,1480],{}," 折中。",[76,1522,1524],{"id":1523},"_62-上下文长度","6.2 上下文长度",[16,1526,1527,1528,537],{},"上下文越长，KV Cache 占用越大。Open WebUI 里可以在「设置 → 高级参数」调 ",[121,1529,1530],{},"num_ctx",[128,1532,1533,1545],{},[131,1534,1535],{},[134,1536,1537,1539,1542],{},[137,1538,1530],{},[137,1540,1541],{},"7B 模型额外显存",[137,1543,1544],{},"适合",[150,1546,1547,1558,1568,1578],{},[134,1548,1549,1552,1555],{},[155,1550,1551],{},"2048",[155,1553,1554],{},"约 0.5 GB",[155,1556,1557],{},"短问答，最省",[134,1559,1560,1563,1565],{},[155,1561,1562],{},"4096",[155,1564,163],{},[155,1566,1567],{},"默认，日常够用",[134,1569,1570,1573,1575],{},[155,1571,1572],{},"8192",[155,1574,1326],{},[155,1576,1577],{},"长文档、代码",[134,1579,1580,1583,1586],{},[155,1581,1582],{},"32768",[155,1584,1585],{},"约 8 GB",[155,1587,1588],{},"长文总结，8G 显存跑不动",[76,1590,1592],{"id":1591},"_63-实测参考","6.3 实测参考",[16,1594,1595],{},"在我的环境（RTX 3060 12G，7B Q4）实测：",[128,1597,1598,1611],{},[131,1599,1600],{},[134,1601,1602,1605,1608],{},[137,1603,1604],{},"配置",[137,1606,1607],{},"首字延迟",[137,1609,1610],{},"生成速度",[150,1612,1613,1624,1635],{},[134,1614,1615,1618,1621],{},[155,1616,1617],{},"默认（keep_alive 5m，num_ctx 2048）",[155,1619,1620],{},"8–10 s（含加载）",[155,1622,1623],{},"约 45 tokens\u002Fs",[134,1625,1626,1629,1632],{},[155,1627,1628],{},"keep_alive -1，num_ctx 2048",[155,1630,1631],{},"\u003C 1 s",[155,1633,1634],{},"约 48 tokens\u002Fs",[134,1636,1637,1640,1642],{},[155,1638,1639],{},"keep_alive -1，num_ctx 8192",[155,1641,1631],{},[155,1643,1644],{},"约 38 tokens\u002Fs",[222,1646,1647],{},[16,1648,1649,1650,1653],{},"结论：",[20,1651,1652],{},"首字延迟的差距几乎全部来自模型加载","。常驻显存是收益最大的一项调整。",[11,1655,1657],{"id":1656},"_7-常见问题","7 常见问题",[76,1659,1661],{"id":1660},"_71-容器里看不到-gpu","7.1 容器里看不到 GPU",[16,1663,1664,1665,1481,1668,1671],{},"现象：日志出现 ",[121,1666,1667],{},"no CUDA-capable device",[121,1669,1670],{},"nvidia-smi"," 报错。",[16,1673,1674],{},"排查顺序：",[40,1676,1677,1683,1690,1696],{},[43,1678,1679,1680,1682],{},"宿主机 ",[121,1681,1670],{}," 是否正常（不正常是驱动问题，与 Docker 无关）；",[43,1684,1685,1686,1689],{},"是否装了 ",[121,1687,1688],{},"nvidia-container-toolkit"," 并重启过 Docker；",[43,1691,1692,1693,1695],{},"compose 里是否写了 ",[121,1694,871],{},"；",[43,1697,1698],{},"飞牛 OS 等定制系统可能需要在应用中心额外启用 GPU 支持。",[76,1700,1702],{"id":1701},"_72-爆显存-速度突然掉到个位数","7.2 爆显存 \u002F 速度突然掉到个位数",[16,1704,1664,1705,1708],{},[121,1706,1707],{},"CUDA out of memory"," 或速度骤降。",[16,1710,1711,1712,1715,1716,537],{},"原因通常是模型没完全放进显存，Ollama 自动把部分层分给了 CPU。用 ",[121,1713,1714],{},"ollama ps"," 查看，正常应显示 ",[121,1717,1718],{},"100% GPU",[114,1720,1722],{"className":332,"code":1721,"language":334,"meta":123,"style":123},"docker exec -it ollama ollama ps\n",[121,1723,1724],{"__ignoreMap":123},[338,1725,1726,1728,1730,1732,1734,1736],{"class":340,"line":341},[338,1727,821],{"class":351},[338,1729,918],{"class":359},[338,1731,921],{"class":355},[338,1733,924],{"class":359},[338,1735,924],{"class":359},[338,1737,1457],{"class":359},[16,1739,1740,1741,1744,1745,1748,1749,1751,1752,74],{},"如果显示 ",[121,1742,1743],{},"xx%\u002Fxx% CPU\u002FGPU","，说明显存不够：换更小的量化版本（如 ",[121,1746,1747],{},"qwen2.5:7b-instruct-q4_K_M","）、降低 ",[121,1750,1530],{},"，或者减少 ",[121,1753,1754],{},"OLLAMA_MAX_LOADED_MODELS",[76,1756,1758],{"id":1757},"_73-输出被截断-答到一半停了","7.3 输出被截断 \u002F 答到一半停了",[16,1760,1761,1762,1764],{},"一般是上下文窗口被占满。调大 ",[121,1763,1530],{},"，或者开一个新对话（历史越长占用越多）。Open WebUI 可以在「设置 → 通用 → 请求」里限制携带的历史消息条数。",[76,1766,1768],{"id":1767},"_74-局域网其他设备访问不了","7.4 局域网其他设备访问不了",[16,1770,1771,1773,1774,1777,1778,1781,1782,1785],{},[121,1772,317],{},"（Ollama）和 ",[121,1775,1776],{},"8080","（Open WebUI）都要在宿主机放行。在 Open WebUI 的「管理员设置 → 连接」里把 Ollama 地址改成",[20,1779,1780],{},"宿主机内网 IP","（如 ",[121,1783,1784],{},"http:\u002F\u002F192.168.x.x:11434","），这样手机、平板都能用同一个入口。",[222,1787,1788],{},[16,1789,1790,1791,1794],{},"想让它在",[20,1792,1793],{},"外网","也能访问？不要直接把端口转发出去。用 Lucky 反代加一层认证，具体做法见同目录的另一篇《用 New API 搭建统一 LLM 网关与 Lucky 反代外网访问》。",[11,1796,1798],{"id":1797},"_8-总结","8 总结",[40,1800,1801,1807,1810,1816],{},[43,1802,1803,1806],{},[20,1804,1805],{},"先算显存再选模型","，8 GB 显存是「舒服跑 7B\u002F8B」的门槛，别无脑上 14B。",[43,1808,1809],{},"Ollama 管推理、Open WebUI 管界面，两个容器各司其职，加起来不到 10 行 compose。",[43,1811,1812,1813,1815],{},"收益最大的调优是 ",[121,1814,1476],{},"，它直接决定你每次提问要不要等 10 秒。",[43,1817,1818,1821],{},[20,1819,1820],{},"本地部署的价值在隐私和离线","，不在省钱。追求能力上限还是得用在线模型，两者不冲突——用网关把它们统一起来即可。",[16,1823,1824],{},"Created with ❤️ by 张萌萌",[1826,1827,1828],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":123,"searchDepth":348,"depth":348,"links":1830},[1831,1832,1837,1842,1846,1850,1855,1861],{"id":13,"depth":348,"text":14},{"id":66,"depth":348,"text":67,"children":1833},[1834,1835,1836],{"id":78,"depth":366,"text":79},{"id":108,"depth":366,"text":109},{"id":235,"depth":366,"text":236},{"id":310,"depth":348,"text":311,"children":1838},[1839,1840,1841],{"id":321,"depth":366,"text":322},{"id":499,"depth":366,"text":500},{"id":876,"depth":366,"text":877},{"id":963,"depth":348,"text":964,"children":1843},[1844,1845],{"id":970,"depth":366,"text":971},{"id":1232,"depth":366,"text":1233},{"id":1261,"depth":348,"text":1262,"children":1847},[1848,1849],{"id":1265,"depth":366,"text":1266},{"id":1355,"depth":366,"text":1356},{"id":1463,"depth":348,"text":1464,"children":1851},[1852,1853,1854],{"id":1470,"depth":366,"text":1471},{"id":1523,"depth":366,"text":1524},{"id":1591,"depth":366,"text":1592},{"id":1656,"depth":348,"text":1657,"children":1856},[1857,1858,1859,1860],{"id":1660,"depth":366,"text":1661},{"id":1701,"depth":366,"text":1702},{"id":1757,"depth":366,"text":1758},{"id":1767,"depth":366,"text":1768},{"id":1797,"depth":348,"text":1798},"AI",null,"2026-09-23","在 NAS 或 Linux 服务器上用 Docker 跑起本地大模型，含显存测算、模型选型、部署步骤与性能调优",false,"md","https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F09\u002F25\u002F1790268899831.avif",{"published":1864},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用-Docker-部署-Ollama-与-Open-WebUI-搭建本地大模型",{"title":5,"description":1865},"blog\u002F10-技术专栏\u002F50-AI\u002F01.用 Docker 部署 Ollama 与 Open WebUI 搭建本地大模型",[1874,1875,1876],"Ollama","Open WebUI","本地大模型","9aZtdJCMdSkVA0GWMuYOTnpUXIuy8nd1MhuwS6UZfp4",[1879,1883,1887,1888,1891,1894,1898,1901,1905,1909,1913,1917,1921,1925,1929,1933,1937,1941,1945,1948,1952,1956,1960,1964,1967,1971,1975,1979,1983,1987,1991,1995,1999,2003,2007,2011,2015,2018,2022,2026,2030,2034,2038,2041,2044,2047,2050,2053,2056,2059,2062,2065,2068,2071,2074,2077,2080,2083,2086,2089,2092],{"path":1880,"title":1881,"date":1882},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F16.IPv6与DNS的分手协议","IPv6 与 DNS 的分手协议","2026-10-02",{"path":1884,"title":1885,"date":1886},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F04.我的-AI-入坑记","我的 AI 入坑记","2026-09-24",{"path":1870,"title":5,"date":1864},{"path":1889,"title":1890,"date":1864},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F02.用-New-API-搭建统一-LLM-网关与-Lucky-反代外网访问","用 New API 搭建统一 LLM 网关与 Lucky 反代外网访问",{"path":1892,"title":1893,"date":1864},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F03.用-Dify-搭建本地知识库让-AI-读懂你写的博客","用 Dify 搭建本地知识库，让 AI 读懂你写的博客",{"path":1895,"title":1896,"date":1897},"\u002Fblog\u002F20-生活碎片\u002F03-2026年秋季计划","2026 年秋季计划","2026-09-19",{"path":1899,"title":1900,"date":1897},"\u002Fblog\u002F30-学习笔记\u002F02.Python入门书单","Python 入门书单：从第一行代码到写出真正的程序",{"path":1902,"title":1903,"date":1904},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F09-Cloudflare-低延迟接入方案","Cloudflare 低延迟接入方案","2026-07-22 03:17:28",{"path":1906,"title":1907,"date":1908},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare-ImgBed-免费私有图床完整部署手册","Cloudflare ImgBed 免费私有图床完整部署手册","2026-07-19 02:09:08",{"path":1910,"title":1911,"date":1912},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F07-腾讯云-EdgeOne-边缘函数实现七牛-S3-随机图床-API","腾讯云 EdgeOne 边缘函数实现七牛云 & S3 存储随机图床 API","2026-07-13 21:25:48",{"path":1914,"title":1915,"date":1916},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F06-腾讯-EdgeOne-部署-Twikoo-评论系统指南","腾讯EdgeOne部署Twikoo评论系统指南","2026-06-14 17:41:11",{"path":1918,"title":1919,"date":1920},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F05-OpenList-接入-S3-对象存储完整使用教程","OpenList 接入 S3 对象存储完整使用教程","2026-06-11 13:08:07",{"path":1922,"title":1923,"date":1924},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F04-Cloudflare-R2-图床与全球加速方案","Cloudflare R2 图床与全球加速方案","2026-06-09 13:07:35",{"path":1926,"title":1927,"date":1928},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F03-免费图床与CDN加速方案","免费图床与 CDN 加速方案","2026-06-09",{"path":1930,"title":1931,"date":1932},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F02-零基础优雅搭建静态博客全教程","零基础优雅搭建静态博客全教程","2026-06-04",{"path":1934,"title":1935,"date":1936},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F01-远古产物—博客","赛博空间的私人岛屿：博客架构与风格美学","2026-06-03",{"path":1938,"title":1939,"date":1940},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F15.关于NAT回流与内网域名直连的终极指南","关于 NAT 回流与内网域名直连的终极指南","2026-05-13",{"path":1942,"title":1943,"date":1944},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F14.飞牛安全访问与Lucky反代雷池防护","飞牛安全访问与 Lucky 反代雷池防护","2026-02-03",{"path":1946,"title":1947,"date":1944},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F18.一键DD纯净系统脚本","一键 DD 纯净系统脚本",{"path":1949,"title":1950,"date":1951},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F17.Ventoy多系统启动盘制作与使用全指南","Ventoy 多系统启动盘制作与使用全指南","2026-02-02",{"path":1953,"title":1954,"date":1955},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F16.Emby元数据匹配与中文命名规范","Emby 元数据匹配与中文命名规范","2026-02-01",{"path":1957,"title":1958,"date":1959},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F15.基于PVE系统安装LXC-debian","基于 PVE 系统安装 LXC-debian","2026-01-19",{"path":1961,"title":1962,"date":1963},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F13.Lucky反向代理终极指南","Lucky 反向代理终极指南","2026-01-16",{"path":1965,"title":1966,"date":1963},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F14.OEC盒子Armbian刷机指南","OEC 盒子 Armbian 刷机指南",{"path":1968,"title":1969,"date":1970},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F13.oec-fnOS安装","OEC-Turbo (RK3566) 安装飞牛 OS","2026-01-15",{"path":1972,"title":1973,"date":1974},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F12.新的篇章，debian12的配置","新的篇章，debian12 的配置","2026-01-14",{"path":1976,"title":1977,"date":1978},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F11.飞牛OS安装后必要配置","飞牛 OS 安装后必要配置","2026-01-06",{"path":1980,"title":1981,"date":1982},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F11.NAS-导航页的终极形态","告别繁琐配置：NAS 导航页的终极形态 —— 从 Sun-Panel 到 FlatNAS","2026-01-05",{"path":1984,"title":1985,"date":1986},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F10.LogVar-弹幕-API-部署指南","LogVar 弹幕 API  (纯本地缓存版) 部署指南","2025-12-30",{"path":1988,"title":1989,"date":1990},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F10.基于Lucky与QMediaSync的飞牛远程媒体访问","基于 Lucky 与 QMediaSync 的飞牛远程媒体访问","2025-12-26",{"path":1992,"title":1993,"date":1994},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F09.新的篇章，PVE虚拟机","新的篇章，PVE虚拟机","2025-12-21",{"path":1996,"title":1997,"date":1998},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F08.Linux系统，音响有底噪","Linux 系统，音响有底噪怎么办？","2025-12-17",{"path":2000,"title":2001,"date":2002},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F07.飞牛OS的安装","飞牛 OS 的安装","2025-12-14",{"path":2004,"title":2005,"date":2006},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F06.Debian13换源","Debian13 换源","2025-11-29",{"path":2008,"title":2009,"date":2010},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F05.Kodi-CoreELEC安装指南","Kodi & CoreELEC 安装指南","2025-11-21",{"path":2012,"title":2013,"date":2014},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F09.兰空图床和高清图标库","兰空图床和高清图标库","2025-11-15",{"path":2016,"title":2017,"date":2014},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F04.N1盒子Armbian刷机与配置","N1 盒子 Armbian 刷机与配置",{"path":2019,"title":2020,"date":2021},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F08.你是否需要一个图床？","你是否需要一个图床？","2025-11-14",{"path":2023,"title":2024,"date":2025},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F03.飞牛NAS第三方应用商店安装","飞牛 NAS 第三方应用商店 (FnDepot) 安装指南","2025-10-13",{"path":2027,"title":2028,"date":2029},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F02.Hills播放器-Windows-安卓","Hills 播放器（Windows + 安卓）","2025-09-24",{"path":2031,"title":2032,"date":2033},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F01.一行代码降低服务器功耗","一行代码降低服务器功耗","2025-08-19",{"path":2035,"title":2036,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F01.容器-docker-docker-compose","容器 & docker & docker-compose","2025-08-05",{"path":2039,"title":2040,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F02.容器项目-传输类","容器项目&传输类",{"path":2042,"title":2043,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F03.容器项目-相册类","容器项目&相册类",{"path":2045,"title":2046,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F04.容器项目-媒体类","容器项目&媒体类",{"path":2048,"title":2049,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F05.Emby自有授权媒体库（一）","Emby 自有授权媒体库（一）",{"path":2051,"title":2052,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F06.Emby自有授权媒体库（二）","Emby 自有授权媒体库（二）",{"path":2054,"title":2055,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F07.Adguard-Home去广告","Adguard Home 去广告",{"path":2057,"title":2058,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F01.新的篇章，软路由","新的篇章，软路由",{"path":2060,"title":2061,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F02.如何玩公网，怎么远程访问（一）","如何玩公网，怎么远程访问（一）",{"path":2063,"title":2064,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F03.如何玩公网，怎么远程访问（二）","如何玩公网，怎么远程访问（二）",{"path":2066,"title":2067,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F04.如何玩公网，怎么远程访问（三）","如何玩公网，怎么远程访问（三）",{"path":2069,"title":2070,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F05.免费域名与远程访问","免费域名与远程访问",{"path":2072,"title":2073,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F06.没有公网如何远程访问","没有公网如何远程访问",{"path":2075,"title":2076,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F07.爱快与OpenWRT双软路由MAC地址重复问题修正","爱快与 OpenWRT 双软路由MAC地址重复问题修正",{"path":2078,"title":2079,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F08.OpenWRT扩容","OpenWRT 扩容",{"path":2081,"title":2082,"date":2037},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F09.OpenWRT旁路由一条龙教程","OpenWRT 旁路由一条龙教程",{"path":2084,"title":2085,"date":2037},"\u002Fblog\u002F20-生活碎片\u002F02.在裂缝中种满阳光","让灵魂带着光行走：在裂缝中种满太阳",{"path":2087,"title":2088,"date":2037},"\u002Fblog\u002F30-学习笔记\u002F01.Typora学习笔记","Typora学习笔记",{"path":2090,"title":2091,"date":2037},"\u002Fblog\u002F30-学习笔记\u002F02.Markdown-拓展","Markdown 拓展",{"path":2093,"title":2094,"date":2095},"\u002Fblog\u002F20-生活碎片\u002F01.拥抱生活中的光与热","拥抱生活中的光与热","2025-07-05",1791304406307]