Ubuntu内网环境Dify全栈部署实战:从代理配置到镜像离线加载

张开发
2026/5/24 0:43:58 15 分钟阅读
Ubuntu内网环境Dify全栈部署实战:从代理配置到镜像离线加载
1. 内网环境部署Dify的核心挑战在企业内网环境中部署Dify这类AI应用平台最大的难点在于如何解决外网资源访问问题。由于安全策略限制内网服务器通常无法直接访问互联网而Dify的部署又需要下载大量Docker镜像和依赖包。我曾在多个金融客户现场遇到过类似场景经过多次实践总结出一套可靠的解决方案。首先需要明确的是完整部署Dify需要以下关键资源Docker基础镜像如PostgreSQL、Redis等Dify核心组件镜像API、Web、Worker等第三方服务镜像Weaviate向量数据库等Python依赖包和系统工具这些资源在内网环境中都需要通过离线方式获取。我建议采用先外后内的策略先在可联网的环境准备好所有资源再通过安全渠道传输到内网服务器。这种方法虽然步骤稍多但能确保部署过程的可靠性。2. 准备工作构建离线资源包2.1 搭建临时联网环境虽然最终部署环境是内网但我们需要一个临时的联网环境来准备资源。推荐使用与内网服务器相同版本的Ubuntu系统如22.04 LTS这样可以避免因系统差异导致的问题。我在实际项目中通常会准备一台配置相近的测试服务器。关键准备工作包括安装最新版Docker和Docker Compose配置足够的磁盘空间建议至少50GB确保可以访问Docker Hub和GitHub# 安装Docker sudo apt-get update sudo apt-get install -y docker.io docker-compose sudo systemctl enable --now docker2.2 下载Dify全套镜像这里有个小技巧先通过docker-compose正常部署一次Dify让系统自动拉取所有需要的镜像。这样能确保不会遗漏任何依赖。git clone https://github.com/langgenius/dify.git cd dify/docker docker-compose up -d等所有容器启动完成后使用docker images命令查看已下载的镜像列表。建议记录下每个镜像的名称和版本号方便后续管理。2.3 打包镜像资源将镜像保存为离线包有两种常用方式使用docker save命令打包单个镜像使用docker-compose bundle生成整体包我更喜欢第一种方式因为更灵活。下面是具体操作# 创建保存目录 mkdir -p ~/dify-offline/images # 保存所有镜像 docker images --format {{.Repository}}:{{.Tag}} | grep -v none | while read image; do filename$(echo $image | sed s[/[_]g).tar docker save -o ~/dify-offline/images/$filename $image done这样就会把所有镜像保存为单独的tar文件。为了便于传输可以进一步打包压缩tar czvf dify-images.tar.gz -C ~/dify-offline/images .3. 内网服务器环境配置3.1 基础环境准备内网服务器需要预先安装一些基础工具。由于无法联网我们需要提前下载好所有deb安装包。# 在联网环境准备安装包 mkdir -p ~/dify-offline/debs apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \ --no-conflicts --no-breaks --no-replaces --no-enhances \ docker.io docker-compose git python3-pip | grep ^\w | sort -u)将这些deb包复制到内网服务器后可以使用以下命令安装# 在内网服务器安装 sudo dpkg -i *.deb sudo apt-get install -f3.2 加载离线镜像将之前打包的镜像文件传输到内网服务器后加载镜像有两种方式批量加载所有镜像find ./images -name *.tar -exec docker load -i {} \;按需加载特定镜像docker load -i postgres-15-alpine.tar docker load -i redis-6-alpine.tar加载完成后使用docker images检查是否所有镜像都已就位。我遇到过因磁盘空间不足导致加载失败的情况所以建议提前检查df -h确认磁盘空间。4. 部署与配置Dify服务4.1 部署文件准备将Dify的源码目录包含docker-compose.yml完整复制到内网服务器。建议放在/opt目录下sudo cp -r dify /opt/ cd /opt/dify/docker修改.env配置文件时有几个关键参数需要注意# 数据库配置 POSTGRES_PASSWORDyour_strong_password REDIS_PASSWORDyour_redis_password # 服务监听地址 API_BASE_URLhttp://your-server-ip:5001 WEB_BASE_URLhttp://your-server-ip:30004.2 启动服务由于是离线环境启动时需要添加--no-pull参数避免尝试从网络拉取镜像docker-compose up -d --no-pull启动后使用以下命令检查服务状态docker-compose ps正常情况下你应该看到11个容器都处于运行状态。如果某个容器反复重启可以使用docker logs 容器名查看具体错误。4.3 常见问题排查在内网环境中我遇到过几个典型问题端口冲突确保80、443、5432等端口没有被其他服务占用权限问题检查/var/run/docker.sock的权限资源不足Dify对内存要求较高建议服务器至少8GB内存一个实用的检查脚本# 检查端口占用 sudo netstat -tulnp | grep -E 80|443|5432 # 检查docker权限 ls -l /var/run/docker.sock # 检查资源使用 free -h docker stats --no-stream5. 后续维护与更新5.1 数据备份策略内网环境的数据备份尤为重要。建议定期备份以下数据# 备份PostgreSQL数据 docker exec -t docker-db-1 pg_dumpall -U postgres dify-db-backup.sql # 备份配置文件 tar czvf dify-config-backup.tar.gz /opt/dify/docker/.env /opt/dify/docker/docker-compose.yml5.2 版本升级方案当需要升级Dify版本时可以采用以下步骤在联网环境拉取新版本镜像导出新镜像并传输到内网在内网加载新镜像更新docker-compose.yml文件执行滚动更新docker-compose down docker-compose up -d --no-pull在实际操作中我建议先在测试环境验证升级过程确认无误后再在生产环境执行。升级前务必备份所有重要数据。

更多文章