保姆级教程:在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 关键网络配置

解决容器连接问题的核心步骤

  1. 编辑Ollama服务配置文件:
sudo vim /etc/systemd/system/ollama.service
  1. [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
  1. 重新加载并重启服务:
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"错误。

解决方案

  1. 确认Ollama服务监听所有网络接口:
netstat -tulnp | grep 11434

应该看到类似输出:

tcp6       0      0 :::11434                :::*                    LISTEN      12345/ollama
  1. 检查防火墙设置:
sudo ufw status

如果需要开放端口:

sudo ufw allow 11434/tcp

5.2 端口冲突问题

如果11434端口被占用,可以修改Ollama监听端口:

  1. 停止Ollama服务:
sudo systemctl stop ollama
  1. 指定新端口启动:
OLLAMA_HOST=0.0.0.0 OLLAMA_PORT=11435 ollama serve
  1. 记得在Dify配置中同步更新端口号。

5.3 模型加载问题

如果模型无法加载,尝试以下步骤:

  1. 检查模型是否下载完成:
ollama list
  1. 重新拉取模型:
ollama pull <model-name>
  1. 检查模型运行日志:
journalctl -u ollama -f

6. 系统优化与维护

部署完成后,还需要进行一些优化以确保系统稳定运行。

6.1 资源监控

查看容器资源使用情况:

docker stats

6.2 日志管理

查看Dify应用日志:

docker-compose logs -f app

查看Ollama服务日志:

journalctl -u ollama -f

6.3 备份策略

定期备份重要数据:

  1. Ollama模型备份:
# 导出模型
ollama export <model-name> > model.bin

# 导入模型
ollama import model.bin
  1. 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环境中,理解容器网络原理至关重要。建议开发者在遇到连接问题时,首先检查服务是否监听正确接口,其次确认防火墙设置,最后验证容器间网络连通性。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