Lobe Chat DataBase版-Logto无法启动

前言

某天我在测试站点时把Lobe Chat的账号退了,结果登录页面居然进不去了???
到服务器上一看,好家伙,怎么Logto压根就没启动???查Log,翻Issues,一条龙下去,足足折腾了几小时才搞定了Logto的罢工问题,今天就把这个坑分享出来,帮助大家少走弯路!

Logto曾经作为Lobe Chat DataBase版本主推的身份验证方案(由于总出现问题最新版已更换为Casdoor),经常出现使用docker compose启动所有容器后,logto的容器未正常启动的问题。
同时由于Lobe Chat登录后会一直保持登录状态,导致一直到用户退出并重新登录,或是在其他设备登录时才会发现Logto挂了。

本文将以主流的docker compose部署方案,详细讲解遇到该问题后如何解决。

问题现象

Logto无法访问

lobe chat登录页面显示“页面遇到一点问题”

解决流程

查看问题原因

1.首先进入docker-compose.yml的所在目录

2.执行以下命令查看容器启动log

docker logs lobe-logto

在错误信息中找到如下错误

error Found undeployed database alterations, you must deploy them first by npm run alteration deploy command.

这表明Logto在升级后数据库结构发生了变动,我们需要执行logto db alteration deploy的命令来进行数据库结构变更。

备份数据库

所谓有备无患,要对数据库进行改动,那第一步必然是备份数据库。

进入postgres容器

docker exec -it lobe-postgres /bin/bash

连接到 PostgreSQL

psql -U postgres

查看数据库列表

\l

退出postgres容器

\q
exit

备份数据库

docker exec -t lobe-postgres pg_dump -U postgres -F c lobe > backup_lobe.dump
docker exec -t lobe-postgres pg_dump -U postgres -F c logto > backup_logto.dump

这样就备份了lobe和logto两个数据库,备份目录为当前执行命令的目录。
理论上我们只需要备份logto的DB,但是保险起见我把lobechat的数据库一起进行了备份。

如果后续操作失败可以执行以下命令恢复数据库

docker exec -i lobe-postgres pg_restore -U postgres -d lobe < backup_lobe.dump
docker exec -i lobe-postgres pg_restore -U postgres -d logto < backup_logto.dump

开始改动数据库

查看相关Issues:bug: Error while updating Docker version 1.20.0 · Issue #6585 · logto-io/logto

查看官方文档:数据库更改 |Logto 文档

可以看到官方文档中的解决方式很简单,我们只需要执行一个CLI命令即可。

但是这里就出现了一个问题,我们通常是使用docker compose去启动容器的,但是此时logto容器没有办法启动,所以我们需要启动一个临时容器。

创建并进入临时的logto容器

docker run -it --rm --network="lobe-chat-db_default" --entrypoint sh svhd/logto

解释:

  • --network="host": 这让容器与主机共享网络,避免网络问题。
  • --entrypoint sh: 强制容器进入 shell 环境,而不是运行默认的启动命令。
  • -it: 交互模式,人机交互。
  • --rm: 容器关闭后自动删除,保持系统干净。

注意这里的lobe-chat-db_default是docker的网络名称,如果不知道可以执行以下命令查看有哪些网络。

docker network ls

步骤 1:检查 CLI 是否可用

现在我们来到了容器内部,首先要先检查容器内的CLI命令是否可用。
执行命令:

logto --help

看到类似如下的输出,表明 logto CLI 工具已经安装

Usage: logto [options] [command]

Logto Command Line Interface

Options:
  -h, --help          display help for command

Commands:
  db                  Database related commands
  ...

步骤 2:如果不可用,安装 CLI

如果 CLI 没有安装,你需要确保 logto CLI 工具可用。通常Logto CLI 是随 logto 管理包 @logto/cli 一起提供的,因此可以使用 npm 来安装 logto CLI。

npm install -g @logto/cli

安装时可能由于网络原因无法下载,此时需要配置npm镜像,以下两个选一个执行即可

# 阿里云镜像
npm config set registry https://registry.npmmirror.com
# 腾讯云镜像
npm config set registry https://mirrors.cloud.tencent.com/npm/

验证镜像源是否已配置成功

npm config get registry

重新执行CLI安装命令

npm install -g @logto/cli

检查是否安装成功

logto --help

执行CLI命令进行数据库变更

logto db alteration deploy

此时会提示输入PostgreSQL的URL,如果你直接按回车键就会使用默认URL,由于PostgreSQL是在docker中运行的,所以不应该使用默认的postgresql://localhost:5432/logto作为URL

正确的URL:
postgresql://postgres:你的密码@容器名:5432/logto

例如:postgresql://postgres:EHO2KYDG5DjN@lobe-postgres:5432/logto

也可以在docker-compose.yml中找到PostgreSQL的URL

输入URL后会提示Choose the alteration target version,一般来说选择最新版本即可

退出容器

执行命令:

exit

到这里就大功告成了,重启docker compose即可看到Logto已经正常启动

# 重启
docker compose up -d
# 查看docker状态
docker ps
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