k8s部署dify

news2025/6/7 14:20:11

以前部署过,最近重新部署发现还是存在很多问题,这里进行记录

1.基础配置内容

配置信息和账号密码

# dify-deployment.yaml

---
# Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: dify-min

---
# ConfigMap for shared environment variables
apiVersion: v1
kind: ConfigMap
metadata:
  name: dify-config
  namespace: dify-min
data:
  DB_HOST: 10.42.2.49
  DB_NAME: dify
  DB_PORT: '5432'
  LOG_LEVEL: INFO
  REDIS_HOST: 172.18.11.222
  REDIS_PORT: '6379'
  # 没有redis用户的配置,需要添加用户明的调整为
  #redis://$(REDIS_USERNAME):$(REDIS_PASSWORD)@$(REDIS_HOST):$(REDIS_PORT)/1
  CELERY_BROKER_URL: redis://:$(REDIS_PASSWORD)@$(REDIS_HOST):$(REDIS_PORT)/1
  STORAGE_LOCAL_PATH: /app/api/storage
  VECTOR_STORE: weaviate
  WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
  WEAVIATE_ENDPOINT: http://$(WEAVIATE_HOST):$(WEAVIATE_PORT)
  WEAVIATE_HOST: dify-weaviate
  WEAVIATE_PORT: '8080'
  # 添加其他非敏感环境变量...

---
# Secret for sensitive data
apiVersion: v1
kind: Secret
metadata:
  name: dify-secrets
  namespace: dify-min
type: Opaque
data:
  SECRET_KEY: "c2stOWY3M3MzbGpUWFZjTVQzQmxiM2xqVHF0c0tpR0hYVmNNVDNCbGJrRkpMSzdV"  # base64 encoded
  DB_PASSWORD: "ZGlmeWFpMTIzNDU2"  # difyai123456
  REDIS_PASSWORD: "ZGlmeWFpMTIzNDU2"  # difyai123456

2.postgresql配置 

有外部接入的需自己调整ConfigMap文件

---
# PostgreSQL Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: dify-min
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: 本地仓库/ai/postgres:15-alpine
        env:
        - name: POSTGRES_DB
          valueFrom:
            configMapKeyRef:
              name: dify-config
              key: DB_NAME
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: dify-secrets
              key: DB_PASSWORD
        ports:
        - containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgres-data
      volumes:
      - name: postgres-data
        persistentVolumeClaim:
          claimName: postgres-pvc

---
# PostgreSQL Service
apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: dify-min
spec:
  selector:
    app: postgres
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
---
# PVCs
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
  namespace: dify-min
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

 3.redis配置

有外部接入的需自己调整ConfigMap文件

---
# Redis Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: dify-min
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: 本地仓库/library/redis:7.2.2-debian-11-r0
        env:
        - name: REDIS_PASSWORD
          valueFrom:
            secretKeyRef:
              name: dify-secrets
              key: REDIS_PASSWORD
        command: ["redis-server", "--requirepass $(REDIS_PASSWORD)"]
        ports:
        - containerPort: 6379
        volumeMounts:
        - mountPath: /data
          name: redis-data
      volumes:
      - name: redis-data
        persistentVolumeClaim:
          claimName: redis-pvc

---
# Redis Service
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: dify-min
spec:
  selector:
    app: redis
  ports:
    - protocol: TCP
      port: 6379
      targetPort: 6379
---
# pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pvc
  namespace: dify-min
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

4.weaviate配置

有外部接入的需自己调整ConfigMap文件

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: dify-min
spec:
  replicas: 1
  selector:
    matchLabels:
      app: weaviate
  template:
    metadata:
      labels:
        app: weaviate
    spec:
      containers:
        - env:
            - name: QUERY_DEFAULTS_LIMIT
              value: '25'
            - name: AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED
              value: 'false'
            - name: PERSISTENCE_DATA_PATH
              value: /var/lib/weaviate
            - name: DEFAULT_VECTORIZER_MODULE
              value: none
            - name: AUTHENTICATION_APIKEY_ENABLED
              value: 'true'
            - name: AUTHENTICATION_APIKEY_ALLOWED_KEYS
              value: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
            - name: AUTHENTICATION_APIKEY_USERS
              value: hello@dify.ai
            - name: AUTHORIZATION_ADMINLIST_ENABLED
              value: 'true'
            - name: AUTHORIZATION_ADMINLIST_USERS
              value: hello@dify.ai
          volumeMounts:
            - mountPath: /var/lib/weaviate
              name: weaviate-data
       volumes:
      - name: weaviate-data
        persistentVolumeClaim:
          claimName: weaviate-pvc
