Write the Code. Change the World.

3月 26

运行 dify

下载好 dify 源码后,就可以使用 docker 开始运行 dify。

cd docker

cp .env.example .env

docker compose up -d

等待拉取镜像,构建服务,初始化。


如果宿主机的80,443 端口已经被使用了。请在 .env 中修改 dify 的本地映射端口为其他端口。比如:

EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443

这个时候,如果宿主机的 nginx 想访问 dify 的服务,可以用宿主机的 ip + dify 本地映射端口来访问。

通过 hostname -I 可以查看宿主机的 ip,第一个就是的。下边给一个 nginx 的示例。

# 映射 WebSocket 升级头
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen       80;
    server_name  xxx.yuepaibao.com;

    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    server_name  xxx.yuepaibao.com;

    charset utf-8;
    index  index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/xxx.yuepaibao.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xxx.yuepaibao.com/privkey.pem; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options SAMEORIGIN always;
    add_header X-Content-Type-Options nosniff always;

    add_header X-Frame-Options "ALLOW-FROM https://www.yuepaibao.com";
    add_header Content-Security-Policy "frame-ancestors https://www.yuepaibao.com";

    location / {
    proxy_pass http://172.17.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $server_name;

        # WebSocket 支持(Dify 实时聊天必需)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # 超时配置:适配长连接
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_connect_timeout 60s;
    }

    # API 路径:增大文件上传限制
    location /api {
        proxy_pass http://172.17.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 100M;
    }

    location /xxabcxxx.txt {
        return 200 "33b454d18da17ebb845c9e046e2c4956";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    access_log  /var/log/nginx/xxx.yuepaibao.com.log  main;
    error_log  /var/log/nginx/xxx.yuepaibao.com.error.log  warn;
}

使用 docker compose ps -a 可以查看服务的情况。其中 docker-init_permissions-1 只是在启动的时候调用一下,然后就退出了。

配置管理员账号

运行起来后,输入 http://localhost/ 会进入安装配置管理员界面。设置好邮箱,账号和密码确定好就可以。

开始使用

创建知识库

然后开始配置知识库。

Dify 里的知识库检索必须用 Embedding 模型,作用是:把文字变成向量 → 让系统能计算相似度 → 实现文档检索、问答匹配。

知识库 embedding 模型选择,可以选择使用云端,也可以使用本地的。都是以插件的方式进行安装,配置和使用。

1 选择云端。

模型 优点 缺点
OpenAI text-embedding-3-small 效果顶级、稳定、Dify 原生支持 需要付费 API Key
阿里通义 Embedding 国内速度快、便宜 需要阿里云账号
百度千帆 Embedding 国内稳定、免费额度高 需要百度智能云
智谱 GLM Embedding 中文效果好 需要 API Key

先配置云端插件。

插件已经下载安装,还需要配置。去对应的官网获取 apikey 信息,配置进去。

然后添加知识库文件,配置 embedding 模型,继续下去。

参考和相关

https://blog.csdn.net/weixin_28931449/article/details/156266015