1. 为什么要在Ubuntu上自己搭一个DeepSeek?

最近身边不少搞开发的朋友都在聊,说想自己搞个AI助手来用用,但又担心用那些在线服务,代码啊、文档啊传上去不太放心。其实这个需求特别实在,尤其是咱们做技术开发的,有时候想用大模型帮忙看看代码逻辑、写写技术文档,或者处理一些内部数据,要是能跑在自己服务器上,那心里就踏实多了。

我自己的体验是,自从在办公室那台闲置的Ubuntu服务器上部署了Ollama和DeepSeek,工作效率确实提升了不少。比如写项目周报的时候,让DeepSeek帮我梳理一下这周的Git提交记录;或者调试一段复杂Python代码时,让它给点优化思路。最关键的是,这一切都在内网完成,数据不出门,安全又快速。

你可能听说过Ollama,它就像一个专门管理大模型的“应用商店”,把下载、运行、管理模型这些麻烦事都打包好了,用起来特别省心。而DeepSeek模型,尤其是那个deepseek-r1系列,在代码生成、逻辑推理和中文理解上表现相当不错,对开发者非常友好。把它们俩结合在Ubuntu上,你就能拥有一个24小时待命、完全受你控制的私有AI助手。

这个方案特别适合几类朋友:一是个人开发者或小团队,想低成本拥有一个AI编程伙伴;二是学生或研究人员,需要在本地环境做实验,避免网络依赖;三是对数据隐私有要求的企业内部应用场景。接下来,我就手把手带你走一遍从零开始的部署全过程,保证你跟着做就能成功。

2. 准备工作:给你的Ubuntu服务器“体检”

在开始安装之前,咱们得先确保服务器状态良好,就像动手术前要先做体检一样。这一步做扎实了,后面能避免一大堆稀奇古怪的报错。

首先,打开你的终端,用ssh连上你的Ubuntu服务器。我假设你已经有了sudo权限,这是操作的基础。第一件事,更新系统软件包列表,这个习惯能让你安装的软件都是最新版本,减少兼容性问题:

sudo apt update && sudo apt upgrade -y

这个过程可能会花几分钟,取决于你的网络和服务器配置。更新完成后,咱们来检查几个关键项目。

第一,检查GPU驱动(如果你有独立显卡的话)。 这是决定DeepSeek模型跑得快慢的关键。如果你的服务器有NVIDIA显卡,运行:

nvidia-smi

如果这个命令能正常输出显卡信息,包括型号、驱动版本、CUDA版本,以及显存使用情况,那恭喜你,GPU环境基本没问题。如果提示“command not found”,那就需要先安装NVIDIA驱动和CUDA工具包。不过别担心,即使没有独立显卡,用CPU也能跑DeepSeek,只是速度会慢一些,对于轻度使用或者学习目的完全足够。

第二,检查磁盘空间。 DeepSeek模型文件可不小,以我们要用的deepseek-r1:14b这个版本为例,下载下来大概需要20GB左右的磁盘空间(包括模型文件和Ollama本身)。运行:

df -h

看看你的根目录(通常是/)或者你准备存放数据的目录(比如/data)还有多少可用空间。我个人建议至少预留30GB,给模型和后续可能下载的其他模型留点余地。

第三,确认网络连通性。 因为Ollama安装脚本和后续下载模型都需要从外网拉取数据。简单测试一下:

curl -I https://ollama.com

如果返回HTTP状态码(比如200),说明网络是通的。如果服务器处于比较严格的内网环境,可能需要配置代理或者提前下载好安装包,这个我们后面会讲到。

第四,检查关键依赖。 虽然Ollama的安装脚本会处理大部分依赖,但提前装好一些基础工具能让过程更顺畅:

sudo apt install -y curl wget tar

这些工具在后续的下载、解压步骤中都会用到。完成这些检查后,你的服务器就基本准备好了。我建议在开始安装前,给重要的数据做个备份,或者如果是在云服务器上操作,先打个快照,这样万一中间出什么问题,也能快速回滚。

3. 一步步安装Ollama:选对方法很重要