----
#PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: weaviate-pvc
  namespace: dify-min
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

 5.api和web

---
# API Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dify-api
  namespace: dify-min
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dify-api
  template:
    metadata:
      labels:
        app: dify-api
    spec:
      containers:
      - name: api
        image: 本地仓库/ai/langgenius/dify-api:0.15.3
        envFrom:
        - configMapRef:
            name: dify-config
        - secretRef:
            name: dify-secrets
        env:
        - name: MODE
          value: "api"
        - name: REDIS_USE_SSL
          value: 'false'
        - name: REDIS_DB
          value: '0'
        - name: WEB_API_CORS_ALLOW_ORIGINS
          value: '*'
        - name: CONSOLE_CORS_ALLOW_ORIGINS
          value: '*'
        - name: STORAGE_TYPE
          value: opendal
        - name: OPENDAL_SCHEME
          value: fs
        - name: OPENDAL_FS_ROOT
          value: storage
        - name: LOG_LEVEL
          value: DEBUG
        - name: INIT_PASSWORD
          value: password
        - name: MIGRATION_ENABLED
          value: 'true'
        ports:
        - containerPort: 5001
          volumeMounts:
            - mountPath: /app/api/storage
              name: vol-api-data
      volumes:
        - name: vol-api-data
          persistentVolumeClaim:
            claimName: api-pvc
---
# API Service
apiVersion: v1
kind: Service
metadata:
  name: dify-api
  namespace: dify-min
spec:
  selector:
    app: dify-api
  ports:
    - protocol: TCP
      port: 5001
      targetPort: 5001

---
# Web Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dify-web
  namespace: dify-min
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dify-web
  template:
    metadata:
      labels:
        app: dify-web
    spec:
      containers:
         - env:
            - name: EDITION
              value: SELF_HOSTED
            - name: CONSOLE_API_URL
            - name: APP_API_URL
            - name: SENTRY_DSN
            - name: NEXT_TELEMETRY_DISABLED
              value: '0'
            - name: TEXT_GENERATION_TIMEOUT_MS
              value: '60000'
            - name: CSP_WHITELIST
      - name: web
        image: 本地仓库/ai/langgenius/dify-web:0.15.3
        ports:
        - containerPort: 3000

---
# PVC

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: api-pvc
  namespace: api-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

6.对外服务

简单说明下Ingress和nginx配置

  • Ingress

安装过Ingress Controller有域名直接采用ingress

# Ingress (需要提前安装Ingress Controller)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dify-ingress
  namespace: dify-min
spec:
  rules:
  - host: dify.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dify-web
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: dify-api
            port:
              number: 5001
  • nginx

1.先部署nginx

配置nginx对外

---
# Web Service 这里是对应nginx对外暴露端口
apiVersion: v1
kind: Service
metadata:
  name: dify-web
  namespace: dify-min
spec:
  type: NodePort
  selector:
    app: dify-nginx
  ports:
    - protocol: TCP
      # 自定义对外端口,
      port: 8888
      targetPort: 3000
      nodePort: 30080
2.配置文件写入ConfigMap
apiVersion: v1
data:
  nginx.conf: |
    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;

        server {
        listen 80;
        server_name _;

        location /console/api {
          proxy_pass http://dify-api:5001;
          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;
        }

        location /api {
          proxy_pass http://dify-api:5001;
          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;
        }

        location /v1 {
          proxy_pass http://dify-api:5001;
          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;
        }

        location /files {
          proxy_pass http://dify-api:5001;
          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;
        }

        location / {
          proxy_pass http://dify-web;
          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;
        }

        # 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;
    }
    }
