news 2026/10/20 10:35:06

内网离线部署DeepSeek:从模型导入到RAG与安全加固

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
内网离线部署DeepSeek:从模型导入到RAG与安全加固

简介:面向政企单位IT运维人员与技术爱好者的DeepSeek内网离线部署指南,专门解决无互联网接入环境下建设私有AI知识库的痛点,覆盖离线资源准备、环境部署、数据投喂到权限管理全流程,并突出国产化操作系统、CPU架构与硬件兼容适配。资源包为单份PDF文档,大小5.28MB,图文步骤清晰,适合边读边操作;部署部分涵盖Windows Server、Linux及macOS多平台,兼顾国产系统环境要求。内容详细列出模型离线包、Ollama安装包、客户端及RAG依赖包的获取途径,包括完整性校验与导入方法,并给出两种RAG实现方式,其中通过Cherry Studio客户端喂数据的方式对新手非常友好。安全加固章节专门讲解Ollama API访问控制、Lobe Chat权限设置、宝塔面板防护操作,可有效规避未授权访问风险,满足内网严格的安全合规要求。资源已有1372人学习浏览,适合需要在内网快速落地私有AI知识库的运维人员与爱好者作为操作参考。

1. 内网部署DeepSeek:先弄清离线环境的四个硬约束

DeepSeek离线部署真正卡住内网用户的,往往不是模型本身,而是四件被在线教程默认忽略的事:模型文件怎么进内网、Ollama服务怎么在内网跑起来、RAG数据怎么喂进去、API怎么防裸奔。政企单位的内网环境无法执行pip install和git clone,几百GB的模型文件也不能靠一条命令拉取,装完之后的国产化适配与安全加固更是硬需求。这篇文章要解决的就是这四件事,覆盖离线资源准备、Windows/Linux/macOS 多平台部署、两种RAG数据投喂路线,以及访问控制与高频翻车点排查。适合政企网管、IT运维和有基础的技术爱好者照着复现。

2. 离线资源准备:模型选型、完整性校验与Modelfile导入

2.1 模型离线包:先定参数量,再找GGUF

选型的第一步不是下载,而是算清楚内网机器能扛多大的模型。DeepSeek R1 系列常见有 7b、8b、14b、32b、70b 等版本,参数量直接决定内存和显存占用。我的经验是:16GB 内存的机器跑 7b 或 8b 的量化版比较稳,32GB 内存可以尝试 14b,32b 以上就要考虑多卡或者纯 CPU 硬扛,速度会明显下降。量化版本(文件名里带 q4、q8 这类标识)占用更小、推理更快,精度略有损失,但对知识库问答场景影响不大。

获取渠道有三个:一是在有外网的机器上装好 Ollama 客户端,直接执行ollama run deepseek-r1:7b,下载完成后再从模型目录里把文件拷贝出来;二是在 Hugging Face 上搜索deepseek GGUF,选择对应参数量的文件;三是在 ModelScope 上搜GGUF deepseek,国内网络下载速度通常更友好。社区还有一些基于 DeepSeek 的微调版本,导出格式同样是 GGUF,导入方式完全一致,按需选择即可。这里注意:GGUF 是 Ollama 能直接识别的模型文件格式,下载时优先选这个后缀,避免拿到其他格式还要做转换。

# 有外网机器上在线拉取模型,随后把模型文件整体拷入内网 ollama pull deepseek-r1:7b

参数说明:deepseek-r1:7b是模型名加标签,标签里有参数量,也可以指定量化版本比如deepseek-r1:7b-q4_K_M。拉到本地后,模型文件默认存在~/.ollama/models目录,把整个模型目录或单独的 GGUF 文件拷贝到内网机器即可。

2.2 完整性校验与导入:SHA256 和 Modelfile 缺一不可

模型文件动辄几个 GB 到几十 GB,拷贝中断、U盘损坏、网闸传输丢包都可能导致文件损坏。下载完成后不校验就导入,大概率会在ollama create阶段报错。Linux 和 macOS 用sha256sum,Windows 用 PowerShell 的Get-FileHash,把计算出的哈希值和官方页面提供的值逐字符对比。

