macOS 12.7.6部署Ollama+Dify避坑指南
-
- 一、背景
- 二、核心组件说明
- 三、详细部署步骤
-
- [1. 关闭SIP(系统完整性保护)](#1. 关闭SIP(系统完整性保护))
- [2. 安装基础组件](#2. 安装基础组件)
-
- [2.1 Docker Desktop](#2.1 Docker Desktop)
- [2.2 Docker-compose](#2.2 Docker-compose)
- [2.3 Ollama](#2.3 Ollama)
- [3. 配置Ollama](#3. 配置Ollama)
-
- [3.1 启动服务](#3.1 启动服务)
- [3.2 下载模型](#3.2 下载模型)
- [4. 配置Dify](#4. 配置Dify)
-
- [4.1 关键配置修改](#4.1 关键配置修改)
- [4.2 启动Dify服务](#4.2 启动Dify服务)
- [4.3 连接Ollama](#4.3 连接Ollama)
- [5. 离线环境处理](#5. 离线环境处理)
-
- [5.1 镜像打包](#5.1 镜像打包)
- [5.2 目标机器导入](#5.2 目标机器导入)
- 四、部署验证
一、背景
Ollama是一个本地化大语言模型运行框架,支持在个人电脑上运行各类开源AI模型(如Llama、Mistral等)。Dify则是一个可视化AI应用开发平台,通过图形界面快速构建AI工作流。本文记录在macOS 12.7.6系统下部署两者的避坑指南。
二、核心组件说明
组件 | 作用 | 必装原因 |
---|---|---|
Ollama | 本地模型运行引擎 | 提供LLM推理能力 |
Dify | AI应用开发平台 | 可视化编排AI工作流 |
Docker | 容器化环境 | 解决依赖冲突问题 |
Docker-compose | 容器编排工具 | 管理多容器应用 |
三、详细部署步骤
1. 关闭SIP(系统完整性保护)
参考链接: macOS开启或关闭SIP
为什么需要关闭 :
macOS的SIP会阻止对系统目录(如/usr/local/bin
)的修改,而Dify需要在此目录更新关键组件。
操作步骤:
-
重启Mac,立即长按 Command ⌘ + R 进入恢复模式
-
顶部菜单栏选择 实用工具 > 终端
-
执行关闭命令:
bashcsrutil disable # 禁用SIP reboot # 重启系统
-
重启后验证状态:
bashcsrutil status # 应显示"System Integrity Protection status: disabled"
⚠️ 安全提示:完成部署后可重新启用SIP(
csrutil enable
),但需确保所有组件运行稳定
2. 安装基础组件
2.1 Docker Desktop
下载地址 :官方下载链接
版本要求 :必须使用 2.1.0.5(40693) 版本,新版Docker与macOS 12存在兼容性问题
安装后检查:
bash
docker --version # 应输出 Docker version 19.03.5, build 633a0ea
2.2 Docker-compose
下载地址 :v2.38.2版本
安装命令:
bash
# 替换系统旧版本
sudo cp ~/Downloads/docker-compose-darwin-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose version # 应输出 Docker Compose version v2.38.2
2.3 Ollama
下载地址 :官方DMG安装包
安装方式:双击安装包完成安装
3. 配置Ollama
3.1 启动服务
bash
# 允许网络访问(默认只能本地访问)
export OLLAMA_HOST="0.0.0.0:8000"
# 启动服务(会常驻后台)
ollama serve &
验证服务 :浏览器访问 http://localhost:8000
应返回Ollama版本信息
3.2 下载模型
bash
# 下载嵌入模型(用于文本向量化)
ollama pull nomic-embed-text:latest
# 下载对话模型(7B参数版本)
ollama pull deepseek-r1:7b
模型管理技巧:
bash
# 查看已下载模型
ollama list
# 模型保存路径
ls ~/.ollama/models # 所有模型存储在此目录
💡 离线环境部署:
- 在网络环境执行
ollama pull
下载模型- 拷贝
~/.ollama/models
到目标机器- 设置环境变量:
export OLLAMA_MODELS=/path/to/models
4. 配置Dify
4.1 关键配置修改
为什么需要修改 :
默认配置针对Linux优化,在macOS上需要调整资源限制和权限设置
以下文件发生修改
- docker/
docker/.env
bash
--- OLD/.env
+++ NEW/.env
@@ -1035,16 +1035,17 @@
FORCE_VERIFYING_SIGNATURE=true
-PLUGIN_PYTHON_ENV_INIT_TIMEOUT=120
-PLUGIN_MAX_EXECUTION_TIMEOUT=600
-# PIP_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple
-PIP_MIRROR_URL=
+PLUGIN_PYTHON_ENV_INIT_TIMEOUT=640
+PLUGIN_MAX_EXECUTION_TIMEOUT=2400
+PIP_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple/
+#PIP_MIRROR_URL=
# https://github.com/langgenius/dify-plugin-daemon/blob/main/.env.example
# Plugin storage type, local aws_s3 tencent_cos azure_blob
PLUGIN_STORAGE_TYPE=local
PLUGIN_STORAGE_LOCAL_ROOT=/app/storage
-PLUGIN_WORKING_PATH=/app/storage/cwd
+#PLUGIN_WORKING_PATH=/app/storage/cwd
+PLUGIN_WORKING_PATH=/app/cwd
PLUGIN_INSTALLED_PATH=plugin
PLUGIN_PACKAGE_CACHE_PATH=plugin_packages
PLUGIN_MEDIA_CACHE_PATH=assets
docker/docker-compose.yaml
yaml
--- OLD/docker-compose.yaml
+++ NEW/docker-compose.yaml
@@ -451,8 +451,8 @@
MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true}
MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
- PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
- PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
+ PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-640}
+ PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-6000}
PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
PLUGIN_STORAGE_TYPE: ${PLUGIN_STORAGE_TYPE:-local}
PLUGIN_STORAGE_LOCAL_ROOT: ${PLUGIN_STORAGE_LOCAL_ROOT:-/app/storage}
@@ -488,6 +488,11 @@
services:
# API service
api:
+ ulimits:
+ nproc: 65535
+ security_opt:
+ - seccomp:unconfined
+ privileged: true
image: langgenius/dify-api:1.3.1
restart: always
environment:
@@ -519,6 +524,11 @@
worker:
image: langgenius/dify-api:1.3.1
restart: always
+ ulimits:
+ nproc: 65535
+ security_opt:
+ - seccomp:unconfined
+ privileged: true
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
@@ -604,6 +614,11 @@
# The DifySandbox
sandbox:
+ ulimits:
+ nproc: 65535
+ security_opt:
+ - seccomp:unconfined
+ privileged: true
image: langgenius/dify-sandbox:0.2.11
restart: always
environment:
@@ -628,8 +643,13 @@
# plugin daemon
plugin_daemon:
+ ulimits:
+ nproc: 65535
+ security_opt:
+ - seccomp:unconfined
image: langgenius/dify-plugin-daemon:0.0.9-local
restart: always
+ privileged: true
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
@@ -644,8 +664,8 @@
PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
- PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
- PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
+ PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-1200}
+ PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-2400}
PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
PLUGIN_STORAGE_TYPE: ${PLUGIN_STORAGE_TYPE:-local}
PLUGIN_STORAGE_LOCAL_ROOT: ${PLUGIN_STORAGE_LOCAL_ROOT:-/app/storage}
4.2 启动Dify服务
bash
cd dify/docker
# 首次启动(后台运行)
docker-compose up -d
# 查看日志(排错用)
docker-compose logs -f api
4.3 连接Ollama
在Dify控制台(http://localhost:8000
)配置模型:
yaml
API端点: http://host.docker.internal:8000/v1 # 特殊地址指向宿主机
模型名称: deepseek-r1:7b
关键说明 :
host.docker.internal
是Docker的保留域名,自动解析到宿主机的IP地址
5. 离线环境处理
5.1 镜像打包
bash
# 导出所有Dify镜像
docker-compose images | awk 'FNR >2 {print $2":"$3}' | sort -u | xargs docker save | gzip > dify-images.tar.gz
5.2 目标机器导入
bash
# 加载Dify镜像
docker load < dify-images.tar.gz
四、部署验证
- 在Dify创建新应用
- 选择 "对话型应用" 模板
- 模型选择
deepseek-r1:7b
- 输入测试问题:"Mac系统有哪些特点?"
- 应获得连贯的技术性回复
最终效果:您现在拥有一个完全本地的AI开发环境,支持:
- 运行开源大语言模型(7B~70B参数)
- 可视化编排AI工作流
- 开发企业级AI应用
- 所有数据100%离线处理
部署完成后,可通过 csrutil enable
重新启用SIP提升系统安全性。