前言

在当下 AI 浪潮汹涌的时代,DeepSeek 以其卓越的性能和出色的表现,迅速成为了众多专业人士和科技爱好者热议的焦点工具。在众多AI大模型的比拼中,DeepSeek 展现出了优越的实力。然而,对于许多企业和组织而言,出于数据安全、网络稳定性以及合规性等多方面的考量,将 DeepSeek 进行内网离线部署成为了一项紧迫且极具挑战性的任务。近期,因工作需要,完成了 DeepSeek 的内网离线部署,现在将部署经验分享给大家。

1. ollama安装部署

1.1 下载ollama的部署包

https://github.com/ollama/ollama/releases/download/v0.5.8/ollama-linux-amd64.tgz

1.2 将部署包上传到服务器,然后进行解压

sudo tar -C /usr -xzf ollama-linux-amd64.tgz

提示输入当前用户的密码

[sudo] password for XXX:

然后等待解压缩文件,1-2分钟。

然后在/usr/bin目录下找到解压缩后的ollama文件

ls -lrt /usr/bin/ollama

1.3 解压后,查看ollama的版本

ollama -v

1.4 前台启动ollama

ollama serve

启动成功后记录ollama服务的端口:127.0.0.1:11434,后续关联UI服务用到。

1.5 创建 Ollama 的用户和组并且指定该用户的主目录

sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama

sudo usermod -a -G ollama $(whoami)

注释:命令解释

1. sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama

useradd

这是用于在 Linux 系统中创建新用户的命令。

-r

该参数表示创建一个系统用户。系统用户通常用于运行系统服务或守护进程,它们一般不用于交互式登录,其 UID(用户标识符)通常小于 1000(在某些系统中可能规则略有不同)。

-s /bin/false

-s 参数用于指定用户的默认登录 shell。/bin/false 是一个特殊的 shell,它在被调用时会立即退出,返回一个失败状态码。将用户的 shell 设置为 /bin/false 意味着该用户无法通过正常方式登录系统,只能用于运行特定服务。

-U

该参数会自动创建一个与用户名相同的用户组,并将该用户添加到这个组中。例如,这里会创建一个名为 ollama 的用户组,并且用户 ollama 会成为该组的成员。

-m

此参数表示在创建用户时,自动为该用户创建主目录。主目录是用户在系统中的个人工作空间,通常包含用户的配置文件、文档等。

-d /usr/share/ollama

-d 参数用于指定用户的主目录路径。这里将用户 ollama 的主目录设置为 /usr/share/ollama,而不是默认的 /home/ollama

ollama

这是要创建的新用户的用户名。

2. sudo usermod -a -G ollama $(whoami)

usermod

这是一个用于修改用户账户信息的命令。可以对已存在用户的各种属性进行修改,比如用户名、用户 ID、主目录、所属用户组等。

-a

-a 是 --append 的缩写,它的作用是将用户追加到指定的用户组中,而不是替换用户原本所属的用户组。也就是说,执行该命令后,用户会保留原有的用户组成员身份,同时新增为指定用户组的成员。

-G

-G 即 --groups,用于指定要将用户添加到的目标用户组。这里指定的目标用户组是 ollama

$(whoami)

这是一个命令替换的语法。whoami 命令的作用是显示当前登录用户的用户名。通过 $( ) 将 whoami 命令括起来,会先执行 whoami 命令并获取其输出结果(即当前用户的用户名),然后将这个结果作为 usermod 命令要操作的用户名

1.6 配置系统自启动

先在 `/etc/systemd/system/` 目录下创建一个名为 `ollama.service` 的服务文件。

sudo vim /etc/systemd/system/ollama.service

然后在打开的 `vim` 编辑器中,输入以下示例内容:

[Unit]

Description=Ollama Service

After=network-online.target

[Service]

ExecStart=/usr/bin/ollama serve

User=ollama

Group=ollama

Restart=always

RestartSec=3

Environment="PATH=$PATH"

Environment="OLLAMA_HOST=0.0.0.0:11434"

Environment="OLLAMA_ORIGINS=*"

[Install]

WantedBy=default.target

在 `vim` 编辑器中,按下 `Esc` 键,然后输入 `:wq` 并按下回车键,即可保存并退出编辑器。

1.7 系统的方式启动ollama