# Linux / macOS sha256sum /data/models/deepseek-r1-7b-q4_K_M.gguf # Windows PowerShell Get-FileHash -Algorithm SHA256 D:\models\deepseek-r1-7b-q4_K_M.gguf

校验通过后进入内网传输。小文件直接用U盘或移动硬盘,大文件优先走内网共享文件夹;安全性要求极高的环境会用安全网闸,这时候文件通常要分割传输。Linux 上用split分割、cat合并,Windows 上用 7-Zip 做分卷压缩,到内网后再解压合并。

导入 Ollama 需要写一个 Modelfile 文件,放在和 GGUF 模型文件同级目录下,内容很简单:

FROM ./deepseek-r1-7b-q4_K_M.gguf

FROM指向当前目录下的模型文件,文件名必须和实际一致。然后执行导入命令:

cd /data/models ollama create deepseek-r1-7b -f Modelfile ollama list

逻辑说明:ollama create会基于 Modelfile 构建一个 Ollama 可识别的模型条目,-f指定 Modelfile 路径。ollama list用来确认导入是否成功,能看到模型名和大小就说明导入正常。如果ollama list里没有出现模型,检查 Modelfile 的FROM路径是不是写错,或者 GGUF 文件是否损坏。

2.3 Ollama、客户端与 RAG 依赖的离线包准备

Ollama 本体也要离线准备。Windows 直接下载官方安装包拷入内网;Linux 在有外网的机器上执行安装脚本后,把/usr/local/bin/ollama二进制文件单独拷贝出来,内网机器放到同路径并加执行权限;macOS 与 Linux 做法类似,可以直接拷贝应用或二进制。

Web 客户端 Lobe Chat 走 Docker 镜像分发。在有外网的机器上先拉镜像,然后导出为 tar 包:

docker pull lobehub/lobe-chat docker save -o lobe-chat.tar lobehub/lobe-chat

把lobe-chat.tar拷贝到内网服务器后加载:

docker load -i lobe-chat.tar

如果要用 RAG 网页版(rag-web-ui),同样用docker save导出镜像再导入内网。至于桌面客户端 Cherry Studio、Chatbox 这类,直接下载对应平台的离线安装包就好。RAG 需要的文本向量模型,比如nomic-embed-text、bge-m3,走的是和主模型一样的 GGUF 导入流程,别忘了单独准备。

资源项获取渠道内网落地动作
DeepSeek GGUF 模型Ollama库 / Hugging Face / ModelScopeSHA256校验,U盘或共享存储拷入,Modelfile导入
Ollama 本体官网安装包 / 二进制文件按平台安装或拷贝至/usr/local/bin
Lobe Chat 镜像有外网机器 docker pulldocker save 导出,内网 docker load
Cherry Studio官方离线安装包内网直接安装,配置 Ollama 地址
文本向量模型Ollama库(nomic-embed-text 等)与主模型同样走 Modelfile 导入

3. 多平台部署:Windows/Linux/macOS的Ollama服务与Lobe Chat接入

3.1 Windows Server 部署:环境变量、服务重启与防火墙放行

Windows Server 上部署 Ollama 最直接的路径是双击安装包完成安装,然后立刻做两件事:配环境变量、放防火墙。右键“此电脑”进入高级系统设置,新建系统变量OLLAMA_HOST,值设为0.0.0.0:11434,这样内网其他机器才能访问;如果只在本机用,设为localhost:11434。模型存放路径有特殊要求的,再建一个OLLAMA_MODELS指向实际目录。

# 以管理员身份运行 PowerShell [Environment]::SetEnvironmentVariable("OLLAMA_HOST", "0.0.0.0:11434", "Machine") Restart-Service Ollama

参数说明:"Machine"表示写入系统级环境变量,对所有用户生效;改完必须重启 Ollama 服务,否则环境变量不会加载。状态排查用Get-Service Ollama和Get-Process -Name ollama两个命令,前者看服务是否在运行,后者看进程是否存在。如果进程在但服务显示停止,多半是环境变量写错或模型目录权限不足。

