赞
踩
极少和医院打交道,所以把事情想当然了,医生确实打电话通知我入院,只不过排在了 2
周之后。不行的话,只能换家小医院去瞧瞧了
本文是应网友
姜不吃先生
的要求折腾的,文章比较长,分了2
篇,上篇是安装,下篇是简单的应用示例
什么是 Dify ?
Dify(Do it for you)
是一个高精度的LLMOps
平台,基于不同的大型语言模型能力,让更多人可以简单地创建可持续操作的原生AI
应用。Dify
提供多种类型应用的可视化编排,应用可开箱即用,也能以“云端即服务”的API
提供服务。其直观的界面结合了AI
工作流程、RAG
管道、代理功能、模型管理、可观察性功能等,让您快速从原型转向生产。
通过 Dify
创建的应用包含了:
Web
站点,支持表单模式和聊天对话模式API
即可包含插件、上下文增强等能力,代替你省下底层的编写工作Dify 功能演示
在群晖上以 Docker 方式安装。
在安装 Dify
之前,请确保您的计算机满足以下最低系统要求:
CPU
>= 2
核4GB
第一步需要我们建好目录,为了方便起见,全程都是通过 SSH
客户端登录到群晖,在命令行进行操作
# 新建文件夹 dify 和 子目录
mkdir -p /volume1/docker/dify/{db,nginx/conf.d,redis,storage,weaviate}
# 进入 dify 目录
cd /volume1/docker/dify
下一步就是准备好相关的文件,这些文件老苏已打包好了,https://github.com/wbsu2003/synology/raw/main/Dify/dify.zip
官方的示例 docker-compose.yaml
中包含的容器比较多,例如:
沙盒服务,它会确保恶意代码不会被执行,具体说明:https://docs.dify.ai/v/zh-hans/guides/workflow/node/code#ben-di-bu-shu
SSRF_PROXY
则能避免 SSRF
攻击,具体说明:https://docs.dify.ai/v/zh-hans/learn-more/faq/install-faq#id-18.-wei-shi-mo-xu-yao-ssrfproxy
因为老苏并不打算部署到公网,所以做了些精简。将下面的内容保存为 docker-compose.yml
文件即可
kimi
及 chatgpt
翻译;UTF-8
格式version: '3' services: # API 服务 api: image: langgenius/dify-api:0.6.8 container_name: dify-api restart: always environment: # 启动模式,'api' 指启动为 API 服务器。 MODE: api # 应用的日志级别。支持的值有 `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` LOG_LEVEL: INFO # 用于安全签名会话 cookie 和加密数据库上敏感信息的密钥。你可以使用 `openssl rand -base64 42` 生成一个强密钥。 SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U # 控制台应用程序 Web 前端的基础 URL,如果控制台域与 API 或 Web 应用程序域不同,则指的是 WEB 服务的控制台基础 URL。 # 示例:http://cloud.dify.ai CONSOLE_WEB_URL: 'http://192.168.0.197:8848' # 用于管理员用户初始化的密码。 # # 如果未设置,创建初始管理员帐户时管理员用户将不会提示输入密码。 INIT_PASSWORD: '' # 控制台应用程序 API 服务器的基础 URL,如果控制台域与 API 或 Web 应用程序域不同,则指的是 WEB 服务的控制台基础 URL。 # 示例: http://cloud.dify.ai CONSOLE_API_URL: 'http://192.168.0.197:8848' # 服务 API 端点的 URL 前缀,如果 API 域与控制台域不同,则指的是当前 API 服务的基础 URL。 # 示例: http://api.dify.ai SERVICE_API_URL: 'http://192.168.0.197:8848' # # Web 应用程序前端的 URL 前缀,如果 Web 应用程序域与控制台或 API 域不同,则指的是 WEB 服务的 Web 应用程序基础 URL。 # 示例: http://udify.app APP_WEB_URL: 'http://192.168.0.197:8848' # 文件预览或下载的 URL 前缀。 # 用于将文件预览或下载的 URL 显示给前端或作为多模型输入; # URL 是签名的,并且具有过期时间。 FILES_URL: 'http://192.168.0.197:8848' # 当启用时,应用程序启动之前将执行迁移,并在迁移完成后启动应用程序。 MIGRATION_ENABLED: 'true' # PostgreSQL 数据库连接的配置。它与下面的 'db' 服务中的配置保持一致。 DB_USERNAME: postgres DB_PASSWORD: difyai123456 DB_HOST: db DB_PORT: 5432 DB_DATABASE: dify # Redis 连接的配置。它与下面的 'redis' 服务中的配置保持一致。 REDIS_HOST: redis REDIS_PORT: 6379 REDIS_USERNAME: '' REDIS_PASSWORD: difyai123456 REDIS_USE_SSL: 'false' # 使用 Redis 数据库 0 作为 Redis 缓存。 REDIS_DB: 0 # Celery 代理的配置。使用 Redis 作为代理,并使用 Redis 数据库 1 作为 Celery 代理。 CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1 # 指定允许进行跨域请求的 Web API 的源,例如 https://dify.app 或 * 表示所有源都允许。 WEB_API_CORS_ALLOW_ORIGINS: '*' # 指定允许对控制台 API 进行跨域请求的源,例如 https://cloud.dify.ai 或 * 表示所有源都允许。 CONSOLE_CORS_ALLOW_ORIGINS: '*' # CSRF Cookie 设置 # 控制是否在跨站点请求中发送 cookie,以提供一定程度的跨站点请求伪造攻击防护。 # # 默认值:`SameSite=Lax, Secure=false, HttpOnly=true` # 此默认配置支持使用 HTTP 或 HTTPS 的同源请求, # 但不支持跨源请求。它适用于本地调试目的。 # # 如果您想启用跨源支持, # 您必须使用 HTTPS 协议,并将配置设置为 `SameSite=None, Secure=true, HttpOnly=true`。 # # 用于存储用户文件的存储类型。支持的值有 `local` 和 `s3` 和 `azure-blob` 和 `google-storage`,默认值:`local` STORAGE_TYPE: local # 本地存储目录的路径,相对于 API 服务代码的根路径或绝对路径。默认值为 storage 或 /home/john/storage。 # 仅当 STORAGE_TYPE 为 local 时可用。 STORAGE_LOCAL_PATH: storage # 要使用的向量存储类型。支持的值有 `weaviate`, `qdrant`, `milvus`, `relyt`。 VECTOR_STORE: weaviate # Weaviate 端点 URL。只有在 VECTOR_STORE 为 `weaviate` 时才可用。 WEAVIATE_ENDPOINT: http://weaviate:8080 # TWeaviate API 密钥。 WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih # Sentry 错误报告的 DSN。如果未设置,则将禁用 Sentry 错误报告。 SENTRY_DSN: '' # Sentry 事件的采样率。默认值:`1.0` SENTRY_TRACES_SAMPLE_RATE: 1.0 # Sentry 配置文件的采样率。默认值:`1.0` SENTRY_PROFILES_SAMPLE_RATE: 1.0 depends_on: - db - redis volumes: # 将存储目录挂载到容器上,用于存储用户文件。 - ./storage:/app/api/storage # 注释掉以暴露 dify-api 端口到主机 # ports: # - "5001:5001" # worker 服务 # 用于处理队列的 Celery 工作器。 worker: image: langgenius/dify-api:0.6.8 container_name: dify-worker restart: always environment: CONSOLE_WEB_URL: 'http://192.168.0.197:8848' # 启动模式,设置为 'worker' 以启动用于处理队列的 Celery 工作器。 MODE: worker # --- 下面的所有配置都与'api'服务中的相同。 --- # 应用的日志级别。支持的值有 `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` LOG_LEVEL: INFO # 用于安全签名会话 cookie 和加密数据库上敏感信息的密钥。你可以使用 `openssl rand -base64 42` 生成一个强密钥。 # 与 API 服务相同 SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U # postgres 数据库连接的配置。它与下面的'db'服务中的配置一致。 DB_USERNAME: postgres DB_PASSWORD: difyai123456 DB_HOST: db DB_PORT: 5432 DB_DATABASE: dify # redis 缓存连接的配置。 REDIS_HOST: redis REDIS_PORT: 6379 REDIS_USERNAME: '' REDIS_PASSWORD: difyai123456 REDIS_DB: 0 REDIS_USE_SSL: 'false' # celery 代理的配置。 CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1 # 用于存储用户文件的存储类型。支持的值有 `local` 和 `s3` 和 `azure-blob` 和 `google-storage`,默认值:`local` STORAGE_TYPE: local STORAGE_LOCAL_PATH: storage # 要使用的向量存储类型。支持的值有 `weaviate`, `qdrant`, `milvus`, `relyt`, `pgvector`。 VECTOR_STORE: weaviate # Weaviate 端点 URL。只有在 VECTOR_STORE 为 `weaviate` 时才可用。 WEAVIATE_ENDPOINT: http://weaviate:8080 # Weaviate API 密钥。 WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih depends_on: - db - redis volumes: # 将存储目录挂载到容器上,用于存储用户文件。 - ./storage:/app/api/storage # 前端 web 应用程序。 web: image: langgenius/dify-web:0.6.8 container_name: dify-web restart: always environment: # 控制台应用程序 API 服务器的基础 URL,如果控制台域与 api 或 web 应用程序域不同,指的是 WEB 服务的控制台基础 URL。 # 示例: http://cloud.dify.ai CONSOLE_API_URL: 'http://192.168.0.197:8848' # Web APP api 服务器的 URL,如果 web 应用程序域与控制台或 api 域不同,指的是 WEB 服务的 Web 应用程序基础 URL。 # 示例: http://udify.app APP_API_URL: 'http://192.168.0.197:8848' # Sentry 错误报告的 DSN。如果未设置,Sentry 错误报告将被禁用。 SENTRY_DSN: '' # 注释掉以暴露 dify-web 端口到主机 # ports: # - "3000:3000" # postgres数据库。 db: image: postgres:15-alpine container_name: dify-db restart: always environment: PGUSER: postgres # 默认 postgres 用户的密码。 POSTGRES_PASSWORD: difyai123456 # 默认 postgres 数据库的名称。 POSTGRES_DB: dify TZ: Asia/Shanghai # postgres 数据目录 PGDATA: /var/lib/postgresql/data/pgdata volumes: - ./db:/var/lib/postgresql/data # 注释掉以暴露 db(postgresql) 端口到主机 # ports: # - "5432:5432" healthcheck: test: [ "CMD", "pg_isready" ] interval: 1s timeout: 3s retries: 30 # redis 缓存。 redis: image: redis:6-alpine container_name: dify-redis restart: always volumes: # 将 redis 数据目录挂载到容器上。 - ./redis:/data # Set the redis password when startup redis server. command: redis-server --requirepass difyai123456 healthcheck: test: [ "CMD", "redis-cli", "ping" ] # 注释掉以暴露 redis 端口到主机 # ports: # - "6379:6379" # Weaviate 向量存储。 weaviate: image: semitechnologies/weaviate:1.19.0 container_name: dify-weaviate restart: always volumes: # 将 Weaviate 数据目录挂载到容器上。 - ./weaviate:/var/lib/weaviate environment: # Weaviate 配置 # 你可以查阅 [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) 文档以获取更多信息。 QUERY_DEFAULTS_LIMIT: 25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false' PERSISTENCE_DATA_PATH: '/var/lib/weaviate' DEFAULT_VECTORIZER_MODULE: 'none' CLUSTER_HOSTNAME: 'node1' AUTHENTICATION_APIKEY_ENABLED: 'true' AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih' AUTHENTICATION_APIKEY_USERS: 'hello@dify.ai' AUTHORIZATION_ADMINLIST_ENABLED: 'true' AUTHORIZATION_ADMINLIST_USERS: 'hello@dify.ai' # 注释掉以暴露 weaviate 端口到主机 # ports: # - "8080:8080" # nginx 反向代理 # 用于 API 服务和 Web 服务的反向代理。 nginx: image: nginx:latest container_name: dify-nginx restart: always volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/proxy.conf:/etc/nginx/proxy.conf - ./nginx/conf.d:/etc/nginx/conf.d #- ./nginx/ssl:/etc/ssl depends_on: - api - web ports: - "8848:80" #- "443:443"
因为涉及的容器比较多,请务必仔细检查各个参数、环境变量,以免填错。老苏为了节省篇幅,将 kimi
对照翻译的版本放在了这里:https://github.com/wbsu2003/synology/blob/main/Dify/docker-compose.yml
dify-api
:提供 API
服务,使用 API
模式启动dify-worker
:使用 worker
模式启动,是 Celery
分布式任务队列系统的一部分,用于处理任务队列中的工作dify-web
:前端 Web
应用dify-db
:Postgres
数据库dify-redis
:缓存 Redis
dify-weaviate
:向量数据库 weaviate
dify-nginx
:反向代理服务器,代理 API
和 Web
服务关于 CONSOLE_WEB_URL
、CONSOLE_API_URL
、SERVICE_API_URL
、APP_WEB_URL
、FILES_URL
,在局域网使用的情况下,如果 nginx
的容器端口设置的是 80
,可以设置为 ''
,但如果不是的话,需要设置为 IP + 端口,否则发布的时候会截端口,上面的示例中,192.168.0.197
是群晖主机的 IP
,8848
则是 nginx
中的容器端口,你可以根据需要进行修改
将 docker-compose.yml
放入 dify
根目录
nginx
的配置文件来自官方,文件地址:https://github.com/langgenius/dify/tree/main/docker/nginx,老苏未做任何修改
其中 nginx.conf
是 Nginx
的主配置文件
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; client_max_body_size 15M; include /etc/nginx/conf.d/*.conf; }
proxy.conf
用于定义反向代理的具体行为
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
以上两个文件放在 /dify/nginx
目录中
default.conf
提供了默认的服务器配置
server { listen 80; server_name _; location /console/api { proxy_pass http://api:5001; include proxy.conf; } location /api { proxy_pass http://api:5001; include proxy.conf; } location /v1 { proxy_pass http://api:5001; include proxy.conf; } location /files { proxy_pass http://api:5001; include proxy.conf; } location / { proxy_pass http://web:3000; include proxy.conf; } # If you want to support HTTPS, please uncomment the code snippet below #listen 443 ssl; #ssl_certificate ./../ssl/your_cert_file.cer; #ssl_certificate_key ./../ssl/your_cert_key.key; #ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #ssl_prefer_server_ciphers on; #ssl_session_cache shared:SSL:10m; #ssl_session_timeout 10m; }
该文件在 /dify/nginx/conf.d
目录中
当文件准备好之后,就可以开始启动了
# 进入 dify 目录
cd /volume1/docker/dify
# 如果出现超时,可以设置大一点的值,例如下面声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/922258
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。