跳转到内容

手动安装

这是给不想用引导式向导的技术用户准备的手动安装流程。如果你想要一步一步带做的那种,请改用安装向导,它会替你创建.env、生成安全的CRYPTO_SECRET、配置PostgreSQL,并运行安装。

  • Bun
  • PostgreSQL,可以原生安装,也可以跑在Docker容器里(见第2步)

PostgreSQL的数据库结构、pgcrypto、种子数据和迁移都会在bot启动时自动初始化。

Terminal window
git clone https://github.com/Bredrumb/TomoriBot.git
cd TomoriBot
bun install --frozen-lockfile

根据示例创建环境文件并填写所需的值:

Terminal window
cp .env.example .env

必需的:

  • DISCORD_TOKEN:你的Discord机器人令牌(启用GuildMembers、MessageContent和GuildPresences特权意图)。
  • CRYPTO_SECRET:32个字符的加密密钥(用于加密存储的API密钥)。
  • PostgreSQL连接:POSTGRES_HOST、POSTGRES_PORT、POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB。

请将加密密钥的受保护副本与数据库备份分开保存。新的备份不包含 .env。对于密钥轮换,请使用 CRYPTO_SECRET_V1、CRYPTO_SECRET_V2 或任何后续的正整数版本,并可选择使用 CRYPTO_SECRET_CURRENT。

.env.optional.example中有可选的调音功能。复制你想要自定义的任何值(限制、超时、功能切换、本地服务器URL等)。

自定义表达式默认上传到data/custom-expressions/下的本地文件。将该目录保留在持久存储中。EXPRESSION_STORAGE_BACKEND接受local、gcs或s3。云后端需要EXPRESSION_STORAGE_BUCKET和相应的SDK凭证。S3还使用AWS_REGION(默认us-east-1)和可选S3_ENDPOINT。GCS使用应用程序默认凭据。表达式使用自己的存储桶设置; 头像存储设置未选择表情桶。对象仍然可以通过SDK读取,并以字节形式附加,因此不需要公开提供的媒体URL。恢复现有引用时保留后端、存储桶和对象键。

MAX_CUSTOM_EXPRESSIONS_PER_SERVER 限制每个服务器的自定义表情数量(默认 20,最小 1)。链接和上传的文件在所有预设之间共享该限制;原生表情符号和贴图不计入。更改后请重启机器人。调低限制会保留现有表情并允许编辑和删除,但会阻止新增,直到数量低于限制为止。

Terminal window
bun run dev

当你看到TomoriBot up and running!时,去Discord在你的服务器里运行/setup,接入AI提供方并初始化bot。该指令会打开一个引导式清单面板,在你按下完成设置之前不会写入任何内容;步骤说明见快速上手。

如果你想让可选的本地服务器(SearXNG、Crawl4AI、本地TTS/STT)与bot一起启动,请用bun run launch代替bun run dev:

Terminal window
bun run launch --searxng --crawl4ai
bun run launch --help # see all flags

可选附加项(手动版的「完整安装」)

Section titled “可选附加项(手动版的「完整安装」)”

安装向导的完整安装路径会在基础安装之上叠加四个轻量附加项。它们都不是运行bot的必需项,但每一项都会解锁一个功能。如果你是手动安装,想加哪个就加哪个:

RAG(文档上传与跨频道回忆)会把嵌入向量存进vector列,这需要 pgvector 扩展。请按你的PostgreSQL主版本安装:

Terminal window
# Debian/Ubuntu, e.g. for PostgreSQL 16
sudo apt-get install -y postgresql-16-pgvector

然后在你的数据库上启用它一次。用.env里的POSTGRES_*值通过psql连接:它会提示你输入POSTGRES_PASSWORD:

Terminal window
# Native / host psql (substitute your own POSTGRES_USER and POSTGRES_DB):
psql -h localhost -p 5432 -U tomori -d tomodb
# Or, if the database runs in the Docker container from step 2:
docker exec -it tomori-db psql -U tomori -d tomori

连接之后运行:

CREATE EXTENSION vector;

没有pgvector,bot照样能跑,但RAG功能会完全不可用。还原备份之前,目标数据库上也必须装好这个扩展;细节见 维护和备份。

pg_cron支撑可选的周期性数据库维护(冷却行与提醒行的清理)。本仓库的Docker Compose已经替你配置好了。

对于自己管理的PostgreSQL,先找到生效中的配置文件:

SHOW config_file;

在postgresql.conf里启用该扩展:如果shared_preload_libraries已经列了其他库,就追加:

shared_preload_libraries = 'pg_cron' # e.g. 'pg_stat_statements,pg_cron'
cron.database_name = 'your_dbname'

重启PostgreSQL,然后:

CREATE EXTENSION IF NOT EXISTS pg_cron;

NovelAI 文本生成与感知模型的词元偏置需要本地分词器资源:

Terminal window
bun run setup:tokenizers

有些模型家族(例如 Gemma)是受限的,需要你先接受它们的许可,再使用一个 Hugging Face 令牌:

Terminal window
# Windows (PowerShell)
$env:HF_TOKEN="hf_xxx"; bun run setup:tokenizers
# macOS/Linux
HF_TOKEN=hf_xxx bun run setup:tokenizers

缺失资源会禁用可选的词元偏置。NovelAI 文本生成需要其三个分词器家族,如果缺失或无效将返回设置错误。这些家族使用固定的公开 MIT 定义,无需 Hugging Face 令牌。如需仅安装这些家族:

Terminal window
bun run setup:tokenizers --family novelai_nerdstash_v2
bun run setup:tokenizers --family novelai_llama3
bun run setup:tokenizers --family novelai_glm

下载器会将文件写入仓库的 tokenizers/ 目录。如果 TOKENIZER_ASSET_DIR 指向其他位置,请将下载的家族目录复制到该处。在安装或修复资源后请重启 TomoriBot,因为运行时会缓存加载失败状态。

安全的 fetch_url 回退和 DuckDuckGo 的 web_search 回退均在进程内运行,因此两者都不需要额外安装。

装好之后,主机端脚本(bun run update、bun run backup、bun run restore-backup、bun run nuke-db、bun run rotate-keys等)以及更新和备份流程,都写在 维护与备份页面。如果你准备拉取新版本,请先看维护和备份。