Linux系统环境使用ollama部署Deepseek-r1模型完全操作记录(无GPU模式)
linux系统环境下,使用ollama部署大模型的实际操作完全记录,仅供参考。
文章目录
选择ollama部署,官方安装指导地址:(https://github.com/ollama/ollama/blob/main/docs/linux.md)
系统配置:
- 16 vcpu ,48G内存,无GPU,存储2T
- Ubuntu 22.04.5 LTS
一、官方推荐自动安装(intall) Ollama
To install Ollama, run the following command:
curl -fsSL https://ollama.com/install.sh | sh
实际操作:
# 复制命令执行:下载install.sh并自动安装
~$ curl -fsSL https://ollama.com/install.sh | sh
>>> Installing ollama to /usr/local
>>> Downloading Linux amd64 bundle
curl: (16) Error in the HTTP2 framing layer # # # #
# 错误 curl: (16) Error in the HTTP2 framing layer 表示在使用 HTTP/2 协议与服务器通信时,HTTP/2 的帧层(framing layer)遇到了问题。
# 错误原因:去除服务器问题,网络配置问题,最大可能是curl版本较旧,不支持最小的HTTP/2特征
# 解决方法就是升级curl,或者强制使用http1.1协议
# 升级curl
~$ $ apt list curl -a # 查看curl版本
Listing... Done
curl/jammy-updates,jammy-security,now 7.81.0-1ubuntu1.20 amd64 [installed]
curl/jammy 7.81.0-1 amd64
~$ sudo apt update
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease [128 kB]
Hit:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease
Get:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-security InRelease [129 kB]
Get:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 Packages [2,388 kB]
Get:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/universe amd64 Packages [1,194 kB]
Fetched 3,838 kB in 4s (1,092 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
~$ sudo apt upgrade curl # 更新curl到7.81.0
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
curl is already the newest version (7.81.0-1ubuntu1.20).
Calculating upgrade... Done
# 再次执行ollama install命令,发现还是之前的错误提示
~$ sudo curl -fsSL https://ollama.com/install.sh | sh
>>> Cleaning up old version at /usr/local/lib/ollama
>>> Installing ollama to /usr/local
>>> Downloading Linux amd64 bundle
curl: (16) Error in the HTTP2 framing layer # # # #
~$ $ curl --version #查看当前curl版本,是支持http/2协议的
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.18
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd
# 强制使用http1.1
~$ sudo curl -fsSL --http1.1 https://ollama.com/install.sh | sh
>>> Cleaning up old version at /usr/local/lib/ollama
>>> Installing ollama to /usr/local
>>> Downloading Linux amd64 bundle
######################################################################## 100.0%
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
>>> The Ollama API is now available at 127.0.0.1:11434.
>>> Install complete. Run "ollama" from the command line.
WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode.
#至此安装完成。
#
使用官方推荐的标准安装方式安装,有时候会报错,只要注意提示内容,针对处理基本上都能完成。实在不行可以手动安装,但要注意主要文件的路径,以下是标准安装的文件路径:
~$ tree /usr/local/lib/ollama/
/usr/local/lib/ollama/
├── cuda_v11
│ ├── libcublasLt.so.11 -> libcublasLt.so.11.5.1.109
│ ├── libcublasLt.so.11.5.1.109
│ ├── libcublas.so.11 -> libcublas.so.11.5.1.109
│ ├── libcublas.so.11.5.1.109
│ ├── libcudart.so.11.0 -> libcudart.so.11.3.109
│ ├── libcudart.so.11.3.109
│ └── libggml-cuda.so
├── cuda_v12
│ ├── libcublasLt.so.12 -> libcublasLt.so.12.8.4.1
│ ├── libcublasLt.so.12.8.4.1
│ ├── libcublas.so.12 -> libcublas.so.12.8.4.1
│ ├── libcublas.so.12.8.4.1
│ ├── libcudart.so.12 -> libcudart.so.12.8.90
│ ├── libcudart.so.12.8.90
│ └── libggml-cuda.so
├── libggml-base.so
├── libggml-cpu-alderlake.so
├── libggml-cpu-haswell.so
├── libggml-cpu-icelake.so
├── libggml-cpu-sandybridge.so
└── libggml-cpu-skylakex.so
2 directories, 20 files
~$ tree /usr/local/bin
/usr/local/bin
└── ollama
推荐安装完成,会自动创建ollama.service文件,用于配置systemctl启动
文件路径:/etc/systemd/system/ollama.service
~$ cat /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
[Install]
WantedBy=default.target
可以看到其中用户和用户组都是ollama,查看/usr/local/bin/和/usr/local/ollama/的属性会发现其用户组和用户名为root,所以还需要修改权限(关于修改/usr/local/bin/ollama和/usr/local/lib/ollama权限是否是必要的,没有验证,反正我是修改了:)。
~$ ls -l /usr/local/bin/
total 31132
-rwxr-xr-x 1 root root 31879104 Mar 18 13:16 ollama
~$ ls -l /usr/local/lib/
total 8
drwxr-xr-x 4 root root 4096 Mar 19 09:20 ollama
如果运行时出现权限问题:手动删除ollam,重新创建即可
# 删除ollama用户和用户组
~$ sudo userdel ollama
~$ sudo groupdel ollama
# 创建ollama用户
~$ sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
二、运行ollama serve服务
常用命令:
# 启动ollama service
命令:ollama serve
# 查看ollama版本信息
命令:ollama --version
# 下载模型到本地(例如:deepseek-r1:8b,可到ollama官网查看)
命令:ollama pull 模型名称
# 加载模型,本地如果没有该模型,则会自动下载并加载,退出后删除。
命令:ollama run 模型名称
# 列出本地模型
命令:ollama list
# 查看正在运行的模型
命令:ollama ps
推荐:通过systemctl启动ollama serve
# 重新加载systemctl服务,并开机自动运行ollama
~$ sudo systemctl daemon-reload
~$ sudo systemctl enable ollama
# 启动ollama
~$ sudo systemctl start ollama
# 查看状态
~$ sudo systemctl status ollama
● ollama.service - Ollama Service
Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-03-19 11:57:15 CST; 2h 59min ago
Main PID: 1839075 (ollama)
Tasks: 22 (limit: 57672)
Memory: 4.7G
CPU: 1min 21.214s
CGroup: /system.slice/ollama.service
└─1839075 /usr/local/bin/ollama serve
Mar 19 14:37:37 hh-dk ollama[1839075]: time=2025-03-19T14:37:37.713+08:00 level=INFO source=download.go:176 msg="downloading f4d24e>
Mar 19 14:37:39 hh-dk ollama[1839075]: time=2025-03-19T14:37:39.906+08:00 level=INFO source=download.go:176 msg="downloading 0cb05c>
Mar 19 14:38:13 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:38:13 | 200 | 1m37s | 127.0.0.1 | POST "/api/pull"
Mar 19 14:39:50 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:39:50 | 200 | 27.124µs | 127.0.0.1 | HEAD "/"
Mar 19 14:39:50 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:39:50 | 200 | 408.124µs | 127.0.0.1 | GET "/api/tags"
Mar 19 14:40:18 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:40:18 | 200 | 26.125µs | 127.0.0.1 | HEAD "/"
Mar 19 14:40:18 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:40:18 | 200 | 452.857µs | 127.0.0.1 | GET "/api/tags"
Mar 19 14:41:00 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:41:00 | 200 | 27.472µs | 127.0.0.1 | HEAD "/"
Mar 19 14:41:00 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:41:00 | 200 | 327.923µs | 127.0.0.1 | GET "/api/tags"
Mar 19 14:55:40 hh-dk ollama[1839075]: [GIN] 2025/03/19 - 14:55:40 | 200 | 47.571µs | 127.0.0.1 | GET "/api/version"
三、下载模型,运行测试
使用命令:ollama pull 模型名称
# 例如下载官网deepseek-r1:8b模型,具体可浏览ollama官网https://ollama.com/search
~$ ollama pull deepseek-r1:8b
# 模型下载完后,运行模型,以deepseek-r1:8b为例
~$ ollama run deepseek-r1:8b
>>> hi
<think>
</think>
Hello! How can I assist you today? 😊
>>>
>>> /bye
~$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
deepseek-r1:8b 28f8fd6cdc67 6.5 GB 100% CPU 4 minutes from now
~$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
deepseek-r1:8b 28f8fd6cdc67 6.5 GB 100% CPU 3 minutes from now
~$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
需要注意的是:
- 以此种方式加载模型,模型会在前台运行,退出后服务就停止了。
- 不下载直接使用
ollama run
命令加载模型,如果本地没有,则会自动下载并加载。但是/bye
退出模型后一段时间后就不见了。(不知道是我系统问题,还是都这样,大家可以自己试试) - 对话模式>>>输入:/bye 退出当前会话
四、API接口调用
ollama API调用方式是通过http://localhost:11434/api/方式,默认端口11434
具体内容可以浏览官方GITHUB文档:ollama/docs/api.md at main · ollama/ollama(https://github.com/ollama/ollama/blob/main/docs/api.md)
1.所以我们首先得确认防火墙是否允许11434,或者直接配置放行:
~$ sudo ufw allow 11434/tcp
~$ sudo ufw reload
# 查看ufw情况,看到11434状态为:ALLOW
~$ sudo ufw status
Status: active
To Action From
-- ------ ----
11434 ALLOW Anywhere
11434 (v6) ALLOW Anywhere (v6)
sudo ss -tuln | grep 11434 # 查看端口监听情况
2.Ollama 的 ollama serve
服务默认会在后台运行并管理模型。要让模型常驻内存,通过 API可以 触发模型加载,或修改配置实现启动时预加载。
- 手动触发模型预加载(临时生效)
发送一个空请求到 Ollama API,触发模型加载到内存:
curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:8b", "prompt": "test", "stream": false}'
$ curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:8b", "prompt": "test", "stream": false}'
{"model":"deepseek-r1:8b","created_at":"2025-03-24T08:46:09.097146883Z","response":"\u003cthink\u003e\n\n\u003c/think\u003e\n\nIt seems like you're testing something. How can I assist you today? If you have any questions or need information, feel free to ask! 😊","done":true,"done_reason":"stop","context":[128011,1985,128012,128013,271,128014,271,2181,5084,1093,499,2351,7649,2555,13,2650,649,358,7945,499,3432,30,1442,499,617,904,4860,477,1205,2038,11,2733,1949,311,2610,0,27623,232],"total_duration":23060325118,"load_duration":4415434282,"prompt_eval_count":4,"prompt_eval_duration":1821826666,"eval_count":36,"eval_duration":16822278012}
模型加载后,即使没有客户端连接,也会在内存中保留一段时间(取决于 Ollama 的配置)。
- 配置 Ollama 服务自动预加载模型(推荐)
修改 Ollama 的 Systemd 服务文件,在启动时预加载模型:
sudo nano /etc/systemd/system/ollama.service
在 [Service]
部分添加 Environment="OLLAMA_KEEP_ALIVE=10m"
(保持模型至少10 分钟,ollama默认好像是5分钟)或直接预加载:
[Service]
Environment="OLLAMA_MODELS=deepseek-r1:8b"
重启服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
使用 nohup
或 tmux
运行模型(临时测试)
nohup ollama run deepseek-r1:8b > /dev/null 2>&1 &
# 或
tmux new-session -d 'ollama run deepseek-r1:8b'
五、允许外部客户端通过 HTTP 访问模型
1.配置Ollama 监听所有外部 IP
默认情况下,Ollama 可能只绑定到 127.0.0.1
。需修改监听地址为 0.0.0.0
:
sudo systemctl edit ollama.service
在打开的编辑器中添加:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
保存后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
2. 验证监听状态
sudo ss -tuln | grep 11434
输出应包含 0.0.0.0:11434
。
3. 配置防火墙(如未完成)
确认防火墙允许 11434 端口:
sudo ufw allow 11434/tcp
sudo ufw reload
4. 客户端连接测试
其他设备通过 Chatbox 或 curl
测试:
curl http://<你的服务器IP>:11434/api/tags
应返回模型列表(包含 deepseek-r1:8b
)。
5.Chatbox 客户端配置
-
安装 Chatbox
从 Chatbox 官网 下载客户端。 -
配置模型地址
在 Chatbox 中添加自定义模型:- 模型名称:
deepseek-r1:8b
- API 地址:
http://<你的服务器IP>:11434
- 模型类型: 选择与 Ollama 兼容的选项(如
Ollama
或Custom
)。
- 模型名称:
-
测试对话
输入消息测试,确认响应来自服务器。
六、安全建议
-
限制访问 IP
在防火墙中仅允许可信 IP 访问 11434 端口:sudo ufw allow from <客户端IP> to any port 11434
-
启用 HTTPS(可选)
使用 Nginx 反向代理并配置 SSL 证书:server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:11434; proxy_set_header Host $host; } }
完成以上步骤后,其他客户端即可通过 http://IP:11434
访问你的模型。如果遇到连接问题,可检查服务日志:
journalctl -u ollama -f
3.关于CORS安全机制
这里涉及JavaScript跨域请求权限CORS安全机制,允许Web应用从不同的域访问资源。默认情况下,Ollama可能只允许来自同源的请求,即与服务器相同的域名、协议和端口。如果客户端(比如Chatbox)运行在浏览器中,并且尝试从不同的域或端口访问Ollama的API,浏览器会阻止这种请求,除非服务器明确允许。
测试环境下只需在ollama.service文件中添加以下代码即可
[Service]
# 允许任意跨域请求
Environment="OLLAMA_ORIGINS=*"
ollama.service文件
/etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="OLLAMA NO GPU=1"
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
[Install]
WantedBy=multi-user.target
七、备注
自动安装建立的ollama.service文件
hhwzy-dk@hhwzy-dk:/$ cat /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
[Install]
WantedBy=default.target
几个安装ollama安装替代方法
# 方法一
# 使用 wget 替代 curl
wget --retry-connrefused --waitretry=30 -O - https://ollama.com/install.sh | sh
# --retry-connrefused:即使连接被拒绝也重试。
# --waitretry=30:每次重试最多等待 30 秒。
# 方法二
# 在 curl 命令中加入重试和 SSL 协议指定参数:
curl -fL --retry 3 --retry-delay 5 --proto '=https' https://ollama.com/install.sh | sh
# --retry 3:失败后自动重试 3 次。
# --retry-delay 5:每次重试间隔 5 秒。
# --proto '=https':强制使用 HTTPS 协议,避免协商问题。
# 方法三
# 直接下载安装包:
wget https://ollama.com/download/ollama-linux-amd64
#如果速度慢,可尝试国内镜像(如有)或代理。
# 赋予执行权限并安装:
chmod +x ollama-linux-amd64
sudo ./ollama-linux-amd64
# 方法三执行结果:
: <<'END'
--2025-03-19 18:09:43-- https://ollama.com/download/ollama-linux-amd64
正在解析主机 ollama.com (ollama.com)... 34.36.133.15
正在连接 ollama.com (ollama.com)|34.36.133.15|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 307 Temporary Redirect
位置:https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64 [跟随至新的 URL]
--2025-03-19 18:09:45-- https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64
正在解析主机 github.com (github.com)... 20.205.243.166
正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://github.com/ollama/ollama/releases/download/v0.6.2/ollama-linux-amd64 [跟随至新的 URL]
--2025-03-19 18:09:45-- https://github.com/ollama/ollama/releases/download/v0.6.2/ollama-linux-amd64
再次使用存在的到 github.com:443 的连接。
已发出 HTTP 请求,正在等待回应... 404 Not Found
2025-03-19 18:09:45 错误 404:Not Found。
END
更多推荐
所有评论(0)