kind: ConfigMap
metadata:
  annotations:
    objectset.rio.cattle.io/applied: >-
      H4sIAAAAAAAA/4STXW+rOBCG/0o014SvE3pSzlW2YVskkqBC90PbFXLMkHhjbNY2aauK/74ybSq60navwPbzzjvjGb8C6dgvqDSTAmI4B+BATQyB+BXEgYlnl0rRQAy9RjWbjVs/HsWTVCdUVackRa1Rz2akN/LHo3gUqJRUFZeH2cw7E+VxefBGmQeDAycmaojhRoqGHTakAwdaNORiSYSQhhgmhbZLuf8LqdFoXMWkS4kxHF0mPWZjfL9eBot9Q+dR4y/mizC6ni+jKJjTmoTNVX3VRGFkLTnZI/8y3JHoI8TgL3BJ6ui7T6Mw9Oumib5FC7IMaECbBq8XC1qHob9EG1SQFiGGmjUv87E6eNvTHaGXA8vpDqm1VthxRomGOHBA4ZnZC79j2kj1krGWmfFAI0dqpLKKlhh6zD5yJ1138XvCPQyDAwbbjhODIz25RP6V6JKQ7Vcre2EKVGdGcUWpXZXyhALihnCNDlApDGEClYb4j1dAcR6/78Un67RMd1tw4Ex4b3eKJPu5utsVZbKGwfkAb3bbYpcl1SpPq4f7bCKYUqs8/x+iSLbl/e/Vutj+B7BNfiurMsmSTTKCabH6KUvWE9qf4qXFb5Ntcr+yhVRlukl2D2W1KSaKK9/3P6luirz69S4tkywtyk+J/OkAa8nBLo5E7aVy94zIrhdoXCpbjzCPE3E4oGC99i5tiX03iNwQ3sV5z3kuOaMvEEPabKXJFWoUBj5PnW2oA51U5q05H73KpTIQf/N93yakUMteURzngdtJG/9o10MMke+34wtspbJ2wS2zQ6vw7x71FAz+DYbLDYNhsA5C1lhMBvfU71EJNKjt25IaYuBM9M8WH4Z/AgAA//99yoMbcQQAAA
    objectset.rio.cattle.io/id: 79814bfc-5f04-4259-8551-cda2f6d6f525
  creationTimestamp: '2025-06-06T03:30:45Z'
  labels:
    objectset.rio.cattle.io/hash: 04e8ad570c5220dff5354a81c1cffe944cd2208e
  managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        f:data:
          .: {}
          f:nginx.conf: {}
        f:metadata:
          f:annotations:
            .: {}
            f:objectset.rio.cattle.io/applied: {}
            f:objectset.rio.cattle.io/id: {}
          f:labels:
            .: {}
            f:objectset.rio.cattle.io/hash: {}
      manager: rancher
      operation: Update
      time: '2025-06-06T05:03:21Z'
  name: dify-bl-config
  namespace: dify-min
  resourceVersion: '1712744'
  uid: bdbea84e-755d-4bf6-821c-5b0b07eb6001

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“草台班子”的成长路径分析

