第一次接触服务器 + 私有化部署 Lobe

April 6, 2025

因为想要自己 私有化部署一个数据库版本的 Lobe,终于"被迫"开始接触服务器。

首先了解一下常见服务器类型:

  • 物理服务器:实实在在的一台机器

  • 云服务器(VPS):虚拟出来的服务器(推荐新手使用)

  • 共享主机:多人共用一台服务器资源

这里我从男朋友那拿到一台云服务器,安装的是 Debian 操作系统。

连接服务器

Mac/Linux 用户:

ssh root@你的服务器IP

退出

exit

给服务器安装 Docker

Docker 有 Docker Desktop 和 Docker Engine。在服务器上选择 Docker Engine 就行了,轻量高效。服务器安装的操作系统是 Debian,所以按照 Docker 文档,我选择的是 apt repository 的方式。结果发现速度好慢,看来得先给服务器弄一下代理了。

搞定服务器代理配置后回来继续安装 docker

  1. 先移除可能会冲突的包:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
  1. 设置 Docker 的 apt 仓库:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. 安装 Docker 的包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

结果遇到报错

Docker 安装报错

询问 GPT 后得出: 这个报错的意思是:你要安装的这些 Docker 包(如 docker-cecontainerd.io 等)系统找不到,也就是 apt 没有识别到这些包可用

这通常是因为:Docker 的官方源没有正确添加成功,或者签名配置有问题

而通过 gpt 的方法,试了好几次都还不能解决。最终把 docker engine 卸载,然后重新逐条运行安装命令,就成功解决了。还得是重启大法好~

给服务器配置代理

安装 Clash 内核

首先是安装 Clash 内核,我安装了 Clash Premium(增强版) ,这里需要选择自己的系统架构对应版本。

查看系统架构:

uname -a

得知是 Linux debian 6.1.0-27-amd64 #1 SMP PREEMPT DYNAMIc Debian 6.1.115-1 (2024-11-01) x86 64 GNU/Linux

下载预编译二进制:

# 创建 Clash 目录
mkdir -p ~/clash && cd ~/clash

# 下载 Clash Premium(Linux amd64)
wget https://downloads.clash.wiki/ClashPremium/clash-linux-amd64-v3-2023.08.17.gz

# 解压并赋予执行权限
gzip -d clash-linux-amd64-v3-2023.08.17.gz
mv clash-linux-amd64-v3-2023.08.17.gz clash
chmod +x clash

# 验证是否运行
./clash -v

配置 Clash

配置订阅链接

wget -O ~/clash/config.yaml "YOUR_SUBSCRIPTION_URL"

或者手动编辑

nano ~/clash/config.yaml

运行 Clash

  1. 前台运行(测试)
cd ~/clash
./clash -f config.yaml
  1. 后台运行
# 使用 systemd 管理(推荐)
sudo tee /etc/systemd/system/clash.service <<EOF
[Unit]
Description=Clash Proxy Service
After=network.target

[Service]
Type=simple
User=$USER
WorkingDirectory=$HOME/clash
ExecStart=$HOME/clash/clash -f $HOME/clash/config.yaml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start clash
sudo systemctl enable clash

# 查看状态
systemctl status clash

配置系统代理

Clash 默认监听 7890(HTTP)和 7891(SOCKS5),可以通过以下方式使用代理:

临时设置(当前终端生效)

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export ALL_PROXY="socks5://127.0.0.1:7891"

或者 永久生效(对所有用户)

# 修改 /etc/environment
sudo tee -a /etc/environment <<EOF
http_proxy="http://127.0.0.1:7890"
https_proxy="http://127.0.0.1:7890"
ALL_PROXY="socks5://127.0.0.1:7891"
EOF

# 重新加载配置
source /etc/environment

测试代理:

curl -x http://127.0.0.1:7890 https://www.google.com

如果返回 HTML 内容,说明代理成功。

管理 Clash

更新配置(无需重启服务)

# 通过 REST API 热重载配置
curl -X PUT "http://127.0.0.1:9090/configs" -H "Content-Type: application/json" -d '{"path": "$HOME/.config/clash/config.yaml"}'

切换代理节点

curl -X PUT "http://127.0.0.1:9090/proxies/GLOBAL" -H "Content-Type: application/json" -d '{"name": "my-proxy"}'

进阶配置

开启 TUN 模式

修改 config.yaml :

tun:
  enable: true
  stack: system
  dns-hijack:
    - "any:53"

然后重启 Clash:

sudo systemctl restart clash

私有化部署 Lobe

成功安装完 Docker 后,发现 Lobe 官方提供了 Docker 部署 和 Docker Compose 部署方式。由于不知道怎么选择,就做了一下调查:

在私有化部署 Lobe(数据库版本) 时,选择 Docker 还是 Docker Compose 取决于你的需求复杂度、扩展性和管理便捷性。以下是具体对比和推荐方案:

场景Docker(单命令)Docker Compose(多容器编排)
适用对象单容器简单部署多容器依赖(如数据库+应用)
配置复杂度简单(一行命令)中等(需编写 `docker-compose.yml`)
扩展性难(需手动管理依赖)易(一键启停多服务)
网络/存储管理手动配置自动管理网络和卷
适用场景快速测试或单服务生产环境或多组件协作

总结

  • Docker:适合 快速测试,简单粗暴。
  • Docker Compose:适合 生产部署,管理多服务依赖。

因此根据我的实际需求选择,长期使用且有数据库,选择了 Docker Compose。于是就跟着文档操作做下去了。过程中碰到下面的几个问题,不过都一一解决了。

生成的安全密钥登陆错误

控制台成功打印安全密钥,但登陆都报错。通过阅读 源码发现默认密码为 123,尝试后成功登陆了。

docker compose up -d 失败

docker compose up -d 失败

显然这是 Docker Daemon 拉取镜像失败了,需要给 Docker Daemon 配置代理。

  1. 创建或修改 Docker 服务配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 添加以下内容(根据你的代理类型修改):
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
  1. 重新加载并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 验证配置是否生效
systemctl show --property=Environment docker

docker 镜像源:https://github.com/dongyubin/DockerHub?tab=readme-ov-file

lobe auth 报错

点击登陆,页面直接报错

next auth: undefined
{"level":30,"time":1743405161265,"pid":30,"hostname":"9f50f89ebc8f","msg":"Error in tRPC handler (lambda) on path: file.getFiles, type: query"}
Error [TRPCError]: UNAUTHORIZED
    at <unknown> (.next/server/chunks/54101.js:1:94332)
    at f (.next/server/chunks/44817.js:4:74)
    at r (.next/server/chunks/44817.js:1:6616)
    at <unknown> (.next/server/chunks/77547.js:1:2708)
    at Array.map (<anonymous>)
    at g (.next/server/chunks/77547.js:1:2245)
    at async a (.next/server/chunks/40332.js:1:19301) {
  cause: undefined,
  code: 'UNAUTHORIZED'
}

仔细查看 network 发现有一个请求 401

lobe auth 报错
lobe auth 报错

根据这个请求中的 client_id, redirect_url 线索,仔细查阅文档,发现是没有给 Casdoor 正确配置应用导致的。