• 云主机操作系统:centos7(建议用更高的版本)
  • 通过docker 部署dify,可以使用公网访问
  • 依赖工具 yum

一、安装docker&dify

1、docker

清理并生成缓存

yum clean all
yum makecache

安装基础依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

安装docker引擎

# 安装最新版本 
yum install -y docker-ce docker-ce-cli containerd.io

启动docker服务

#验证docker版本
docker --version
# 启动服务
systemctl start docker

# 设置开机自启
systemctl enable docker

# 验证服务状态 输出为running正常
systemctl status docker

配置镜像加速

#创建配置文件目录(已存在可跳过)
mkdir -p /etc/docker
 
#通过命令行生成配置(推荐新手)
vi /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com"
    ]
}

#使用配置生效
sudo systemctl daemon-reload 
sudo systemctl restart docker 

安装docker compose

yum install docker compose

# 验证安装(V2版本)
docker compose version

2、dify

可以先克隆到本地,使用xftp上传,也可以直接下载

 git clone https://github.com/langgenius/dify.git
 
 #cd 进入目录
 cd dify/docker

配置环境变量.env

#复制环境变量
cp .env.example .env
#编辑
vi .env

#修改访问地址

CONSOLE_API_URL=http://服务器地址:端口
CONSOLE_WEB_URL=http://服务器地址
SERVICE_API_URL=http://服务器地址
APP_API_URL=http://服务器地址
APP_WEB_URL=http://服务器地址

#修改默认端口 80端口需要备案才可以使用
EXPOSE_NGINX_PORT=端口号

拉取dify镜像

docker compose up -d

#查看服务状态
docker ps

浏览器访问dify

http://服务器地址:端口

3、测试访问

确保云主机的安全策略配置了入站和出站

# 在云主机上测试
curl http://localhost:修改后的端口

# 从外网测试(使用您的公网 IP)
curl http://服务器地址:端口

#如果不通
#查看防火墙是否开放
sudo firewall-cmd --list-all

检查 Docker 端口映射
docker ps --format "table {{.Names}}\t{{.Ports}}"

# 测试本地访问
curl -I http://localhost:8080
curl -I http://localhost:3000

# 检查 Nginx 日志
docker logs docker-nginx-1 --tail 50

# 检查 Web 服务日志
docker logs docker-web-1 --tail 50


问题 1:端口已开放但仍无法访问

检查项:

- 确认云主机有公网 IP

- 确认安全组规则已生效(可能需要等待几分钟)

- 检查 Nginx 配置中的 `server_name` 是否正确

问题 2:访问时显示 502 Bad Gateway

错误表现:

- 浏览器控制台显示:`502 (Bad Gateway)`

- API 请求 `/console/api/setup` 返回 502 错误

- 返回 HTML 错误页面而不是 JSON:`Unexpected token '<', "<html><h"... is not valid JSON`

问题原因:

Nginx 无法连接到后端 API 服务,可能的原因:

1. **API 服务未正常运行** - docker-api-1 容器未启动或崩溃

2. **Nginx 反向代理配置错误** - proxy_pass 地址不正确

3. **Docker 网络问题** - 容器间无法通信

4. **API 服务监听地址错误** - 服务未监听在正确地址

检查步骤一:检查 API 服务状态(最重要)


# 检查 API 容器是否运行
docker ps | grep api

# 如果容器未运行,查看原因
docker ps -a | grep api

# 查看 API 服务详细日志
docker logs docker-api-1 --tail 200

# 检查 API 服务是否正常响应
docker exec docker-api-1 curl -I http://localhost:5001/health
# 或
docker exec docker-api-1 curl http://localhost:5001/console/api/setup

检查步骤二:如果 API 服务未运行


# 启动 API 服务
docker compose start api

# 或重启 API 服务
docker compose restart api

# 如果启动失败,查看详细错误
docker compose logs api

检查步骤三:#检查 Docker 网络连接

# 检查容器是否在同一网络
docker network inspect docker_default | grep -A 10 "Containers"

# 从 Nginx 容器测试能否访问 API 容器
docker exec docker-nginx-1 ping -c 3 api

# 从 Nginx 容器测试 API 服务
docker exec docker-nginx-1 curl -I http://api:5001/health
docker exec docker-nginx-1 curl http://api:5001/console/api/setup

# 检查 API 服务监听地址

# 检查 API 服务监听的地址和端口
docker exec docker-api-1 netstat -tlnp | grep 5001
# 或
docker exec docker-api-1 ss -tlnp | grep 5001

