自定义 Clerk 认证的 Docker 镜像

新版本中使用clerk认证的话需要自己编译docker的镜像,打入CLERK相关的几个环境变量。注意,lobechat分为client db和server db两种模式,这种情况下我们必须使用server db模式才行。

主要是编辑Dockerfile.database这个文件,在里面加入CLERK相关三个变量即可。

首先使用git将源码clone下来,然后cd到源码的目录里面去

在dockerfile里面加入Clerk的变量。

编译的命令:

  1. USE_CN_MIRROR=true 注意docker的网络相关的环境配置
  2. 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

本文最后一次更新为 天前,文章中的某些内容可能已过时!