纯离线部署查了很多文档,发现很多不全,有些还把命令藏起来变成一个安装脚本才能部署ollama。
最后测通后发现还是比较简单的,纯净系统没有装其他的依赖库和环境。
本文是CentOS7.4纯净版离线环境下部署了ollama后搭载Deepseek-R1:14b跑,其他的模型只要有gguf格式模型包也同样支持上传。
1、下载ollama-linux-amd64.tgz 和deepseek-r1:14b.gguf文件,gguf的文件可以重命名,不影响后面部署。之后先都上传到离线服务器。
2、解压ollama包
sudo tar -C /usr -xzf ollama-linux-amd64.tgz
3、解压完后就可以直接启动ollama
ollama serve
4、启动完后页面会卡住,因为不是后台启动的,这时候可以新开另外一个ssh。
输入ollama list
可以出现查看所有下载的模型,NAME ID SIZE MODIFIED,
输入ps -ef|grep ollama
可以看到有一个ollama serve起着,输入netstat -anltp|grep LISTEN可以看到起着11434端口,则ollama部署完成。
5、修改环境的端口,让外部服务器可以访问。如何修改端口见最后。
vi /etc/profile在最后加上export OLLAMA_HOST=0.0.0.0:11434,之后source /etc/profile
6、vi /etc/systemd/system/ollama.service 输入
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=root
Group=root
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
[Install]
WantedBy=default.target
7、执行命令 #做开机自启
sudo systemctl daemon-reload
systemctl start ollama
systemctl enable ollama
8、创建目录,
sudo mkdir -p /data/modes,
上传gguf文件。在同目录下输入命令
touch Modelfile
在文件中复制以下内容,
①下面三个引号""" """"中间的部分是要去https://ollama.com/library/网站上查到,选择了模型的型号后把Template的复制进去。下面这个是7b的,这边要选择14b的模型复制。
②模型名也要根据自己的模型修改
# 上一步的模型名
FROM ./deepseek-r1:14b.gguf
# 可以到 ollama 网站上的模型库去寻找, 如deepseek-r1 14b 的模板地址: https://ollama.com/library/
# 直接复制 ollama 上的 Template 到如下三个双引号中间
TEMPLATE """{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}
"""
# 这一步参考 ollama 上的 parameters, 但是 ollama 上的14b 是没有参数的, 按照下面的格式添加即可
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"
9、# 通过模型描述文件, 创建并运行 deepseek 模型
ollama create deepseek-r1:14b -f Modelfile
# 查看模型运行列表, 是否正在运行
ollama ls
# 通过 api 调用模型, 检测模型是否运行正常,这一步也可以用postman用http协议发
curl --location --request POST 'http://127.0.0.1:11434/api/generate' \--header 'Content-Type: application/json' \--data '{"model": "deepseek-r1:14b","stream": false, "prompt": "1加1等于几?"}' \-w "Time Total: %{time_total}s\n"
10、修改端口
修改vi /etc/systemd/system/ollama.service,修改里面的11434
之后sudo systemctl daemon-reload,systemctl restart ollama
修改vi /etc/profile在最后加上export OLLAMA_HOST=0.0.0.0:11434里面的11434,之后source /etc/profile
后面可以来看下可视化使用教程(Chatbox+Cherry Studio),没装web版因为web页面要额外装环境。
这里可以再去用ollama list命令看下挂载的模型名,因为有些模型因为导入的时候自己重命名了,可能模型名后面会自己加默认后缀。
Cherry Studio使用
1、安装Cherry Studio
2、点击设置
3、选择硅基流动,关闭启用
4、选择OLLAMA API,点击启用
5、修改API域名为http://10.38.113.233:2222
6、点击添加,输入deepseek-r1:14b
这里可以再去用ollama list命令看下挂载的模型名,因为有些
Chatbox使用
- 安装Chatbox
- 点击设置
- 选择OLLAMA API
- 输入API域名
5、选择模型:deepseek-r1:14b