内网AI知识库离线部署指南:从安装包到安全加固
简介面向政企单位内网环境的 DeepSeek 离线部署资料覆盖离线资源准备、模型导入、环境部署、RAG 数据投喂、安全加固与国产化适配等 AI 知识库落地全流程。资源共 1 个 PDF 文件约 5.28MB目录围绕离线安装、多平台部署、数据接入和权限管理展开适合 IT 运维人员及有技术基础的学习者查阅。目前已有 1372 人学习下载。文中给出模型离线包、Ollama 安装包、客户端等工具的获取与导入方法分别说明 Windows Server、Linux、macOS 的部署要点并提供两种 RAG 实现方式其中通过 Cherry Studio 投喂数据对新手更友好。安全方面文档详解 Ollama API 访问控制、Lobe Chat 权限设置及宝塔面板加固兼顾国产操作系统与 CPU 架构兼容性可帮助用户在内网搭建安全可用的 AI 知识库。1. 内网部署AI知识库离线安装包、国产化适配与安全加固一次讲透在内网环境里部署大模型最让人头疼的往往不是模型本身而是那几百个G的权重文件怎么弄进去、依赖包去哪找、安装到一半发现缺这缺那。网上教程动不动就是pip install、git clone在内网环境下根本走不通。我帮某研发部搭过一套DeepSeek离线知识库从资源准备到权限管理踩了不少坑这套流程跑通后无论是Windows Server还是国产化Linux都能平稳复现。这篇笔记把离线资源准备、多平台部署、RAG数据投喂、访问控制与国产化适配串成一条完整链路照着走就能搭出一个真正可用的内网AI知识库适合政企IT运维和有一定技术基础的同学。2. 离线资源准备模型文件、安装包与离线导入的完整闭环内网部署的第一步不是急着敲命令而是把手头需要的所有东西备齐。这个环节做扎实了后面会顺很多。2.1 模型离线包的选择与获取模型是整个知识库的核心。官方原版模型在合规性上更稳妥但如果你需要无审查版本Hugging Face和Ollama仓库里都有对应的替代品。需要注意的是Ollama官方仓库的模型名通常是deepseek-r1而社区版本可能是deepseek-r1-abliterated这类命名本质是同一个模型去掉部分限制的重新打包。下载渠道主要有三个Hugging Face、ModelScope和Ollama官方仓库。在有网环境先下载好GGUF格式的文件因为GGUF是Ollama能直接导入的文件后缀。如果你用LM Studio下载下载完成后找到对应的模型文件夹里面一般是FP16或Q8_0等不同精度的GGUF文件比如bge-reranker-v2-m3-FP16.gguf这种。下载完成后务必做完整性校验防止文件损坏或被篡改。Linux和macOS用sha256sum /path/to/your/model/fileWindows用PowerShellGet-FileHash -Algorithm SHA256 /path/to/your/model/file将算出来的哈希值和官方提供的值对比一致才说明文件完整。这一步很多人跳过但在内网环境一旦文件损坏排错成本极高。2.2 Ollama离线安装包与客户端准备Ollama的安装包在不同平台上有不同方式。Windows直接从官网下载安装包即可Linux在有网机器上执行安装脚本后二进制文件通常落在/usr/bin或/usr/local/bin把这个二进制文件拷到内网就行macOS的处理方式类似Linux。需要注意Linux下这种拷二进制的方式后续用systemd托管服务会更顺手。如果你打算用Docker跑Web客户端还需要提前导出现有镜像。RAG功能依赖的rag-web-ui也可以用同样的方式在有网机器上拉取镜像然后docker save导出。# 在有网机器上拉取并导出镜像 docker pull lobehub/lobe-chat docker save -o lobe-chat.tar lobehub/lobe-chat导出后会得到一个lobe-chat.tar文件拷到内网后执行docker load -i lobe-chat.tar就能加载不需要在内网重新拉取。2.3 模型文件分割与合并大文件传输的后悔药模型文件动辄几十个GU盘拷贝经常碰到文件系统格式限制。FAT32不支持超过4G的单文件NTFS虽然支持但内网有些老机器读取有问题。我一般用两种方式处理Linux下用split命令分卷Windows下用7-Zip分卷压缩。# Linux 分割大模型文件每个卷4G split -b 4G deepseek-r1-abliterated-32b.gguf model_part_ # 合并 cat model_part_* deepseek-r1-abliterated-32b.gguf合并完成后记得再跑一遍sha256sum确认分割传输没有损坏文件。2.4 Modelfile离线导入从GGUF到ollama create拿到GGUF文件后不能直接扔进Ollama需要先创建一个Modelfile。在模型文件同级目录下新建一个名为Modelfile的文件把模型文件名和后缀名写进去。FROM deepseek-r1-abliterated-32b.gguf然后执行导入命令ollama create my-deepseek -f Modelfile ollama listollama create后面的名字可以自定义-f指定Modelfile路径。导入完成后用ollama list确认模型已出现在列表中。这里有个小坑Modelfile里的模型文件名必须和实际文件完全一致包括大小写和后缀否则会报找不到文件。3. 多平台部署从Windows Server到国产化Linux的Ollama服务搭建资源备齐后部署阶段的核心是环境变量和系统服务托管。这两个点做好了跨平台迁移基本就是复制粘贴的事。3.1 环境变量是第一个坑OLLAMA_HOST与OLLAMA_MODELSOllama默认只监听本机回环地址如果不改绑定地址内网其他机器访问不到。需要设置OLLAMA_HOST0.0.0.0:11434让服务监听所有网卡。如果只是本机使用保持localhost:11434即可。OLLAMA_MODELS指定模型存放路径这个变量如果你手动导入了模型最好固定到一个单独目录方便备份和迁移。默认情况下Ollama会把模型放在用户目录下的.ollama/models里内网环境我习惯单独建一个/data/ollama-models目录规整且好维护。3.2 Windows Server部署步骤Windows Server 2019和2022我都实测过安装过程相对简单。双击Ollama安装包按提示完成安装然后配置环境变量。右键“此电脑” - 属性 - 高级系统设置 - 环境变量在系统变量中新建OLLAMA_HOST0.0.0.0:11434 OLLAMA_MODELSD:\ollama-models修改完后重启Ollama服务。可以在服务管理器中找到Ollama服务手动重启也可以直接重启服务器。接着配置Windows Defender防火墙的入站规则放行TCP 11434端口否则内网其他机器访问不了。netsh advfirewall firewall add rule nameOllama dirin actionallow protocolTCP localport11434常见问题排查用PowerShell命令Get-Process -Name ollama检查进程是否运行Get-Service Ollama查看服务状态再配合事件查看器里的应用日志定位启动失败原因。3.3 Linux Server部署步骤Linux下拷贝二进制文件到/usr/local/bin后最规范的做法是编写systemd服务文件实现开机自启和异常重启。新建/etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork.target [Service] Useryouruser WorkingDirectory/data/ollama ExecStart/usr/local/bin/ollama serve EnvironmentOLLAMA_HOST0.0.0.0:11434 EnvironmentOLLAMA_MODELS/data/ollama-models Restartalways [Install] WantedBymulti-user.target启用并启动服务sudo systemctl enable ollama sudo systemctl start ollama systemctl status ollama注意User字段替换成实际用户名WorkingDirectory要指向有读写权限的目录否则模型写入会失败。防火墙配置上CentOS/RHEL用firewall-cmdUbuntu/Debian用ufw规则都是放行TCP 11434和3010端口。高并发场景下别忘了调整ulimit默认文件描述符上限可能不够用。临时调大可以执行ulimit -n 65535持久化修改需要编辑/etc/security/limits.conf。3.4 macOS部署与Lobe Chat Web端macOS部署用Homebrew最省事brew install ollama后同样配置环境变量到~/.zshrc然后启动服务。如果遇到Gatekeeper权限拦截在“系统设置” - “隐私与安全性”中允许对应应用即可不建议关闭SIP。Lobe Chat用Docker部署比较优雅docker run -d -p 3210:3210 \ -e OPENAI_API_KEYsk-xxxx \ -e ACCESS_CODEyour-access-code \ --name lobe-chat \ lobehub/lobe-chatACCESS_CODE是访问认证码自己设一个强密码。部署完后浏览器打开http://服务器IP:3010就能进入Web界面。如果你用宝塔面板Lobe Chat容器起来后别忘了在面板的安全模块放行对应端口。4. 离线数据投喂两条路径实现RAG知识库模型部署好只是第一步内网AI知识库的核心价值在于能回答你的业务文档问题。数据投喂有两条路一条适合新手在Cherry Studio客户端里点鼠标完成另一条适合批量处理用Python脚本走传统RAG流程。4.1 新手推荐Cherry Studio客户端喂数据Cherry Studio是我比较推荐的客户端它内置了知识库功能。打开客户端后点击设置进入模型配置在“添加模型”处填入向量化模型也就是之前在Ollama里导入的嵌入模型比如nomic-embed-text或者bge-m3系列。然后新建知识库把txt、pdf、docx、md等格式文档拖进知识库即可。客户端会自动完成分块、向量化和索引构建。这种方式适合文档量不大、几百份以内的场景不需要写任何代码。需要注意向量化模型和对话模型是两个不同的东西。对话模型负责生成回答向量化模型负责把文本转成向量。两者缺一不可漏配向量化模型会导致知识库无法写入。4.2 传统RAG流程从文本提取到向量数据库如果需要批量处理大量文档或者想完全掌控RAG流程用Python脚本更合适。完整流程分为四步文本提取与清洗、分块、向量化、写入向量库。先处理文档格式。docx用python-docx提取文本PDF用pdfminer.six# pip install python-docx pdfminer.six jieba from docx import Document from pdfminer.high_level import extract_text def extract_from_docx(path): doc Document(path) return \n.join([p.text for p in doc.paragraphs]) def extract_from_pdf(path): return extract_text(path)分块参数直接影响检索质量。块太小语义不完整块太大检索噪声多。我一般用500字符一块重叠50字符def chunk_text(text, size500, overlap50): chunks [] for i in range(0, len(text) - overlap, size - overlap): chunks.append(text[i:isize]) return chunks向量化使用sentence-transformers加载离线嵌入模型注意模型路径指向本地from sentence_transformers import SentenceTransformer model SentenceTransformer(/data/models/bge-large-zh-v1.5) chunks chunk_text(你的文档文本, size500) embeddings model.encode(chunks)写入向量数据库我常用ChromaDB轻量且支持本地存储import chromadb client chromadb.Client() collection client.create_collection(my_knowledge_base) collection.add( embeddingsembeddings, documentschunks, metadatas[{source: doc1} for _ in chunks], ids[fid{i} for i in range(len(chunks))] )4.3 文本清洗的常见坑中文文本里最容易出问题的是全角半角混用和特殊符号。分块前先做一轮清洗把不必要的换行符、HTML标签和特殊字符处理掉否则向量化效果会明显变差。另外如果文档是扫描件PDF需要先做OCR否则提取出来的是一片乱码这个问题经常让人误以为是模型问题。5. 常见问题与避坑部署流程中那些翻车现场这套流程我反复搭过多次整理几个高频问题每条都是血泪经验换来的。5.1 现象内网其他机器访问不上Ollama服务原因OLLAMA_HOST环境变量没设对或者防火墙没放行端口。Windows Server最常见的是防火墙默认阻止入站连接Linux常见的是SELinux拦截。解决先在本机执行curl http://localhost:11434确认服务正常再换一台内网机器用curl http://服务器IP:11434测试。如果本机正常远程不通检查防火墙放行规则Linux下如果是SELinux拦截执行sudo setsebool -P httpd_can_network_connect 1。5.2 现象离线导入模型报错 file not found原因Modelfile里写的文件名和实际GGUF文件名不匹配或者文件路径含中文导致解析异常。解决确认Modelfile里写的文件名与ls看到的完全一致包括后缀。路径改用纯英文目录不要把模型放在带中文名或空格的目录下。5.3 现象知识库检索结果乱答答非所问原因向量化模型没有正确加载或者分块参数设置不合理。常见的是用了对话模型去向量化导致向量维度不匹配或者检索效果很差。解决确认Ollama里已经导入向量模型并能在客户端配置中选到。分块大小调整到300到800字符之间测试效果重叠率保持在10%到20%。另外一个容易被忽略的坑不同文档的语言要一致中英文混杂的文档最好先做语言分类再分别处理。5.4 现象Docker镜像导入后无法启动Lobe Chat原因内网机器Docker版本较低与镜像要求的版本不兼容。旧版本Docker在镜像层格式解析上可能有问题。解决升级Docker到较新版本至少20.10以上。启动后用docker logs lobe-chat查看详细日志定位到具体报错信息再处理。5.5 现象国产化系统上Ollama频繁崩溃原因部分国产CPU对特定指令集的支持不完整而Ollama的预编译二进制依赖较新的CPU指令。这类问题在基于ARM架构的国产芯片上尤其明显。解决确认采用的是ollama serve直跑还是基于ARM的容器镜像方案。优先选用内置CPU指令集兼容性更好的发行版镜像必要时降级到较老但更稳定的Ollama版本。6. 安全加固与国产化适配让Ollama服务在内网更安全、更可控模型部署好、知识库投喂完工作其实只完成了一大半。Ollama默认的API是全开状态只要服务暴露在网络上任何能访问到端口的人都能调用模型这在政企环境中是不能接受的。6.1 Ollama API访问控制从裸奔到加锁Ollama本身没有内置鉴权机制默认情况下/api端点是直接暴露的如果服务监听的是0.0.0.0:11434又不加防护内部任何一个能触达这台服务器的用户都可以调用你的模型。这不是危言耸听内网用户并不代表都是可信的。我常用的低成本方案是在服务前面加一层反向代理用Nginx做基本认证server { listen 11435; server_name localhost; location / { auth_basic Ollama API; auth_basic_user_file /etc/nginx/conf.d/ollama.htpasswd; proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }生成认证文件用htpasswd -c /etc/nginx/conf.d/ollama.htpasswd youraccount然后所有调用方把API地址改成http://服务器IP:11435并在请求头里带上基本认证信息。这样Ollama本身不对外开放对外暴露的只有加了锁的代理端口。6.2 宝塔面板对Ollama API的防护设置如果你用宝塔面板管理服务器在安全模块中放行的端口要精准不要把11434全量暴露。更稳妥的做法是Ollama只监听127.0.0.1:11434宝塔中仅放行代理端口或者直接在面板的安全里设置IP白名单。设置IP白名单时要注意宝塔的IP白名单对Docker容器不生效因为容器走的是NAT网络。需要对容器做端口映射调整或者用Docker的-p 127.0.0.1:3220:3210方式只绑定本机端口。6.3 Lobe Chat的访问码与用户管理Lobe Chat里设置ACCESS_CODE环境变量后所有访问者在第一次进入Web界面时都会被要求输入访问码。如果希望进一步做多用户隔离可以在Lobe Chat里启用内置的用户管理功能分配独立账号。我习惯把ACCESS_CODE设成一个复杂的随机字符串而不是简单好记的密码。部署完成后还要检查容器的端口映射是否绑定了0.0.0.0如果只在本地内网使用绑定到内网IP地址更安全。6.4 国产化适配的边界与判断依据国产化适配不是一句口号需要逐项验证。操作系统层面目前主流国产Linux发行版大多基于开源生态的二次开发Ollama官方二进制能否直接运行取决于内核版本和glibc版本。可以先执行ldd /usr/local/bin/ollama检查动态库依赖是否满足。对于ARM架构的国产CPU优先找Ollama的ARM版本对于特定厂商的CPU指令集如果官方二进制无法运行考虑在目标机器上从源码构建Ollama或者直接用容器方式部署。硬件兼容性方面要注意显存和内存的匹配推理时模型需要常驻显存显存不足会退到CPU推理生成速度会慢到让人想砸机器。我一般按照参数量估算7B模型量化后大概需要6G到8G显存14B模型需要12G到16G32B模型至少需要24G显存低于这个配置还是老实用小模型。6.5 我现在的固定流程从那以后我每次搭建内网AI知识库都会强制走一遍固定流程备齐离线包并校验哈希值配置OLLAMA_HOST到0.0.0.0但外层加反向代理和认证导入模型前先确认GGUF文件完整投喂数据前先分块再清洗部署完成后用一两条真实业务问题做检索验证最后再检查防火墙和端口暴露情况。这套流程走下来很少再出幺蛾子。希望这篇笔记能帮你在内网环境里少踩几个坑把DeepSeek真正用起来。本文还有配套的精品资源点击获取