環境安裝準備
#安裝 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#運行dify-plugin-daemon服務
#克隆dify-plugin-daemon項目
git clone https://github.com/langgenius/dify-plugin-daemon.git
#編譯dify-plugin-daemon項目
cd dify-plugin-daemon
cp .env.example .env
go build \-ldflags "\-X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.VersionX=0.0.9' \-X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.BuildTimeX=$(date -u +%Y-%m-%dT%H:%M:%S%z)'" \-o $(which dify-plugin-daemon) cmd/server/main.go#運行dify-sanbox服務# 運行API服務
#進入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地址