本教程基于百度云2核2G Ubuntu 22.04服务器的实际部署经验。

环境说明

  • 服务器:百度云 2核2G
  • 系统:Ubuntu 22.04
  • 存储:SSD
  • 应用:AnythingLLM (私有化知识库系统)

一、前期准备

1. 安装Docker

使用腾讯云镜像源安装Docker(百度云自带源无法使用时的替代方案):

# 更新软件包并安装必要工具
sudo apt-get update
sudo apt-get install ca-certificates curl -y

# 设置Docker安装源
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加Docker软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/ \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动Docker并设置开机自启
systemctl start docker

2. 配置Docker镜像加速

由于网络原因,建议配置国内镜像源加速。以下是经过验证的可用镜像源(来源: Docker镜像加速源):

# 创建Docker配置目录
sudo mkdir -p /etc/docker

# 创建或修改daemon.json配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.unsee.tech",
        "https://dockerpull.org",
        "https://docker.1panel.live",
        "https://hub.xdark.top",
        "https://hub.littlediary.cn"
    ]
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置
docker info | grep "Registry Mirrors"

注意:镜像源可能会随时间变化,如果发现无法使用,请参考最新的镜像源更新文章获取可用镜像源。

3. 配置SWAP

对于2G内存的服务器,配置SWAP是必要的:

# 创建8G的swap空间
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 设置开机自动启用swap
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 优化swap使用参数(对SSD友好)
echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 验证SWAP是否生效
free -h

二、部署AnythingLLM

1. 创建工作目录

mkdir -p ~/anythingllm
cd ~/anythingllm
mkdir -p storage/vector-cache
mkdir -p storage/indexes

2. 创建配置文件

cat > .env << 'EOF'
# 基础配置
NODE_ENV=production
SERVER_PORT=3001

# API配置
JWT_SECRET=登录密码
AUTH_TOKEN=api的密钥

# 存储配置
STORAGE_DIR=/app/server/storage

# 系统优化
NODE_OPTIONS="--max-old-space-size=1024"
VECTOR_CACHE_SIZE=100
EMBEDDINGS_CACHE_SIZE=50

# 向量数据库配置
VECTOR_DB="lancedb"
LANCEDB_PATH="/app/server/storage/indexes"

# 文件处理
CHUNK_SIZE=512
CHUNK_OVERLAP=50
MAX_FILE_SIZE=10
ENABLE_STREAMING=true

# 禁用非必要服务
DISABLE_TELEMETRY=true
DISABLE_AUTO_UPGRADE=true
EOF

# 保存生成的密钥信息
echo "请保存以下密钥信息:"
grep "JWT_SECRET\|AUTH_TOKEN" .env

3. 拉取镜像并启动容器

# 拉取镜像
docker pull mintplexlabs/anythingllm:latest

# 设置正确的目录权限
sudo chown -R 1000:1000 storage
sudo chmod -R 755 storage
sudo chown 1000:1000 .env
sudo chmod 644 .env

# 启动容器
docker run -d \
  --name anythingllm \
  --restart unless-stopped \
  -p 3001:3001 \
  --memory=1.5g \
  --memory-swap=9.5g \
  --memory-reservation=1g \
  --cpus=1.5 \
  --user 1000:1000 \
  -v $(pwd)/storage:/app/server/storage \
  -v $(pwd)/.env:/app/server/.env \
  mintplexlabs/anythingllm:latest

# 检查容器状态
docker ps

4. 检查日志确保正常运行

docker logs -f anythingllm

正常启动时,日志应该显示:

  • Prisma数据库初始化成功
  • 后端服务在3001端口启动
  • 无权限相关错误

5. 配置防火墙(如需要)

# 如果开启了ufw防火墙,需要放行3001端口
sudo ufw allow 3001/tcp

同时需要在百度云控制台的安全组中放行3001端口。

三、访问与配置

  1. 通过浏览器访问:http://服务器IP:3001

  2. 第一次访问时需要设置管理员账户

  3. 配置LLM和Embedding服务:

    • 如果使用OpenAI API兼容的服务,选择"Generic OpenAI"
    • 分别配置LLM和Embedding的:
      • Base URL(API地址)
      • API Key
      • 模型名称

四、注意事项

1. 硬件资源

  • 2G内存配置较为紧张,建议:
    • 密切监控内存使用
    • 确保SWAP正常工作
    • 适当限制并发请求

2. 权限问题

  • storage目录权限:1000:1000
  • .env文件权限:1000:1000, 644
  • 容器需要使用正确的用户(1000)运行

3. 网络配置

  • 确保服务器安全组开放3001端口
  • 如有防火墙,需要配置相应规则

4. 向量数据库配置

  • 确保.env中包含完整的LanceDB配置
  • VECTOR_DB设置为"lancedb"
  • LANCEDB_PATH需要指向正确的存储路径