Ollama的安装其实挺简单的,官方也提供了很便捷的脚本。但根据我的经验,不同的服务器环境,选择不同的安装方法,能省下不少折腾的时间。

3.1 首选方案:一键脚本安装(适合绝大多数情况)

如果你的服务器能顺畅访问Ollama官网,那这是最省事的方法。只需要一行命令:

curl -fsSL https://ollama.com/install.sh | sh

这行命令干了啥呢?它用curl工具从Ollama官网下载安装脚本,然后通过管道|传递给sh shell解释器直接执行。-fsSL这几个参数组合在一起,意思是安静地(-s)跟随重定向(-L),失败时提示(-f),适合脚本执行。

执行这行命令后,你会看到终端里开始输出一堆信息,脚本会自动检测你的系统架构(是x86_64还是arm64),然后下载对应的Ollama二进制包,解压到/usr/bin/目录下,最后把Ollama的可执行文件放到系统路径里。整个过程完全自动化,你只需要等着就行,通常两三分钟就搞定了。

安装完成后,你可以马上验证一下:

ollama --version

如果输出了Ollama的版本号,比如ollama version 0.1.xx,那就说明基础安装成功了。

3.2 备选方案:手动下载安装(适合网络受限的环境)

有些朋友的服务器可能在公司内网,或者网络环境特殊,直接运行脚本会失败。这时候就需要手动下载安装包了。别担心,步骤也不复杂。

首先,你需要找一台能上网的电脑(比如你自己的笔记本电脑),打开浏览器,访问Ollama的Linux下载页面。根据你服务器的CPU架构,选择对应的版本:

  • 如果你的服务器是普通的Intel或AMD芯片(绝大多数情况),选择 AMD64 版本。
  • 如果是苹果M系列芯片或者树莓派之类的ARM架构服务器,选择 ARM64 版本。

把对应的.tgz压缩包下载到本地。然后,你需要想办法把这个包传到服务器上。常用方法有:

  • 用scp命令从本地上传:scp ollama-linux-amd64.tgz 用户名@服务器IP:~/
  • 如果服务器有图形界面或者远程桌面,直接拖进去也行。
  • 更原始但通用的方法,用U盘拷贝过去(如果是物理服务器在身边的话)。

传上去之后,通过ssh连上服务器,进入你放压缩包的目录,比如~/Downloads,然后用管理员权限解压到系统目录:

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

这个命令的-C /usr参数意思是改变解压目录到/usr,-xzf是解压.tgz文件的标准参数。执行完后,Ollama的主要文件就被安装到了/usr/bin/ollama和/usr/lib/ollama/这两个地方。

手动安装后,同样用ollama --version验证一下。无论用哪种方法安装,到这里,Ollama这个“管理器”就已经在你的Ubuntu上安家了。但光有管理器还不够,我们得把它配置成一个可靠的后台服务,这才是接下来要做的关键一步。

4. 配置Ollama为系统服务:让它稳定可靠地在后台运行

刚装好的Ollama,默认只能在前台手动运行,我们一关终端它就停了。这显然不符合咱们“24小时待命AI助手”的期望。所以,我们需要把它配置成一个systemd服务,这是Linux系统管理后台服务的标准方式,能让Ollama开机自启、异常重启,管理起来特别方便。

4.1 创建专属的服务配置文件

首先,我们需要创建一个服务配置文件。用你熟悉的文本编辑器,比如vim、nano或者gedit都行。这里我用nano举例,因为它对新手更友好:

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

这个路径/etc/systemd/system/是systemd服务配置文件的存放目录,只有管理员权限才能在这里创建文件。打开编辑器后,把下面这段配置内容完整地粘贴进去:

[Unit]
Description=Ollama Service
After=network-online.target
Wants=network-online.target

