# docker-dify-service **Repository Path**: agent-project/docker-dify-service ## Basic Information - **Project Name**: docker-dify-service - **Description**: 使用docker 部署 dify 脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-04 - **Last Updated**: 2025-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dify Docker 服务一键部署脚本 这是一个用于自动化部署 Dify(开源 LLM 应用开发平台)的部署脚本,提供 Python 和 Shell 两个版本,可以一键完成从源码解压到服务启动的全过程。 ## 脚本选择 - **Python版本** (`setup_dify.py`):功能完整,推荐在有Python环境的服务器上使用 - **Shell版本** (`setup_dify.sh`):适用于没有Python环境的服务器,兼容性更好 ## 功能特性 - ✅ 自动解压 Dify 源码包 - ✅ 智能目录管理(美观的交互式菜单选择) - ✅ 智能配置环境变量和端口映射 - ✅ 支持 HTTP/HTTPS 双协议部署 - ✅ 灵活的 IP 绑定配置(支持内网/公网访问) - ✅ 可选择性隐藏 plugin_daemon 端口 - ✅ **自动检测 Docker Compose 版本**(V1/V2 兼容) - ✅ 一键启动 Docker Compose 服务 - ✅ 美观的交互式配置向导(带颜色和图标) - ✅ 端口配置历史记录(记住上次部署的端口) - ✅ 彩色输出和格式化显示,提升用户体验 ## 系统要求 ### Python版本(推荐) - Python 3.6+ - Docker 和 Docker Compose(V1 或 V2) - unzip 命令 ### Shell版本(适用于无Python环境) - Bash 4.0+(大多数Linux发行版默认支持) - Docker 和 Docker Compose(V1 或 V2) - unzip 命令 - 可选:jq(用于更好的JSON解析,如无则使用简单解析) ## Docker Compose 版本兼容性 脚本**自动检测**当前系统安装的 Docker Compose 版本,并自动使用相应的命令格式: - **Docker Compose V2**:使用 `docker compose` 命令(推荐) - **Docker Compose V1**:使用 `docker-compose` 命令(兼容) ### 版本检测逻辑 1. **优先检测 V2**:尝试执行 `docker compose version` 2. **回退检测 V1**:如果 V2 不可用,尝试执行 `docker-compose version` 3. **错误处理**:如果都不可用,显示错误信息并退出 ### 检测信息显示 - **V2 检测成功**:显示绿色信息 `[INFO] 检测到 Docker Compose V2: ...` - **V1 检测成功**:显示黄色信息 `[INFO] 检测到 Docker Compose V1: ...` - **检测失败**:显示红色错误信息并退出 ## 快速开始 ### 1. 准备 Dify 源码包 下载 Dify 的源码压缩包(通常为 `dify-main.zip`)并放置在脚本同目录下。 ### 2. 运行部署脚本 #### Python版本(推荐) ```bash python setup_dify.py ``` #### Shell版本(适用于无Python环境) ```bash # 首先给脚本执行权限 chmod +x setup_dify.sh # 运行脚本 ./setup_dify.sh ``` 脚本会交互式询问以下配置: - 部署模式选择(默认部署 vs 自定义部署) - 目录覆盖选择(如果 dify 目录已存在) - HTTP 端口配置(仅自定义模式) - 使用上次配置 - 自定义配置端口号 - 不对外暴露 - HTTPS 配置(仅自定义模式) - 启用HTTPS安全访问 - 不启用HTTPS - HTTPS 端口配置(启用HTTPS时) - 使用默认端口(443) - 自定义HTTPS端口号 - plugin_daemon 端口配置(仅自定义模式) - 隐藏端口(推荐) - 暴露端口 ### 3. 部署模式选择 脚本首先会显示美观的菜单界面让你选择部署模式: ``` ================================================== 部署模式选择 ================================================== 1. 🚀 默认部署 - 使用 Dify 原始配置,快速部署 (默认) 2. ⚙️ 自定义部署 - 自定义端口和配置 ================================================== 请选择 [1-自定义,默认 默认]: ``` - **1/默认部署**:使用 Dify 原始配置文件,跳过端口配置修改 - **2/自定义部署**:进行交互式配置,自定义端口和设置 - **直接回车**:默认选择默认部署 **注意**:自定义部署模式支持选择性配置,用户可以选择只配置 HTTP、只配置 HTTPS、或两者都配置。如果两个端口都不配置,脚本会自动切换到默认部署模式。 ### 4. 目录覆盖选择 如果 `dify` 目录已存在,脚本会显示美观的菜单界面: ``` [INFO] 目录已存在:/path/to/dify ================================================== 目录冲突处理 ================================================== 1. 🔄 覆盖现有目录(删除后重新解压) 2. ⏭️ 跳过解压(使用现有目录) (默认) 3. ❌ 退出程序 ================================================== 请选择 [1-退出,默认 跳过]: ``` - **1/覆盖**:删除现有目录,使用新的源码包 - **2/跳过**:保持现有目录不变,跳过解压步骤 - **3/退出**:终止脚本执行 - **直接回车**:默认选择跳过 ### 5. 交互界面改进 脚本采用了全新的交互界面设计,提供更好的用户体验: #### 美观的菜单界面 - 使用彩色边框和分隔线 - 添加表情符号图标,让选项更直观 - 清晰的选项编号和描述 - 智能的默认值提示 #### 彩色输出系统 - **红色**:错误信息和警告 - **绿色**:成功操作和完成信息 - **黄色**:提示信息和警告 - **蓝色**:一般信息和说明 - **青色**:命令执行信息 - **粗体**:重要标题和完成提示 #### 智能输入处理 - 支持数字选择(1、2、3...) - 支持关键词选择(覆盖、跳过、退出等) - 支持英文缩写(c、s、q等) - 自动处理大小写不敏感 ### 6. 配置历史记录 脚本会自动保存自定义部署的配置到 `.dify_deploy_config` 文件中,包括: - HTTP 端口号 - HTTPS 设置 - HTTPS 端口号 - plugin_daemon 隐藏设置 - 绑定地址 下次使用自定义部署时,脚本会: 1. **优先使用历史记录**:自动使用上次部署的端口和 HTTPS 设置作为默认值 2. **智能默认值**:如果没有历史记录,HTTP 端口默认为 80,HTTPS 默认为 off 3. **选择性配置**:根据用户实际配置选择性写入端口配置 - 只配置 HTTP:只写入 `EXPOSE_NGINX_PORT` - 只配置 HTTPS:只写入 `EXPOSE_NGINX_SSL_PORT` - 两个都配置:都写入 - 都不配置:自动切换到默认部署模式,使用原始配置 ### 7. 菜单配置示例 #### HTTP 端口配置菜单 ``` ================================================== 请设置HTTP端口号 ================================================== 1. ✅ 使用上次配置 (15002) (默认) 2. ⚙️ 自定义配置端口号 3. ❌ 不对外暴露HTTP端口 ================================================== 请选择 [1-3,默认 使用上次配置]: ``` #### HTTPS 配置菜单 ``` ================================================== 请设置HTTPS配置 ================================================== 1. 🔒 启用HTTPS安全访问 2. ❌ 不启用HTTPS (默认) ================================================== 请选择 [1-2,默认 不启用HTTPS]: ``` #### HTTPS 端口配置菜单(启用HTTPS时) ``` ================================================== 请设置HTTPS端口号 ================================================== 1. ✅ 使用默认端口 (443) (默认) 2. ⚙️ 自定义HTTPS端口号 ================================================== 请选择 [1-2,默认 使用默认端口]: ``` #### plugin_daemon 端口配置菜单 ``` ================================================== 请设置plugin_daemon端口配置 ================================================== 1. 🔒 隐藏plugin_daemon端口(推荐) (默认) 2. ⚠️ 暴露plugin_daemon端口 ================================================== 请选择 [1-2,默认 隐藏端口]: ``` ### 8. 配置结果示例 #### 只配置 HTTP 端口 - 选择:使用上次配置 (15002) - 选择:不启用HTTPS - 结果:只写入 `EXPOSE_NGINX_PORT=15002` #### 只配置 HTTPS 端口 - 选择:不对外暴露HTTP端口 - 选择:启用HTTPS - 选择:使用默认端口(443) - 结果:只写入 `EXPOSE_NGINX_SSL_PORT=443` #### 同时配置 HTTP 和 HTTPS - 选择:自定义配置端口号 → 输入 8080 - 选择:启用HTTPS - 选择:自定义HTTPS端口号 → 输入 8443 - 结果:写入 `EXPOSE_NGINX_PORT=8080` 和 `EXPOSE_NGINX_SSL_PORT=8443` #### 不配置任何端口(自动切换默认模式) - 选择:不对外暴露HTTP端口 - 选择:不启用HTTPS - 结果:自动切换到默认部署模式,使用 Dify 原始配置 ### 9. 访问服务 部署完成后,根据你的配置访问: - **默认模式**:使用 Dify 原始配置的端口(通常是 80/443) - **自定义模式**:HTTP: `http://localhost:端口号` 或 `http://你的服务器IP:端口号` ## 命令行参数 ### Python版本 ```bash python setup_dify.py [选项] ``` ### Shell版本 ```bash ./setup_dify.sh [选项] ``` ### 参数说明 | 参数 | 默认值 | 说明 | |------|--------|------| | `--zip` | `dify-main.zip` | Dify 源码 zip 文件路径 | | `--http-port` | 交互询问 | 对外 HTTP 端口(如不指定则交互式询问) | | `--https` | 交互询问 | 是否启用 HTTPS(on/off) | | `--https-port` | `443` | 对外 HTTPS 端口 | | `--bind` | 无 | 绑定地址(如 127.0.0.1 或 0.0.0.0) | | `--hide-plugin-daemon` | 交互询问 | 是否隐藏 plugin_daemon 端口(yes/no) | | `--default` | 无 | 默认部署模式:解压源码,使用原始配置文件,跳过端口配置修改和交互式询问 | ## 使用示例 ### 默认部署(推荐) #### Python版本 ```bash python setup_dify.py --default # 解压源码,使用 Dify 原始配置文件,跳过端口配置修改和交互式询问 ``` #### Shell版本 ```bash ./setup_dify.sh --default # 解压源码,使用 Dify 原始配置文件,跳过端口配置修改和交互式询问 ``` ### 基础部署(交互式选择) #### Python版本 ```bash python setup_dify.py # 首先选择部署模式,然后根据选择进行相应配置 ``` #### Shell版本 ```bash ./setup_dify.sh # 首先选择部署模式,然后根据选择进行相应配置 ``` ### 启用 HTTPS #### Python版本 ```bash python setup_dify.py --https on --https-port 443 # 交互式输入 HTTP 端口号 ``` #### Shell版本 ```bash ./setup_dify.sh --https on --https-port 443 # 交互式输入 HTTP 端口号 ``` ### 仅本机访问(安全模式) #### Python版本 ```bash python setup_dify.py --bind 127.0.0.1 # 交互式输入端口号 ``` #### Shell版本 ```bash ./setup_dify.sh --bind 127.0.0.1 # 交互式输入端口号 ``` ### 公网访问 #### Python版本 ```bash python setup_dify.py --bind 0.0.0.0 --https on # 交互式输入 HTTP 端口号 ``` #### Shell版本 ```bash ./setup_dify.sh --bind 0.0.0.0 --https on # 交互式输入 HTTP 端口号 ``` ### 自定义源码包 #### Python版本 ```bash python setup_dify.py --zip /path/to/dify-custom.zip # 交互式输入端口号 ``` #### Shell版本 ```bash ./setup_dify.sh --zip /path/to/dify-custom.zip # 交互式输入端口号 ``` ### 命令行指定端口(非交互式) #### Python版本 ```bash python setup_dify.py --http-port 8080 ``` #### Shell版本 ```bash ./setup_dify.sh --http-port 8080 ``` ## 安全建议 1. **生产环境**:建议使用 `--bind 127.0.0.1` 绑定到本地,然后通过 Nginx 等反向代理对外提供服务 2. **HTTPS**:生产环境建议启用 HTTPS 并配置有效的 SSL 证书 3. **端口隐藏**:建议使用 `--hide-plugin-daemon yes` 隐藏 plugin_daemon 端口 ## 目录结构 部署完成后,项目目录结构如下: ``` docker-dify-service/ ├── setup_dify.py # Python版本部署脚本 ├── setup_dify.sh # Shell版本部署脚本 ├── dify/ # 解压后的 Dify 源码 │ └── docker/ # Docker 配置目录 │ ├── .env # 环境变量配置 │ ├── docker-compose.override.yml # 端口映射覆盖配置 │ └── ... # 其他 Docker 配置文件 └── README.md # 本文档 ``` ## 故障排除 ### 常见问题 1. **命令未找到错误** ``` [ERROR] 未发现命令:docker,请先安装后重试。 ``` 解决:确保已安装 Docker 和 unzip 2. **端口被占用** ``` Error: port is already allocated ``` 解决:更换端口号或停止占用端口的服务 3. **权限问题** ``` Permission denied ``` 解决:确保有足够的文件系统权限 ### 查看服务状态 ```bash cd dify/docker # 脚本会自动检测版本并使用相应命令 docker compose ps # V2 格式 # 或 docker-compose ps # V1 格式 ``` ### 查看服务日志 ```bash cd dify/docker # 脚本会自动检测版本并使用相应命令 docker compose logs -f # V2 格式 # 或 docker-compose logs -f # V1 格式 ``` ### 停止服务 ```bash cd dify/docker # 脚本会自动检测版本并使用相应命令 docker compose down # V2 格式 # 或 docker-compose down # V1 格式 ``` ## 技术实现 脚本主要执行以下步骤: 1. **环境检查**:验证必要的命令是否可用 2. **版本检测**:自动检测 Docker Compose 版本(V1/V2) 3. **源码解压**:自动解压并重命名目录 4. **配置生成**: - 复制并修改 `.env` 文件 - 生成 `docker-compose.override.yml` 覆盖配置 5. **服务启动**:根据检测到的版本执行相应的 Docker Compose 命令 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个脚本。 ## 许可证 本项目采用 MIT 许可证。