防火墙是 Windows 上最常见的访问失败原因。Ollama 监听 11434 端口,Web 客户端 Lobe Chat 监听 3010 端口,需要放行入站规则:

netsh advfirewall firewall add rule name="Ollama-API" dir=in action=allow protocol=TCP localport=11434 netsh advfirewall firewall add rule name="LobeChat-Web" dir=in action=allow protocol=TCP localport=3010

逻辑说明:dir=in表示入站规则,action=allow放行,localport指定端口。这两条规则不加,内网其他机器即使能 ping 通服务器,也连不上 Ollama 和 Web 界面。Windows Server 2019 和 2022 上这套流程验证过没问题,更早版本要留意 Docker 和系统依赖库的兼容性。

3.2 Linux Server 部署:systemd 管服务,防火墙开端口

Linux 部署我先说结论:不要用nohup ollama serve这种裸办法,开机自启、崩溃恢复、日志查看全都依赖 systemd。把从有外网机器拷贝来的ollama二进制放到/usr/local/bin并赋执行权限,然后写服务单元文件:

sudo cp ollama /usr/local/bin/ sudo chmod +x /usr/local/bin/ollama
sudo tee /etc/systemd/system/ollama.service > /dev/null <<'EOF' [Unit] Description=Ollama Service After=network.target [Service] User=ollamauser WorkingDirectory=/home/ollamauser ExecStart=/usr/local/bin/ollama serve Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/data/ollama/models" Restart=always [Install] WantedBy=multi-user.target EOF

关键字段说明:User指定运行用户,别用 root 跑模型服务;ExecStart指向 ollama 二进制,serve是启动服务子命令;Environment里OLLAMA_HOST=0.0.0.0:11434让服务监听所有网卡,OLLAMA_MODELS指定模型目录;Restart=always保证进程意外退出后自动拉起。然后执行:

sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama systemctl status ollama

enable设置开机自启,start立即启动,status查看运行状态和最近日志。日志排查用journalctl -u ollama -f实时跟踪输出,起不来的时候这里会直接告诉你是端口被占、模型路径错误还是权限问题。

防火墙按发行版区分。CentOS/RHEL 系用 firewalld,Ubuntu/Debian 用 ufw:

# CentOS / RHEL sudo firewall-cmd --permanent --add-port=11434/tcp sudo firewall-cmd --reload # Ubuntu / Debian sudo ufw allow 11434/tcp

高并发场景下可以调大文件描述符限制,ulimit -n 65535,否则连接数一多 Ollama 会拒绝新请求。部署完成后用ss -lntp | grep 11434确认端口处于 LISTEN 状态。

3.3 macOS 部署与 Lobe Chat Web 接入

macOS 上 Ollama 建议直接装官方安装包,环境变量写到~/.zshrc:

export OLLAMA_HOST="0.0.0.0:11434" export OLLAMA_MODELS="/Users/yourname/ollama/models" source ~/.zshrc

macOS 的 Gatekeeper 会在首次安装时弹权限提示,按提示授权即可,不建议关 SIP。开机自启用 LaunchAgents 配置,但单机使用场景直接手动启动 Ollama 应用就够了。

Lobe Chat 接入 Ollama 是内网 Web 化的核心步骤。离线环境先docker load -i lobe-chat.tar加载镜像,再执行:

docker run -d -p 3010:3210 \ -e OPENAI_API_KEY=ollama \ -e OLLAMA_BASE_URL=http://<Ollama主机IP>:11434 \ -e OLLAMA_API_MODEL=deepseek-r1:7b \ -e ACCESS_CODE=my-secret-code \ --name lobe-chat \ lobehub/lobe-chat

参数说明:-p 3010:3210把宿主机 3010 端口映射到容器内 3210;OPENAI_API_KEY对接 Ollama 时填占位符即可,真正生效的是OLLAMA_BASE_URL和OLLAMA_API_MODEL两个变量,前者指向内网 Ollama 服务地址,后者指定默认模型名;ACCESS_CODE是全局访问口令,不设的话任何人打开 Web 页面都能直接用。首次启动后浏览器访问http://<服务器IP>:3010,输入访问码即可进入对话界面。

