选择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

使用 nohuptmux 运行模型(临时测试)

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 客户端配置
  1. 安装 Chatbox
    Chatbox 官网 下载客户端。

  2. 配置模型地址
    在 Chatbox 中添加自定义模型:

    • 模型名称: deepseek-r1:8b
    • API 地址: http://<你的服务器IP>:11434
    • 模型类型: 选择与 Ollama 兼容的选项(如 OllamaCustom)。
  3. 测试对话
    输入消息测试,确认响应来自服务器。


六、安全建议

  1. 限制访问 IP
    在防火墙中仅允许可信 IP 访问 11434 端口:

    sudo ufw allow from <客户端IP> to any port 11434
    
  2. 启用 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
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