ssh连接

    ssh-keygen -t rsa -b 4096 -C "[email protected]"

按提示操作,通常会生成两个文件:id_rsa(私钥)和id_rsa.pub(公钥)。

  • 将公钥添加到云服务器
    • 登录到你的云服务提供商的控制台。

    • 找到与你的服务器相关的SSH密钥管理部分。

    • 将生成的公钥(id_rsa.pub的内容)添加到服务器的授权密钥列表中。

    • 打开终端(或命令提示符)。

    • 运行以下命令,将username替换为你的用户名,server_ip替换为你的服务器IP地址:

      ssh username@server_ip
      

安装docker

自动安装docker命令

curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh

部署Postgres数据库

docker network create pg
docker run --name lobechat-postgres --network pg -e POSTGRES_PASSWORD=密码 -p 服务器端口:docker端口 -d pgvector/pgvector:pg16

部署lobechat

创建lobe-chat.env文件

# 网站域名
APP_URL=https://lanshi.space

# DB 必须的环境变量
# 用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET='xxxA='
# Postgres 数据库连接字符串
# 格式:postgres://username:password@host:port/dbname,如果你的 pg 实例为 Docker 容器,请使用容器名
DATABASE_URL=postgres://postgres:Yxxx7@lobechat-postgres:5432/postgres

# NEXT_AUTH 相关,可以使用 auth0、Azure AD、GitHub、Authentik、zitadel 等,如有其他接入诉求欢迎提 PR
NEXT_AUTH_SECRET=owB59cmgjyrNcgxxx
NEXT_AUTH_SSO_PROVIDERS=github
NEXTAUTH_URL=https://laxxx
AUTH_GITHUB_ID=Ivxx
AUTH_GITHUB_SECRET=5xx

# S3 相关
S3_ACCESS_KEY_ID=xxx
S3_SECRET_ACCESS_KEY=xxx
# 用于 S3 API 访问的域名
S3_ENDPOINT=https://xxxx
S3_BUCKET=lobechat
# 用于外网访问 S3 的公共域名,需配置 CORS
S3_PUBLIC_DOMAIN=https://xxxx
# S3_REGION=ap-chengdu # 如果需要指定地域

# 其他环境变量,视需求而定
OPENAI_API_KEY=sk-xxx
OPENAI_PROXY_URL=xxx
# ...

部署命令

docker run -it -d -p 3210:3210 --network pg --env-file lobe-chat.env --name lobe-chat-database lobehub/lobe-chat-database

如果测试失败可以使用以下指令重装:

docker stop lobechat-postgres lobe-chat-database 
docker rm lobechat-postgres lobe-chat-database 
docker run --name lobechat-postgres \
           --network pg \
           -e POSTGRES_PASSWORD=密码 \
           -v $(pwd)/initdb:/docker-entrypoint-initdb.d \
           -p 5432:5432 \
           -d pgvector/pgvector:pg17

docker run -it -d -p 3210:3210 --network pg --env-file lobe-chat.env --name lobe-chat-database lobehub/lobe-chat-database

nginx反向代理

server {
    listen 80;
    server_name lanshi.space www.lanshi.space;

    location / {
        proxy_pass http://localhost:3210;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_cache_bypass $http_upgrade;

        # 确保 Cookies 能够正常传递
        proxy_cookie_domain localhost lanshi.space;
        proxy_cookie_path / "/; HttpOnly; Secure";

        # 允许所有请求头
        proxy_set_header Accept-Encoding "";
        proxy_set_header Accept-Language $http_accept_language;
        proxy_set_header User-Agent $http_user_agent;
        proxy_set_header Referer $http_referer;
    }
}

编写自动更新脚本

vim auto-update-lobe-chat.sh
#!/bin/bash
# 更新LobeChat数据库容器 [Author: AI] [Version: 1.0] [Date: 2025-6-15]

set -euo pipefail  # 启用严格错误检查

# 设置环境变量
readonly ENV_FILE="lobe-chat.env"  # 使用大写字母命名变量
readonly LOG_FILE="./log/lobechat_update.log"

# 检查日志目录是否存在,若不存在则创建
mkdir -p "$(dirname "$LOG_FILE")"

# 拉取最新镜像并记录日志
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') $*" | tee -a "$LOG_FILE"
}

log "Pulling latest image for lobehub/lobe-chat..."
if ! output=$(docker pull lobehub/lobe-chat 2>&1); then
  log "Failed to pull image: $output"
  exit 1
fi
log "Image pulled successfully."

# 停止并删除旧容器
log "Stopping and removing old container 'lobe-chat-database'..."
docker stop lobe-chat-database &> /dev/null || true
docker rm lobe-chat-database &> /dev/null || true

# 启动新容器
log "Starting new container 'lobe-chat-database'..."
docker run -d --restart=unless-stopped \
  -p 3210:3210 \
  --network pg \
  --env-file "$ENV_FILE" \
  --name lobe-chat-database \
  lobehub/lobe-chat-database

log "Update completed successfully."
chmod 755 auto-update-lobe-chat.sh
./auto-update-lobe-chat.sh 

检查日志

docker logs -f lobe-chat-database

可能遇到的问题

权限被拒,执行shell并重启

sudo chmod 666 /var/run/docker.sock
sudo systemctl stop docker.socket
sudo systemctl disable docker.socket
sudo systemctl stop docker
sudo systemctl disable docker
sudo systemctl status docker
sudo systemctl status docker.socket

注意:解决问题后请启用服务:

sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl enable docker.socket
sudo systemctl start docker.socket