随着时间的推移,我自用的一个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_networkports: - "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 16ports: - "127.0.0.1:7700:7700"networks: - internal_network- external_networkvolumes: - ./meili_data:/meili_data ...
重新启动:
docker compose down docker compose up -d
LALA
我什么都不卖了,告辞!
最新评论
5211314
能不能教我 一点不会