4. 离线数据投喂与RAG:从文本分块到Cherry Studio的落地

4.1 文档准备与文本提取:先让知识库能“读”文件

RAG 的第一步是把企业内部文档变成纯文本。常见格式有 txt、pdf、docx、md,其中 docx 和 pdf 不能直接拿来分块,要先提取正文。离线环境用pip download在有外网机器上把依赖包下载好,再拷入内网安装:

# 有外网机器上提前拉取离线依赖 pip download python-docx pdfminer.six jieba -d /packages # 内网机器安装 pip install --no-index --find-links=/packages python-docx pdfminer.six jieba
# 提取 docx 段落文本 from docx import Document document = Document("knowledge.docx") text = "\n".join([p.text for p in document.paragraphs if p.text.strip()])

代码逻辑:Document()打开本地 docx 文件,遍历paragraphs取每段文字,strip()过滤空白段落。pdf 提取用pdfminer.six自带的命令行工具pdf2txt.py,输出为纯文本文件后再进入分块步骤。

4.2 分块、清洗与中文分词:决定检索精度的关键环节

文本不能整篇丢给向量模型,一是 embedding 模型有长度上限,二是长文本向量化后主题被稀释,检索时命中率下降。我的做法是按 500 字符一块、相邻块重叠 50 字符,既保证语义完整,又不让段落过长:

def chunk_text(text, chunk_size=500, overlap=50): chunks = [] start = 0 while start < len(text): chunks.append(text[start:start + chunk_size]) start += chunk_size - overlap return chunks

逻辑说明:chunk_size控制每块长度,overlap让相邻块有重叠区域,避免一句话被拦腰切断导致语义丢失。清洗环节要去掉特殊符号、HTML 标签、多余换行。中文场景下分词用 jieba:

import jieba text = "这是内网知识库的一段测试文本" seg_list = jieba.cut(text, cut_all=False) print(" / ".join(seg_list))

cut_all=False是精确模式,适合 RAG 场景;cut_all=True是全模式,召回高但噪声大,一般不用。

4.3 向量化与 ChromaDB 入库:Python 直建的完整路线

向量化需要 embedding 模型。离线环境里推荐两个选择:一是用 Ollama 里导入的nomic-embed-text,通过 Ollama 的 embedding 接口调用;二是用sentence-transformers加载本地模型文件。前者省事,后者方便二次开发。入库用 ChromaDB:

import chromadb from sentence_transformers import SentenceTransformer model = SentenceTransformer("/data/models/bge-large-zh-v1.5") sentences = ["第一段知识库文本", "第二段知识库文本"] embeddings = model.encode(sentences).tolist() client = chromadb.PersistentClient(path="./kb_db") collection = client.get_or_create_collection("internal_kb") collection.add( embeddings=embeddings, documents=sentences, metadatas=[{"source": "doc1"}, {"source": "doc2"}], ids=["id1", "id2"] )

参数说明:SentenceTransformer直接传本地模型路径,离线可用;PersistentClient会把数据持久化到磁盘,比默认的临时内存客户端更符合生产需求;collection.add里embeddings、documents、metadatas、ids四个参数长度必须一一对应,metadatas用来存来源文件等附加信息,检索结果里会一并返回。

4.4 Cherry Studio 直接喂数据:新手推荐的 RAG 路线

如果不想写 Python 代码,Cherry Studio 是更快的路线。先在设置里的模型服务中添加 Ollama 供应商,API 地址填http://内网OllamaIP:11434,然后添加文本向量模型,比如nomic-embed-text或bge-m3。这两个模型要先在 Ollama 里导入成功,Cherry Studio 才会在下拉列表里出现。接着新建知识库,把准备好的 txt、pdf、docx 直接上传,客户端会自己完成分块、向量化、入库。对话时在输入框上方关联该知识库,回答会自动引用文档内容。

对比项Python 直建路线Cherry Studio 喂数据路线
适合人群有基础、要做二次开发新手、快速上线
分块与清洗自己写代码控制客户端内置流程
向量化sentence-transformers 离线模型Ollama 内嵌向量模型
知识库维护ChromaDB 手动管理客户端界面化管理
主要风险依赖多、离线装包麻烦出问题不好定位内部逻辑

