服务器部署dify

使用宿主反向代理转发,先删除docker目录中的nginx文件夹,和docker-compose.yaml中的nginx项,并添加web和api的端口暴露端口
docker-compose.yaml

services:
    api:
        ports:
              - "5001:5001"
    web:
        ports:
            - "3000:3000"
    plugin_daemon:
        PYTHON_ENV_INIT_TIMEOUT: 640
        PLUGIN_MAX_EXECUTION_TIMEOUT: 900

宿主中nginx的转发

# dify转发
    server {
        listen 443 ssl;
        server_name ai.usmm.cn;
        ssl_certificate /home/ssl/ai.usmm.cn.pem;
        ssl_certificate_key /home/ssl/ai.usmm.cn.key;
        client_max_body_size 200M;
        location /console/api {
            proxy_pass http://127.0.0.1:5001;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location /api {
            proxy_pass http://127.0.0.1:5001;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location /v1 {
          proxy_pass http://127.0.0.1:5001;
          proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location /files {
          proxy_pass http://127.0.0.1:5001;
          proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location /explore {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location /e/ {
            proxy_pass http://127.0.0.1:5002;
            proxy_set_header Host $host;
            proxy_set_header Dify-Hook-Url $scheme://$host$request_uri;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering off;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }

    }

重置管理员账号密码

假设docker-api-1是api容器名称
docker exec -it docker-api-1 flask reset-password 然后根据提示重置

停止和运行

cd dify/docker
cp .env.example .env
sudo docker compose up -d 启动并运行容器,也可以作为重启
sudo docker compose down # 停止并移除现有的容器

插件如果一直无法安装成功

安装插件时要等待一会等插件生效
去插件市场直接下载,然后点头像旁边的插件卸载原插件

检查错误

sudo docker logs docker-plugin_daemon-1

嵌入网页修改

<iframe :src="embedUrl" style="width: 100%; height: calc(100vh - 5px); min-height: 700px" frameborder="0" allow="microphone">
</iframe>

实现写ppt功能

创建一个flask虚拟环境和服务,来实现dify调用api

from flask import Flask, request
import time

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_markdown1():
    content = request.get_data(as_text=True)
    file_name = str(int(time.time())) + ".md"
    with open(f"/home/ai/dify/docker/markdown/{file_name}", 'w', encoding='utf-8') as f:
        f.write(content)
    return f'已根据您提供的素材文件生成对应的PPT!\n下载链接:https://files.fyinfor.com/{file_name}?pptx'

@app.route('/upload2', methods=['POST'])
def upload_markdown2():
    content = request.get_data(as_text=True)
    file_name = str(int(time.time())) + ".md"
    with open(f"/home/ai/dify/docker/markdown/{file_name}", 'w', encoding='utf-8') as f:
        f.write(content)
    return f'根据就诊过程生成患者病历成功!\n下载链接:https://files.fyinfor.com/{file_name}?pdf'


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5004)

docker-compose.yaml 创建服务

marp:
    image: marpteam/marp-cli:latest
    container_name: marp
    restart: always
    volumes:
      - ./markdown:/home/marp/app
    ports:
      - 5005:8080
    environment:
      - LANG=${LANG}
    command: -s .
    networks:
      - ssrf_proxy_network
      - default

并在docker目录下创建markdown目录用于存放md文件

设置nginx将域名请求转发给marp容器

    server {
        listen       443;                              
        server_name  files.fyinfor.com; 
        ssl_certificate /home/ssl/files.fyinfor.com.pem;
        ssl_certificate_key /home/ssl/files.fyinfor.com.key;
        #location / {
        #	root   /home/ai/docker/markdown;
        #	autoindex on;                          
        #	autoindex_exact_size on;               
        #	autoindex_localtime off;           
        #}
        location / {
            proxy_pass http://127.0.0.1:5005;          # 将所有请求转发到本地8880端口
            proxy_set_header Host $host;               # 传递Host头信息
            proxy_set_header X-Real-IP $remote_addr;   # 传递真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递代理信息
        }
    }