内网环境部署Deepseek+Dify,构建企业私有化AI应用

0.简介

公司为生产安全和保密,内部的服务器不可连接外部网络,为了可以在内网环境下部署,采用的方案为ollama(Docker)+Dify(Docker Compose),方便内网环境下迁移和备份,下文将介绍部署的全部过程。

1.镜像拉取

镜像拉取为准备工作,因服务器在内网环境,需要先在可以连接外网的电脑上拉取相关镜像或文件。由于公司笔记本的Windows系统屏蔽了Microsoft Store,导致Docker Desktop安装不成功,故使用虚拟机创建Ubuntu系统,在Ubuntu下进行相关操作。

1.1 ollama

ollama采用docker进行部署,首先拉取ollama docker镜像

sh 复制代码
docker pull ollama/ollama

通过以下命令可以创建容器

sh 复制代码
docker run -d --name ollama -v /home/LLM/ollama/models:/usr/share/ollama/.ollama/models -p 11434:11434 ollama/ollama:latest

可以根据实际情况更改配置:

  • --name:容器名
  • -v:硬盘挂载,宿主机路径:容器内部路径
  • -p:端口映射,宿主机端口:容器内端口

在Linux非root用户下,ollama模型默认保存位置为/usr/share/ollama/.ollama/models

root用户默认存储在/root/.ollama/models,docker容器默认使用root用户

Tips:-v参数建议不要更改为root用户路径,和模型导入有关,在后文会提到

模型拉取需要进入容器内进行操作

在启动ollama的容器后,通过以下命令查看ollama容器的信息

sh 复制代码
docker ps | grep ollama

根据容器ID来进入容器内部

sh 复制代码
docker exec -it 容器ID /bin/bash

模型可以在ollama官网查看

以Deepseek为例,选择14b参数量的模型后,复制右侧的命令到ollama,即可拉取模型并运行

sh 复制代码
# 拉取模型并运行
ollama run deepseek-r1:14b
# 仅拉取模型
ollama pull deepseek-r1:14b 

运行后可以在终端中进行对话测试

已有的模型可以通过 ollama list 命令来查看,模型文件的保存位置可以通过以下命令查看

sh 复制代码
ollama show deepseek-r1:14b --modelfile

输出结果的第一行就是模型文件的存储位置。至此,ollama相关的镜像文件全部下载完毕。

1.2 Dify

Dify社区版支持多种部署方式,我们选择使用Docker Compose方式来部署

按照官方文档进行操作,首先克隆Dify的源代码到本地环境

sh 复制代码
# 假设当前最新版本为 0.15.3
git clone https://github.com/langgenius/dify.git --branch 0.15.3

注意:在2025.3.3时,最新版为1.0.0版本,该版本为测试版本,在接入Deepseek时存在严重Bug,无法成功接入,实测0.15.3版本使用正常,建议先使用稳定版本

进入Dify的docker目录并复制环境配置文件

sh 复制代码
cd dify/docker
cp .env.example .env

根据系统上的Docker Compose版本,选择合适的命令来启动容器

sh 复制代码
# Docker Compose V2
docker compose up -d
# Docker Compose V1
docker-compose up -d

使用Docker Compose拉取镜像时会受到镜像源的影响,一旦存在拉取失败,全部镜像都会拉取失败,需要配置多个可用国内镜像源才能成功

或者可以逐个拉取所需要的镜像,0.15.3版本所需的各个镜像为:

REPOSITORY TAG SIZE
ubuntu/squid latest 243MB
postgres 15-alpine 273MB
langgenius/dify-web 0.15.3 436MB
langgenius/dify-api 0.15.3 2.97GB
nginx latest 192MB
redis 6-alpine 30.2MB
langgenius/dify-sandbox 0.2.10 567MB
semitechnologies/weaviate 1.19.0 52.5MB

镜像拉取成功后使用 docker compose up -d 命令启动Dify,服务器所使用的Docker没有集成Docker Compose工具,需要手动进行安装。(参考手动安装docker compose - 博客园进行安装,内网服务器选用独立安装的方式离线安装)

Dify默认使用80端口,可以通过.env文件进行修改,部署时可以根据实际情况修改

首次启动需要访问以下地址设置管理员账户:

http://your_server_ip/install

访问主页面进入以下地址:

http://your_server_ip

如需要停止容器,使用

sh 复制代码
docker compose down

2.镜像导出

2.1 Docker镜像导出

使用以下命令查看本机docker镜像,并根据镜像ID保存对应镜像到本地

sh 复制代码
docker images
docker save 镜像ID > 文件名.tar

将所需要的全部docker镜像都导出(包括ollama和Dify)

Dify导出镜像的同时还需要将上一步操作的Dify/docker文件夹也复制导出,该文件夹会存储Dify的全部配置以及相关数据,为Dify运行的主目录

2.2 模型文件导出

在ollama容器内下载的模型,首先查看模型文件的存储位置

sh 复制代码
ollama show deepseek-r1:14b --modelfile

ollama docker内,模型默认存储在/root/.ollama/models/blobs下,该路径下还存有一些验证文件,一个模型文件+三个验证文件共四个文件

将这些文件复制到上一步启动时挂载的路径下,这样就可以在宿主机中操作这些文件了,通过cp命令来复制

sh 复制代码
cp 源文件 目标文件

