服务器部署dify


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

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

宿主中nginx的转发

ini
# 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

嵌入网页修改

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

实现写ppt功能

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

python
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 创建服务

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容器

json
	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;  # 传递代理信息
		}
	}

如果允许人类自由迁徙,那人流的方向, 就是文明的方向 -- 哈耶克