[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
Environment="OLLAMA_MODELS=/data/ollama/.ollama/models"
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

我来逐行解释一下这个配置文件里几个关键设置的含义,理解了它们,以后出问题你也能自己调试:

  • Environment="OLLAMA_HOST=0.0.0.0":这是最重要的一行。OLLAMA_HOST环境变量告诉Ollama服务监听哪个网络接口。0.0.0.0是一个特殊地址,表示“监听本机所有可用的网络接口”。如果这里设置成127.0.0.1,那Ollama就只能在本机访问,其他电脑连不上。我们要实现远程访问,就必须设成0.0.0.0。
  • Environment="OLLAMA_ORIGINS=*":这个环境变量控制了哪些“来源”可以访问Ollama的API。设为星号*表示允许任何来源的请求,这在开发测试阶段很方便。如果你对安全有更高要求,后期可以把它改成具体的域名或IP地址,比如http://你的前端地址:端口。
  • Environment="OLLAMA_MODELS=/data/ollama/.ollama/models":这一行指定了模型文件的下载和存储路径。默认情况下,Ollama会把模型下载到当前用户的家目录下的.ollama/models里,比如/home/你的用户名/.ollama/models。我强烈建议你像上面这样,自定义一个路径,比如放在/data这样的大容量分区里。这样即使系统重装,你的模型文件也还在。记得要提前创建好这个目录:sudo mkdir -p /data/ollama/.ollama/models。
  • ExecStart=/usr/bin/ollama serve:这行指定了服务启动时执行的命令。就是运行ollama这个程序,并带上serve参数,启动服务模式。
  • User=ollama 和 Group=ollama:我建议你创建一个专门的系统用户和用户组来运行Ollama服务,而不是直接用root。这样更安全。创建命令:sudo useradd -r -s /bin/false ollama。然后别忘了把模型目录的权限赋给这个用户:sudo chown -R ollama:ollama /data/ollama/.ollama/。
  • Restart=always 和 RestartSec=3:这两个设置保证了服务的健壮性。如果Ollama进程因为任何原因崩溃了,systemd会在3秒后自动重启它。always意味着无论进程以什么方式退出(除非被手动停止),都会重启。

配置内容写好后,按Ctrl+O保存,再按Ctrl+X退出nano编辑器。

4.2 启动服务并设置开机自启

配置文件写好只是第一步,我们需要让systemd系统知道这个新服务的存在,并启动它。

首先,重新加载systemd的配置,让它读取我们刚创建的文件:

sudo systemctl daemon-reload

然后,启动Ollama服务:

sudo systemctl start ollama

如果一切顺利,这个命令会安静地执行,没有报错就是最好的消息。我们可以查看一下服务的运行状态:

sudo systemctl status ollama

你会看到绿色的“active (running)”字样,以及一些服务启动的日志。如果状态显示失败(红色),可以用sudo journalctl -u ollama -f命令查看详细的错误日志,通常问题都出在环境变量路径不对或者权限不足上。

服务运行起来后,我们让它以后开机自动启动,这样服务器重启也不用操心:

sudo systemctl enable ollama

到这一步,Ollama就已经作为一个坚实的后台服务在运行了,并且监听在所有网络接口的11434端口上(这是Ollama的默认端口)。你可以用curl命令快速测试一下:

curl http://localhost:11434/api/tags

如果返回一个JSON数据(可能是空的列表[]),说明API服务已经正常响应了。接下来,就是请出我们今天的主角——DeepSeek模型了。

5. 拉取并运行DeepSeek模型:把你的AI助手“请”进门

Ollama服务搭好了,就像建好了一个空的“模型运行容器”。现在,我们要把DeepSeek这个“大脑”放进去。Ollama支持很多开源模型,DeepSeek是其中对中文和代码特别友好的一个系列。

5.1 选择合适的DeepSeek模型版本

DeepSeek有几个不同的版本,主要区别在于参数规模和对硬件的要求。对于大多数个人开发者或小团队,我首推 deepseek-r1:14b 这个版本。这里的“14b”指的是140亿参数,它在效果和资源消耗之间取得了很好的平衡。

  • deepseek-r1:7b:70亿参数版本。对硬件要求最低,8GB以上内存的CPU机器也能勉强跑起来,适合入门体验或资源极其有限的场景。但它的能力相对弱一些。
  • deepseek-r1:14b:140亿参数版本。这是我主要推荐的“甜点”版本。它在代码生成、逻辑推理和对话质量上比7b版本有明显提升,同时对于有一块中等性能显卡(比如NVIDIA GTX 1080 Ti 11GB, RTX 3060 12GB)的服务器来说,刚好能放得下。如果纯用CPU跑,需要比较大的内存(建议32GB以上)。
  • deepseek-r1:32b:320亿参数版本。能力更强,但需要更多的GPU显存(大概20GB以上)或更强的CPU和更大的内存。除非你的服务器配置很高,或者有特别复杂的任务,否则14b版本已经足够好了。

注意:在拉取模型前,再次确认你为Ollama设置的模型存储路径(我们之前设置的OLLAMA_MODELS)有足够的空间。deepseek-r1:14b模型文件大约需要14GB的磁盘空间。

5.2 执行拉取命令

拉取模型非常简单,只需要一条命令。打开一个新的终端窗口(或者在你原来的ssh连接里直接操作也行),执行:

ollama pull deepseek-r1:14b

这个pull命令就像Docker的pull一样,会从Ollama的官方模型仓库下载指定的模型。你会看到终端里开始输出下载进度,分多个层(layer)进行下载。整个下载过程耗时取决于你的网络带宽,模型有十几个GB,百兆宽带的话大概需要二三十分钟。

这里有个小技巧:如果你发现下载速度很慢,或者中途断线,Ollama支持断点续传。直接重新运行同样的pull命令,它会从断掉的地方继续下载,不会从头开始。

下载完成后,你可以列出本地已有的所有模型,确认一下:

ollama list

这个命令会显示类似下面的输出:

NAME                ID              SIZE      MODIFIED
deepseek-r1:14b     xxxxxxxxxxxx    14 GB     2 minutes ago

看到deepseek-r1:14b出现在列表里,并且有大小和修改时间,就说明模型已经成功下载到本地了。

5.3 首次运行与交互测试

模型拉取成功后,我们可以先直接运行一次,做个简单的交互测试,确保模型能正常工作:

ollama run deepseek-r1:14b

运行这个命令后,你会进入一个简单的对话界面,提示符可能显示为>>>。你可以直接输入问题,比如:“用Python写一个快速排序函数。” 模型会开始生成回答。第一次运行模型时,它会进行一些初始化加载,可能会花一两分钟,之后每次对话响应就会快很多。

输入/bye或者按Ctrl+D可以退出这个交互界面。这个run命令适合临时测试。但我们最终的目标是让模型作为API服务一直运行,供其他客户端(比如Chatbox)调用。而这一点,我们的systemd服务已经在做了!当你通过ollama pull拉取模型后,Ollama服务就已经知道这个模型的存在了。其他客户端可以通过HTTP API来调用它。

6. 从任何地方访问:配置远程连接与基础安全

现在,你的Ubuntu服务器上已经运行着一个“大脑”了。但怎么从你自己的办公电脑、笔记本电脑上去使用它呢?这就涉及到远程访问的配置。同时,安全方面也要做一些最基本的考虑,毕竟我们不希望谁都能随便调用我们的AI服务。

6.1 理解网络访问原理

Ollama服务启动后,本质上是一个HTTP服务器,监听在某个IP地址和端口上。我们之前在服务配置里设置了OLLAMA_HOST=0.0.0.0,这意味着它监听服务器上所有网络接口的11434端口。

  • 本地访问:在服务器本机上,你可以通过 http://localhost:11434 或者 http://127.0.0.1:11434 来访问。
  • 局域网访问:如果你的办公电脑和Ubuntu服务器在同一个局域网(比如连着同一个Wi-Fi,或者在同一个公司内网),那么你可以通过服务器的局域网IP地址来访问,比如 http://192.168.1.100:11434。你可以在服务器上运行ip addr或ifconfig命令来查看它的局域网IP。
  • 公网访问(需谨慎):如果你想让服务器能从互联网任何地方访问,就需要公网IP和端口转发。这通常涉及路由器配置,且安全风险较高,不建议初学者或对安全不了解的用户操作。

6.2 配置防火墙(如果开启了的话)

很多Ubuntu服务器默认安装了ufw(Uncomplicated Firewall)防火墙。如果防火墙是开启状态,它会默认阻止外部对11434端口的访问。我们需要放行这个端口:

# 查看防火墙状态
sudo ufw status

# 如果状态是 active,则需要添加规则
sudo ufw allow 11434/tcp

# 重新加载防火墙规则
sudo ufw reload

如果你用的是云服务器(比如阿里云、腾讯云、AWS等),还需要在云服务商的控制台里,找到“安全组”或“防火墙”设置,添加一条入站规则,允许TCP协议的11434端口。具体步骤每个平台略有不同,但原理都是让外部流量能到达你服务器的这个端口。

6.3 进行远程连接测试

从你的另一台电脑(比如Windows或Mac笔记本),打开一个浏览器。在地址栏输入你的Ubuntu服务器的地址和端口,后面跟上Ollama的API路径,例如: http://你的服务器IP:11434/api/tags

如果配置正确,你应该能看到浏览器返回一个JSON格式的数据,可能是:{"models":[{"name":"deepseek-r1:14b", "modified_at":"2023-...", ...}]}。这说明API接口已经可以从外部访问了。

如果访问失败,可以按以下顺序排查:

  1. 检查服务器IP是否正确:在服务器上再确认一次IP。
  2. 检查Ollama服务是否在运行:在服务器上运行 sudo systemctl status ollama。
  3. 检查端口监听:在服务器上运行 sudo netstat -tlnp | grep 11434,看是否有进程在监听0.0.0.0:11434。
  4. 检查防火墙:确认服务器防火墙和云平台安全组都放行了11434端口。
  5. 检查网络连通性:从你的电脑ping一下服务器IP,看是否能通。

6.4 基础安全加固建议(非常重要)

允许任意IP访问(OLLAMA_ORIGINS=*)在测试阶段很方便,但长期运行有风险。我强烈建议你做以下加固:

  1. 修改Ollama服务配置,限制访问来源:编辑/etc/systemd/system/ollama.service文件,将OLLAMA_ORIGINS=*改为你前端客户端的实际地址,比如OLLAMA_ORIGINS=http://你的电脑IP:8080。如果你用Chatbox客户端,Chatbox本身是运行在你本地电脑上的,所以这里应该填你本地电脑的IP和Chatbox使用的端口(默认可能是3000或8080)。改完后运行sudo systemctl restart ollama重启服务。
  2. 考虑使用反向代理(如Nginx):这是一个更专业和安全的做法。不直接把Ollama的端口暴露出去,而是让Nginx监听80或443端口,然后将请求转发给本地的11434端口。Nginx可以方便地添加HTTPS(SSL加密)、访问密码、请求速率限制等安全功能。这对于公网访问的场景几乎是必须的。
  3. 使用内网穿透工具(用于无公网IP的情况):如果你和服务器都在复杂的局域网后,没有公网IP,可以考虑使用frp、ngrok等内网穿透工具,将本地服务暴露到一个有公网地址的中继服务器上。但这需要你有一台具有公网IP的VPS。

完成远程访问测试和基础安全考量后,你的DeepSeek AI服务就已经部署完毕,可以对外提供能力了。最后一步,就是选择一个好用的“遥控器”(客户端)来指挥这个“大脑”为你工作。

7. 挑选你的“遥控器”:多种客户端访问方式

服务器端的DeepSeek模型已经就绪,就像一个功能强大的大脑已经启动。但我们还需要一个方便易用的界面(客户端)来和它对话。Ollama提供了开放的API,所以客户端的选择非常多,你可以根据自己的喜好和操作系统来挑。

7.1 命令行客户端:最直接快速的方式

如果你喜欢在终端里工作,或者需要将AI能力集成到脚本中,命令行是最直接的方式。Ollama本身就提供了ollama run命令,我们之前测试用过。但更常用的是通过curl直接调用其REST API。

示例:用curl进行一次性问答

curl http://你的服务器IP:11434/api/generate -d '{
  "model": "deepseek-r1:14b",
  "prompt": "用Python解释一下什么是装饰器(decorator),并给一个简单的例子。",
  "stream": false
}'

