静看光阴荏苒
不管不顾不问不说也不念

Misskey配置使用Meilisearch并索引之前的内容

随着时间的推移,我自用的一个Misskey实例的数据库也来到了将近5GB的大小:

随之而来的问题就是搜索功能不太好用,在搜索的时候偶尔会占用非常高的CPU,另外搜索的速度也很一般。

不过好在Misskey在之前的版本中支持了Meilisearch,这样的话我们就可以把所有的内容都导入到Meilisearch中,也就可以解决上面遇到的问题了。

Misskey不像FireFish那样自带一个创建索引的功能,这里需要用到一个第三方的工具aminome:

https://github.com/dev-hato/aminome

[重要]请注意所有的外站(远程)内容是没有导入的,aminome只导入本地的内容。

我当前测试可用的环境配置如下:

Debian11 (Python3.9.2)、Debian12 (Python3.11.2)
Misskey 2024.3.1 (aid) (aidx)
Postgres 15
Meilisearch 1.6.1

我目前正在使用的compose配置:

version: '3.9'

services:
  web:
    image: misskey/misskey:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "127.0.0.1:16888:3000"
    networks:
      - internal_network
      - external_network
    volumes:
      - ./files:/misskey/files
      - ./config:/misskey/.config:ro

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    networks:
      - internal_network
    volumes:
      - ./redis:/data
    healthcheck:
      test: "redis-cli ping"
      interval: 5s
      retries: 20

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    networks:
      - internal_network
    environment:
      - 'POSTGRES_DB=misskey'
      - 'POSTGRES_USER=misskey'
      - 'POSTGRES_PASSWORD=hidden'
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
      interval: 5s
      retries: 20

networks:
  internal_network:
    internal: true
  external_network:

我们需要对这个compose文件进行修改,增加Meilisearch的配置:

...
  meilisearch:
    image: getmeili/meilisearch:v1.6.1
    restart: unless-stopped
    environment:
      - MEILI_NO_ANALYTICS=true
      - MEILI_ENV=production
      - MEILI_MASTER_KEY=setyourapikey // openssl rand -hex 16
    ports:
      - "127.0.0.1:7700:7700"
    networks:
      - internal_network
      - external_network // 添加到外部网络,否则即便配置了ports也无法暴露端口
    volumes:
      - ./meili_data:/meili_data
...

然后把Postgres容器的端口暴露出来:

...
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    networks:
      - internal_network
      - external_network // 添加到外部网络,否则即便配置了ports也无法暴露端口
    ports:
      - "127.0.0.1:5432:5432"
...

编辑Misskey的配置文件,添加Meilisearch的连接信息:

nano config/default.yml

示例配置:

...
meilisearch:
  host: meilisearch
  port: 7700
  apiKey: 'setyourapikey'
  ssl: false
  index: 'meows-lol'
#  scope: local
...

[备注1]注意index的格式,misskey的版本发布记录有介绍:https://misskey-hub.net/ja/docs/releases/#_13122

[备注2]scope可以修改为global,这样是搜索全部内容,包括外站(远程)内容。

重新启动:

docker compose down
docker compose up -d

这样的话Meilisearch就配置完成了,但你会发现只能搜索新发布的内容,旧的内容是无法搜索到的。所以接下来我们还需要导入旧的内容到Meilisearch。首先我们需要安装Python环境:

apt -y update
apt -y install python3-full python3-pip

克隆aminome的源码:

cd /opt
git clone https://github.com/dev-hato/aminome.git
cd aminome

创建Python虚拟环境并启用:

python3 -m venv aminome-env
source aminome-env/bin/activate

安装依赖包:

pip install -r requirements.txt

编辑aminome.py:

nano aminome.py

配置Postgres的连接信息:

db = psycopg2.connect(
    host='127.0.0.1',
    user='misskey',
    password='hidden',
    database='misskey',
    port=5432,
    cursor_factory=psycopg2.extras.DictCursor
)

配置Meilisearch的连接信息:

api_key = "hidden"
index = "meows-lol"
url = f"http://127.0.0.1:7700/indexes/{index}---notes/documents?primaryKey=id"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

运行:

python3 ./aminome.py

如果正常的话会有类似回显:

这样就把所有本地的内容导入到Meilisearch了。

[可选]导入完成后可以将Postgres和Meilisearch容器的外部网络删除:

...
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    networks:
      - internal_network
      - external_network 
    ports:
      - "127.0.0.1:5432:5432"
...
...
  meilisearch:
    image: getmeili/meilisearch:v1.6.1
    restart: unless-stopped
    environment:
      - MEILI_NO_ANALYTICS=true
      - MEILI_ENV=production
      - MEILI_MASTER_KEY=setyourapikey // openssl rand -hex 16
    ports:
      - "127.0.0.1:7700:7700"
    networks:
      - internal_network
      - external_network
    volumes:
      - ./meili_data:/meili_data
...

重新启动:

docker compose down
docker compose up -d
赞(3)
未经允许不得转载:荒岛 » Misskey配置使用Meilisearch并索引之前的内容
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    没想到lala还在源源不断更新

    imgo3周前 (03-27) Microsoft Edge 122.0.0.0 Microsoft Edge 122.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    大佬你好,我创建了misskey 但是上传图片不显示,是模糊隐藏的也无法裁剪

    Aengus2周前 (04-05) Google Chrome 123.0.0.0 Google Chrome 123.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 可能是这个原因:https://github.com/misskey-dev/misskey/pull/9560
      试试这里面的解决办法:https://github.com/misskey-dev/misskey/issues/9564

      LALA2天前 Google Chrome 102.0.0.0 Google Chrome 102.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