一、草台班子的起点:用最小成本验证价值 特点: 团队规模小(通常3-5人),成员背景杂(可能是程序员产品经理运营的混搭);资源匮乏(无资金、无技术中台、无客户积累&#x…

软件测评服务如何依据标准确保品质?涵盖哪些常见内容?

软件测评服务涉及对软件的功能和性能等多维度进行评估和检验,这一过程有助于确保软件的品质,降低故障发生率及维护费用,对于软件开发和维护环节具有至关重要的价值。 测评标准依据 GB/T 25000.51 - 2016是软件测评的核心依据。依照这一标准…

Python打卡第46天

浙大疏锦行 注意力 注意力机制是一种让模型学会「选择性关注重要信息」的特征提取器,就像人类视觉会自动忽略背景,聚焦于图片中的主体(如猫、汽车)。 从数学角度看,注意力机制是对输入特征进行加权求和,…

Unity优化篇之DrawCall

当然可以!以下是完整、详尽、可发布的博客文章,专注讲解 Unity 的静态合批与动态合批机制,并详细列出它们对 Shader 的要求和所有限制条件。文章结构清晰、技术深度足够,适合发布在 CSDN、掘金、知乎等技术平台。 urp默认隐藏动态…

SpringCloud学习笔记-2

说明:来源于网络,如有侵权请联系我删除 1.提问:如果注册中心宕机,远程调用还能成功吗 答:当微服务发起请求时,会向注册中心请求所有的微服务地址,然后在向指定的微服务地址发起请求。在设计实…

从混乱到秩序:探索管理系统如何彻底改变工作流程

内容摘要 在许多企业与组织中,工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额,工作效率低下,错误频发。而与之形成鲜明对比的是,一些引入了先进管理系统的团队&#xff0…

最新研究揭示云端大语言模型防护机制的成效与缺陷

一项全面新研究揭露了主流云端大语言模型(LLM)平台安全机制存在重大漏洞与不一致性,对当前人工智能安全基础设施现状敲响警钟。该研究评估了三大领先生成式AI平台的内容过滤和提示注入防御效果,揭示了安全措施在阻止有害内容生成与…

HTML5+CSS3+JS小实例:具有粘性重力的磨砂玻璃导航栏

实例:具有粘性重力的磨砂玻璃导航栏 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width…

Python爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…

Webpack的基本使用 - babel

Mode配置 Mode配置选项可以告知Webpack使用相应模式的内置优化 默认值是production&#xff08;什么都不设置的情况下&#xff09; 可选值有&#xff1a;none | development | production; 这几个选项有什么区别呢&#xff1f; 认识source-map 我们的代码通常运行在浏览器…

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战

链游技术破壁&#xff1a;NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新&#xff1a;从链上存证到动态赋权 跨链确权架构 全链互操作协议&#xff1a;采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…

为什么HDI叠孔比错孔设计难生产

摘要&#xff1a;本文深入探讨了HDI&#xff08;高密度互连&#xff09;技术中叠孔与错孔设计在生产难度上的差异。通过对两种设计在对位精度、制程复杂性、可靠性挑战等方面进行详细分析&#xff0c;阐述了叠孔设计在生产过程中面临的一系列难题&#xff0c;旨在为HDI产品的设…

数据分析实战2(Tableau)

1、Tableau功能 数据赋能&#xff08;让业务一线也可以轻松使用最新数据&#xff09; 分析师可以直接将数据看板发布到线上自动更新看板自由下载数据线上修改图表邮箱发送数据设置数据预警 数据探索&#xff08;通过统计分析和数据可视化&#xff0c;从数据发现问题&#xf…

游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程

案例背景 关于Gearbox&#xff1a; Gearbox 是一家美国电子游戏公司&#xff0c;总部位于德克萨斯州弗里斯科&#xff0c;靠近达拉斯。Gearbox 成立于1999年&#xff0c;推出过多款史上最具代表性的视频游戏&#xff0c;包括《半衰期》、《战火兄弟连》以及《无主之地》。 团队…

Linux --TCP协议实现简单的网络通信(中英翻译)

一、什么是TCP协议 1.1 、TCP是传输层的协议&#xff0c;TCP需要连接&#xff0c;TCP是一种可靠性传输协议&#xff0c;TCP是面向字节流的传输协议&#xff1b; 二、TCPserver端的搭建 2.1、我们最终好实现的效果是 客户端在任何时候都能连接到服务端&#xff0c;然后向服务…

LlamaIndex 工作流简介以及基础工作流

什么是工作流&#xff1f; 工作流是一种由事件驱动、基于步骤的应用程序执行流程控制方式。 你的应用程序被划分为多个称为“步骤&#xff08;Steps&#xff09;”的部分&#xff0c;这些步骤由“事件&#xff08;Events&#xff09;”触发&#xff0c;并且它们自身也会发出事…

如何利用Elastic Stack(ELK)进行安全日志分析

在以下文章中&#xff0c;我将解释如何使用Elastic Stack&#xff08;ELK&#xff09;进行安全日志分析&#xff0c;以提高安全性和监控网络活动。ELK是一个功能强大的开源日志管理和分析平台&#xff0c;由Elasticsearch、Logstash和Kibana组成&#xff0c;适用于各种用例&…

创客匠人:以 AI 利器赋能创始人 IP 打造,加速知识变现新路径

在知识付费与个人 IP 崛起的时代&#xff0c;创客匠人作为行业领先的技术服务商&#xff0c;正通过 AI 工具重构创始人 IP 打造与知识变现的生态。其推出的三大 AI 利器 ——AI 销售信、免训数字人、AI 智能客服&#xff0c;精准解决 IP 运营中的核心痛点。 以 AI 销售信为例&…

Opencv中的copyto函数

一.OpenCV中copyto函数详解 copyto&#xff08;&#xff09;是 OpenCV 中用于图像复制和融合的核心函数&#xff0c;支持灵活的数据复制和掩模&#xff08;Mask&#xff09;操作&#xff0c;其功能和使用方法如下&#xff1a; 1. 核心功能 基础复制&#xff1a;将源图像&…

基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究

在大数据时代&#xff0c;网络数据的采集与分析变得至关重要&#xff0c;分布式爬虫作为高效获取海量数据的工具&#xff0c;被广泛应用于各类场景。然而&#xff0c;传统的爬虫调度策略在面对复杂多变的网络环境和动态的抓取需求时&#xff0c;往往存在效率低下、资源浪费等问…