这个请求会向模型发送一个提示(prompt),并以JSON格式返回完整的回答。stream: false表示一次性返回所有结果。如果你想要看到像打字机一样逐字输出的效果,可以设成stream: true,然后用一些工具来解析这个流。

对于日常交互,一直写curl命令太麻烦。社区有一些优秀的命令行工具,比如 ollama-chat、litellm 等,它们提供了更友好的对话式界面。你甚至可以写一个简单的Python脚本,用requests库来封装调用,这样就能定制你自己的交互逻辑了。

7.2 图形化桌面客户端:Chatbox(全平台推荐)

对于大多数用户,一个图形化界面的客户端用起来最舒服。这里我重点推荐 Chatbox。它是一款开源免费的AI客户端,支持Windows、macOS和Linux,界面简洁美观,功能却很强大。

在Windows/macOS/Linux桌面系统上安装Chatbox:

  1. 访问Chatbox的GitHub发布页面或官网,下载对应你操作系统的安装包(.exe, .dmg, .AppImage等)。
  2. 像安装普通软件一样安装它。
  3. 打开Chatbox,你需要配置它连接我们自己的Ollama服务。
    • 在设置(Settings)里,找到“模型”或“后端”配置。
    • 将 “API地址” 或 “Base URL” 设置为:http://你的Ubuntu服务器IP:11434
    • 在模型列表里,应该能自动看到或手动添加 deepseek-r1:14b 这个模型。
  4. 保存配置,然后就可以在主界面选择deepseek-r1:14b模型,开始畅聊了。