1,重新加载 `systemd` 管理器配置

sudo systemctl daemon-reload

2,启动服务

sudo systemctl start ollama.service

3,查看服务状态

sudo systemctl status ollama.service

4,设置服务开机自启

sudo systemctl enable ollama.service

5,重启服务

sudo systemctl restart ollama.service

6,停止服务

sudo systemctl stop ollama.service

查看服务状态,确定ollama服务处于运行中。

2. 下载模型文件

2.1 下载模型

可以访问https://www.modelscope.cn/models网址进行模型下载

2.2 下载deepseek蒸馏过的模型,找到以GGUF为结尾的模型

比如:DeepSeek-R1-Distill-Qwen-7B-GGUF:选择合适机器的模型。

https://www.modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF

2.3 下载好的模型,需要上传到ollama部署的服务器

2.4 导入模型

1.模型文件同级目录下创建一个文件,这里命名叫做 Modelfile,文件内写入

FROM ./DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf

2.保存文件,执行命令

ollama create <模型名称-可自定义> -f ./Modelfile

ollama create DeepSeek-R1-Distill-Qwen-7B-Q4_K_M -f ./Modelfile

2.5模型导入完成后,查看导入的模型

ollama list

2.6 运行导入的模型

ollama run <上一步定义的模型名称>

ollama run DeepSeek-R1-Distill-Qwen-7B-Q4_K_M

到这步deepseek模型已经部署好了,但是只能后台命令运行,不方便,需要再部署一个UI前台服务方便使用。

3. 部署ollama-ui(docker方式部署)

3.1 下载ollama-ui的部署包

1.找一台可以科学联网的linux服务器,且该服务部署了docker

参考网址:https://github.com/jakobhoeg/nextjs-ollama-llm-ui

2.使用docker的方式拉取镜像

docker pull jakobhoeg/nextjs-ollama-ui

3.镜像拉取成功,打包镜像

docker save -o jakobhoeg_nextjs-ollama-ui.tar jakobhoeg/nextjs-ollama-ui:latest

3.2 将上面打包好的镜像包,上传到内网环境

1.内网环境,找一台安装了docker的服务器

2.加载镜像包

docker load -i jakobhoeg_nextjs-ollama-ui.tar

3.查看镜像

docker images

3.3 启动ollama-ui

1.ollama和ollama-ui没有部署在同一台服务器 (example.com需要更改为部署了ollama的服务器ip)

docker run -d -p 3000:3000 --add-host=host.docker.internal:host-gateway -e OLLAMA_URL=http://example.com:11434 --name nextjs-ollama-ui --restart always jakobhoeg/nextjs-ollama-ui:latest

2.ollama和ollama-ui部署在同一台服务器

docker run -d -p 3000:3000 --add-host=host.docker.internal:host-gateway -e OLLAMA_URL=http://host.docker.internal:11434 --name nextjs-ollama-ui --restart always jakobhoeg/nextjs-ollama-ui:latest

--修改ollama-ui默认监听端口

先查看端口是否被占用

netstat -tuln | grep 8000

没占用的话,即可修改UI监听端口

这里 8000 是宿主机的端口,3000 是容器内部服务监听的端口。

docker run -d -p 8000:3000 --add-host=host.docker.internal:host-gateway -e OLLAMA_URL=http://host.docker.internal:11434 --name nextjs-ollama-ui --restart always jakobhoeg/nextjs-ollama-ui:latest

3.4 打开浏览器,访问ollama-ui

http://host:8000/,选择模型,对话测试下

结尾
通过这次对内网离线部署 DeepSeek 的实践,我们不仅拓宽了技术视野,更在保障数据安全与高效利用工具之间找到了平衡。相信这次分享能为有类似需求的同行们提供有价值的参考。
 
如果你觉得文章内容对你有所启发,不妨点赞、关注支持一下。要是你在实际操作中遇到了不一样的情况,或是有独特的见解和经验,欢迎在评论区分享交流,大家共同进步。

