原文地址:https://lala.im/9040.html,請支持原作者!該處僅作轉載。
随着时间的推移,我自用的一个Misskey实例的数据库也来到了将近5GB的大小:
随之而来的问题就是搜索功能不太好用,在搜索的时候偶尔会占用非常高的CPU,另外搜索的速度也很一般。
不过好在Misskey在之前的版本中支持了Meilisearch,这样的话我们就可以把所有的内容都导入到Meilisearch中,也就可以解决上面遇到的问题了。
Misskey不像FireFish那样自带一个创建索引的功能,这里需要用到一个第三方的工具aminome:
https://github.com/dev-hato/aminome
[重要]请注意所有的外站(远程)内容是没有导入的,aminome只导入本地的内容。
我当前测试可用的环境配置如下:
Debian11 (Python3.9.2)、Debian12 (Python3.11.2)\nMisskey 2024.3.1 (aid) (aidx)\nPostgres 15\nMeilisearch 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