两种路线可以同时存在:先用 Cherry Studio 验证知识库效果,确认分块策略和文档格式没问题,再迁到 Python 流程做自动化更新。

5. 内网部署常见问题与排查:五个高频翻车现场

5.1 Ollama 服务起不来或端口无监听

现象:执行ollama list提示无法连接,ss -lntp | grep 11434没有任何输出。

原因:最常见的是环境变量没生效就启动服务,或者之前跑过旧版本 Ollama 进程占住了端口。Windows 上改了环境变量忘记重启服务,Linux 上改了~/.bashrc没有source,也会出现同样结果。

解决:Windows 执行Restart-Service Ollama后重新检查进程;Linux 先source ~/.bashrc再重启 systemd 服务。端口被占用时找到旧进程并清理,然后确认监听地址是0.0.0.0:11434而不是127.0.0.1。用curl http://127.0.0.1:11434/api/tags验证接口是否正常返回 JSON。

5.2 内网其他机器访问不了模型服务

现象:服务器本机能访问,局域网另一台机器浏览器打不开,或者客户端填了服务器 IP 依然报连接超时。

原因:OLLAMA_HOST没有设为0.0.0.0,服务只监听回环地址;或者防火墙没放行端口。这是内网部署翻车最多的一步。

解决:先确认环境变量值,然后检查防火墙。Windows 加netsh advfirewall入站规则,Linux 按发行版用 firewalld 或 ufw 放行 11434 端口。排查时在内网另一台机器上telnet <服务器IP> 11434,能通就说明网络层没问题,问题在服务监听地址。

5.3 Modelfile 导入报错或模型列表为空

现象:ollama create执行后提示文件找不到或格式错误,ollama list结果为空。

原因:GGUF 文件在传输过程中损坏,或者 Modelfile 的FROM路径和实际文件名不一致。我见过用网闸传输后哈希值对不上的情况,纯靠校验能发现。

解决:重新执行 SHA256 校验,和官方哈希值逐位对比;确认 Modelfile 里的文件名包含路径,并且模型文件在同一个目录下。如果文件是从分卷压缩包里合并出来的,先确认合并后文件大小和原始文件一致。

5.4 部署后响应慢、内存持续上涨

现象:第一次对话要等很久才输出,free -h看到内存几乎占满,多轮对话后越来越卡。

原因:模型参数量超出机器物理内存,或者同时加载了多个模型没有释放。Ollama 默认会缓存已经加载的模型,切换模型时旧模型不一定立刻卸载。

解决:换更小参数量的模型或更低精度的量化版;调整OLLAMA_MAX_LOADED_MODELS=1限制同时加载的模型数量;设置OLLAMA_NUM_THREAD限制 CPU 线程数,避免和业务系统抢资源。改完环境变量后重启服务。

5.5 RAG 回答不引用上传的文档

现象:知识库上传了文件,对话时回答仍然不带文档内容,和普通聊天没区别。

原因:要么知识库没有在对话中被选中,要么文本向量模型没有正确配置。Cherry Studio 里上传文件后,还需要在对话界面手动关联对应的知识库,这一步漏掉等于白传。

解决:确认向量模型已经在 Ollama 中导入并在客户端中选中;新建一轮对话,在输入框上方选择知识库再提问。如果仍然不引用,检查文档格式是否被客户端支持,txt 和 md 最稳,复杂排版的 pdf 容易提取出乱码。

6. 访问控制与国产化适配:从OLLAMA_HOST到宝塔面板的验证习惯

Ollama 默认没有认证机制,API 裸暴露在内网里,任何能访问 11434 端口的人都能调用模型、读取列表,这是内网部署里最容易被忽视的安全隐患。我的习惯是让 Ollama 只听本机回环地址,对外访问统一走宝塔面板的 Nginx 反向代理。systemd 配置里改Environment="OLLAMA_HOST=127.0.0.1:11434",然后在宝塔面板新建站点,反向代理到本机 11434,再加一层访问控制,只允许指定内网 IP 段访问,同时给 Web 界面设置复杂的访问码。Lobe Chat 的ACCESS_CODE是最后一道防线,不要让用户直接用空口令登录。如果 Ollama 必须对多个内网机器开放,至少设置OLLAMA_ORIGINS限制跨域来源,防止其他站点的恶意请求。

