
1panel部署LobeChat服务端数据库版(公网部署)
本文最后更新于 2025-02-14,文章内容可能已经过时。
由于之前的过于繁琐,写一个快速精简版精简版,简化流程。
其实依旧不是特别精简,哈哈
当然,此教程写法将不再过于累赘,所有操作都使用编排或者1panel一键
环境:本地服务器,通过ddns映射到公网,1panel 反向代理和证书 提供主要功能,爱快 ddns和端口映射
数据库- 带有pgvector插件的PostgreSQL数据库
s3存储 - minio
鉴权- Logto
lobechat数据库版
安装pgvector数据库
编排
使用方式
容器-编排-创建编排
复制代码-命名-确认
代码
注释的地方根据需求更改
networks:
1panel-network:
external: true
services:
pg17:
container_name: pgvector17 #命名
image: pgvector/pgvector:pg17 # 镜像
ports:
- "5432:5432" # 外部端口:容器端口
restart: unless-stopped
networks:
- 1panel-network
volumes:
- /opt/1panel/apps/postgresql/pgvector17/data:/var/lib/postgresql/data:rw #持久化内存
environment:
- POSTGRES_USER=sky #数据库用户名
- POSTGRES_PASSWORD=mypassword #数据库密码
- PGDATA=/var/lib/postgresql/data
检测连接
查看日志
容器-对应容器-日志
提示跟下面差不多,无报错则成功安装
PostgreSQL Database directory appears to contain a database; Skipping initialization
2025-02-07 02:29:34.991 UTC [1] LOG: starting PostgreSQL 17.0 (Debian 17.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-02-07 02:29:34.991 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2025-02-07 02:29:34.991 UTC [1] LOG: listening on IPv6 address "::", port 5432
2025-02-07 02:29:34.993 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-02-07 02:29:34.999 UTC [29] LOG: database system was shut down at 2025-02-07 02:29:34 UTC
2025-02-07 02:29:35.008 UTC [1] LOG: database system is ready to accept connections
2025-02-07 02:34:35.098 UTC [27] LOG: checkpoint starting: time
2025-02-07 02:34:35.103 UTC [27] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.006 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB; lsn=0/23377F0, redo lsn=0/2337798
连接远程服务器
通过1panel内置的数据库功能,添加远程服务器,点击有验证,是否可用(后面的一些组件使用的都是这个数据库)
数据库-pgSQL-添加远程服务器
创建数据库
创建两个数据库,这个地方需要手动创建,必须要的操作,在鉴权和程序安装的位置需要用到数据库
mycasdoor 鉴权服务使用
mylobechat 主程序服务使用
支持 S3 协议的对象存储服务-minlO
如果你已经有了s3对象存储,可以跳过当前这个步骤
它的使用方式非常简单,我们只需要安装-创建桶,更改权限,和秘钥~
1panel一键安装
应用商店
-MinIO
如果端口占用请修改端口
端口外部访问
-安装
反向代理
每个人的环境不同,反向代理方式也略微有区别,但区别不大,这里我只提供我自己的方案,反向代理不明白的可以用AI辅助
我的方案是ddns,使用爱快软路由,
新建两个反向代理
使用1panel一键创建反向代理
#映射端口
#9000:49000
#9002:49002
server {
listen 49000 ssl http2; #因为是非标准443,需要手动改nginx 端口ssl 应用证书,标准443 不需要
server_name minio.5ee.net;
#其他
}
#这个地方是我使用的本地服务器,ddns,很多种方式实现 会有些许区别
webui 反向代理
location ^~ / {
proxy_pass http://127.0.0.1:9002;
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 REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; # 强制 Connection: upgrade
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
}
api反向代理
location ^~ / {
proxy_cache_convert_head off;
proxy_pass http://127.0.0.1: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 REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
}
注意事项
如果webui访问对象浏览器时出现wss 问题,设置好反向代理要重启nginx或者重启服务器(重载不行哦)
minIO配置
我这边并没有设置minIO相关的一些权限和高级使用方式,使用的是最基本的功能,有特殊需求的请自行解决
新建一个桶
Buckets
-Create Bucket
-输入Name
-Create Bucket
给桶设置一个规则

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicReadGetObject",
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::lobechat/*"
]
},
{
"Sid": "AllowPutObjectWithCredentials",
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::lobechat/*"
]
}
]
}
新建一个秘钥
Access Key:E4c8Q1iXg625sMBxxxx
Secret Key:hX7T0kGl0Pdg9v2B93DgvOk9Maxxxxxxxxxx
以下5个所需要的配置
ACCESS_KEY:E4c8Q1iXg625sxxx
SECRET_ACCESS_KEY:hX7T0kGl0Pdg9v2B93Dgxxxxxxxxxx
API域名:https://minio.5ee.net:49000
桶名称 :lobechat
访问域名:https://minio.5ee.net:49002
鉴权安装
这个地方我尝试了很多方案,选择私有化部署casdoor,(Logto的坑比较多,不是很建议)
或者使用一些cf github等云方案也是不错的选择,
编排
networks:
1panel-network:
external: true
services:
mycasdoor:
container_name: mycasdoor
image: casbin/casdoor:latest
ports:
- "8000:8000" # 端口映射:主机端口 8000 映射到容器端口 8000
restart: unless-stopped
networks:
- 1panel-network
environment:
- RUNNING_IN_DOCKER=true
- dataSourceName=user=mycasdoor password=3SD6a7iawN2NR3mh host=pgvector17 port=5432 sslmode=disable dbname=mycasdoor # 用户名,密码,地址,端口,ssl,名称
- dbName=mycasdoor
- driverName=postgres
反向代理
标准的一键反向代理即可,不需要特殊设置
location ^~ / {
proxy_pass http://127.0.0.1:8000;
# WebSocket 支持 (如果 Casdoor 使用 WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 设置 Host 头部为 Casdoor 域名,确保 Casdoor 能够正确处理请求
proxy_set_header Host $http_host; # 或者指定为 l.5ee.net 如果有问题
# 传递客户端真实 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 传递客户端请求的原始协议 (HTTP 或 HTTPS)
proxy_set_header X-Forwarded-Proto $scheme;
# 传递客户端请求的原始主机名
proxy_set_header X-Forwarded-Host $http_host; # 或者 $http_host
# 传递客户端请求的原始端口
proxy_set_header X-Forwarded-Port $server_port;
}
配置
修改管理员账号密码
用户管理-用户-编辑
编辑密码
新建仅登录组织
这个是用来给你新建的lobechat应用注册登录赋予一个组织
用户管理-组织-新建
名称:login-only-org
显示名称:仅限 用户登录组织
核心概念:
默认应用 (app-built-in): 系统内置的后台管理应用。
默认组织 (built-in): 你的管理员账户 (admin) 所属的初始组织。
权限问题:
当你将其他应用(如 LobeChat)与默认组织 (built-in) 关联时,会出现权限问题。由于 LobeChat 用户与管理员 (admin) 处于同一组织,他们不仅可以访问 LobeChat,还会获得与管理员相同的权限,从而能够登录后台管理应用 (app-built-in)。这是因为在同一个组织内,权限是共享的。
解决方案:
为了隔离权限,你需要为 LobeChat 创建一个全新的、空白的组织。将 LobeChat 应用关联到这个新组织。这样,LobeChat 用户将仅限于访问 LobeChat 应用,而无法访问后台管理应用 (app-built-in),因为它们现在属于不同的组织,权限不再共享。
新建应用
身份认证-应用-添加
名称:lobechat
显示名称:lobechat
客户端id:8c21ac206c67XXXXXXX(这个默认生成的待会要用)
客户端秘钥:45a9498773004dccfc79855cff08a24XXXX(这个默认生成的待会要用)
重定向url:https://lobechat.5ee.net:33210/api/auth/callback/casdoor
其他的参数根据所需自行设置,所需要的最基本只有这些
lobechat安装
LobeChat 身份验证服务设置 · LobeChat Docs · LobeHub
lobechat一些环境变量参数去官方查一下
编排
networks:
1panel-network:
external: true
services:
mylobechat:
container_name: mylobechat
image: lobehub/lobe-chat-database:latest
ports:
- "3210:3210"
restart: unless-stopped
networks:
- 1panel-network
environment:
- APP_URL=https://lobechat.5ee.net:33210 # 反向代理后访问的域名
- KEY_VAULTS_SECRET='dvy9O/6gMcy8k7Jnfbb1mI8he03efDQ6m0iknR8XppQ=' 用于加密 会话令牌的密钥。您可以使用以下命令生成秘钥: openssl rand -base64 32.
- DATABASE_URL=postgres://数据库用户名:数据库密码@pgvector17(数据库容器名,也可以使用ip等):5432/数据库名
- NEXT_AUTH_SECRET=3904039cd41ea1bdf6c93db0db96e250 # 用于加密 会话令牌的密钥。您可以使用以下命令生成秘钥: openssl rand -base64 32.
- NEXT_AUTH_SSO_PROVIDERS=casdoor # 鉴权类型
- AUTH_CASDOOR_ID=8c21ac206c67XXXXX # 鉴权客户端id
- AUTH_CASDOOR_SECRET=45a9498773004dccfcxxxx # 鉴权客户端秘钥
- AUTH_CASDOOR_ISSUER=https://l.5ee.net:44448 # 鉴权访问域名
- S3_ACCESS_KEY_ID=xxxx # minio key
- S3_SECRET_ACCESS_KEY=xxxx # minio 秘钥
- S3_BUCKET=lobechat # 桶名称
- S3_ENDPOINT=https://minio.5ee.net:49000 # api访问域名
- S3_PUBLIC_DOMAIN=https://minio.5ee.net:49000 # minio文件访问域名
- S3_ENABLE_PATH_STYLE=1 # path组合方式,必须要的哦
反向代理
location ^~ / {
proxy_pass http://10.255.255.243:3210;
proxy_redirect off;
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;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
}