Chatbox的好处是,它不仅能聊天,还能管理对话历史、保存常用的提示词(Prompt)、切换不同的模型(如果你后续在Ollama里装了更多模型)。它就像一个为Ollama量身定做的“遥控器面板”。

7.3 集成到开发环境:VS Code插件

如果你是程序员,最爽的用法莫过于让AI助手直接嵌入你的代码编辑器。VS Code有两个非常流行的插件可以连接Ollama:

  1. Continue:这是一个功能极其强大的AI编程助手插件。在它的配置里,你可以设置使用本地的Ollama模型。之后,在写代码时,你可以选中一段代码,让它解释、重构、写注释、找bug,体验非常流畅。
  2. Ollama for VS Code 或 Genie AI:这些插件更侧重于对话。你可以在VS Code侧边栏打开一个聊天窗口,直接向DeepSeek提问关于当前项目、代码文件的问题。

配置方法大同小异:安装插件后,在插件的设置中找到“Ollama”或“Local”选项,将API地址指向http://localhost:11434(如果你的VS Code就在Ubuntu服务器本机上运行)或http://服务器IP:11434(如果VS Code在另一台电脑上),然后选择deepseek-r1:14b模型即可。

7.4 网页版界面:Open WebUI(原名Ollama WebUI)

如果你希望有一个通过浏览器就能访问的、类似ChatGPT的漂亮界面,并且可以分享给团队其他成员使用,那么Open WebUI是一个绝佳的选择。它本质上是一个自托管的网页应用,需要部署在你的服务器上(可以和Ollama在同一台服务器)。

部署Open WebUI通常用Docker最简单:

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

部署完成后,在浏览器访问 http://你的服务器IP:3000,首次打开需要注册一个管理员账号,然后在设置里添加Ollama后端地址(http://host.docker.internal:11434 或 http://服务器内网IP:11434),就可以使用了。它的功能非常全面,支持多用户、对话分享、插件系统等。

选择哪种客户端,完全取决于你的使用场景和习惯。我个人是混合使用:日常快速问答用Chatbox,编程时用VS Code的Continue插件,需要分享给同事看时就用Open WebUI。你的DeepSeek大脑已经准备就绪,现在可以用任何你喜欢的方式去唤醒它了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