国产化适配这块,操作系统层面优先确认 CPU 架构。x86_64 的机器直接用官方二进制包,ARM64 架构(比如飞腾、鲲鹏芯片)要下载对应的 ARM 版本,装错架构会直接提示无法执行。国产 Linux 发行版多数基于 CentOS 或 Debian,部署流程和主流 Linux 一致,重点检查内核版本和 glibc 版本是否满足 Ollama 的要求。GPU 方面,NVIDIA 显卡需要装好驱动和 CUDA,Ollama 才能走 GPU 推理;使用国产加速卡的机器需要确认厂商是否提供了针对 Ollama 的适配层,如果没有,就退回到 CPU 模式跑小参数模型,保证功能可用性优先。

从那以后,我每次给内网装完 Ollama,不管多急都会强制走一遍四步验证:本机 curl 接口、内网第二台机器 telnet 端口、检查 OLLAMA_HOST 是否真的监听了所有网卡、确认 Web 界面访问码不是默认值。这四步全部通过,我才会把交付文档发给对方。这套习惯帮我挡掉了不少后续的远程排障请求,也希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 10:34:39

网盘直链下载实操指南:把九大网盘接进多连接下载器的完整路径

网盘直链下载实操指南&#xff1a;把九大网盘接进多连接下载器的完整路径 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…

作者头像 李华
网站建设 2026/10/20 10:34:33

液冷比风冷贵?2兆瓦数据中心投资成本拆解,高密度下反而省14%

简介&#xff1a;这份PDF白皮书聚焦大型数据中心制冷方案的投资成本对比&#xff0c;面向数据中心运维人员、架构设计师及基础设施规划者&#xff0c;帮助其在液冷与风冷之间做出有数据支撑的选型决策。资源以施耐德电气第282号白皮书为蓝本&#xff0c;围绕总容量2兆瓦的数据中…

作者头像 李华
网站建设 2026/10/20 10:32:30

训练数据生产闭环:人机交替的Train Data Loop实战指南

1. 为什么“训练数据生产”值得单独设计一套交互方式做过模型训练的人都有一个共同体会&#xff1a;模型效果的天花板&#xff0c;往往不是算法决定的&#xff0c;而是数据决定的。一个再普通的网络结构&#xff0c;喂进去干净、覆盖全面、标注一致的数据&#xff0c;出来的效果…

作者头像 李华
网站建设 2026/10/20 10:30:51

用perf精准定位Linux音频卡顿:调度延迟与中断排查实战

1. 为什么音频性能问题总让人抓狂&#xff1a;从一次爆音排查说起先描述一个场景。某嵌入式音频设备的应用层跑着播放任务&#xff0c;平时一切正常&#xff0c;但只要系统负载一上来&#xff0c;音频就开始出现间歇性爆音&#xff0c;偶尔还会整段卡顿几百毫秒。翻应用日志一无…

作者头像 李华
网站建设 2026/10/20 10:30:17

从游戏显卡到AI算力帝国:GPU如何成为基础设施

这两年的AI浪潮&#xff0c;几乎把“算力”这个词从机房送到了每个人的手机屏幕里。无论是做大模型微调、图像生成&#xff0c;还是跑科学计算&#xff0c;最后都会卡在同一个瓶颈上&#xff1a;显卡不够用。而在所有关于算力的讨论里&#xff0c;绕不开一个名字。当然&#xf…

作者头像 李华
网站建设 2026/10/20 10:29:52

深入理解iframe的allow属性与安全实践-iframe权限点

深入理解iframe的allow属性与安全实践 <iframe>&#xff1a;内嵌框架元素 - HTML&#xff08;超文本标记语言&#xff09; | MDN 一、allow属性详解 allow属性用于控制内嵌框架可使用的浏览器特性&#xff0c;语法格式为&#xff1a; <iframe src"..." …

作者头像 李华