阿里云服务器Docker部署Dify完整版教程(避坑版,解决Nginx重启、端口占用、YAML报错)

前言

近期在阿里云ECS服务器通过Docker Compose部署Dify开源AI应用平台时,踩中了多个常见坑:YAML格式报错、Nginx容器反复重启、80端口占用冲突、配置文件损坏等。本文结合完整实操记录,整理从零到一的干净部署流程,同步附上所有报错的根源分析和一键修复方案,新手照着做就能成功,无需反复调试。

适用场景:阿里云Linux服务器、Docker/Docker Compose环境、全新部署Dify、解决部署中各类启动报错

一、前置准备

1.1 基础环境要求

  • 服务器:阿里云ECS

  • 系统:CentOS/Ubuntu均可(推荐CentOS 7+/Ubuntu 20.04+)

  • 已安装Docker + Docker Compose(未安装可先执行官方一键安装脚本)

  • 阿里云安全组后续需放行8080端口(TCP协议)

1.2 核心说明

  • cp .env.example .env:复制官方模板配置为实际运行配置,包含密钥、端口、数据库参数,必须执行,否则服务无法启动

  • 默认80端口易被nginx/apache/宝塔占用,直接改为8080端口,彻底避免端口冲突

二、完整干净部署流程(从零开始,无残留)

针对旧文件残留、配置损坏问题,先彻底清空旧文件,再重新拉取官方源码,全程复制命令执行即可,无手动改文件失误风险。

步骤1:清空旧文件,避免残留报错

登录服务器终端,依次执行以下命令,删除所有损坏的旧配置和文件夹:

# 强制删除旧的dify文件夹(彻底清空,不留损坏配置)
rm -rf dify

步骤2:拉取Dify官方源码

# 克隆官方仓库
git clone https://github.com/langgenius/dify.git
# 进入docker部署目录
cd dify/docker

步骤3:生成实际运行配置文件(关键)

# 复制示例配置为正式.env文件,生成服务运行必需的密钥、端口、数据库参数
cp .env.example .env

作用说明:.env.example是官方只读模板,.env是项目实际加载的配置文件,不执行此步,所有容器都会启动失败。

步骤4:修改端口,避免80端口占用(核心避坑)

默认配置映射80端口,极易被服务器原有服务占用,导致启动报错address already in use,直接修改端口映射:

  1. 编辑docker-compose.yaml文件:vi docker-compose.yaml

  2. 找到nginx模块下的ports配置项,默认格式:
    `ports:

  • EXPOSENGINXPORT:−80:{EXPOSE_NGINX_PORT:-80}:EXPOSENGINXPORT:80:{NGINX_PORT:-80}”`
  1. 直接修改为:
    `ports:
  • “8080:80”`

严禁修改:nginx模块下的NGINX_PORT、NGINX_WORKER_PROCESSES等环境变量,改了会直接导致Nginx报错重启!仅修改ports端口映射行即可。

保存退出:按Esc → 输入:wq → 回车

步骤5:一键启动所有容器

# 后台启动所有服务
docker compose up -d

步骤6:验证Nginx容器状态(判断是否成功)

# 查看nginx容器运行状态
docker ps | grep nginx

出现以下结果,代表部署成功

d93a23bcf8   nginx:latest                                "sh -c 'cp /docker-e…"   25 seconds ago   Up 13 seconds                      0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp   docker-nginx-1

关键标识:Up 正常运行0.0.0.0:8080->80/tcp端口映射成功

三、部署过程高频报错及修复(本文实操踩坑)

报错1:Top-level object must be a mapping(YAML格式错误)

  • 报错原因:配置文件开头加了非法字符(如EOF)、缩进错误、用Tab键缩进、冒号后无空格

  • 修复方案:删除yml文件首行多余字符(严禁加EOF),统一用2个空格缩进,冒号后加空格,重新启动

报错2:Nginx容器反复Restarting,日志报worker_processes无效

  • 报错原因:手动修改了NGINX_WORKER_PROCESSES等内部环境变量,导致Nginx配置语法错误

  • 修复方案:不改动任何nginx内部环境变量,仅修改ports端口映射;若配置已损坏,直接删除整个nginx目录,重新拉取源码

报错3:listen tcp4 0.0.0.0:80: bind: address already in use(端口占用)

  • 报错原因:服务器80端口被原有Nginx、Apache、宝塔面板占用

  • 修复方案:按照本文步骤,将端口映射改为8080:80,彻底避开80端口冲突

四、访问Dify平台

  1. 放行阿里云安全组:登录阿里云控制台 → ECS实例 → 安全组 → 入方向 → 添加规则,放行TCP 8080端口,授权对象0.0.0.0/0

  2. 浏览器访问地址(务必用http,不要用https):

  3. 打开后注册管理员账号(邮箱自定义,密码自行设置),即可进入Dify后台使用

五、后续常用命令

# 停止所有容器
docker compose down

# 查看容器日志(排查问题)
docker logs docker-nginx-1

# 重启所有容器
docker compose restart

六、总结

Dify Docker部署核心避坑点:不改动Nginx内部环境变量、提前改端口避开80占用、保留官方默认配置、执行cp .env.example .env生成配置。按照本文流程操作,可一次性解决所有启动报错,全程10分钟内完成部署,适合新手快速上手。

原创不易,转载请注明出处,如有其他问题可评论区留言交流!

(注:文档部分内容可能由 AI 生成)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