教程背景:
市面上的大多数教程都正确,但是安装组件时需要连接至国外服务器,虽然教程编写者通过使用代理服务器顺利安装,但是部分普通用户没有这种网络条件、部分企业用户的服务器与外网隔离,从而导致安装失败。本教程提供必备组件的百度网盘共享,通过搭建本地Web服务器将组件包缓存给Ubuntu服务器使用
教程适合的对象:
非保姆式教程,不适合电脑初学者
适合可自行安装、配置Ubuntu系统,熟悉Windows系统的用户
原理:
将网盘中的必备组件下载到本地Windows电脑,通过chfs软件将Windows电脑部署为Web服务器。在Ubuntu服务器部署DeepSeek过程中,原本需要连接至国外服务器下载的组件包,转为通过本地Web服务器下载
一、自行安装Ubuntu22.04 LTS系统
备注1:修改为国内apt源或企业内部apt源,以加速组件下载速度
备注2:使用正确的时区 timedatectl set-timezone Asia/Shanghai
备注3:GUI桌面组件非必备,可选择性安装
备注4:如果使用Nvidia显卡,请自行搜索教程禁用nouveau驱动,安装Nvidia专用驱动,否则会导致服务器频繁死机
二、将共享盘中的Ollama组件、DeepSeek-R1模型、Open WebUI容器、工具缓存到本地Windows主机
共享盘地址:https://pan.baidu.com/s/12SfPzV6pqumvC3tyQpOomA?pwd=gci5
2-1:在本地Windows电脑的分区根目录创建名为 chfs_web 的文件夹
2-2:将网盘数据按需下载到 chfs_web 中
2-3:运行工具目录中的 校验工具(只勾选校验SHA256),校验以下文件是否完整
2-3-1:docker镜像目录需要校验的文件
备注:该镜像可通过国内源下载,但是考虑4.03G的体积较大,所以顺带共享到了网盘
2-3-2:ollama安装包目录需要校验的文件
备注1:官方安装包下载地址 https://github.com/ollama/ollama/releases/latest
备注2:教程使用的ollama版本为0.5.7,官方有版本更新后我会择时更新至网盘
备注3:因为官方版本迭代较快,本人因时间原因无法第一时间同步至网盘
2-3-3:deepseek-r1模型库目录需要校验的文件
备注1:教程拿1.5b模型做截图,请校验实际下载的模型
备注2:网盘没有671b的模型包,一是文件过大不便共享,二是真正使用它的用户大概率不看本教程
2-3-4:工具目录中的文件不需要校验,运行不报错为正常
备注:chfs工具不能双击运行,要在cmd中运行chfs -version进行测试
2-4:搭建本地Web服务器
2-4-1:将工具目录中的chfs.exe拷贝至 C:\Windows\System32\
备注:如果不想拷贝至System32目录,或是使用的电脑有权限无法拷贝至该目录,也可拷贝至其他目录,但是在cmd运行时需要附带对应路径。如将chfs工具放到了D:\Tools中,在cmd运行时需要使用 D:\Tools\chfs.exe
2-4-2:假如 chfs_web 目录在D盘,使用8080作为Web端口,在cmd中运行以下命令启动Web服务
chfs -path "D:\chfs_web" -port 8080
2-4-3:通过浏览器访问 http//:Windows电脑的IP:8080 测试Web服务器是否加载成功
三、从Ubuntu服务器安装及配置Ollama
3-1:下载ollama安装脚本,通过命令修改脚本中的安装包链接地址为本地Web服务器
备注1:教程使用的本地Web服务器地址为 http://192.168.179.128:8080 请修改为自己的实际IP和端口
备注2:ollama安装结束后自动运行、并开机自启
备注3:教程以root用户操作服务器,如果所用服务器不具备root权限,请自行在需要root权限的命令前添加sudo
备注4:官网脚本下载地址为 https://ollama.com/download/linux 如果后期官网修改了脚本内容导致安装失败,而本人没有及时维护以下命令的话,请下载最新版脚本自行分析修改
# 创建临时目录存放脚本 mkdir /tmp/deepseek # 下载官网脚本 cd /tmp/deepseek && wget https://ollama.com/install.sh # 生成脚本副本用于修改 cp install.sh install_local.sh # 将脚本中的安装包下载链接,改为本地Web服务器的链接 sed -i 's|https://ollama.com/download/|http://192.168.179.128:8080/chfs/shared/ollama/|g' install_local.sh # 运行安装脚本 bash install_local.sh
3-2:允许ollama服务端口监听于服务器的所有IP
备注:其默认监听于127.0.0.1,只能服务器自身访问ollama api服务。为方便对接Docker中的Open WebUI容器,以及对接其它需要使用ollama api的服务器,所以将其修改为监听服务器的所有IP。对安全要求较高的场所,请自行通过防火墙限制IP访问
# 备份ollama的service配置文件 cp /etc/systemd/system/ollama.service{,.bak} # 添加参数使其监听于服务器的所有IP sed -i '/\[Service\]/a Environment="OLLAMA_HOST=0.0.0.0"' /etc/systemd/system/ollama.service # 重新载入service配置文件,重启ollama服务,查看ollama服务在修改配置文件后是否运行报错 systemctl daemon-reload && systemctl restart ollama && systemctl status ollama
3-3:测试
在Windows电脑的浏览器访问 http://Ubuntu服务器IP:11434 页面回显Ollama is running 表示ollama服务可以被其他服务器访问
四、将本地Web服务器的DeepSeek-R1模型下载至Ubuntu服务器,并测试运行
4-1:手动创建ollama模型清单存放目录
备注1:运行ollama pull 模型名称 命令,其会自动创建 /usr/share/ollama/.ollama/models/manifests 下的 registry.ollama.ai/library/deepseek-r1 清单目录,我们通过离线方式下载模型,需要手动创建该目录
备注2:如果通过ollama rm 模型名称 命令依次将所有模型删除,它会在删掉最后一个模型后,顺带将 registry.ollama.ai/library/deepseek-r1目录删除,导致离线下载模型时需要再次手动创建该目录,而none文件可以让ollama误认为deepseek-r1目录还存在清单文件,从而防止其删除目录
# 手动创建存放模型清单的目录 mkdir -p /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 # 创建none文件,防止目录被ollama删除 touch /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/none # 设置目录目录所有者为ollama,权限为755 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests chmod 755 -R /usr/share/ollama/.ollama/models/manifests # 重启服务查看是否运行报错 systemctl restart ollama && systemctl status ollama
4-2:根据需求下载合适的DeepSeek-R1模型至Ubuntu服务器
备注1:每种模型可独立运行,并不依赖于其他模型。也就是使用8b模型时,无需下载1.5b和7b模型
备注2:教程使用的Web服务器URL为 http://192.168.179.128:8080 只需修改为自己的实际IP和端口,别修改以下脚本中的其他字符
4-2-1:下载1.5b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/1.5b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/sha256-a85fe2a2e58e2426116d3686dfdc1a6ea58640c1e684069976aa730be6c1fa01 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/1.5b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-2-2:下载7b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/7b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/sha256-40fb844194b25e429204e5163fb379ab462978a262b86aadd73d8944445c09fd wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/sha256-96c415656d377afbff962f6cdb2394ab092ccbcbaab4b82525bc4ca800fe8a49 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/7b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-2-3:下载8b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/8b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/sha256-0cb05c6e4e02614fa7f4c5d9ddcd5ae7e630e5df98602f1c0894ed0cacd11eeb wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/sha256-6340dc3229b0d08ea9cc49b75d4098702983e17b4c096d57afbbf2ffc813f2be wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/8b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-2-4:下载14b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/14b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/sha256-3c24b0c80794f0eb6e0de0033f8e3203075db1c4640e837e097712a4b88d393b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1e wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/14b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-2-5:下载32b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/32b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/sha256-6150cb382311b69f09cc0f9a1b69fc029cbd742b66bb8ec531aa5ecf5c613e93 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/sha256-c7f3ea903b50b3c9a42221b265ade4375d1bb5e3b6b6731488712886a8c41ff0 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/32b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-2-6:下载70b模型
wget -P /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1 http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/70b wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/sha256-5e9a45d7d8b98eb61a65815d36008bfef6fd6ebad6f0be432fb61d83b70550f8 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/sha256-4cd576d9aa16961244012223abf01445567b061f1814b57dfef699e4cf8df339 wget -P /usr/share/ollama/.ollama/models/blobs http://192.168.179.128:8080/chfs/shared/deepseek-r1/70b/sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150 chown ollama:ollama -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chmod 644 -R /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/deepseek-r1/* chown ollama:ollama -R /usr/share/ollama/.ollama/models/blobs/* chmod 644 -R /usr/share/ollama/.ollama/models/blobs/*
4-3:测试ollama能否识别所下载模型的名称、体积
ollama list
4-4:加载模型,测试能否使用
ollama run deepseek-r1:1.5b # 输入对话,敲回车确认 # 按Ctrl+C可结束对话;按Ctrl+D可退出ollama程序
五、部署Open WebUI 容器,实现通过Web页面与DeepSeek对话
备注:虽然Open WebUI可以通过Python环境部署,但是从灵活性、便捷性、安全性、稳定性方面考虑,教程以Docker方式部署
5-1:从国内源下载Docker组件,配置Docker的国内镜像下载源
# 安装用于加载gpg证书需要的组件 apt install -y apt-transport-https ca-certificates curl gnupg lsb-release # 添加阿里云源gpg证书 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # 添加阿里云docker源,执行命令后需要按回车键确认添加 add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # 更新apt源 apt update # 安装docker组件 (安装后其自动运行,并开机自启) apt install -y docker-ce # 使用163源下载Docker镜像 echo '{"registry-mirrors": ["http://hub-mirror.c.163.com"]}' > /etc/docker/daemon.json # 修改配置文件后,重启docker服务,查看运行是否报错 systemctl daemon-reload && systemctl restart docker && systemctl status docker
5-2:将本地Web服务器上的Docker镜像下载至Ubuntu服务器
备注:笔者后期可能不再更新网盘中的镜像包,如果N年后还有读者参考本教程,请跳过本步骤,直接运行 5-3 中的命令通过在线方式下载最新版镜像
# 下载本地Web服务器上的Docker镜像 wget -P /tmp http://192.168.179.128:8080/chfs/shared/docker/open-webui.tar # 恢复镜像 docker load -i /tmp/open-webui.tar # 检查被恢复的镜像是否被docker识别 docker images
5-3:创建Open WebUI容器
备注:80为Docker容器Http服务的对外端口,可按需修改
docker run -d -p 80:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:main
备注:如果服务器使用高性能Nvidia显卡,可运行特定容器实现GPU加速。因笔者没有高性能显卡无法测试,所以网盘未提供该镜像,以下是容器创建命令
docker run -d -p 80:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:cuda
5-4:视自身服务器的运行速度,等待3分钟左右容器启动完成后,从浏览器访问 http://Ubuntu服务器IP 注册管理员账号
5-5:注册完管理员账号,大概率会出现浏览器白屏。分析Open WebUI的Docker运行日志,用户登录后其默认访问OpenAI网站的模型列表,因国内网络访问该网站不通畅,所以浏览器一直白屏等待其响应,这里有两种解决方案:
方案一:
每隔2~3分钟手动刷新一下浏览器页面,等待10~20分钟其会响应成功,然后弹出更新提醒页面。接着在Open WebAI的管理员面板 --> 设置 --> 外部链接 --> 关闭OpenAI API --> 保存配置
方案二:手工修改Open WebAI的数据库,关闭OpenAI API
备注:随着Open WebUI版本升级,数据库参数及软件运行逻辑可能会发生变化,本方案可能失效或导致Open WebUI运行崩溃
# 安装sqlite3工具 apt install -y sqlite3 # 备份open-webui容器的数据库 cp /var/lib/docker/volumes/open-webui/_data/webui.db{,.bak} # 编辑数据库 sqlite3 /var/lib/docker/volumes/open-webui/_data/webui.db # 依次执行以下命令: # 首先执行的命令 UPDATE config # 接着执行的命令 SET data = json_set( data, '$.openai', json('{"enable": false}') ); # 最后执行的命令 .quit # 重启容器,视自身服务器运行速度,等待3分钟左右即可正常访问Web页面 docker restart open-webui
5-6:登录Open WebUI,测试使用模型
备注:Open WebUI默认隐藏思考过程,可点击箭头显示思考过程
教程结束,谢谢观看