deepseek内网离线部署手册的更多相关文章

  1. kubernetes 内网节点部署笔记(一)

    在Centos7上部署kubernetes时,碰到很多坑,特别在摸拟在内网部署时,有来自GFW的障碍,有来自Firewalld的阻塞,反正是各种不服,终于慢慢理顺了思路,自己记录一下,防止遗忘. 环境 ...

  2. yum仓库配置与内网源部署记录

    使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...

  3. k8s内网安装部署(二)

    续上篇 https://www.cnblogs.com/wangql/p/13397034.html 一.kubeadm安装 1.kube-proxy开启ipvs的前置条件 modprobe br_n ...

  4. Gradle AndroidStudio内网离线构建配置踩坑记录

    最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ...

  5. Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务

    如何在离线环境或纯内网环境的Linux机器上安装部署Docker服务或其他服务.本次我们以Docker服务和Ansible服务为例. 获取指定服务的所有rpm包 保证要获取rpm包的机器能够上网. 本 ...

  6. Microsonf visual c++ 14+ 离线内网安装

    内网离线安装方法:先下载官方的visualcppbuildtools: <br  href=http://go.microsoft.com/fwlink/?LinkId=691126 >& ...

  7. 工具篇:使用natapp工具映射内网到外网访问

    一.环境说明 开发基于微信公众号的应用最大的痛苦之处就是调试问题,每次实现一个功能后都需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到 ...

  8. 内网网络摄像机(RTSP/IPC/NVR)如何能在公网进行RTMP/HLS/HTTP-FLV直播

    一.背景需求 传统监控行业里不管是设备端.服务器端亦或是客户端都在一个内网里面.而且现在的大部分监控方案都是这样的格局,小到一个公司范围内的监控,再到一个园区.一个仓库监控.一个农业园林监控.一个养殖 ...

  9. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  10. Hyperledger Fabric 1.0 从零开始(三)——环境构建(内网/准离线)

    有公网环境的服务器可以直接看 Hyperledger Fabric 1.0 从零开始(二)--环境构建(公网) ,本篇内容与上篇相似,只不过环境搭建需要在内网下,也就是网络被限制的情况下. 1:环境构 ...

随机推荐

  1. [转]怎么使用PyCharm编写Python程序,简单教程

    原文链接:怎么使用PyCharm编写Python程序,简单教程.

  2. 即时通讯技术文集(第43期):直播技术合集(Part3) [共13篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 43 期. [-1-] 直播系统聊天技术(一):百万在线的美拍直播弹幕系统的实时推送技术实践 ...

  3. windows11使用pycharm连接wsl2开发基于poetry的python项目

    windows11使用pycharm连接wsl2开发基于poetry的python项目 背景:公司开发的python项目用到了某个只提供了Linux版本的包,遂研究了一番如何在windows环境下进行 ...

  4. 内存吞金兽(Elasticsearch)的那些事儿 -- 写入&检索原理

    系列目录 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下 内存吞金兽(Elasticsearch)的那些事儿 -- 数据结构及巧妙算法 内存吞金兽(Elasticsearch)的那 ...

  5. 「规则类怪谈」塔 - (preview)

      前段时间,大概五六月份,我很喜欢规则类怪谈.颓废的时候读了一大堆质量参差不齐的作品,试着编了一个世界观然后开写.咕着咕着磨到现在,至少情节大概成形了.最大的阻力在于物理规则的完备性和自洽性,为什么 ...

  6. Solution Set -「NOIP Simu.」20221011

    「Unknown」找   给出平面上 \(n\) 个点, 对于每个点, 求出它到其他点的欧式距离平方和.   \(n\le2\times10^5\).   Tag:「水题无 tag」   画风正常的签 ...

  7. Solution -「SDOI 2017」「洛谷 P3706」硬币游戏

    \(\mathscr{Description}\)   Link.   给定 \(n\) 个长度为 \(m\) 且两两不同的字符串 \(S_{1..n}\), 字符集 \(|\Sigma|=2\). ...

  8. Kotlin:【泛型】

  9. 第15章 流与IO

    第15章 流与IO 15.1 .NET 流的架构 .NET 流的架构主要包含三个概念:** 后台存储 . 装饰器 以及 流适配器 **,如图所示: C7.0 核心技术指南 第7版.pdf - p655 ...

  10. “天翼云息壤杯”高校AI大赛福建赛区启动!

    11月20日,2024首届全国"天翼云息壤杯"高校AI 大赛(福建赛区)正式启动.中国电信福建公司携手华为公司.福建省计算机学会.福建省自动化学会,正式启动天翼云科技有限公司承办的 ...