1. 概述
Lobe Chat 是一个基于 Kubernetes 部署的聊天应用程序,使用 PostgreSQL 作为数据库,并集成了 OpenAI 和 DeepSeek 等第三方 API。应用程序通过 Ingress 暴露服务,支持 HTTPS 访问。
2. 前提条件
在开始部署之前,请确保以下环境和工具已准备就绪:
- Kubernetes 集群:版本 1.20 或更高。
- kubectl:已配置并能够访问目标集群。
- PostgreSQL 向量数据库:已部署并可用,数据库连接信息需提供,选择向量扩展插件 pgvector。
- S3 存储:已配置并可用,S3 访问密钥和端点需提供。
- 域名和 TLS 证书:已准备好域名(如
chart.jiufog.space
)和对应的 TLS 证书。强制,因为与 Logto 有关。 - 第三方 API 密钥:如 DeepSeek 和 SiliconCloud 的 API 密钥。
- **Logto 认证服务部署:**自建 Logto 服务或采用官方提供的 saas 服务
3. 部署步骤
3.1 准备 Manifest 文件
将以下 Manifest 文件保存为 lobe-deployment.yaml
,并根据实际情况替换 {{ }}
中的内容。
apiVersion: apps/v1
kind: Deployment
metadata:
name: lobe-chat
namespace: dev
spec:
replicas: 1
selector:
matchLabels:
app: lobe-chat
template:
metadata:
labels:
app: lobe-chat
spec:
containers:
- name: lobe-chat-container
image: lobehub/lobe-chat-database:latest
imagePullPolicy: Always
ports:
- containerPort: 3210
env:
- name: ENABLED_OPENAI
value: "0"
- name: SILICONCLOUD_API_KEY
value: "{{ YOUR_SILICONCLOUD_API_KEY }}" # 替换为实际的 SiliconCloud API 密钥
- name: DATABASE_URL
value: "{{ YOUR_DATABASE_URL }}" # 替换为实际的 PostgreSQL 连接字符串
- name: S3_ACCESS_KEY_ID
value: "{{ YOUR_S3_ACCESS_KEY_ID }}" # 替换为实际的 S3 Access Key ID
- name: S3_SECRET_ACCESS_KEY
value: "{{ YOUR_S3_SECRET_ACCESS_KEY }}" # 替换为实际的 S3 Secret Access Key
- name: S3_ENDPOINT
value: "{{ YOUR_S3_ENDPOINT }}" # 替换为实际的 S3 Endpoint
- name: S3_PUBLIC_DOMAIN
value: "{{ YOUR_S3_PUBLIC_DOMAIN }}" # 替换为实际的 S3 Public Domain
- name: S3_ENABLE_PATH_STYLE
value: "1"
- name: S3_BUCKET
value: "{{ YOUR_S3_BUCKET }}" # 替换为实际的 S3 Bucket 名称
- name: APP_URL
value: "{{ YOUR_APP_URL }}" # 替换为你的域名
- name: KEY_VAULTS_SECRET
value: "{{ YOUR_KEY_VAULTS_SECRET }}" # 替换为实际的 Key Vaults Secret
- name: NEXT_AUTH_SECRET
value: "{{ YOUR_NEXT_AUTH_SECRET }}" # 替换为实际的 Next Auth Secret
- name: NEXTAUTH_URL
value: "{{ YOUR_NEXTAUTH_URL }}" # 替换为实际的 NextAuth URL
- name: NEXT_AUTH_SSO_PROVIDERS
value: logto # 采用的logto作为用户管理
- name: AUTH_LOGTO_ID
value: "{{ YOUR_AUTH_LOGTO_ID }}" # 替换为实际的 Logto ID
- name: AUTH_LOGTO_SECRET
value: "{{ YOUR_AUTH_LOGTO_SECRET }}" # 替换为实际的 Logto Secret
- name: AUTH_LOGTO_ISSUER
value: "{{ YOUR_AUTH_LOGTO_ISSUER }}" # 替换为实际的 Logto Issuer
- name: LOGTO_WEBHOOK_SIGNING_KEY
value: "{{ YOUR_LOGTO_WEBHOOK_SIGNING_KEY }}" # 替换为实际的 Logto Webhook Signing Key
- name: DEFAULT_FILES_CONFIG
value: embedding_model=siliconcloud/BAAI/bge-m3 # 向量分析使用的模型
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ai-ingress
namespace: dev
spec:
ingressClassName: nginx
rules:
- host: "{{ YOUR_HOST }}" # 替换为实际的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ai-chat
port:
number: 80
tls:
- hosts:
- "{{ YOUR_HOST }}" # 替换为实际的域名
secretName: "{{ YOUR_TLS_SECRET_NAME }}" # 替换为实际的 TLS Secret 名称
---
apiVersion: v1
kind: Service
metadata:
name: ai-chat
namespace: dev
spec:
selector:
app: lobe-chat
ports:
- protocol: TCP
port: 80
targetPort: 3210
填写 AI-api(扩展)
硅基流动
选择硅基流动 API(避免 deepseek 的 API 服务器性能瓶颈,还会额外赠送 14 元的体验金):
https://cloud.siliconflow.cn/i/frVugSQo
硅基流动 API 接入文档:
3.2 创建 Namespace
如果 dev
Namespace 尚未创建,请先创建:
kubectl create namespace dev
3.3 部署应用程序
使用 kubectl
部署应用程序:
kubectl apply -f lobe-deployment.yaml
3.4 验证部署
检查 Deployment、Service 和 Ingress 是否成功创建:
kubectl -n dev get deployment,service,ingress
4. 验证部署
4.1 检查 Pod 状态
确保 Pod 已成功启动并处于 Running
状态:
kubectl -n dev get pods
4.2 访问应用程序
通过浏览器访问 https://{{ YOUR_HOST }}
,确保应用程序能够正常加载。
4.3 检查日志
如果应用程序无法正常工作,可以查看 Pod 日志以排查问题:
kubectl -n dev logs <pod-name>
5. 维护和监控
5.1 扩缩容
根据需要调整 Deployment 的副本数:
kubectl -n dev scale deployment lobe-chat --replicas=3
5.2 更新镜像
如果需要更新应用程序镜像,可以修改 image
字段并重新应用 Manifest:
kubectl apply -f lobe-deployment.yaml
5.3 监控
建议配置 Prometheus 和 Grafana 对应用程序进行监控,重点关注以下指标:
- Pod 的 CPU 和内存使用率。
- 数据库连接数。
- S3 存储的读写性能。
6. 故障排除
6.1 Pod 无法启动
- 检查镜像:确保镜像名称和版本正确。
- 检查环境变量:确保所有环境变量已正确配置。
- 查看日志:通过
kubectl logs
查看 Pod 日志以获取更多信息。
6.2 无法访问应用程序
- 检查 Ingress:确保 Ingress 配置正确,TLS 证书已正确加载。
- 检查 Service:确保 Service 的端口配置与 Pod 一致。
- 检查网络策略:确保没有网络策略阻止流量。
6.3 数据库连接失败
- 检查连接字符串:确保
DATABASE_URL
的值正确。 - 检查数据库状态:确保 PostgreSQL 数据库已启动并允许外部连接。
7. 附录
7.1 需要用户替换的内容
以下是需要用户根据实际情况替换的内容:
{{ YOUR_SILICONCLOUD_API_KEY }}
:替换为实际的 SiliconCloud API 密钥。{{ YOUR_DATABASE_URL }}
:替换为实际的 PostgreSQL 连接字符串。{{ YOUR_S3_ACCESS_KEY_ID }}
、{{ YOUR_S3_SECRET_ACCESS_KEY }}
、{{ YOUR_S3_ENDPOINT }}
、{{ YOUR_S3_BUCKET }}
:替换为实际的 S3 存储配置。{{ YOUR_HOST }}
:替换为实际的域名。{{ YOUR_TLS_SECRET_NAME }}
:替换为实际的 TLS 证书 Secret 名称。{{ YOUR_APP_URL }}
:替换为实际的应用程序 URL。{{ YOUR_KEY_VAULTS_SECRET }}
:替换为实际的 Key Vaults Secret。{{ YOUR_NEXT_AUTH_SECRET }}
:替换为实际的 Next Auth Secret。{{ YOUR_NEXTAUTH_URL }}
:替换为实际的 NextAuth URL。{{ YOUR_AUTH_LOGTO_ID }}
:替换为实际的 Logto ID。{{ YOUR_AUTH_LOGTO_SECRET }}
:替换为实际的 Logto Secret。{{ YOUR_AUTH_LOGTO_ISSUER }}
:替换为实际的 Logto Issuer。{{ YOUR_LOGTO_WEBHOOK_SIGNING_KEY }}
:替换为实际的 Logto Webhook Signing Key。
7.2 参考链接
填写 AI-api(扩展)
硅基流动
选择硅基流动 API(避免 deepseek 的 API 服务器性能瓶颈,还会额外赠送 14 元的体验金):
https://cloud.siliconflow.cn/i/frVugSQo
硅基流动 API 接入文档:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于