1. 无网环境部署的核心挑战与解决方案
在完全隔离外网的Linux服务器上部署AI服务栈,就像在荒岛上搭建现代化实验室。我曾在内网科研机构遇到过这样的场景:服务器被物理隔离,但团队急需本地化的大模型能力处理敏感数据。这种环境下,传统依赖网络下载的部署方式完全失效,必须采用离线包+定制脚本的组合方案。
无网部署最大的三个拦路虎是:依赖项缺失、容器网络隔离和硬件适配。以Ollama为例,正常安装时会自动下载CUDA驱动和模型文件,但在离线环境中,这些都需要预先打包。我的经验是建立"离线资源库",包含以下必备组件:
- Ollama二进制安装包(对应系统架构版本)
- DeepSeek R1模型GGUF文件(建议Q4量化版)
- Open WebUI的Docker镜像tar包
- 所有依赖的.deb/.rpm安装包
提示:建议使用相同架构的联网机器预先下载所有资源,通过内网传输工具如scp或物理介质转移至目标服务器
2. Ollama离线安装实战
2.1 定制化安装脚本改造
官方提供的install.sh脚本默认会联网下载资源,我们需要对其进行手术式改造。关键修改点包括:
- 注释掉所有curl下载逻辑
- 添加本地文件检测逻辑
- 保留systemd服务配置功能
# 修改后的关键代码段 LOCAL_OLLAMA_TGZ="./ollama-linux-${ARCH}.tgz" if [ -f "$LOCAL_OLLAMA_TGZ" ]; then status "Installing from local file $LOCAL_OLLAMA_TGZ" $SUDO tar -xzf "$LOCAL_OLLAMA_TGZ" -C "$OLLAMA_INSTALL_DIR" else error "Local Ollama package not found at $LOCAL_OLLAMA_TGZ" fi2.2 模型导入的坑与技巧
离线环境下导入GGUF模型需要特别注意文件权限问题。我建议建立标准化目录结构:
/data/ollama/ ├── bin # 可执行文件 ├── model # 模型存储 │ └── deepseek-r1-32b-q4 │ ├── model.gguf │ └── Modelfile └── open-webui # WebUI数据卷Modelfile的经典配置模板:
FROM ./model.gguf PARAMETER num_ctx 4096 SYSTEM """ 你是DeepSeek-R1模型,专门用于科研辅助 """3. Docker容器的网络迷宫破解
3.1 离线加载镜像的正确姿势
在没有镜像仓库的环境下,需要先在联网机器执行:
docker pull dyrnq/open-webui:main docker save -o open-webui.tar dyrnq/open-webui:main将tar包传输到目标服务器后:
docker load -i open-webui.tar3.2 主机通信的魔法参数
最易出错的OLLAMA_BASE_URL配置,必须使用特殊host名:
docker run -d \ -p 31425:8080 \ --add-host=host.docker.internal:host-gateway \ -v /data/ollama/open-webui:/app/backend/data \ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ --name open-webui \ dyrnq/open-webui:main这个host.docker.internal:host-gateway组合是打通容器与主机网络的关键咒语,能让容器访问到主机上运行的Ollama服务。
4. 生产环境调优指南
4.1 系统服务化配置
通过systemd确保服务稳定性:
# /etc/systemd/system/ollama.service [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="CUDA_VISIBLE_DEVICES=3,2" Environment="OLLAMA_MODELS=/data/ollama/model"执行权限控制:
sudo chown -R ollama:ollama /data/ollama sudo chmod 750 /data/ollama/model4.2 性能优化参数
在Modelfile中添加GPU加速参数:
PARAMETER numa PARAMETER n_gpu_layers 99 PARAMETER flash_attention 1对于3090显卡,建议添加环境变量:
export HIP_VISIBLE_DEVICES=3 export HSA_OVERRIDE_GFX_VERSION=10.3.05. 故障排查手册
症状1:Ollama服务启动失败
- 检查/var/log/syslog中的错误信息
- 验证模型文件权限(ollama用户需可读)
- 确认CUDA驱动版本兼容性
症状2:Open WebUI白屏
- 查看容器日志:
docker logs open-webui - 禁用联网检查:
docker exec -it open-webui sed -i 's/check_network: true/check_network: false/' /app/backend/config.yaml症状3:GPU未调用
- 运行
ollama ps查看GPU内存占用 - 在容器内执行
nvidia-smi验证驱动映射 - 尝试设置
CUDA_VISIBLE_DEVICES=0
在内网某金融机构的实际部署中,我们遇到容器无法访问主机的问题。最终发现是防火墙规则阻止了11434端口,添加以下规则后解决:
sudo iptables -I INPUT -p tcp --dport 11434 -j ACCEPT