购物网站开发的意义和目的,3d室内设计效果图制作教程,临沂百度公司地址,用户界面设计包括LobeChat 是一个基于 TypeScript 的开源聊天机器人项目#xff0c;支持本地部署和接入多个大语言模型。本文介绍如何使用 Docker Compose 将 LobeChat 服务端及其数据库部署到生产环境#xff0c;让您拥有一个私有化的、可定制的 AI 聊天助手。
一、部署前准备 服务器…
LobeChat 是一个基于 TypeScript 的开源聊天机器人项目支持本地部署和接入多个大语言模型。本文介绍如何使用 Docker Compose 将 LobeChat 服务端及其数据库部署到生产环境让您拥有一个私有化的、可定制的 AI 聊天助手。
一、部署前准备 服务器 一台拥有公网 IP 的服务器并已安装 Docker 和 Docker Compose。 域名和 SSL 证书 准备好以下域名及对应的 SSL 证书 (将 yourdomain.com 替换为您的实际域名)。证书名称需与 nginx.conf 文件中的配置一致确保证书有效以避免浏览器安全警告。 lobe.yourdomain.com - LobeChat 主应用lobe-auth-api.yourdomain.com - Logto 认证 APIlobe-auth-ui.yourdomain.com - Logto 认证 UI 如果您不打算自部署 MinIO以下两个域名可以省略 lobe-s3-api.yourdomain.com - MinIO APIlobe-s3-ui.yourdomain.com - MinIO UI MinIO (可选): MinIO 用于存储图片、文件等非结构化数据。您也可以使用阿里云 OSS、腾讯云 COS 等替代方案如果选择其他方案请参考 LobeChat 官方文档进行配置。
二、部署步骤 域名解析 将上述域名解析到您的服务器 IP 地址。 SSL 证书 在服务器上创建 ssl 目录并将所有域名的 SSL 证书文件 (.pem 和 .key) 放入其中。确保文件权限正确。 配置文件 将以下三个配置文件 (docker-compose.yml、.env、nginx.conf) 复制到服务器上的同一目录下。 docker-compose.yml:
# docker-compose.yml
version: 3.9nginx:image: nginx:latestcontainer_name: lobe-nginxports:- 80:80- 443:443volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro- ./ssl:/etc/nginx/ssl:rodepends_on:- lobe- logto- miniorestart: alwayspostgresql:image: pgvector/pgvector:pg16container_name: lobe-postgresvolumes:- ./data:/var/lib/postgresql/dataenvironment:- POSTGRES_DBlobe- POSTGRES_PASSWORDuWNZugjBqixf8dxChealthcheck:test: [CMD-SHELL, pg_isready -U postgres]interval: 5stimeout: 5sretries: 5restart: alwaysminio:image: minio/miniocontainer_name: lobe-miniovolumes:- ./s3_data:/etc/minio/dataenvironment:- MINIO_ROOT_USERadmin- MINIO_ROOT_PASSWORD12345678- MINIO_DOMAINlobe-s3-api.xxxxxx.com- MINIO_API_CORS_ALLOW_ORIGINhttps://lobe.xxxxx.comports:- 9000:9000- 9001:9001restart: alwayscommand: server /etc/minio/data --address :9000 --console-address :9001logto:image: svhd/logto:1.19.0# 或 image: svhd/logtosha256:3368f164d9147ed74b47b718241ccd844282908245262cf87be84bbb3d6bf62fcontainer_name: lobe-logtodepends_on:postgresql:condition: service_healthyenvironment:- TRUST_PROXY_HEADER1- DB_URLpostgresql://postgres:uWNZugjBqixf8dxCpostgresql:5432/logto- ENDPOINThttps://lobe-auth-api.xxxxxx.com- ADMIN_ENDPOINThttps://lobe-auth-ui.xxxxxx.comentrypoint: [sh, -c, npm run cli db seed -- --swe npm start]lobe:image: lobehub/lobe-chat-databasecontainer_name: lobe-databasedepends_on:- postgresql- minio- logtoenv_file:- .envrestart: alwaysvolumes:data:driver: locals3_data:driver: local
**.env**:# .env# 必填LobeChat 域名用于 tRPC 调用
# 请保证此域名在你的 NextAuth 鉴权服务提供商、S3 服务商的 CORS 白名单中
APP_URLhttps://uiuiapi.com/# Postgres 相关也即 DB 必需的环境变量
# 必填用于加密敏感信息的密钥可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRETKix2wcUONd4CX51E/ZPAd36BqM4wzJgKjPtz2sGztqQ
# 必填Postgres 数据库连接字符串用于连接到数据库
# 格式postgresql://username:passwordhost:port/dbname如果你的 pg 实例为 Docker 容器且位于同一 docker-compose 文件中亦可使用容器名作为 host
DATABASE_URLpostgresql://postgres:uWNZugjBqixf8dxCpostgresql:5432/lobe# NEXT_AUTH 相关也即鉴权服务必需的环境变量
# 可以使用 auth0、Azure AD、GitHub、Authentik、Zitadel、Logto 等如有其他接入诉求欢迎提 PR
# 目前支持的鉴权服务提供商请参考https://lobehub.com/zh/docs/self-hosting/advanced/auth#next-auth
# 如果你有 ACCESS_CODE请务必清空我们以 NEXT_AUTH 作为唯一鉴权来源
# 必填用于 NextAuth 的密钥可以使用 openssl rand -base64 32 生成
NEXT_AUTH_SECRETNX2kaPE923dt6BL2U8e9oSre5RfoT7hg
# 必填指定鉴权服务提供商这里以 Logto 为例
NEXT_AUTH_SSO_PROVIDERSlogto
# 必填NextAuth 的 URL用于 NextAuth 的回调
NEXTAUTH_URLhttps://lobe.xxxxxxx.com/api/auth# NextAuth 鉴权服务提供商部分以 Logto 为例
# 其他鉴权服务提供商所需的环境变量请参考https://lobehub.com/zh/docs/self-hosting/environment-variables/auth
LOGTO_CLIENT_IDYOUR_LOGTO_CLIENT_ID
LOGTO_CLIENT_SECRETYOUR_LOGTO_CLIENT_SECRET
LOGTO_ISSUERhttps://lobe-auth-api.xxxxxxx.com/oidc# 代理相关如果你需要的话比如你使用 GitHub 作为鉴权服务提供商
# HTTP_PROXYhttp://localhost:7890
# HTTPS_PROXYhttp://localhost:7890# S3 相关也即非结构化数据文件、图片等存储必需的环境变量
# 这里以 MinIO 为例
# 必填S3 的 Access Key ID对于 MinIO 来说直到在 MinIO UI 中手动创建之前都是无效的
S3_ACCESS_KEY_IDYOUR_S3_ACCESS_KEY_ID
# 必填S3 的 Secret Access Key对于 MinIO 来说直到在 MinIO UI 中手动创建之前都是无效的
S3_SECRET_ACCESS_KEYYOUR_S3_SECRET_ACCESS_KEY
# 必填S3 的 Endpoint用于服务端/客户端连接到 S3 API
S3_ENDPOINThttps://lobe-s3-api.xxxxxxx.com
# 必填S3 的 Bucket直到在 MinIO UI 中手动创建之前都是无效的
S3_BUCKETlobe
# 必填S3 的 Public Domain用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAINhttps://lobe-s3-api.xxxxxxxx.com
# 选填S3 的 Enable Path Style
# 对于主流 S3 Cloud 服务商一般填 0 即可对于自部署的 MinIO请填 1
# 请参考https://lobehub.com/zh/docs/self-hosting/advanced/s3#s-3-enable-path-style
S3_ENABLE_PATH_STYLE1# 其他基础环境变量视需求而定。注意不要有 ACCESS_CODE
# 请参考https://lobehub.com/zh/docs/self-hosting/environment-variables/basic
# 请注意对于服务端版本其 API 必须支持嵌入OpenAI text-embedding-3-small模型否则无法对上传文件进行处理但你无需在 OPENAI_MODEL_LIST 中指定此模型
# OPENAI_API_KEYsk-xxxx
# OPENAI_PROXY_URLhttps://api1.uiuiapi.com/v1 #我用的是第三方需要使用openai就改成 https://api.openai.com/v1
# OPENAI_MODEL_LIST...
**nginx.conf**:# nginx.confevents {worker_connections 1024;
}http {server {listen 80;server_name lobe.xxxxxx.com;return 301 https://$server_name$request_uri;}server {listen 443 ssl;server_name lobe.lovehxy.com;ssl_certificate /etc/nginx/ssl/lobe.xxxxxx.com.pem;ssl_certificate_key /etc/nginx/ssl/lobe.xxxxxxcom.key;location / {proxy_pass http://lobe:3210;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}server {listen 80;server_name lobe-auth-ui.lovehxy.com;return 301 https://$server_name$request_uri;}server {listen 443 ssl;server_name lobe-auth-ui.xxxxxx.com;ssl_certificate /etc/nginx/ssl/lobe-auth-ui.xxxxxx.com.pem;ssl_certificate_key /etc/nginx/ssl/lobe-auth-ui.xxxxxx.com.key;location / {proxy_pass http://logto:3002;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}server {listen 80;server_name lobe-auth-api.xxxxxx.com;return 301 https://$server_name$request_uri;}server {listen 443 ssl;server_name lobe-auth-api.xxxxxx.com;ssl_certificate /etc/nginx/ssl/lobe-auth-api.xxxxxx.com.pem;ssl_certificate_key /etc/nginx/ssl/lobe-auth-api.xxxxxx.com.key;location / {proxy_pass http://logto:3001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}server {listen 80;server_name lobe-s3-api.xxxxxx.com;return 301 https://$server_name$request_uri;}server {listen 443 ssl;server_name lobe-s3-api.xxxxxx.com;ssl_certificate /etc/nginx/ssl/lobe-s3-api.xxxxxx.com.pem;ssl_certificate_key /etc/nginx/ssl/lobe-s3-api.xxxxxx.com.key;location / {proxy_pass http://minio:9000;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}client_max_body_size 100M;}server {listen 80;server_name lobe-s3-ui.xxxxxx.com;return 301 https://$server_name$request_uri;}server {listen 443 ssl;server_name lobe-s3-ui.xxxxxx.com;ssl_certificate /etc/nginx/ssl/lobe-s3-ui.xxxxxx.com.pem;ssl_certificate_key /etc/nginx/ssl/lobe-s3-ui.xxxxxx.com.key;location / {proxy_pass http://minio:9001;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}client_max_body_size 100M;
}
MinIO Bucket 策略 (minio-bucket-config.json): 创建一个名为 minio-bucket-config.json 的文件并将以下内容复制进去将 lobe 替换为您的 bucket 名称 (如果使用了不同的名称):
{Statement: [{Effect: Allow,Principal: {AWS: [*]},Action: [s3:GetBucketLocation],Resource: [arn:aws:s3:::lobe]},{Effect: Allow,Principal: {AWS: [*]},Action: [s3:ListBucket],Resource: [arn:aws:s3:::lobe],Condition: {StringEquals: {s3:prefix: [files/*]}}},{Effect: Allow,Principal: {AWS: [*]},Action: [s3:PutObject, s3:DeleteObject, s3:GetObject],Resource: [arn:aws:s3:::lobe/files/**]}],Version: 2012-10-17
}启动服务 在包含配置文件的目录下执行 docker-compose up -d 启动服务。 配置 Logto 访问 https://lobe-auth-ui.yourdomain.com 并注册一个管理员账户。在 “Applications” 中创建一个 “Next.js” 应用名称可以自定义。配置 “Redirect URI” 为 https://lobe.yourdomain.com/api/auth/callback/logto。配置 “Post sign-out redirect URI” 为 https://lobe.yourdomain.com。配置 “CORS allowed origins” 为 https://lobe.yourdomain.com。获取生成的 “App ID” 和 “App Secret”并填入 .env 文件中的 LOGTO_CLIENT_ID 和 LOGTO_CLIENT_SECRET。确保 .env 文件中的 LOGTO_ISSUER 为 https://lobe-auth-api.yourdomain.com/oidc。重启服务docker-compose up -d 配置 MinIO 访问 https://lobe-s3-ui.yourdomain.com使用 docker-compose.yml 中设置的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 登录。创建名为 lobe (或您在 .env 文件中 S3_BUCKET 指定的名称) 的 Bucket。选中新创建的 Bucket点击 “Summary” - “Access Policy”选择 “Custom”将 minio-bucket-config.json 文件中的内容复制粘贴进去并保存。在 “User” - “Access Keys” 处点击 “Create New Access Key”无需额外修改将生成的 “Access Key” 和 “Secret Key” 填入 .env 文件中的 S3_ACCESS_KEY_ID 和 S3_SECRET_ACCESS_KEY。重启服务docker-compose up -d
三、访问 LobeChat
完成以上步骤后即可访问使用 LobeChat。使用在 Logto 中注册的管理员账户登录即可开始使用。
四、其他说明
密钥生成 可以使用 openssl rand -base64 32 生成所需的密钥。环境变量 请仔细检查 .env 文件中的所有环境变量确保其值正确无误。日志查看 可以使用 docker-compose logs -f 查看服务的运行日志以便排查问题.数据持久化: 本配置使用了数据卷来持久化 PostgreSQL 和 MinIO 的数据即使容器重启数据也不会丢失。
这个版本更加完整补充了密钥生成、日志查看、数据持久化等说明并对 Logto 和 MinIO 的配置步骤进行了更详细的描述力求让读者能够顺利完成部署。 请务必替换所有占位符为您的实际值。