使用宿主反向代理转发,先删除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;
}
}
如果宿主中使用了postgre数据库,防止它占用宿主5432端口,可能需要
db:
ports:
- "5433:5432"
重置管理员账号密码
假设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; # 传递代理信息
}
}
caddy配置
ai.usmm.cn {
reverse_proxy /console/api* localhost:5001 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /api* localhost:5001 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /v1* localhost:5001 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /files* localhost:5001 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /explore* localhost:3000 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /e/* localhost:5002 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
reverse_proxy /* localhost:3000 {
# 保留原请求的所有请求头
header_up Host {http.request.host} # 转发 Host 头
header_up X-Forwarded-For {remote} # 转发客户端 IP 地址
header_up X-Forwarded-Proto {http.request.scheme} # 转发请求协议(http 或 https)
header_up X-Real-IP {remote} # 转发真实客户端 IP 地址
}
}
重构web
修改节点只有50的限制:
文件路径:web/app/components/workflow/constants.ts:
MAX_TREE_DEPTH 改200
然后修改 docker/docker-compose.yaml :
删除 image: langgenius/dify-web...改为
web:
build:
context: ../web # Path to directory containing Dockerfile
dockerfile: Dockerfile # Name of the Dockerfile to use
修改并行嵌套3层的限制(不确定是否有效)
文件路径:web/app/components/workflow/constants.ts:
export const PARALLEL_DEPTH_LIMIT = 3
修改为:
export const PARALLEL_DEPTH_LIMIT = 5
修改docker/.env:
WORKFLOW_PARALLEL_DEPTH_LIMIT=5
如果修改了前端都要执行重构web然后重新运行
sudo docker compose down 停止
sudo docker compose build web 重新构建web
sudo docker compose up -d 重新运行