【无需docker】mac本地部署dify
环境安装准备
#安装 postgresql@13
brew install postgresql@13
#使用zsh的在全局添加postgresql命令集
echo 'export PATH="/usr/local/opt/postgresql@13/bin:$PATH"' >> ~/.zshrc
# 使得zsh的配置修改生效
source ~/.zshrc
# 启动postgresql
brew services start postgresql@13
#安装pyenv
brew install pyenv
#切换python版本至3.12
pyenv install 3.12
pyenv global 3.12
#安装libmagic
brew install libmagic
#旧版官方教程使用poetry做依赖管理
#安装poetry
pipx install poetry
pipx ensurepath
source ~/.zshrc
# 新版官方教程使用uv做依赖管理
#安装uv
pipx install uv
#下载dify代码
git clone https://github.com/langgenius/dify.git
#进入api目录
cd api
#复制环境变量配置文件
cp .env.example .env
#生成随机密钥,并替换 .env 中 SECRET_KEY 的值
awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env
#新版官方教程安装依赖包
#设置uv源为国内源,确保所有依赖都能快速稳定的安装
#编辑pyproject.toml文件,增加如下内容[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
#安装依赖包
uv sync
#旧版官方教程安装依赖包
poetry env use 3.12
poetry install
#执行数据库迁移
#将数据库结构迁移至最新版本
createuser -s postgres
createdb dify
#新版官方文档数据库迁移命令
uv run flask db upgrade
# 旧版官方教程数据库迁移命令
poetry run flask db upgrade# 启动API服务前需要修改redis密码(如果不是用了项目默认密码)
# 修改.env文件
REDIS_PASSWORD=你的redis密码#新版官方文档启动API服务
uv run flask run --host 127.0.0.1 --port=5001 --debug
#旧版官方文档启动 API 服务
poetry run flask run --host 127.0.0.1 --port=5001 --debug
#正确输出
* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5001
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 695-801-919#启动 Worker 服务
#用于消费异步队列任务,如知识库文件导入、更新知识库文档等异步操作。 Linux / MacOS 启动:
#新版官方文档启动worker服务
uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace
#旧版官方教程启动worker服务
poetry run celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail,ops_trace --loglevel INFO
# 注意,如果redis密码不是difyai123456,需要修改.env配置文件中用于redis建立连接的配置项CELERY_BROKER_URL,否则会出现如下报错
dify Cannot connect to redis://:**@localhost:6379/1: invalid username-password pair or user is disabled# 启动成功,状态展示如下
2025-05-01 03:02:44,463 INFO [connection.py:22] Connected to redis://:**@localhost:6379/1
2025-05-01 03:02:44,474 INFO [mingle.py:40] mingle: searching for neighbors
2025-05-01 03:02:45,496 INFO [mingle.py:49] mingle: all alone
2025-05-01 03:02:45,517 INFO [pidbox.py:111] pidbox: Connected to redis://:**@localhost:6379/1.
2025-05-01 03:02:45,523 INFO [worker.py:175] celery@codemonkey-2.local ready.# 设置web服务
# 要启动 web 前端服务,需要 Node.js v22 (LTS) 和 PNPM v10
#安装pnpm
npm i -g pnpm
# 进入web目录
cd web
# 安装web依赖
pnpm install --frozen-lockfile# 在当前目录中创建一个名为 .env.local文件, 并从 .env.example 复制内容。根据您的需求修改这些环境变量的值:# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED or CLOUD
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=# 启动web服务
pnpm start
# 启动成功如下所示
> dify-web@1.3.1 start /Users/codemonkey/Project/dify/web
> cp -r .next/static .next/standalone/.next/static && cp -r public .next/standalone/public && cross-env PORT=$npm_config_port HOSTNAME=$npm_config_host node .next/standalone/server.js▲ Next.js 15.2.3- Local: http://localhost:3000- Network: http://0.0.0.0:3000✓ Starting...✓ Ready in 125ms# 大功告成,之后浏览器输入http://localhost:3000访问dify
# Ps. 为了自身计算机安全,服务启动时最好不要绑定0.0.0.0的ip地址