简介:面向政企单位内网环境的一份DeepSeek离线部署实战指南,聚焦无互联网条件下AI知识库的快速搭建,兼顾国产化适配与安全加固。文档系统梳理了离线资源准备环节,包括大模型文件、Ollama运行环境、客户端及可选依赖包的获取途径、完整性校验与离线导入方式;针对Windows Server、Linux及macOS三大系统给出多平台部署步骤;同时介绍两种检索增强生成(RAG)数据投喂实现,其中通过Cherry Studio客户端进行配置的方式对新手更为友好。安全层面覆盖模型服务接口访问控制、宝塔面板加固等权限管理措施,并专门讨论国产操作系统、处理器架构与硬件兼容性,方便政企环境落地。从资源准备到权限管理形成完整闭环,可显著降低内网部署试错成本。资源为单个PDF文档,共1个文件,压缩包约5.28MB,内容精炼便于内网传阅。目前已有1372人学习下载,适合运维人员及有技术基础爱好者作为操作手册与排错参考。1. 内网DeepSeek离线部署:教程里那套pip install,在内网根本跑不通如果你在政企内网里部署过DeepSeek,一定经历过这种窒息感:网上教程清一色从pip install和git clone起步,到了模型下载直接甩一个Hugging Face链接,你这边却是物理隔离的网络环境,连接外网要用专门流程,下载靠U盘拷贝,连个curl都出不去。更扎心的是模型文件动辄几十上百G,U盘来回折腾几趟,拷进来发现文件校验不对,又得重来。这套内网离线部署方案,就是围绕真实内网环境写的:离线资源怎么备、Windows/Linux多平台怎么装、RAG数据怎么喂、Ollama API怎么防未授权访问,全程不依赖任何在线链接,照着走就能把DeepSeek变成自家内网可用的AI知识库。适合政企IT运维、有内网隔离需求的技术人员,也适合想绕过在线依赖、彻底掌控模型数据的开发者。2. 离线资源准备:模型、Ollama、客户端镜像,一次带全2.1 模型离线包:认准GGUF格式,量化档位先算内存账DeepSeek的模型离线物料,首推GGUF格式,这是Ollama原生支持的模型格式,拷进内网直接用ollama create导入就行。找货渠道没那么多花样,一个是Hugging Face上官方仓库,另一个是国内访问更稳的ModelScope,搜索“GGUF +deepseek-r1”就能筛出对应文件。官方模型可选范围从1.5b到70b,b是参数量单位,数值越大能力越强,对硬件要求也水涨船高。我一般建议内网机器先算一笔账:模型加载所需内存约等于“参数量×量化位宽÷8”。拿7b模型Q4量化来说,大约需要7×4÷8=3.5GB,加上上下文窗口开销,16GB内存的机器跑起来才不憋屈。32b模型哪怕Q4量化也要16GB起步,CPU推理会非常吃力,更推荐有GPU的环境。除了对话模型,还建议一并准备embedding向量模型。RAG知识库要靠它把文档切成向量再检索,常见选择是nomic-embed-text,以及中文场景表现更好的bge-large-zh-v1.5、bge-reranker-v2-m3-FP16.gguf。下载完千万别急着往内网塞,先做完整性校验,确保文件没在半路损坏。Linux/macOS下用sha256sum,Windows下用PowerShell的Get-FileHash:sha256sum /path/to/your/model/fileGet-FileHash -Algorithm SHA256 /path/to/your/model/file参数说明:SHA256是哈希算法,输出一串64位十六进制字符串,和官方页面公布的哈希值逐字符比对,一致才说明文件完好。这一步是内网部署最容易被跳过的环节,文件拷一半U盘拔了、网络传输丢包,导入时才发现模型加载不出来,回头排查极其耗费时间。传输进内网的方式按安全等级选:常规环境用U盘或移动硬盘,文件特别大就走内网共享文件夹;涉及敏感数据的环境走安全网闸,物理隔离最彻底。模型文件超过单盘容量时,Linux用split分割、cat合并,Windows用7-Zip分卷压缩解压。把GGUF模型文件和同级目录下的Modelfile放好后,进入该目录执行导入:ollama create bge-m3-q8_0-bert_cpp -f Modelfile ollama list参数说明:ollama create的模型名可以自定义,-f Modelfile指定模型描述文件,Modelfile里写的FROM字段必须指向同目录的GGUF文件。导入成功后ollama list能看到刚导入的模型,这条命令也是后面所有验证动作的基础。2.2 Ollama安装包:三种系统的离线准备方式Ollama运行环境本身也是要离线准备的。Windows最简单,在有网的机器上从Ollama官网下载exe安装包,拷进内网双击即可。Linux的做法稍绕一步:在有网的机器上执行curl -fsSL https://ollama.com/install.sh | sh,脚本会把Ollama二进制装到/usr/bin或/usr/local/bin,找到这个ollama可执行文件,整个拷进内网。macOS同理,也可以在有网机器上用brew install ollama装好后,从Cellar路径把二进制和依赖一起扒出来。这里有个容易栽跟头的细节:拷二进制务必注意CPU架构,x86机器拷ARM版本,chmod +x后一执行就是Exec format error。动手前先确认内网服务器的uname -m。2.3 客户端与RAG依赖离线化:Docker镜像的save/load流程Lobe Chat这类Web客户端走Docker部署,离线迁移靠的是docker save和docker load这对组合拳。在有网的机器上先拉镜像:docker pull lobehub/lobe-chat docker save -o lobe-chat.tar lobehub/lobe-chat参数说明:docker save的-o指定导出文件路径,后面跟镜像名。这个tar包就是你要带进内网的完整镜像。到内网服务器上执行:docker load -i lobe-chat.tar参数说明:-i指定导入的tar文件,加载完用docker images就能看到镜像。rag-web-ui这类RAG管理界面同理,先docker pull再docker save -o rag-web-ui.tar。要注意save时把tag写全,比如lobehub/lobe-chat:latest,否则load进来镜像名是none,后面compose引用时会翻车。2.4 离线Python依赖:pip download一次打包如果要走Python方式手动构建RAG链路,需要准备python-docx(解析Word)、pdfminer.six(解析PDF)、jieba(中文分词)、sentence-transformers(向量化)、chromadb(向量数据库)。这些库也可以在有网机器上一次打包:pip download -r requirements.txt -d ./packages参数说明:-d指定依赖包下载目录,requirements.txt里写明库名即可。内网机器安装时不需要联网:pip install --no-index --find-links=./packages -r requirements.txt参数说明:--no-index禁止pip访问PyPI,--find-links强制从本地目录找包。embedding模型同样提前下载好,后面用本地路径加载。3. 三平台部署Ollama:Windows Server、Linux Server与国产化适配3.1 Windows Server 2019/2022:安装包、环境变量与防火墙Windows Server部署走的是图形界面为主、命令行为辅的路线。双击Ollama安装包装完后,Win键搜“环境变量”,打开系统属性里的环境变量编辑界面,在“系统变量”里新建OLLAMA_HOST,值为0.0.0.0:11434,这是让Ollama监听所有网卡,内网其他机器才能访问;如果只本机用,改成localhost:11434。再建一个OLLAMA_MODELS,指向你打算存放模型文件的绝对路径,这个变量可选,但建议设上,否则模型存到C盘系统盘,磁盘空间告急时你连后悔药都没得吃。改完环境变量必须重启Ollama服务,用PowerShell执行:Get-Service Ollama Restart-Service Ollama Get-Process -Name ollama参数说明:Get-Service查看服务状态,Restart-Service让新环境变量生效,Get-Process确认进程在跑。Windows Server的坑集中在防火墙:默认入站规则不会放行11434,内网其他机器访问时会直接超时。用管理员PowerShell执行:netsh advfirewall firewall add rule name="Ollama" dir=in action=allow protocol=TCP localport=11434参数说明:dir=in是入站方向,action=allow放行,localport=11434指定端口。如果还要部署Lobe Chat,同理放行3210或3010端口。这一套在Windows Server 2019和2022上验证过,再老的版本比如2016,需要额外确认Docker版本兼容性。3.2 Linux Server:二进制部署与systemd托管Linux这边我倾向二进制加systemd的组合。先把从有网机器拷贝来的ollama放进系统路径:sudo cp ollama /usr/local/bin/ sudo chmod +x /usr/local/bin/ollama参数说明:/usr/local/bin是Linux放用户级可执行文件的标准路径,已在PATH里,执行ollama命令不用写全路径。接下来配置systemd服务,让Ollama开机自启、崩溃自动拉起:sudo cat > /etc/systemd/system/ollama.service << 'EOF' [Unit] Description=Ollama Service After=network.target [Service] User=youruser WorkingDirectory=/path/to/ollama ExecStart=/usr/local/bin/ollama serve Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/path/to/your/models" Restart=always [Install] WantedBy=multi-user.target EOF参数说明:User换成实际运行用户,建议建一个专用系统账户,别用root跑;ExecStart里的ollama serve是启动服务端进程;Restart=always意味着进程意外退出立即拉起,这是生产环境的基本要求。然后执行:sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama sudo systemctl status ollama参数说明:daemon-reload让systemd重新读取刚写的配置文件,enable设置开机自启,start启动服务,status查看运行状态。环境变量也可以在~/.bashrc里用export OLLAMA_HOST="0.0.0.0:11434"设置,但跟systemd托管方式二选一即可,混用容易混乱。Linux防火墙CentOS系用firewall-cmd,Ubuntu/Debian系用ufw:sudo firewall-cmd --permanent --add-port=11434/tcp && sudo firewall-cmd --reload参数说明:--permanent永久生效,--reload重载规则。高并发场景还可以顺手把ulimit -n调高,比如写到ulimit -n 65535,增加Ollama可打开的文件描述符数量,避免连接数一多就报Too many open files。3.3 macOS部署:Gatekeeper与launchctl管理macOS部署适合个人开发机或小团队内网。安装走curl -fsSL https://ollama.com/install.sh | sh或brew install ollama,环境变量编辑~/.zshrc:export OLLAMA_HOST="0.0.0.0:11434" export OLLAMA_MODELS="/path/to/your/models" source ~/.zshrc参数说明:macOS默认shell是zsh,所以写~/.zshrc而非bashrc。OLLAMA_HOST同样按需决定是否暴露到局域网。macOS安全机制方面,Gatekeeper可能会拦截未签名组件,遇到授权提示放行即可;SIP不建议关闭,非必要情况下关掉SIP等于拆了系统安全防线。想要开机自启,用LaunchAgent写plist文件,加载命令是launchctl load ~/Library/LaunchAgents/com.ollama.plist。macOS上性能监控用活动监视器看内存压力,模型加载策略不合适时调整OLLAMA_NUM_THREAD线程数。这套流程在Monterey、Ventura、Sonoma上都跑过。3.4 国产化适配:操作系统、CPU架构与硬件兼容性国产化适配是政企内网绕不开的话题,主要体现在三块:操作系统、CPU架构、硬件加速。操作系统层面,Ollama官方在Ubuntu、CentOS、Debian上验证充分,但国产操作系统如麒麟、统信UOS,大多是Linux内核加自研包管理体系的组合,Ollama的二进制能否直接跑取决于内核和glibc版本。常见做法是先在目标机器上执行ollama --version验证可执行文件能否运行,跑不起来就先解决兼容库问题,而不是急着配服务。CPU架构层面,x86有完整的AVX指令集加速,Ollama对x86-64支持最好;ARM架构如鲲鹏、飞腾的处理器,Ollama有ARM版本但部分推理优化不生效,实际表现会打折扣。Intel和AMD的x86 CPU,老款不支持AVX2指令集时模型加载会报illegal instruction,需要在下载模型时留意官方标注的CPU要求。硬件加速层面,NVIDIA GPU走CUDA最顺畅,AMD卡走ROCm,但国产GPU如昇腾、寒武纪,Ollama原生支持有限。实践经验是:国产化场景先用CPU跑小尺寸模型验证链路,再考虑外接加速卡走兼容层适配,一步到位反而容易卡死在驱动上。4. 数据投喂实现RAG:Python手工方案与Cherry Studio新手方案4.1 文档预处理:把txt/pdf/docx/md统一切成小块RAG知识库的第一步是把五花八门的文档变成模型能用的检索块。原始文档格式杂,txt、pdf、docx、md都有,得先统一提取文本。docx用python-docx按段落抽取,pdf用pdfminer.six提取,md本身是纯文本可以直接读。常用提取逻辑:from docx import Document document = Document('your_document.docx') text = '\n'.join([paragraph.text for paragraph in document.paragraphs])参数说明:Document加载docx文件,paragraphs遍历所有段落对象,paragraph.text拿段落文本,最终拼成一个完整字符串。提取完的文本要分块,原则是每块500个字符左右,相邻块可以重叠50个字符,防止语义被切断。接着清洗:去掉特殊符号、HTML标签、多余空白行。中文场景还要分词,内网环境用jieba离线包:import jieba text = "这是内网知识库的一段测试文本" seg_list = jieba.cut(text, cut_all=False) print("/".join(seg_list))参数说明:cut_all=False是精确模式,把句子切成词粒度,向量化时中文按词而非整句处理,检索效果更准。分块和清洗看似不起眼,实际决定RAG检索质量的50%,块太大检索不精准,块太小语义碎片化,我一般先用500字跑一轮测试再调。4.2 方式一:用Python手动构建向量库手工方案适合想精细控制全流程的人。核心步骤是:用sentence-transformers加载离线embedding模型,把文本块向量化,再写入ChromaDB。完整链路:from sentence_transformers import SentenceTransformer import chromadb model = SentenceTransformer('/path/to/your/embedding/model') sentences = ["这是第一段文本", "这是第二段文本"] embeddings = model.encode(sentences).tolist() client = chromadb.Client() collection = client.create_collection("my_collection") collection.add( embeddings=embeddings, documents=["这是第一段文本", "这是第二段文本"], metadatas=[{"source": "doc1"}, {"source": "doc2"}], ids=["id1", "id2"] )参数说明:SentenceTransformer的入参是embedding模型的本地路径,不联网也能加载;model.encode把文本list转向量list;chromadb.Client()默认本地存储,create_collection建集合,add时embeddings、documents、ids三个参数必须长度一致。这个方案的优点是每一步都可控,缺点是代码量和排错成本高,embedding模型加载失败、向量维度不匹配、ChromaDB版本兼容问题都够折腾一阵。4.3 方式二:Cherry Studio直连Ollama,新手推荐如果不写代码就能实现RAG,我推荐Cherry Studio。这客户端的思路是把Ollama当模型后端,本地向量模型也走Ollama接口,喂数据全程图形界面操作。具体流程:安装Cherry Studio,打开设置里的“模型服务”,添加Ollama服务,地址填http://127.0.0.1:11434或内网Ollama服务器IP。然后添加模型:在Ollama模型列表里填对话模型名deepseek-r1,再添加一个embedding向量模型,比如nomic-embed-text,这个模型要提前用ollama run nomic-embed-text拉下来,或者用上一章的方式离线导入。喂数据时,在Cherry Studio的“知识库”里新建库,导入本地文件,客户端会调用向量模型把内容切片向量化。之后正常对话,在输入框上方打开知识库开关,提问时就能召回相关片段。整个链路不需要写一行Python代码,对不熟悉编程的运维人员极友好。唯一要留意的坑:对话模型和向量模型必须都配置好,少一个知识库就用不了。4.4 向量化与重排模型选型:中文场景建议embedding模型选型直接决定检索效果。英文资料多选nomic-embed-text,轻量好用;中文资料多的场景,我踩过几次坑,nomic-embed-text对中文语义理解明显偏弱,召回结果经常跑偏。换成bge-large-zh-v1.5,中文长文本的向量表达稳得多。重排阶段用bge-reranker-v2-m3-FP16.gguf,它是个rerank模型,把向量召回的前N个结果再精排一遍,过滤掉不相关的段落。整套离线物料进入内网后,embedding模型可以挂到Ollama上通过API走,也可以直接用sentence-transformers本地路径加载,取决于你选哪条RAG路线。论文档、规章制度这类正式文本,rerank环节基本是刚需,不加重排的知识库命中率会肉眼可见地下降。5. 安全加固与排查:Ollama API别裸奔,访问控制这样做5.1 Ollama API访问控制:绑定网卡是第一道闸Ollama的API监听地址一旦设成0.0.0.0:11434,意味着内网任何机器都能直接调它的接口。默认情况下Ollama没有认证机制,别人只要知道你IP,curl http://你的IP:11434/api/tags就能看到你有哪些模型,/api/generate还能直接调用模型跑推理,这在政企内网是不可接受的裸奔状态。先确认暴露面:curl http://127.0.0.1:11434/api/tags参数说明:这条命令从本机视角看API是否存活。然后从另一台内网机器执行同样命令,验证是否真的全网可访问。第一条闸是绑定精确网卡:Ollama服务器的OLLAMA_HOST不要写0.0.0.0,改成业务网段的实际IP,比如OLLAMA_HOST=192.168.30.10:11434,这样只有能路由到该IP的机器才能访问。第二条闸是防火墙只放行内网源IP段,Windows用netsh高级规则限制RemoteIP,Linux用firewall-cmd的--add-rich-rule指定source地址段。5.2 Lobe Chat的ACCESS_CODE与用户管理Web界面侧,Lobe Chat支持用户管理和权限划分,落地方式是设置访问码。用之前离线导入的镜像启动容器时,把访问码写进环境变量:docker run -d -p 3210:3210 \ -e OLLAMA_BASE_URL=http://内网OllamaIP:11434/v1 \ -e ACCESS_CODE=你的访问码 \ --name lobe-chat \ lobehub/lobe-chat参数说明:内网部署的关键在OLLAMA_BASE_URL,它指向Ollama的OpenAI兼容地址,格式是http://IP:11434/v1,注意路径末尾必须带/v1,我见过不少人在这里漏掉导致连不上模型。ACCESS_CODE是访问入口的通行码,没填的人进不了聊天页面。Lobe Chat还支持多用户体系,有独立的用户表做登录注册,适合给不同部门分配账号。到这里,API层绑定内网IP,应用层设访问码,双重防护基本能挡住大多数误操作。5.3 宝塔面板对Ollama API的安全设置用了宝塔面板的环境,可以利用面板做一层反代控制。思路是让Nginx监听一个内网端口,转发到Ollama的11434,同时在Nginx层加Basic Auth认证,这样外部请求必须先过账号密码。宝塔的配置文件精简后大致是这样:server { listen 8080; location / { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/bt_auth/ollama.passwd; proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; } }参数说明:auth_basic开启基础认证,auth_basic_user_file指向存放账号密码哈希的文件,密码用htpasswd工具生成;proxy_pass反代到本机Ollama服务。这样即使内网有人扫到8080端口,没有账密也调不了模型接口。宝塔防火墙侧再补一条:只放行业务网段访问8080,双重保险。不少团队的Ollama就是吃了没加认证的亏,被同事或者内网扫描工具顺手调用了API,一个月电费和算力全跑在别人请求上。5.4 常见问题与排查记录实践里翻车场景集中在下面这几类,按“现象→原因→解决”的方式记录如下。现象:内网任意机器都能直接访问Ollama API,甚至外网也能通。原因:OLLAMA_HOST配成了0.0.0.0:11434,且防火墙未限制源IP。解决:把OLLAMA_HOST改为内网业务IP,防火墙放行规则里限定来源IP段,API层再加Basic Auth或token校验。现象:Ollama加载模型极慢,或直接OOM进程被杀。原因:模型量化档位过高,超出物理内存;或容器部署时内存限制太小。解决:换成Q4_K_M等低量化档位,用小一号模型;物理机部署时查看free -h,确保可用内存是模型需求的1.2倍以上。现象:Linux下systemd启动Ollama失败,systemctl status ollama显示红色错误。原因:Environment="OLLAMA_MODELS=/path/to/your/models"指向的目录不存在,或User对模型目录没有写权限。解决:journalctl -u ollama看日志,先mkdir -p创建目录,再chown -R youruser赋权,重新加载服务。现象:docker load导入镜像后,docker images看不到或者镜像名是none。原因:save时没写完整tag,load进来丢了仓库名标签。解决:save时用docker save -o lobe-chat.tar lobehub/lobe-chat:latest,load后手动docker tag补标签,compose文件引用的名字要和tag完全一致。现象:Windows Server重启后Ollama服务没起来,客户端连不上。原因:Ollama服务启动类型被改成了手动,或环境变量改动后没重启服务。解决:服务管理器里把OllamaService启动类型设为自动,改完环境变量后执行Restart-Service Ollama,确认Get-Service Ollama状态是Running。6. 装完验证跑通:给内网部署做一次验收部署完最后一公里是验证,不能装完就算完事。我每次内网部署完都强制走一遍下面这套动作,花十分钟,换后面少熬夜。第一,确认模型就位。在Ollama服务器执行:ollama list curl http://127.0.0.1:11434/api/tags预期结果:ollama list列出所有模型,/api/tags返回JSON格式的模型列表,验证API进程正常监听。第二,验证真实推理。执行一条简单对话请求:curl http://127.0.0.1:11434/api/chat -d '{ "model": "deepseek-r1:7b", "messages": [{"role": "user", "content": "你好,回复OK"}], "stream": false }'参数说明:model替换成你导入的模型名,stream设false表示等完整响应返回,避免验证时刷屏。如果返回带content字段的JSON,说明推理链路通了。第三,跨机器访问测试。换一台内网机器,浏览器或客户端里把服务地址设为http://Ollama服务器IP:11434,分别测API和对话,确认防火墙放行生效。第四,Web客户端联通测试。Lobe Chat打开后能正常登录、选择模型并对话,说明OLLAMA_BASE_URL配置无误。第五,RAG链路实测。在Cherry Studio或rag-web-ui里建一个测试知识库,传两份固定内容的文档,问一个答案明显在文档里的问题,能引用到原文片段才算数。第六,重启恢复测试。有意重启Ollama服务所在机器,确认systemd或Windows服务把进程自动拉起来,再走一遍对话请求。从那以后,我每次给内网环境部署DeepSeek,都强制自己走一遍“模型列表—API推理—跨机访问—客户端对话—RAG命中—重启恢复”的验收流程,宁可多花十分钟,也不等业务方报告“连不上”再去查日志。这套验证动作用熟了,内网部署的翻车率能压到很低,希望帮到你。本文还有配套的精品资源,点击获取
简介:面向政企单位内网环境的一份DeepSeek离线部署实战指南,聚焦无互联网条件下AI知识库的快速搭建,兼顾国产化适配与安全加固。文档系统梳理了离线资源准备环节,包括大模型文件、Ollama运行环境、客户端及可选依赖包的获取途径、完整性校验与离线导入方式;针对Windows Server、Linux及macOS三大系统给出多平台部署步骤;同时介绍两种检索增强生成(RAG)数据投喂实现,其中通过Cherry Studio客户端进行配置的方式对新手更为友好。安全层面覆盖模型服务接口访问控制、宝塔面板加固等权限管理措施,并专门讨论国产操作系统、处理器架构与硬件兼容性,方便政企环境落地。从资源准备到权限管理形成完整闭环,可显著降低内网部署试错成本。资源为单个PDF文档,共1个文件,压缩包约5.28MB,内容精炼便于内网传阅。目前已有1372人学习下载,适合运维人员及有技术基础爱好者作为操作手册与排错参考。1. 内网DeepSeek离线部署:教程里那套pip install,在内网根本跑不通如果你在政企内网里部署过DeepSeek,一定经历过这种窒息感:网上教程清一色从pip install和git clone起步,到了模型下载直接甩一个Hugging Face链接,你这边却是物理隔离的网络环境,连接外网要用专门流程,下载靠U盘拷贝,连个curl都出不去。更扎心的是模型文件动辄几十上百G,U盘来回折腾几趟,拷进来发现文件校验不对,又得重来。这套内网离线部署方案,就是围绕真实内网环境写的:离线资源怎么备、Windows/Linux多平台怎么装、RAG数据怎么喂、Ollama API怎么防未授权访问,全程不依赖任何在线链接,照着走就能把DeepSeek变成自家内网可用的AI知识库。适合政企IT运维、有内网隔离需求的技术人员,也适合想绕过在线依赖、彻底掌控模型数据的开发者。2. 离线资源准备:模型、Ollama、客户端镜像,一次带全2.1 模型离线包:认准GGUF格式,量化档位先算内存账DeepSeek的模型离线物料,首推GGUF格式,这是Ollama原生支持的模型格式,拷进内网直接用ollama create导入就行。找货渠道没那么多花样,一个是Hugging Face上官方仓库,另一个是国内访问更稳的ModelScope,搜索“GGUF +deepseek-r1”就能筛出对应文件。官方模型可选范围从1.5b到70b,b是参数量单位,数值越大能力越强,对硬件要求也水涨船高。我一般建议内网机器先算一笔账:模型加载所需内存约等于“参数量×量化位宽÷8”。拿7b模型Q4量化来说,大约需要7×4÷8=3.5GB,加上上下文窗口开销,16GB内存的机器跑起来才不憋屈。32b模型哪怕Q4量化也要16GB起步,CPU推理会非常吃力,更推荐有GPU的环境。除了对话模型,还建议一并准备embedding向量模型。RAG知识库要靠它把文档切成向量再检索,常见选择是nomic-embed-text,以及中文场景表现更好的bge-large-zh-v1.5、bge-reranker-v2-m3-FP16.gguf。下载完千万别急着往内网塞,先做完整性校验,确保文件没在半路损坏。Linux/macOS下用sha256sum,Windows下用PowerShell的Get-FileHash:sha256sum /path/to/your/model/fileGet-FileHash -Algorithm SHA256 /path/to/your/model/file参数说明:SHA256是哈希算法,输出一串64位十六进制字符串,和官方页面公布的哈希值逐字符比对,一致才说明文件完好。这一步是内网部署最容易被跳过的环节,文件拷一半U盘拔了、网络传输丢包,导入时才发现模型加载不出来,回头排查极其耗费时间。传输进内网的方式按安全等级选:常规环境用U盘或移动硬盘,文件特别大就走内网共享文件夹;涉及敏感数据的环境走安全网闸,物理隔离最彻底。模型文件超过单盘容量时,Linux用split分割、cat合并,Windows用7-Zip分卷压缩解压。把GGUF模型文件和同级目录下的Modelfile放好后,进入该目录执行导入:ollama create bge-m3-q8_0-bert_cpp -f Modelfile ollama list参数说明:ollama create的模型名可以自定义,-f Modelfile指定模型描述文件,Modelfile里写的FROM字段必须指向同目录的GGUF文件。导入成功后ollama list能看到刚导入的模型,这条命令也是后面所有验证动作的基础。2.2 Ollama安装包:三种系统的离线准备方式Ollama运行环境本身也是要离线准备的。Windows最简单,在有网的机器上从Ollama官网下载exe安装包,拷进内网双击即可。Linux的做法稍绕一步:在有网的机器上执行curl -fsSL https://ollama.com/install.sh | sh,脚本会把Ollama二进制装到/usr/bin或/usr/local/bin,找到这个ollama可执行文件,整个拷进内网。macOS同理,也可以在有网机器上用brew install ollama装好后,从Cellar路径把二进制和依赖一起扒出来。这里有个容易栽跟头的细节:拷二进制务必注意CPU架构,x86机器拷ARM版本,chmod +x后一执行就是Exec format error。动手前先确认内网服务器的uname -m。2.3 客户端与RAG依赖离线化:Docker镜像的save/load流程Lobe Chat这类Web客户端走Docker部署,离线迁移靠的是docker save和docker load这对组合拳。在有网的机器上先拉镜像:docker pull lobehub/lobe-chat docker save -o lobe-chat.tar lobehub/lobe-chat参数说明:docker save的-o指定导出文件路径,后面跟镜像名。这个tar包就是你要带进内网的完整镜像。到内网服务器上执行:docker load -i lobe-chat.tar参数说明:-i指定导入的tar文件,加载完用docker images就能看到镜像。rag-web-ui这类RAG管理界面同理,先docker pull再docker save -o rag-web-ui.tar。要注意save时把tag写全,比如lobehub/lobe-chat:latest,否则load进来镜像名是none,后面compose引用时会翻车。2.4 离线Python依赖:pip download一次打包如果要走Python方式手动构建RAG链路,需要准备python-docx(解析Word)、pdfminer.six(解析PDF)、jieba(中文分词)、sentence-transformers(向量化)、chromadb(向量数据库)。这些库也可以在有网机器上一次打包:pip download -r requirements.txt -d ./packages参数说明:-d指定依赖包下载目录,requirements.txt里写明库名即可。内网机器安装时不需要联网:pip install --no-index --find-links=./packages -r requirements.txt参数说明:--no-index禁止pip访问PyPI,--find-links强制从本地目录找包。embedding模型同样提前下载好,后面用本地路径加载。3. 三平台部署Ollama:Windows Server、Linux Server与国产化适配3.1 Windows Server 2019/2022:安装包、环境变量与防火墙Windows Server部署走的是图形界面为主、命令行为辅的路线。双击Ollama安装包装完后,Win键搜“环境变量”,打开系统属性里的环境变量编辑界面,在“系统变量”里新建OLLAMA_HOST,值为0.0.0.0:11434,这是让Ollama监听所有网卡,内网其他机器才能访问;如果只本机用,改成localhost:11434。再建一个OLLAMA_MODELS,指向你打算存放模型文件的绝对路径,这个变量可选,但建议设上,否则模型存到C盘系统盘,磁盘空间告急时你连后悔药都没得吃。改完环境变量必须重启Ollama服务,用PowerShell执行:Get-Service Ollama Restart-Service Ollama Get-Process -Name ollama参数说明:Get-Service查看服务状态,Restart-Service让新环境变量生效,Get-Process确认进程在跑。Windows Server的坑集中在防火墙:默认入站规则不会放行11434,内网其他机器访问时会直接超时。用管理员PowerShell执行:netsh advfirewall firewall add rule name="Ollama" dir=in action=allow protocol=TCP localport=11434参数说明:dir=in是入站方向,action=allow放行,localport=11434指定端口。如果还要部署Lobe Chat,同理放行3210或3010端口。这一套在Windows Server 2019和2022上验证过,再老的版本比如2016,需要额外确认Docker版本兼容性。3.2 Linux Server:二进制部署与systemd托管Linux这边我倾向二进制加systemd的组合。先把从有网机器拷贝来的ollama放进系统路径:sudo cp ollama /usr/local/bin/ sudo chmod +x /usr/local/bin/ollama参数说明:/usr/local/bin是Linux放用户级可执行文件的标准路径,已在PATH里,执行ollama命令不用写全路径。接下来配置systemd服务,让Ollama开机自启、崩溃自动拉起:sudo cat > /etc/systemd/system/ollama.service << 'EOF' [Unit] Description=Ollama Service After=network.target [Service] User=youruser WorkingDirectory=/path/to/ollama ExecStart=/usr/local/bin/ollama serve Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/path/to/your/models" Restart=always [Install] WantedBy=multi-user.target EOF参数说明:User换成实际运行用户,建议建一个专用系统账户,别用root跑;ExecStart里的ollama serve是启动服务端进程;Restart=always意味着进程意外退出立即拉起,这是生产环境的基本要求。然后执行:sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama sudo systemctl status ollama参数说明:daemon-reload让systemd重新读取刚写的配置文件,enable设置开机自启,start启动服务,status查看运行状态。环境变量也可以在~/.bashrc里用export OLLAMA_HOST="0.0.0.0:11434"设置,但跟systemd托管方式二选一即可,混用容易混乱。Linux防火墙CentOS系用firewall-cmd,Ubuntu/Debian系用ufw:sudo firewall-cmd --permanent --add-port=11434/tcp && sudo firewall-cmd --reload参数说明:--permanent永久生效,--reload重载规则。高并发场景还可以顺手把ulimit -n调高,比如写到ulimit -n 65535,增加Ollama可打开的文件描述符数量,避免连接数一多就报Too many open files。3.3 macOS部署:Gatekeeper与launchctl管理macOS部署适合个人开发机或小团队内网。安装走curl -fsSL https://ollama.com/install.sh | sh或brew install ollama,环境变量编辑~/.zshrc:export OLLAMA_HOST="0.0.0.0:11434" export OLLAMA_MODELS="/path/to/your/models" source ~/.zshrc参数说明:macOS默认shell是zsh,所以写~/.zshrc而非bashrc。OLLAMA_HOST同样按需决定是否暴露到局域网。macOS安全机制方面,Gatekeeper可能会拦截未签名组件,遇到授权提示放行即可;SIP不建议关闭,非必要情况下关掉SIP等于拆了系统安全防线。想要开机自启,用LaunchAgent写plist文件,加载命令是launchctl load ~/Library/LaunchAgents/com.ollama.plist。macOS上性能监控用活动监视器看内存压力,模型加载策略不合适时调整OLLAMA_NUM_THREAD线程数。这套流程在Monterey、Ventura、Sonoma上都跑过。3.4 国产化适配:操作系统、CPU架构与硬件兼容性国产化适配是政企内网绕不开的话题,主要体现在三块:操作系统、CPU架构、硬件加速。操作系统层面,Ollama官方在Ubuntu、CentOS、Debian上验证充分,但国产操作系统如麒麟、统信UOS,大多是Linux内核加自研包管理体系的组合,Ollama的二进制能否直接跑取决于内核和glibc版本。常见做法是先在目标机器上执行ollama --version验证可执行文件能否运行,跑不起来就先解决兼容库问题,而不是急着配服务。CPU架构层面,x86有完整的AVX指令集加速,Ollama对x86-64支持最好;ARM架构如鲲鹏、飞腾的处理器,Ollama有ARM版本但部分推理优化不生效,实际表现会打折扣。Intel和AMD的x86 CPU,老款不支持AVX2指令集时模型加载会报illegal instruction,需要在下载模型时留意官方标注的CPU要求。硬件加速层面,NVIDIA GPU走CUDA最顺畅,AMD卡走ROCm,但国产GPU如昇腾、寒武纪,Ollama原生支持有限。实践经验是:国产化场景先用CPU跑小尺寸模型验证链路,再考虑外接加速卡走兼容层适配,一步到位反而容易卡死在驱动上。4. 数据投喂实现RAG:Python手工方案与Cherry Studio新手方案4.1 文档预处理:把txt/pdf/docx/md统一切成小块RAG知识库的第一步是把五花八门的文档变成模型能用的检索块。原始文档格式杂,txt、pdf、docx、md都有,得先统一提取文本。docx用python-docx按段落抽取,pdf用pdfminer.six提取,md本身是纯文本可以直接读。常用提取逻辑:from docx import Document document = Document('your_document.docx') text = '\n'.join([paragraph.text for paragraph in document.paragraphs])参数说明:Document加载docx文件,paragraphs遍历所有段落对象,paragraph.text拿段落文本,最终拼成一个完整字符串。提取完的文本要分块,原则是每块500个字符左右,相邻块可以重叠50个字符,防止语义被切断。接着清洗:去掉特殊符号、HTML标签、多余空白行。中文场景还要分词,内网环境用jieba离线包:import jieba text = "这是内网知识库的一段测试文本" seg_list = jieba.cut(text, cut_all=False) print("/".join(seg_list))参数说明:cut_all=False是精确模式,把句子切成词粒度,向量化时中文按词而非整句处理,检索效果更准。分块和清洗看似不起眼,实际决定RAG检索质量的50%,块太大检索不精准,块太小语义碎片化,我一般先用500字跑一轮测试再调。4.2 方式一:用Python手动构建向量库手工方案适合想精细控制全流程的人。核心步骤是:用sentence-transformers加载离线embedding模型,把文本块向量化,再写入ChromaDB。完整链路:from sentence_transformers import SentenceTransformer import chromadb model = SentenceTransformer('/path/to/your/embedding/model') sentences = ["这是第一段文本", "这是第二段文本"] embeddings = model.encode(sentences).tolist() client = chromadb.Client() collection = client.create_collection("my_collection") collection.add( embeddings=embeddings, documents=["这是第一段文本", "这是第二段文本"], metadatas=[{"source": "doc1"}, {"source": "doc2"}], ids=["id1", "id2"] )参数说明:SentenceTransformer的入参是embedding模型的本地路径,不联网也能加载;model.encode把文本list转向量list;chromadb.Client()默认本地存储,create_collection建集合,add时embeddings、documents、ids三个参数必须长度一致。这个方案的优点是每一步都可控,缺点是代码量和排错成本高,embedding模型加载失败、向量维度不匹配、ChromaDB版本兼容问题都够折腾一阵。4.3 方式二:Cherry Studio直连Ollama,新手推荐如果不写代码就能实现RAG,我推荐Cherry Studio。这客户端的思路是把Ollama当模型后端,本地向量模型也走Ollama接口,喂数据全程图形界面操作。具体流程:安装Cherry Studio,打开设置里的“模型服务”,添加Ollama服务,地址填http://127.0.0.1:11434或内网Ollama服务器IP。然后添加模型:在Ollama模型列表里填对话模型名deepseek-r1,再添加一个embedding向量模型,比如nomic-embed-text,这个模型要提前用ollama run nomic-embed-text拉下来,或者用上一章的方式离线导入。喂数据时,在Cherry Studio的“知识库”里新建库,导入本地文件,客户端会调用向量模型把内容切片向量化。之后正常对话,在输入框上方打开知识库开关,提问时就能召回相关片段。整个链路不需要写一行Python代码,对不熟悉编程的运维人员极友好。唯一要留意的坑:对话模型和向量模型必须都配置好,少一个知识库就用不了。4.4 向量化与重排模型选型:中文场景建议embedding模型选型直接决定检索效果。英文资料多选nomic-embed-text,轻量好用;中文资料多的场景,我踩过几次坑,nomic-embed-text对中文语义理解明显偏弱,召回结果经常跑偏。换成bge-large-zh-v1.5,中文长文本的向量表达稳得多。重排阶段用bge-reranker-v2-m3-FP16.gguf,它是个rerank模型,把向量召回的前N个结果再精排一遍,过滤掉不相关的段落。整套离线物料进入内网后,embedding模型可以挂到Ollama上通过API走,也可以直接用sentence-transformers本地路径加载,取决于你选哪条RAG路线。论文档、规章制度这类正式文本,rerank环节基本是刚需,不加重排的知识库命中率会肉眼可见地下降。5. 安全加固与排查:Ollama API别裸奔,访问控制这样做5.1 Ollama API访问控制:绑定网卡是第一道闸Ollama的API监听地址一旦设成0.0.0.0:11434,意味着内网任何机器都能直接调它的接口。默认情况下Ollama没有认证机制,别人只要知道你IP,curl http://你的IP:11434/api/tags就能看到你有哪些模型,/api/generate还能直接调用模型跑推理,这在政企内网是不可接受的裸奔状态。先确认暴露面:curl http://127.0.0.1:11434/api/tags参数说明:这条命令从本机视角看API是否存活。然后从另一台内网机器执行同样命令,验证是否真的全网可访问。第一条闸是绑定精确网卡:Ollama服务器的OLLAMA_HOST不要写0.0.0.0,改成业务网段的实际IP,比如OLLAMA_HOST=192.168.30.10:11434,这样只有能路由到该IP的机器才能访问。第二条闸是防火墙只放行内网源IP段,Windows用netsh高级规则限制RemoteIP,Linux用firewall-cmd的--add-rich-rule指定source地址段。5.2 Lobe Chat的ACCESS_CODE与用户管理Web界面侧,Lobe Chat支持用户管理和权限划分,落地方式是设置访问码。用之前离线导入的镜像启动容器时,把访问码写进环境变量:docker run -d -p 3210:3210 \ -e OLLAMA_BASE_URL=http://内网OllamaIP:11434/v1 \ -e ACCESS_CODE=你的访问码 \ --name lobe-chat \ lobehub/lobe-chat参数说明:内网部署的关键在OLLAMA_BASE_URL,它指向Ollama的OpenAI兼容地址,格式是http://IP:11434/v1,注意路径末尾必须带/v1,我见过不少人在这里漏掉导致连不上模型。ACCESS_CODE是访问入口的通行码,没填的人进不了聊天页面。Lobe Chat还支持多用户体系,有独立的用户表做登录注册,适合给不同部门分配账号。到这里,API层绑定内网IP,应用层设访问码,双重防护基本能挡住大多数误操作。5.3 宝塔面板对Ollama API的安全设置用了宝塔面板的环境,可以利用面板做一层反代控制。思路是让Nginx监听一个内网端口,转发到Ollama的11434,同时在Nginx层加Basic Auth认证,这样外部请求必须先过账号密码。宝塔的配置文件精简后大致是这样:server { listen 8080; location / { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/bt_auth/ollama.passwd; proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; } }参数说明:auth_basic开启基础认证,auth_basic_user_file指向存放账号密码哈希的文件,密码用htpasswd工具生成;proxy_pass反代到本机Ollama服务。这样即使内网有人扫到8080端口,没有账密也调不了模型接口。宝塔防火墙侧再补一条:只放行业务网段访问8080,双重保险。不少团队的Ollama就是吃了没加认证的亏,被同事或者内网扫描工具顺手调用了API,一个月电费和算力全跑在别人请求上。5.4 常见问题与排查记录实践里翻车场景集中在下面这几类,按“现象→原因→解决”的方式记录如下。现象:内网任意机器都能直接访问Ollama API,甚至外网也能通。原因:OLLAMA_HOST配成了0.0.0.0:11434,且防火墙未限制源IP。解决:把OLLAMA_HOST改为内网业务IP,防火墙放行规则里限定来源IP段,API层再加Basic Auth或token校验。现象:Ollama加载模型极慢,或直接OOM进程被杀。原因:模型量化档位过高,超出物理内存;或容器部署时内存限制太小。解决:换成Q4_K_M等低量化档位,用小一号模型;物理机部署时查看free -h,确保可用内存是模型需求的1.2倍以上。现象:Linux下systemd启动Ollama失败,systemctl status ollama显示红色错误。原因:Environment="OLLAMA_MODELS=/path/to/your/models"指向的目录不存在,或User对模型目录没有写权限。解决:journalctl -u ollama看日志,先mkdir -p创建目录,再chown -R youruser赋权,重新加载服务。现象:docker load导入镜像后,docker images看不到或者镜像名是none。原因:save时没写完整tag,load进来丢了仓库名标签。解决:save时用docker save -o lobe-chat.tar lobehub/lobe-chat:latest,load后手动docker tag补标签,compose文件引用的名字要和tag完全一致。现象:Windows Server重启后Ollama服务没起来,客户端连不上。原因:Ollama服务启动类型被改成了手动,或环境变量改动后没重启服务。解决:服务管理器里把OllamaService启动类型设为自动,改完环境变量后执行Restart-Service Ollama,确认Get-Service Ollama状态是Running。6. 装完验证跑通:给内网部署做一次验收部署完最后一公里是验证,不能装完就算完事。我每次内网部署完都强制走一遍下面这套动作,花十分钟,换后面少熬夜。第一,确认模型就位。在Ollama服务器执行:ollama list curl http://127.0.0.1:11434/api/tags预期结果:ollama list列出所有模型,/api/tags返回JSON格式的模型列表,验证API进程正常监听。第二,验证真实推理。执行一条简单对话请求:curl http://127.0.0.1:11434/api/chat -d '{ "model": "deepseek-r1:7b", "messages": [{"role": "user", "content": "你好,回复OK"}], "stream": false }'参数说明:model替换成你导入的模型名,stream设false表示等完整响应返回,避免验证时刷屏。如果返回带content字段的JSON,说明推理链路通了。第三,跨机器访问测试。换一台内网机器,浏览器或客户端里把服务地址设为http://Ollama服务器IP:11434,分别测API和对话,确认防火墙放行生效。第四,Web客户端联通测试。Lobe Chat打开后能正常登录、选择模型并对话,说明OLLAMA_BASE_URL配置无误。第五,RAG链路实测。在Cherry Studio或rag-web-ui里建一个测试知识库,传两份固定内容的文档,问一个答案明显在文档里的问题,能引用到原文片段才算数。第六,重启恢复测试。有意重启Ollama服务所在机器,确认systemd或Windows服务把进程自动拉起来,再走一遍对话请求。从那以后,我每次给内网环境部署DeepSeek,都强制自己走一遍“模型列表—API推理—跨机访问—客户端对话—RAG命中—重启恢复”的验收流程,宁可多花十分钟,也不等业务方报告“连不上”再去查日志。这套验证动作用熟了,内网部署的翻车率能压到很低,希望帮到你。本文还有配套的精品资源,点击获取