# 应该显示类似:0.0.0.0:5001 或 :::5001
# 如果是 127.0.0.1:5001,则只能本机访问,需要修改配置

检查步骤四:查看 Nginx 错误日志

# 查看 Nginx 错误日志(最详细的错误信息)
docker logs docker-nginx-1 2>&1 | grep -i error | tail -50

# 查看 Nginx 访问日志
docker logs docker-nginx-1 2>&1 | tail -50
修复方案

方案 A:API 服务未启动**

docker compose up -d api

docker compose logs -f api  # 查看启动日志

方案 B:Nginx 配置错误

- 检查 docker-compose.yml 中的 Nginx 配置

- 确保有正确的 API 反向代理配置

- 重启 Nginx:`docker compose restart nginx`

方案 C:Docker 网络问题

# 重新创建网络

docker compose down

docker compose up -d

方案 D:端口冲突

# 检查端口占用

netstat -tlnp | grep 5001

# 如果被占用,修改 docker-compose.yml 中的端口配置

问题 3:访问时显示 403 Forbidden

可能原因:

- Nginx 配置权限问题

- 检查 Nginx 配置中的文件路径和权限

问题 4:浏览器控制台显示 `ERR_CONNECTION_TIMED_OUT` 和 `Failed to fetch`

错误表现:

- 页面可以打开,但显示加载中或空白

- 控制台报错:`net::ERR_CONNECTION_TIMED_OUT`

- API 请求失败:`/console/api/setup` 无法访问

- `TypeError: Failed to fetch`

可能原因:

1. **Nginx 反向代理配置错误** - API 请求未正确转发到后端

2. **API 服务未正常运行** - docker-api-1 服务有问题

3. **网络连接问题** - 容器间网络不通

4. **CORS 跨域问题** - 前端和后端域名/端口不匹配

排查步骤:

步骤 1:检查 API 服务状态

# 检查 API 服务是否正常运行

docker ps | grep api


# 查看 API 服务日志

docker logs docker-api-1 --tail 100


# 检查 API 服务健康状态

docker exec docker-api-1 curl -I http://localhost:5001/health

# 或

docker exec docker-api-1 curl http://localhost:5001/console/api/setup

 步骤 2:检查 Nginx 反向代理配置

# 查看 Nginx 配置文件

docker exec docker-nginx-1 cat /etc/nginx/conf.d/default.conf

# 检查 Nginx 日志

docker logs docker-nginx-1 --tail 100

# 测试 Nginx 是否能访问 API

docker exec docker-nginx-1 curl http://api:5001/health

**关键检查点:**

- Nginx 配置中应该有类似这样的反向代理配置:

```nginx

location /console/api {

    proxy_pass http://api:5001;

    proxy_set_header Host $host;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header X-Forwarded-Proto $scheme;

}

步骤 3:检查 Docker 网络连接

# 检查容器网络

docker network ls

docker network inspect docker_default


# 测试容器间网络连通性

docker exec docker-nginx-1 ping -c 3 api

docker exec docker-nginx-1 ping -c 3 web

步骤 4:检查环境变量配置

# 查看 docker-compose.yml 中的环境变量

cat docker-compose.yml | grep -A 20 "api:"

# 检查 API 服务的环境变量(特别是 API_URL、CONSOLE_API_URL 等)

docker exec docker-api-1 env | grep -i url

docker exec docker-web-1 env | grep -i url


**常见配置问题:**

- `CONSOLE_API_URL` 应该指向正确的 API 地址

- 如果通过 Nginx 访问,应该是 `http://114.80.38.139:8081` 或相对路径 `/console/api`

步骤 5:直接测试 API 端点

# 在云主机上直接测试 API

curl http://localhost:5001/console/api/setup

curl http://localhost:5001/health

# 通过 Nginx 测试

curl http://localhost:8081/console/api/setup

步骤 6:检查防火墙和安全组

确保 API 服务端口(5001)在 Docker 网络内部可访问,虽然不需要对外暴露,但容器间必须能通信。

 步骤 7:重启相关服务

cd /path/to/docker

# 重启 API 服务

docker compose restart api

# 重启 Nginx

docker compose restart nginx

# 如果还不行,重启所有服务

docker compose restart

步骤 8:查看完整错误日志

# 查看所有相关服务日志

docker logs docker-api-1 --tail 200

docker logs docker-nginx-1 --tail 200

docker logs docker-web-1 --tail 200

docker logs docker-worker-1 --tail 200

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