CentOS 7 老树开新花:从零部署 Dify 全栈应用(含 Go/Rust/GCC 升级避坑)

CentOS 7 老树开新花:从零部署 Dify 全栈应用(含 Go/Rust/GCC 升级避坑)

本文档适用于在 CentOS 7 环境下使用源代码部署 Dify 应用,对应版本 1.9.2。由于系统较旧,部分依赖需手动升级或通过容器化方式解决兼容性问题。


一、安装与配置 Docker

1. 卸载旧版本 Docker(如有)
复制代码
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2. 安装必要依赖
复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3. 添加 Docker 官方 YUM 源
复制代码
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4. 安装 Docker Engine 及相关组件
复制代码
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 启动并设置开机自启
复制代码
sudo systemctl start docker
sudo systemctl enable docker
6. 配置国内镜像加速器

创建 /etc/docker/daemon.json 文件:

复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://gst6rzl9.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "http://mirrors.ustc.edu.cn/",
    "https://mirrors.tuna.tsinghua.edu.cn/",
    "http://mirrors.sohu.com/"
  ]
}
EOF

⚠️ 注意:修改后需重载配置并重启 Docker:

复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker
7. 将当前用户加入 docker 用户组(避免每次使用 sudo
复制代码
# 创建 docker 组(若不存在)
sudo groupadd docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 刷新组权限(关键!否则需重新登录)
newgrp docker

二、部署 Dify API 服务

1. 准备中间件服务(如 Redis、PostgreSQL 等)
  • 修改 docker-compose.middleware.yamlmiddleware.env 中的数据卷路径
  • 上传整个 docker/ 目录到服务器
启动中间件
复制代码
cd /data/dify/docker
docker compose -f docker-compose.middleware.yaml up -d

停止命令:docker compose -f docker-compose.middleware.yaml down


2. 安装构建依赖环境

原因 :Dify 使用的 wandb >= 0.16.0 要求本地存在 Go 编译环境;同时 numpy==2.4.1 需要 GCC ≥ 9.3,而 CentOS 7 默认 GCC 仅为 4.8.5。

(1) 安装 Go(1.23.0)
复制代码
# 下载(使用国内镜像)
wget -O go1.23.0.linux-amd64.tar.gz https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz

# 解压到 /usr/local
sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz

# 配置 PATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

# 验证
go version
(2) 安装 Rust(使用 rsproxy.cn 镜像)
复制代码
# 下载安装脚本
wget -O rustup-init.sh https://rsproxy.cn/rustup-init.sh
chmod +x rustup-init.sh

# 设置国内镜像源
export RUSTUP_DIST_SERVER=https://rsproxy.cn
export RUSTUP_UPDATE_ROOT=https://rsproxy.cn/rustup

# 静默安装(不修改 PATH)
./rustup-init.sh -y --no-modify-path

# 临时加载环境变量
source "$HOME/.cargo/env"

# 验证
rustc --version
cargo --version
(3) 升级 GCC 至 9.3+
复制代码
# 启用 SCL 源
sudo yum install -y centos-release-scl

# 安装 devtoolset-9
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++

# 启用新 GCC(仅当前 shell 有效)
scl enable devtoolset-9 bash

# 验证
gcc --version  # 应显示 9.3.x

建议 :将 scl enable devtoolset-9 bash 加入 ~/.bashrc 以持久生效(但注意可能影响其他程序)。

(4) 安装 uv(现代 Python 包管理器)
复制代码
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"

3. 部署 API 服务
  • 修改 .env 文件中的数据库地址、存储路径、日志目录等配置。
  • 上传 api/ 目录到服务器(首次上传时请注释掉 scp-api.sh 中的启动逻辑)。
首次启动流程
复制代码
cd /data/dify/api

# 安装依赖
uv sync

# 执行数据库迁移(首次必须运行)
flask db upgrade

# 后台启动 API 服务
nohup gunicorn -w 4 -k gevent --bind 0.0.0.0:5019 app:app > dify-api.log 2>&1 &
启动 Celery Worker
复制代码
cd /data/dify/api

# 后台启动 Worker
nohup uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO \
  -Q dataset,generation,mail,ops_trace > dify-worker.log 2>&1 &

🔁 后续重启:只需执行

复制代码
# 启动API服务
nohup gunicorn -w 4 -k gevent --bind 0.0.0.0:5019 app:app > dify-api.log 2>&1 &
# 启动worker
nohup uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO \
  -Q dataset,generation,mail,ops_trace > dify-worker.log 2>&1 &

三、部署 Dify Web 前端

说明 :CentOS 7 无法原生安装 Node.js 20+,因此采用 Docker 容器化部署

1. 构建 Web 镜像(在开发机上操作)
(1) 本地编译(需 Node.js ≥ 22)
复制代码
# 安装依赖
pnpm install --frozen-lockfile

# 构建(内存不足时增加堆大小)
NODE_OPTIONS="--max_old_space_size=4096" NEXT_CONCURRENT_BUILD_LIMIT=1 pnpm build

DIR1="web/.next/standalone/.next"

# 创建目录(-p 表示递归创建,且不报错如果已存在)
mkdir -p "$DIR1" 
cp -r web/.next/static web/.next/standalone/.next/static && cp -r web/public web/.next/standalone/public 

构建产物位于 standalone/ 目录。

(2) 编写 Dockerfile
复制代码
# 使用官方 Node.js 22 Alpine 镜像
FROM node:22-alpine

WORKDIR /app

# 复制构建产物
COPY standalone ./

EXPOSE 3000

CMD ["node", "server.js"]
2. 在服务器部署 Web 服务
复制代码
cd /data/dify/web

# 1. 清理旧容器与镜像
docker stop my-dify-web && docker rm my-dify-web && docker rmi my-dify-web

# 2. 解压新构建包(覆盖 standalone/)
tar -xzf dify-web-standalone.tar.gz

# 3. 构建新镜像
docker build -t my-dify-web .

# 4. 启动容器
docker run -d \
  --name my-dify-web \
  -p 3000:3000 \
  my-dify-web
3. 配置 Web 环境变量
  • 修改 standalone/.env.local 中的 NEXT_PUBLIC_API_URLNEXT_PUBLIC_WEB_URL,指向实际 API 与 Web 地址。

🔄 更新 Web 服务:重复上述"清理 → 解压 → 构建 → 启动"流程,或封装为脚本自动化。


四、注意事项

  1. 权限问题 :确保 /data/dify/ 目录对当前用户可读写。
  2. 防火墙:开放 5019(API)、3000(Web)、以及中间件所需端口(如 6379、5432 等)。
  3. 日志监控 :定期检查 dify-api.logdify-worker.log
  4. 环境持久化 :若使用 scl enable,建议在 ~/.bashrc 中添加 alias 或 wrapper 脚本。

✅ 至此,Dify 已在 CentOS 7 上完整部署。

如遇问题,请优先检查依赖版本、网络连通性及配置文件路径。


希望这份部署文档能帮助你和团队更高效地完成部署!

本文由mdnice多平台发布

相关推荐
开发者每周简报6 天前
AI 代理的难题:工具调用是怎么升级的
人工智能·程序人生·chatgpt·代理
咖啡色格调7 天前
以码为念,以证为章——2048小游戏的软著登记心得
java·程序人生
We.Spring7 天前
Xmind 2025 免费版安装及使用教程(附安装包)
程序人生·xmind·头脑风暴
戴西软件7 天前
PreSys在爆炸与多介质流固耦合中的建模方法:从ALE到SPH的工程实践
linux·python·程序人生·cae
焦糖玛奇朵婷7 天前
做盲盒小程序,如何少走弯路?
数据库·程序人生·小程序·开源软件·软件需求
程序员潇潇8 天前
pytest 参数化测试用例构建
自动化测试·软件测试·功能测试·程序人生·职场和发展·测试用例·pytest
空中湖8 天前
「情感依赖与分手恢复力测试」产品介绍:从拉扯到自我照顾
程序人生
郝学胜-神的一滴8 天前
高并发服务器开发:多进程与多线程实现深度解析
linux·服务器·开发语言·c++·程序人生
逻辑君9 天前
根与星辰【第2章】
人工智能·程序人生
逻辑君10 天前
技术逆向英语|202602015
程序人生