保姆级教程:在Ubuntu 22.04上用Docker部署Dify和Ollama(含网络配置避坑指南)
保姆级教程:在Ubuntu 22.04上用Docker部署Dify和Ollama(含网络配置避坑指南)
在AI应用开发领域,快速搭建本地开发环境是每个开发者必须掌握的技能。本文将带你从零开始,在Ubuntu 22.04系统上使用Docker完整部署Dify和Ollama,并解决部署过程中可能遇到的各种网络连接问题。不同于简单的安装指南,我们特别关注那些容易让新手踩坑的配置细节,确保你能一次性成功部署。
1. 环境准备与系统配置
在开始部署前,我们需要确保Ubuntu系统已经做好充分准备。首先更新系统软件包:
sudo apt update && sudo apt upgrade -y
安装必要的依赖工具:
sudo apt install -y curl wget git vim
系统关键配置检查清单:
- 确保系统内存≥8GB(运行大型语言模型需要足够内存)
- 检查磁盘空间≥50GB(模型文件通常体积较大)
- 确认网络连接稳定(下载Docker镜像和模型需要良好网络)
提示:如果是在云服务器上部署,建议选择配置较高的实例类型,特别是需要运行大型语言模型时。
2. Docker安装与配置
Docker是本次部署的核心工具,我们需要先正确安装和配置Docker环境。
2.1 安装Docker CE
执行以下命令安装Docker官方版本:
# 卸载旧版本(如果有)
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates gnupg-agent software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装Docker引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
验证Docker安装是否成功:
sudo docker run hello-world
2.2 配置Docker用户组
为了避免每次使用docker命令都需要sudo,将当前用户加入docker组:
sudo usermod -aG docker $USER
newgrp docker
2.3 配置Docker镜像加速(国内用户)
对于位于国内的开发者,建议配置镜像加速以提升下载速度:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl restart docker
3. Ollama安装与配置
Ollama是运行本地语言模型的关键组件,我们需要特别注意其网络配置。
3.1 安装Ollama
使用官方脚本安装Ollama:
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,检查服务状态:
systemctl status ollama
3.2 关键网络配置
解决容器连接问题的核心步骤:
- 编辑Ollama服务配置文件:
sudo vim /etc/systemd/system/ollama.service
- 在
[Service]部分添加环境变量:
Environment="OLLAMA_HOST=0.0.0.0"
完整服务文件示例:
[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"
Environment="OLLAMA_HOST=0.0.0.0"
[Install]
WantedBy=default.target
- 重新加载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
3.3 下载语言模型
Ollama支持多种开源语言模型,以下是常用模型的下载命令:
ollama pull llama2 # 基础模型
ollama pull mistral # 性能较好的7B模型
ollama pull llama2:13b # 更大的13B参数模型
注意:模型下载可能需要较长时间,取决于你的网络速度和所选模型大小。
4. Dify安装与配置
Dify是一个开源的AI应用开发平台,我们将使用Docker方式部署。
4.1 获取Dify代码
克隆Dify官方仓库:
git clone https://github.com/langgenius/dify.git
cd dify/docker
4.2 配置环境变量
编辑.env文件,确保包含以下关键配置:
# Ollama服务地址(使用主机IP而非localhost)
OLLAMA_API_BASE_URL=http://<your-server-ip>:11434
# 其他必要配置
APP_WORKSPACE_DIR=/data/dify/storage
DATABASE_URL=postgresql://postgres:postgres@db:5432/dify
REDIS_URL=redis://redis:6379/0
提示:将
<your-server-ip>替换为你Ubuntu服务器的实际IP地址。
4.3 启动Dify服务
使用docker-compose启动所有服务:
docker-compose up -d
检查服务状态:
docker-compose ps
5. 网络连接问题排查
即使按照上述步骤操作,仍可能遇到连接问题。以下是常见问题及解决方案:
5.1 容器间通信问题
症状:Dify无法连接Ollama,出现"max retries exceeded"错误。
解决方案:
- 确认Ollama服务监听所有网络接口:
netstat -tulnp | grep 11434
应该看到类似输出:
tcp6 0 0 :::11434 :::* LISTEN 12345/ollama
- 检查防火墙设置:
sudo ufw status
如果需要开放端口:
sudo ufw allow 11434/tcp
5.2 端口冲突问题
如果11434端口被占用,可以修改Ollama监听端口:
- 停止Ollama服务:
sudo systemctl stop ollama
- 指定新端口启动:
OLLAMA_HOST=0.0.0.0 OLLAMA_PORT=11435 ollama serve
- 记得在Dify配置中同步更新端口号。
5.3 模型加载问题
如果模型无法加载,尝试以下步骤:
- 检查模型是否下载完成:
ollama list
- 重新拉取模型:
ollama pull <model-name>
- 检查模型运行日志:
journalctl -u ollama -f
6. 系统优化与维护
部署完成后,还需要进行一些优化以确保系统稳定运行。
6.1 资源监控
查看容器资源使用情况:
docker stats
6.2 日志管理
查看Dify应用日志:
docker-compose logs -f app
查看Ollama服务日志:
journalctl -u ollama -f
6.3 备份策略
定期备份重要数据:
- Ollama模型备份:
# 导出模型
ollama export <model-name> > model.bin
# 导入模型
ollama import model.bin
- Dify数据备份:
# 备份数据库
docker-compose exec db pg_dump -U postgres dify > dify_backup.sql
7. 高级配置技巧
对于有更高要求的开发者,可以考虑以下优化配置。
7.1 使用Nginx反向代理
配置Nginx作为前端代理,实现HTTPS和安全访问:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
7.2 性能调优
调整Ollama运行参数以获得更好性能:
# 限制CPU使用
OLLAMA_NUM_PARALLEL=4 ollama serve
# 限制内存使用
OLLAMA_MAX_LOADED_MODELS=2 ollama serve
7.3 多模型管理
同时运行多个模型实例:
# 在不同端口启动多个实例
OLLAMA_HOST=0.0.0.0 OLLAMA_PORT=11435 ollama serve --model llama2
OLLAMA_HOST=0.0.0.0 OLLAMA_PORT=11436 ollama serve --model mistral
在实际项目中,我发现最常遇到的问题还是网络配置不正确。特别是在Docker环境中,理解容器网络原理至关重要。建议开发者在遇到连接问题时,首先检查服务是否监听正确接口,其次确认防火墙设置,最后验证容器间网络连通性。
更多推荐

所有评论(0)