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

3月 23

dify 官方仓库https://github.com/langgenius/dify/

下载 dify 和建立 git 仓库

# 先 clone 最新版本,体积小,不容易出错
git clone --depth 1 https://github.com/langgenius/dify.git

# 更新完整历史
git fetch --unshallow

# 添加官方仓库为 upstream(用于同步更新)
git remote add upstream https://github.com/langgenius/dify.git

# 移除默认的 origin,添加自己的 git 仓库
git remote remove origin
git remote add origin git@github.com:xxxx/dify.git

建立自己的项目分支

假如你的项目叫 mimo

# 创建 mimo 分支。后期修改都在这个分支做。
git checkout -b mimo

# 将代码推送到远程服务器上
git push -u origin mimo

开发日常

# 切换到 mimo 分支
git checkout mimo

# 修改代码后,提交代码
git add .
git commit -m '修改 ui界面,替换 logo 等'

# 推送到服务端
git push

同步更新

# 切换到 main 分支
git checkout main

# 拉取官方最新的代码
git pull upstream main

# 推送更新后的 main 分支
git push origin main

# 切换到项目分支
git checkout mimo

# 合并 main 分支
git merge main
3月 18

当初想移动硬盘在 win 系统和 mac 系统,选择了 exFAT 文件系统。现在却出现了一个很烦的问题。在 mac 电脑上,没有安全退出(直接拔出或电脑关机重启)移动硬盘,下次再插入移动硬盘就识别不了。

用 mac 自己的修复工具也修复不了。只能去用 win 系统来修复。

但是,在 mac 下识别不了的移动硬盘,在 win 上却是可以直接识别的。但是,现在是要修复移动硬盘使得在 mac 上继续使用。

修复

将移动硬盘插入到 win 系统上。执行下边命令开始修复。

# E 是移动硬盘插入到 win 系统显示的盘符。 /f 是修复的意思,不加参数就是只检查
chkdsk E: /f

等待修复完成就好。这个修复时间不确定,快的几分钟,慢的话几个小时。固态硬盘貌似会快一些。

退出移动硬盘

虽然修复完成了,却发现移动硬盘不能安全退出,就是右键没有安全退出还有在设备那里也没有。找了好几个方法都不太行。最后还是使用命令行解决的问题。

使用 win的磁盘管理命令工具。

使用管理员身份打开终端。

# 进入磁盘管理
diskpart

# 显示磁盘列表
list disk

# 选择磁盘(这个时候不再是盘符 C、D、E这些了,而是 0,1,2)
select disk 3

# 磁盘脱机
offline disk

这样就好了,在磁盘列表里也不见移动硬盘了。然后直接拔出,插入到 mac 电脑上,又可以继续识别和读写了。