1. 项目概述
ollama作为一款轻量级的大模型本地运行工具,正在开发者社区快速流行。但在实际企业部署中,我们经常遇到服务器无法连接外网的特殊场景——可能是出于安全策略限制,或是测试环境网络隔离要求。这就引出了我们今天要解决的核心问题:如何在完全离线的Linux/Windows服务器上部署ollama运行环境?
我最近刚完成某金融机构AI实验室的离线部署项目,他们的研发服务器集群位于严格的内网环境,无法访问任何外部资源。通过本文,我将分享一套经过实战验证的完整方案,包含离线包制作、依赖项处理、模型预加载等关键环节。这个方案同样适用于军工、政务等对网络隔离有严格要求的场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与离线包制作
2.1 基础环境规划
在开始之前,我们需要明确几个关键约束条件:
- 目标机器架构(x86_64/ARM)
- 操作系统版本(CentOS 7/8, Ubuntu 20.04/22.04等)
- 存储空间要求(建议至少50GB空闲空间)
- 是否需要GPU支持
建议准备一台与目标环境架构相同的联网机器作为打包机,这样可以避免兼容性问题。我遇到过一个典型案例:在x86机器上打包的ollama二进制无法在ARM架构的华为泰山服务器上运行。
2.2 离线资源下载
通过联网机器下载以下必备资源:
bash复制# 官方安装脚本(用于分析依赖关系)
curl -fsSL https://ollama.com/install.sh -o install.sh
# 最新版ollama二进制
wget https://ollama.com/download/ollama-linux-amd64
# 模型预加载(以llama2为例)
ollama pull llama2
关键技巧:使用ldd命令分析二进制依赖:
bash复制ldd ollama-linux-amd64
这会列出所有动态链接库,我们需要将这些.so文件一并打包。
2.3 制作完整离线包
建议按以下目录结构组织:
code复制ollama-offline/
├── bin/
│ └── ollama-linux-amd64
├── lib/
│ ├── libcuda.so.11
│ ├── libcudart.so.11
│ └── ...(其他依赖库)
├── models/
│ └── llama2/
│ ├── blobs/
│ └── manifest.json
└── install.sh
重要提示:不同Linux发行版的库文件路径可能不同。对于CentOS,重点关注/lib64目录;Ubuntu则需要检查/usr/lib/x86_64-linux-gnu。
3. 离线安装流程详解
3.1 系统依赖检查
在目标机器上执行:
bash复制# 检查glibc版本
ldd --version
# 检查GPU驱动(如需GPU加速)
nvidia-smi
常见问题处理:
- 如果提示
GLIBC_2.32 not found,说明系统glibc版本过低 - 缺少基础工具时,可从发行版ISO中提取对应rpm/deb包
3.2 手动部署ollama
bash复制# 创建运行目录
sudo mkdir -p /opt/ollama
sudo cp -r ollama-offline/* /opt/ollama/
# 设置环境变量
echo 'export PATH=$PATH:/opt/ollama/bin' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/ollama/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 权限设置
sudo chmod +x /opt/ollama/bin/ollama-linux-amd64
sudo chown -R $USER:$USER /opt/ollama/models
3.3 服务化配置
创建systemd服务文件/etc/systemd/system/ollama.service:
ini复制[Unit]
Description=Ollama Service
After=network.target
[Service]
ExecStart=/opt/ollama/bin/ollama-linux-amd64 serve
User=ollama
Group=ollama
Environment="LD_LIBRARY_PATH=/opt/ollama/lib"
Restart=always
[Install]
WantedBy=multi-user.target
启动服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
4. 模型管理与优化
4.1 离线导入模型
将预下载的模型拷贝到:
code复制~/.ollama/models/
或者通过环境变量指定自定义路径:
bash复制export OLLAMA_MODELS=/path/to/your/models
4.2 资源限制配置
编辑~/.ollama/config.json:
json复制{
"num_parallel": 2,
"max_loaded_models": 1,
"gpu_layers": 20
}
对于低配置设备,建议:
- 设置
num_parallel=1 - 使用量化模型(如llama2-7b-q4)
- 启用
--low-vram参数
5. 常见问题排查
5.1 启动失败分析
查看详细日志:
bash复制journalctl -u ollama -f
典型错误及解决方案:
-
error while loading shared libraries: libcudart.so.11.0- 确认LD_LIBRARY_PATH包含所有依赖库路径
- 检查CUDA版本兼容性
-
failed to allocate memory- 尝试减小
gpu_layers值 - 使用
--numa参数控制NUMA节点分配
- 尝试减小
5.2 性能调优建议
通过环境变量调整:
bash复制export OLLAMA_NO_CUDA=1 # 强制使用CPU模式
export OLLAMA_KEEP_ALIVE=5m # 模型驻留时间
6. 企业级部署建议
对于生产环境,建议:
- 使用Docker构建离线镜像
- 配置Nginx反向代理实现API网关
- 设置Prometheus监控指标
- 实现模型版本管理机制
示例Dockerfile:
dockerfile复制FROM ubuntu:22.04
COPY ollama-offline /opt/ollama
ENV PATH="/opt/ollama/bin:${PATH}"
ENV LD_LIBRARY_PATH="/opt/ollama/lib"
EXPOSE 11434
ENTRYPOINT ["ollama-linux-amd64", "serve"]
7. 后续维护方案
由于是离线环境,需要建立更新机制:
- 定期在联网环境检查新版本
- 通过U盘/内网FTP传输更新包
- 使用diff工具比对模型差异
- 制定回滚预案
对于模型更新,可以只下载差异部分:
bash复制ollama create -f Modelfile.patch
