自定义 Clerk 认证的 Docker 镜像
新版本中使用clerk认证的话需要自己编译docker的镜像,打入CLERK相关的几个环境变量。注意,lobechat分为client db和server db两种模式,这种情况下我们必须使用server db模式才行。
主要是编辑Dockerfile.database这个文件,在里面加入CLERK相关三个变量即可。
首先使用git将源码clone下来,然后cd到源码的目录里面去

在dockerfile里面加入Clerk的变量。

编译的命令:
- USE_CN_MIRROR=true 注意docker的网络相关的环境配置
- DOCKER_BUILDKIT=1 看相关的日志
DOCKER_BUILDKIT=1 docker build --build-arg HTTP_PROXY=$HTTP_PROXY --build-arg \ HTTPS_PROXY=$HTTPS_PROXY --build-arg NO_PROXY=$NO_PROXY --build-arg USE_CN_MIRROR=true -f \ Dockerfile.database -t lobe-chat-database:latest .


export NODE_OPTIONS="--max-old-space-size=8192"
# 查看当前的变量
node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'

清理docker的数据
# 暴力点,所有的都会被清理掉
docker system prune -a --volumes
#停止所有正在运行的容器
docker stop $(docker ps -aq)
#删除所有容器(无论是否在运行)
docker rm -f $(docker ps -aq)
#删除所有镜像
docker rmi -f $(docker images -q)
#删除所有未使用的数据卷
docker volume prune -f
#如果想删除所有数据卷(包括被容器引用的,但容器已被删除)
docker volume rm $(docker volume ls -q)
#删除所有未使用的网络
docker network prune -f
PostgreSQL数据库容器部署
使用pgvector扩展的PostgreSQL 16版本,支持向量数据库功能:
# 运行PostgreSQL容器,使用pgvector扩展
docker run -d --name pg16v \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=postgres \
-v $HOME/pgdata_pg16v:/var/lib/postgresql/data \
-p 15432:5432 \
pgvector/pgvector:pg16
参数说明:
-
-d: 后台运行模式 -
--name pg16v: 容器名称 -
-e POSTGRES_PASSWORD=secret: 设置数据库密码 -
-e POSTGRES_USER=postgres: 设置数据库用户名 -
-e POSTGRES_DB=postgres: 设置默认数据库名 -
-v $HOME/pgdata_pg16v:/var/lib/postgresql/data: 数据持久化挂载 -
-p 15432:5432: 端口映射,宿主机15432端口映射到容器5432端口
LobeChat应用容器部署
# 运行自编译的LobeChat数据库模式容器
docker run -d --name lobe-chat-database \
--user root \
--env-file .env.local \
-p 3210:3210 \
lobe-chat-database:postgres
参数说明:
-
--user root: 以root用户运行 -
--env-file .env.local: 加载环境变量文件 -
-p 3210:3210: 端口映射
Docker网络配置
为了让容器之间能够互相通信,需要创建自定义网络并连接容器:
# 创建自定义网络
docker network create appnet
# 将PostgreSQL容器连接到网络
docker network connect appnet pg16v
# 将LobeChat容器连接到网络
docker network connect appnet lobe-chat-database
数据库连接和管理
# 进入PostgreSQL容器进行数据库操作
docker exec -it pg16v psql -U postgres -d postgres
数据库查看和管理命令
进入PostgreSQL容器后,可以使用以下SQL命令查看数据库结构:
-- 查看所有数据库
\l
-- 或者
SELECT datname FROM pg_database;
-- 连接到指定数据库
\c database_name
-- 查看当前数据库中的所有表
\dt
-- 或者
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
-- 查看所有schema
\dn
-- 或者
SELECT schema_name FROM information_schema.schemata;
-- 查看指定表的结构
\d table_name
-- 或者
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'your_table_name';
-- 查看表的详细信息(包括索引、约束等)
\d+ table_name
-- 查看所有视图
\dv
-- 查看所有函数
\df
-- 查看当前连接信息
\conninfo
-- 退出psql
\q
实际操作示例
# 1. 进入容器
docker exec -it pg16v psql -U postgres -d postgres
# 2. 在psql中执行查看命令
postgres=# \l # 查看所有数据库
postgres=# \dt # 查看当前数据库的所有表
postgres=# \d+ users # 查看users表的详细结构
postgres=# SELECT * FROM users LIMIT 10; # 查看表数据示例
从容器外部执行SQL查询
如果不想进入容器内部,也可以直接从外部执行SQL命令:
# 查看所有数据库
docker exec -it pg16v psql -U postgres -d postgres -c "\l"
# 查看指定数据库的所有表
docker exec -it pg16v psql -U postgres -d postgres -c "\dt"
# 执行自定义SQL查询
docker exec -it pg16v psql -U postgres -d postgres -c "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';"
# 查看LobeChat相关的表(如果已经创建)
docker exec -it pg16v psql -U postgres -d postgres -c "SELECT table_name FROM information_schema.tables WHERE table_name LIKE '%lobe%' OR table_name LIKE '%chat%';"
常用调试命令
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看容器日志
docker logs -f <container_id_or_name>
# 实时跟踪日志
docker logs -f 31e9b99f23be
部署架构说明:
- PostgreSQL容器提供数据存储服务,支持向量数据库功能
- LobeChat容器运行在server db模式,连接到PostgreSQL数据库
- 通过自定义网络
appnet实现容器间通信 - 数据持久化通过volume挂载到宿主机目录
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:《 LobeChat 部署系列——Docker 镜像构建 》
本文链接:http://localhost:3015/ai/Build-docker-lobechat.html
本文最后一次更新为 天前,文章中的某些内容可能已过时!