如何自己建造网站,wordpress正在连接,高质量的装修公司,食品包装设计风格使用 Docker Compose 部署 LobeChat 数据版
在构建私有化 AI 助手的实践中#xff0c;持久化的会话存储、安全的身份认证和可靠的文件处理能力是生产环境部署的核心需求。LobeChat 作为一款现代化的开源 AI 聊天框架#xff0c;不仅提供了媲美 ChatGPT 的交互体验#xff0…使用 Docker Compose 部署 LobeChat 数据版在构建私有化 AI 助手的实践中持久化的会话存储、安全的身份认证和可靠的文件处理能力是生产环境部署的核心需求。LobeChat 作为一款现代化的开源 AI 聊天框架不仅提供了媲美 ChatGPT 的交互体验还通过模块化设计支持多种大模型接入、插件扩展、角色预设以及多模态输入输出功能。更重要的是其“数据版”镜像lobe-chat-database结合独立数据库与对象存储真正实现了用户数据的完整闭环管理。本文将带你一步步完成一个可用于生产环境的 LobeChat 全栈部署方案——使用Docker Compose统一编排前端、后端、PostgreSQL 数据库、Logto 认证服务与 MinIO 对象存储确保会话记录不丢失、用户体系可管理、上传文件可访问。整个过程无需修改代码适合有一定运维基础的技术人员快速落地。环境准备从零开始搭建基础设施任何成功的容器化部署都始于清晰的环境规划。你需要一台运行 Linux 的服务器推荐 Ubuntu 20.04 或更高版本并已分配公网 IP 和至少一个主域名。例如chat.yourdomain.com→ 主应用入口auth-api.yourdomain.com→ 认证 API 接口auth-ui.yourdomain.com→ 认证后台管理界面如果你打算自建对象存储则还需为 MinIO 准备两个子域名-lobe-s3-api.yourdomain.com→ S3 API 地址-lobe-s3-ui.yourdomain.com→ Web 控制台地址安装 Docker 与 Docker Compose这是最基础但最关键的一步。执行以下命令安装运行时依赖sudo apt update sudo apt install -y docker.io sudo systemctl enable docker --now # 安装最新版 Docker Compose sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose验证是否安装成功docker --version docker-compose --version域名解析设置登录你的 DNS 提供商控制台如 Cloudflare、阿里云 DNS为上述所有子域名添加 A 记录指向服务器公网 IPchat → 123.45.67.89 auth-api → 123.45.67.89 auth-ui → 123.45.67.89 lobe-s3-api → 123.45.67.89 lobe-s3-ui → 123.45.67.89这一步完成后建议等待几分钟让 DNS 生效再进行后续操作。获取 SSL 证书推荐 Let’s Encrypt由于现代浏览器对 HTTP 的限制越来越严格强烈建议全程启用 HTTPS。我们可以使用certbot自动申请免费证书sudo apt install -y certbot sudo certbot certonly --standalone -d chat.yourdomain.com -d auth-api.yourdomain.com -d auth-ui.yourdomain.com -d lobe-s3-api.yourdomain.com -d lobe-s3-ui.yourdomain.com证书默认保存在/etc/letsencrypt/live/yourdomain.com/目录下。为了方便管理创建本地目录并将证书软链接过来mkdir -p ./ssl cd ./ssl ln -s /etc/letsencrypt/live/chat.yourdomain.com/fullchain.pem chat.yourdomain.com.pem ln -s /etc/letsencrypt/live/chat.yourdomain.com/privkey.pem chat.yourdomain.com.key # 其他域名同理... 小技巧若无法使用--standalone模式端口冲突可改用 DNS 验证方式如certbot-dns-cloudflare插件实现自动化签发。构建部署配置三位一体的服务编排我们将通过三个核心文件来定义整个系统架构docker-compose.yml、.env和nginx.conf。它们分别负责服务编排、环境变量注入与流量路由。核心编排文件docker-compose.ymlversion: 3.9 services: nginx: image: nginx:alpine container_name: lobe-nginx ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./ssl:/etc/nginx/ssl:ro depends_on: - lobe - logto - minio restart: always postgresql: image: pgvector/pgvector:pg16 container_name: lobe-postgres environment: POSTGRES_DB: lobe POSTGRES_PASSWORD: secure_postgres_password_2025 volumes: - ./data/postgres:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, pg_isready -U postgres] interval: 5s timeout: 5s retries: 10 restart: always minio: image: minio/minio container_name: lobe-minio environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: minio_admin_strong_password MINIO_DOMAIN: lobe-s3-api.yourdomain.com volumes: - ./data/minio:/etc/minio/data ports: - 9000:9000 - 9001:9001 command: server /etc/minio/data --address :9000 --console-address :9001 restart: always logto: image: logto/core:latest container_name: lobe-logto depends_on: postgresql: condition: service_healthy environment: DB_URL: postgresql://postgres:secure_postgres_password_2025postgresql:5432/logto ENDPOINT: https://auth-api.yourdomain.com ADMIN_ENDPOINT: https://auth-ui.yourdomain.com TRUST_PROXY_HEADER: 1 entrypoint: [sh, -c, npx logto db seed exec npx logto start] restart: always lobe: image: lobehub/lobe-chat-database:latest container_name: lobe-chat depends_on: postgresql: condition: service_healthy logto: condition: service_started minio: condition: service_started env_file: - .env restart: always ports: - 3210:3210 volumes: postgres_data: minio_data:几个关键点需要注意PostgreSQL 使用了pgvector扩展镜像为未来支持向量检索打下基础。Logto 依赖数据库健康状态启动并自动执行初始化脚本。Nginx 作为反向代理统一对外暴露服务避免直接暴露内部端口。所有数据卷均挂载到本地./data/目录保障重启不失效。记得把所有yourdomain.com替换为你的真实域名。环境变量配置.envAPP_URLhttps://chat.yourdomain.com KEY_VAULTS_SECRETyour_generated_32byte_base64_key_here DATABASE_URLpostgresql://postgres:secure_postgres_password_2025postgresql:5432/lobe NEXTAUTH_SECRETanother_unique_32byte_base64_string NEXT_AUTH_SSO_PROVIDERSlogto NEXTAUTH_URLhttps://chat.yourdomain.com/api/auth LOGTO_CLIENT_ID LOGTO_CLIENT_SECRET LOGTO_ISSUERhttps://auth-api.yourdomain.com/oidc S3_ACCESS_KEY_IDminioadmin S3_SECRET_ACCESS_KEYminioadmin S3_ENDPOINThttps://lobe-s3-api.yourdomain.com S3_BUCKETlobe-files S3_PUBLIC_DOMAINhttps://lobe-s3-api.yourdomain.com S3_ENABLE_PATH_STYLE1其中两个密钥必须生成强随机值# 生成 Base64 编码的 32 字节密钥 openssl rand -base64 32输出类似k3JqZmRtMjNscmt5eHl6MTIzNDU2Nzg5QCMkJV4mKgo分别填入KEY_VAULTS_SECRET和NEXTAUTH_SECRET。其余字段将在后续步骤中补全。反向代理配置nginx.confevents { worker_connections 1024; } http { upstream lobe { server lobe:3210; } upstream logto_api { server logto:3001; } upstream logto_ui { server logto:3002; } upstream minio_api { server minio:9000; } upstream minio_console { server minio:9001; } server { listen 80; server_name chat.yourdomain.com auth-api.yourdomain.com auth-ui.yourdomain.com lobe-s3-api.yourdomain.com lobe-s3-ui.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name chat.yourdomain.com; ssl_certificate /etc/nginx/ssl/chat.yourdomain.com.pem; ssl_certificate_key /etc/nginx/ssl/chat.yourdomain.com.key; location / { proxy_pass http://lobe; 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; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } } server { listen 443 ssl; server_name auth-api.yourdomain.com; ssl_certificate /etc/nginx/ssl/auth-api.yourdomain.com.pem; ssl_certificate_key /etc/nginx/ssl/auth-api.yourdomain.com.key; location / { proxy_pass http://logto_api; 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 443 ssl; server_name auth-ui.yourdomain.com; ssl_certificate /etc/nginx/ssl/auth-ui.yourdomain.com.pem; ssl_certificate_key /etc/nginx/ssl/auth-ui.yourdomain.com.key; location / { proxy_pass http://logto_ui; 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 443 ssl; server_name lobe-s3-api.yourdomain.com; ssl_certificate /etc/nginx/ssl/lobe-s3-api.yourdomain.com.pem; ssl_certificate_key /etc/nginx/ssl/lobe-s3-api.yourdomain.com.key; client_max_body_size 200M; location / { proxy_pass http://minio_api; 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; } } server { listen 443 ssl; server_name lobe-s3-ui.yourdomain.com; ssl_certificate /etc/nginx/ssl/lobe-s3-ui.yourdomain.com.pem; ssl_certificate_key /etc/nginx/ssl/lobe-s3-ui.yourdomain.com.key; location / { proxy_pass http://minio_console; 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 200M; }这个配置实现了五个 HTTPS 站点的精准分流同时强制 HTTP 跳转 HTTPS增强了安全性。启动与初始化打通最后一公里进入工作目录并启动服务cd /opt/lobechat docker-compose up -d首次运行会拉取多个镜像耗时约 3~5 分钟。可通过日志观察进度docker-compose logs -f重点关注postgresql是否健康、logto是否成功启动。配置 Logto 身份认证打开浏览器访问https://auth-ui.yourdomain.com注册第一个管理员账户。接着创建一个新的应用类型选择Custom Application名称填写LobeChat框架选择Next.js App Router然后填写安全白名单Redirect URIs:https://chat.yourdomain.com/api/auth/callback/logtoPost sign-out redirect URIs:https://chat.yourdomain.comCORS Allowed Origins:https://chat.yourdomain.com保存后复制生成的Client ID和Client Secret更新至.env文件LOGTO_CLIENT_IDyour_client_id_here LOGTO_CLIENT_SECRETyour_client_secret_here最后重启服务使变更生效docker-compose down docker-compose up -d初始化 MinIO 存储访问https://lobe-s3-ui.yourdomain.com使用初始账号登录用户名admin密码minio_admin_strong_password来自 compose 文件创建 Bucket点击 “Create Bucket”命名lobe-files权限设为 Public Read。设置访问策略MinIO 默认拒绝匿名读取需手动放行。进入该 bucket 的 Access Policy 页面粘贴以下 JSON 策略{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: *, Action: [s3:GetBucketLocation], Resource: arn:aws:s3:::lobe-files }, { Effect: Allow, Principal: *, Action: [s3:ListBucket], Resource: arn:aws:s3:::lobe-files, Condition: { StringEquals: { s3:prefix: [files/] } } }, { Effect: Allow, Principal: *, Action: [s3:PutObject, s3:GetObject, s3:DeleteObject], Resource: arn:aws:s3:::lobe-files/files/* } ] }此策略允许所有人读取/files/目录下的对象满足 LobeChat 的公开访问需求。生成访问密钥进入Identity → Users编辑admin或新建专用用户在 “Access Keys” 中创建一对 AK/SK。将新密钥填入.envS3_ACCESS_KEY_IDnew_access_key S3_SECRET_ACCESS_KEYnew_secret_key再次重启服务docker-compose down docker-compose up -d登录使用见证成果现在打开https://chat.yourdomain.com点击右上角登录按钮页面将跳转至 Logto 认证中心。使用你在 Logto 中注册的账号登录返回后即可看到 LobeChat 主界面。首次登录会自动创建用户空间和默认助手角色。你可以尝试上传一份 PDF 或图片系统会调用嵌入模型提取内容也可以在设置中接入 OpenAI、Ollama 等模型提供对话能力。运维建议与进阶方向这套部署结构已经具备生产可用性但仍有一些优化空间值得考虑 安全加固建议敏感信息不要留在.env明文文件中可通过外部 secrets 工具如 Hashicorp Vault注入。生产环境中应关闭 MinIO 控制台外网访问仅保留 API 端点。定期轮换 S3 密钥和 JWT 签名密钥。启用 PostgreSQL 的定期备份机制如pg_dump cron。 日常维护命令# 查看服务状态 docker-compose ps # 查看实时日志 docker-compose logs -f # 升级镜像修改标签后 docker-compose pull docker-compose up -d # 备份数据 tar czf backup-data.tar.gz ./data/ 数据持久化说明当前方案通过本地目录挂载实现数据持久化./data/postgres→ PostgreSQL 数据./data/minio→ 所有上传文件即使容器重建或重装系统只要这些目录被保留数据就不会丢失。☁️ 替代对象存储方案如果你想使用 AWS S3、阿里云 OSS 等云存储只需做三件事删除docker-compose.yml中的minio服务及相关 Nginx 配置修改.env中的 S3 配置为云服务商提供的 endpoint 和 credentials在云平台开启 CORS 规则允许chat.yourdomain.com跨域访问。这样既能降低运维负担又能获得更高的可用性和性能。这种高度集成的部署模式正体现了现代 AI 应用“轻前端、重后端、强数据”的发展趋势。LobeChat 不只是一个聊天界面更是一个可扩展的认知引擎底座。你可以在此基础上接入本地大模型如 Qwen、ChatGLM、开发自定义插件、集成 RAG 实现知识库问答甚至构建企业级智能客服系统。随着更多开发者加入开源生态我们有理由相信下一代人机交互将由你我共同塑造。 官方文档https://lobehub.com GitHub 仓库https://github.com/lobehub/lobe-chat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考