这是我踩的一个坑,参考博客 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台 时,该博客并未提到ollama在首次运行或下载Deepseek模型时会进行验证,在按照博客的步骤导入服务器后ollama运行报错验证失败,也没有查到相关的解决方法,在花费一些时间后才发现还需要迁移这些验证文件,实属不易。

除模型文件外还需要导出一个ModelFile文件,用于后续模型导入,该文件也放入blobs文件夹下

ollama show deepseek-r1:14b --modelfile > Modelfile

2.3 传输文件到物理机

VirtualBox创建的虚拟机,可使用自带的共享文件夹功能将保存后的镜像文件传输到物理机中,具体可参考:手把手教你在VirtualBox中与主机共享文件夹_virtualbox共享文件夹在哪-CSDN博客

将全部所需文件传输到物理机,再通过物理机传输到内网服务器中。

3.镜像导入及启动

将镜像传输到服务器后,进行导入

sh 复制代码
docker load -i 文件名.tar

通过该命令导入镜像后,会丢失镜像的标签信息,需要再手动添加标签信息

sh 复制代码
docker tag 镜像ID 镜像名:版本
# 以 Ubuntu/squid 为例
docker tag 镜像ID ubuntu/squid:latest

3.1 ollama

在服务器上创建ollama docker容器

sh 复制代码
docker run -d --name ollama -v /home/LLM/ollama/models:/usr/share/ollama/.ollama/models -p 11434:11434 ollama/ollama:latest

容器创建成功后访问 http://your_server_ip:11434 可以看到Ollama is running的消息提示

/home/LLM/ollama/models目录为自定义的服务器存储模型文件的路径,这个路径要挂载到容器上,以便容器内部进行访问

将模型文件夹blobs存储到你设置的这个目录下,进入ollama容器内部

sh 复制代码
docker ps | grep ollama
docker exec -it ollama容器ID /bin/bash

在容器内切换到挂载的路径/usr/share/ollama/.ollama/models/blobs

打开之前导出的ModelFile文件,修改第一行的路径,指向挂载的路径

FROM /usr/share/ollama/.ollama/models/blobs/sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1e

使用以下命令导入模型

sh 复制代码
ollama create 模型名 -f Modelfile文件路径

导入成功会返回成功的提示,chat模型可以通过run命令运行测试

sh 复制代码
ollama run deepseek-r1:14b

3.2 Dify

将上一步导出的Dify/docker文件夹放置在服务器指定位置,进入该目录后通过Docker Compose工具再次启动即可,若镜像导入无问题,就可以直接启动成功

如果服务器的Docker不包含Docker Compose工具,1.2中已经介绍了离线安装Docker Compose的方法

4.Dify使用

启动完成后即可正常访问Dify,在设置页可以配置ollama,这样就可以配置Deepseek模型了,Dify的使用可以参考官方文档

5.结束语

Deepseek的突然爆火使得AI相关应用再一次迎来了发展,相关的博客或知识还在逐步增加中,这次的部署可参考的不多,且过于杂乱,本文总结了我在部署时遇到的问题,希望可以给大家一些帮助。

参考

数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台

Docker - 实现本地镜像的导出、导入(export、import、save、load)

Dify丝滑云或本地docker部署步骤 适用Linux & macOS

欢迎使用 Dify | Dify

docker常用命令大全(详细版),Linux运维开发经验的有效总结

docker load -i 导入后 看不到image镜像_docker load之后,镜像不见了-CSDN博客

linux加载tar文件成镜像找不到问题及解决办法_docker load 后找不到镜像-CSDN博客

手把手教你在VirtualBox中与主机共享文件夹_virtualbox共享文件夹在哪-CSDN博客

使用 Docker 安装 Ollama 部署本地大模型并接入 One-API_docker_程序员羊羊-云原生技术专区

手动安装docker compose - lqqgis - 博客园

Ubuntu 22.04安装Docker-CSDN博客

相关推荐
梓羽玩Python11 分钟前
开源版Manus来了!14.7k标星的OpenManus,让AI替你全自动执行任务!
人工智能·github
广拓科技12 分钟前
中国视频生成 AI 开源潮:腾讯阿里掀技术普惠革命,重塑内容创作格局
人工智能·开源
阳光808820 分钟前
体验开源OpenHarmony+stratovirt模拟器
linux·ubuntu·rust·开源
dr李四维21 分钟前
Java在小米SU7 Ultra汽车中的技术赋能
java·人工智能·安卓·智能驾驶·互联·小米su7ultra·hdfs架构
guanshiyishi22 分钟前
ABeam 德硕 | 中国汽车市场(1)——正在推进电动化的中国汽车市场
人工智能·物联网·汽车
思茂信息23 分钟前
CST直角反射器 --- 距离多普勒(RD图), 毫米波汽车雷达ADAS
前端·人工智能·5g·汽车·无人机·软件工程
晨陌y28 分钟前
蓝耘智算 + 通义万相 2.1:为 AIGC 装上 “智能翅膀”,翱翔创作新天空
aigc·deepseek·蓝耘
瑞瑞大大38 分钟前
简单介绍下Manus功能
人工智能
小杨40441 分钟前
python入门系列六(文件操作)
人工智能·python·pycharm
deephub1 小时前
Chain of Draft: 借鉴人类草稿思维让大型语言模型更快地思考
人工智能·语言模型·自然语言处理·思维链