Misskey是一个联邦宇宙的项目,分支有Sharkey和Firefish等等。

Docker一键清理
安装前,首先要学会如何解决安装失败的问题,这个是实践出来的,失败了N多次。
# 停止所有正在运行的 Docker 容器 sudo docker stop $(sudo docker ps -aq) # 删除所有的 Docker 容器(包括非运行状态的) sudo docker rm $(sudo docker ps -aq) # 删除所有的 Docker 镜像 sudo docker rmi $(sudo docker images -q) # 清理系统,删除所有未被容器使用的镜像和悬挂的构建缓存 sudo docker system prune -a
首先需要在根目录下建立项目的环境文件夹.config和docker的配置文件docker-compose.yml,.config文件下创建项目的配置文件default.yml和docker.env。
20260718更新
项目配置二者略微不一样,自行查阅
其中misskey中的setupPassword项被省略,可以参考sharkey的配置添加
文件目录权限的问题,misskey原版容器的files目录权限为991(misskey用户组),如果无法上传文件修改该映射的目录权限
default.yml
Misskey:misskey/.config/docker_example.yml at develop · misskey-dev/misskey
Sharkey:activitypub.software/TransFem-org/Sharkey/-/raw/stable/.config/docker_example.yml
docker.env
# misskey settings
# MISSKEY_URL=https://example.tld/
# db settings
POSTGRES_PASSWORD=example-misskey-pass
# DATABASE_PASSWORD=${POSTGRES_PASSWORD}
POSTGRES_USER=example-misskey-user
# DATABASE_USER=${POSTGRES_USER}
POSTGRES_DB=misskey
# DATABASE_DB=${POSTGRES_DB}
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"
#Misskey的docker-compose.yml
services:
web:
image: misskey/misskey:latest # 我们使用misskey提供的官方镜像
container_name: misskey-web
restart: always
links:
- db
- redis
# - mcaptcha
# - meilisearch
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "3000:3000"
networks:
- internal_network
- external_network
# env_file:
# - .config/docker.env
volumes:
- ./data/files:/misskey/files
- ./.config:/misskey/.config:ro
redis:
container_name: misskey-redis
restart: always
image: redis:7-alpine
networks:
- internal_network
volumes:
- ./data/redis:/data
healthcheck:
test: "redis-cli ping"
interval: 5s
retries: 20
db:
restart: always
container_name: misskey-db
image: postgres:18-alpine
networks:
- internal_network
env_file:
- .config/docker.env
volumes:
- ./data/db:/var/lib/postgresql
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
retries: 20
# mcaptcha:
# restart: always
# image: mcaptcha/mcaptcha:latest
# networks:
# internal_network:
# external_network:
# aliases:
# - localhost
# ports:
# - 7493:7493
# env_file:
# - .config/docker.env
# environment:
# PORT: 7493
# MCAPTCHA_redis_URL: "redis://mcaptcha_redis/"
# depends_on:
# db:
# condition: service_healthy
# mcaptcha_redis:
# condition: service_healthy
#
# mcaptcha_redis:
# image: mcaptcha/cache:latest
# networks:
# - internal_network
# healthcheck:
# test: "redis-cli ping"
# interval: 5s
# retries: 20
# meilisearch:
# restart: always
# image: getmeili/meilisearch:v1.3.4
# environment:
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# env_file:
# - .config/meilisearch.env
# networks:
# - internal_network
# volumes:
# - ./meili_data:/meili_data
networks:
internal_network:
internal: true
external_network:
#Sharkey的docker-compose.yml
Sharkey的配置default.yml需要调整,记得改一改,可以参考官方文档
services:
web:
image: registry.activitypub.software/transfem-org/sharkey:latest
# build: .
restart: always
container_name: sharkey-web
links:
- db
- redis
# - mcaptcha
# - meilisearch
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
# change this if your reverse proxy is not on the same machine
- "3000:3000"
networks:
- shonk
# env_file:
# - .config/docker.env
environment:
- NODE_OPTIONS="--max-old-space-size=8192"
volumes:
- ./data/files:/sharkey/files
- ./.config:/sharkey/.config:ro
redis:
restart: always
container_name: sharkey-redis
image: redis:7-alpine
networks:
- shonk
volumes:
- ./data/redis:/data
healthcheck:
test: "redis-cli ping"
interval: 5s
retries: 20
db:
restart: always
container_name: sharkey-db
image: groonga/pgroonga:4.0.1-alpine-17
networks:
- shonk
env_file:
- .config/docker.env
volumes:
- ./data/db:/var/lib/postgresql/data
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
retries: 20
# mcaptcha:
# restart: always
# image: mcaptcha/mcaptcha:latest
# networks:
# shonk:
# aliases:
# - localhost
# ports:
# - 7493:7493
# env_file:
# - .config/docker.env
# environment:
# PORT: 7493
# MCAPTCHA_redis_URL: "redis://mcaptcha_redis/"
# MCAPTCHA_allow_registration: true
# MCAPTCHA_server_DOMAIN: "example.tld"
# depends_on:
# db:
# condition: service_healthy
# mcaptcha_redis:
# condition: service_healthy
#
# mcaptcha_redis:
# image: mcaptcha/cache:latest
# networks:
# - shonk
# healthcheck:
# test: "redis-cli ping"
# interval: 5s
# retries: 20
# meilisearch:
# restart: always
# image: getmeili/meilisearch:v1.13.0
# environment:
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# - MEILI_MASTER_KEY=ChangeThis
# networks:
# - shonk
# volumes:
# - ./meili_data:/meili_data
networks:
shonk:
#Firefish的docker-compose.yml
Firefish的配置default.yml需要调整,记得改一改,可以参考官方文档Firefish(原 Calckey)已经正式停止维护、彻底废弃,无任何后续更新,不建议新部署、存量实例尽快迁移
version: "3"
services:
web:
# Choose one of these tags:
# stable-amd64, stable-arm64, beta-amd64, beta-arm64
image: registry.joinfirefish.org/firefish/firefish:stable-amd64
container_name: firefish_web
restart: unless-stopped
depends_on:
- db
- redis
### Uncomment one of the following to use a search engine
# - meilisearch
# - sonic
ports:
- "3000:3000"
networks:
- calcnet
# - web
environment:
NODE_ENV: production
volumes:
- ./files:/firefish/files
- ./.config:/firefish/.config:ro
redis:
restart: unless-stopped
image: docker.io/redis:7.0-alpine
container_name: firefish_redis
networks:
- calcnet
volumes:
- ./redis:/data
db:
restart: unless-stopped
image: docker.io/postgres:15-alpine
container_name: firefish_db
networks:
- calcnet
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
### Only one of the below should be used.
### Meilisearch is better overall, but resource-intensive. Sonic is a very light full text search engine.
# meilisearch:
# container_name: meilisearch
# image: getmeili/meilisearch:v1.1.1
# environment:
# - MEILI_ENV=${MEILI_ENV:-development}
# ports:
# - "7700:7700"
# networks:
# - calcnet
# volumes:
# - ./meili_data:/meili_data
# restart: unless-stopped
# sonic:
# restart: unless-stopped
# image: docker.io/valeriansaliou/sonic:v1.4.0
# logging:
# driver: none
# networks:
# - calcnet
# volumes:
# - ./sonic:/var/lib/sonic/store
# - ./sonic/config.cfg:/etc/sonic.cfg
networks:
calcnet:
# web:
# external:
# name: web
启用MeiliSearch索引功能
一般情况下自带即可,控制面板中开启

参考:https://qiita.com/arkw/items/81238fe96ec602a2e055
新部署
如果是新部署,直接取消meilisearch注释的地方,并且在.config的文件下建立meilisearch.env的环境配置文件
# .config/meilisearch.env MEILI_MASTER_KEY=填写你的自定义key MEILI_NO_ANALYTICS=true
索引旧的内容
在新部署的基础之上,需要单独创建一个索引,比较麻烦
1.导出帖子数据
首先,进入PostgreSQL的Docker容器,并导出帖子列表。使用以下命令:
sudo docker compose exec -it db /bin/bash
psql -U misskey -d misskey -c "SELECT json_agg(row_to_json(t)) ::text FROM (SELECT id, "createdAt", "userId", "userHost", "channelId", cw, text FROM note WHERE visibility IN ('home', 'public') LIMIT 10000) t" > /var/lib/postgresql/data/notes_tmp
exit
在这里,替换misskey为你的POSTGRES_USER和POSTGRES_DB的实际值。
2.转换数据格式为JSON:
将导出的数据转换为JSON格式,为导入MeiliSearch做准备。首先安装jq,然后使用sed和jq来处理文件。
sudo yum install jq
sudo sed -i '1d;2d;x;$d;' ./db/notes_tmp
sudo jq 'map(.createdAt |= (strptime("%Y-%m-%dT%H:%M:%S%Z") | mktime | . * 1000 + (. / 1000000 | floor)))' ./db/notes_tmp > ./notes.json
sudo mv notes.json meili_data
3.导入数据到MeiliSearch:
接下来,进入MeiliSearch的Docker容器,并使用curl命令将创建的JSON文件POST到MeiliSearch。
sudo docker compose exec -it meilisearch /bin/ash curl -X POST 'http://localhost:7700/indexes/your_index_name---notes/documents' --data @/meili_data/notes.json -H 'Content-Type: application/json' -H "Authorization: Bearer your_master_key" exit
在这里,your_index_name替换为你的MeiliSearch索引名称,your_master_key替换为你的MeiliSearch API密钥。
完成: 完成这些步骤后,你应该能够在MeiliSearch中搜索过去的帖子,无需重启Misskey。
请确保在实际操作中替换掉命令中的占位符(如your_index_name和your_master_key)以及正确地设置文件路径。这个过程不需要重启Misskey,因为你是直接操作MeiliSearch的索引。
本文作者:ZKCOI
文章名称:Docker安装Misskey/Sharkey/Firefish(包含Meilisearch检索配置)
文章链接:https://www.zkcoi.com/365up/program/2787.html
本站资源仅供个人学习和交流,如若转载,请注明出处,详见《免责声明》。
微信扫一扫
支付宝扫一扫 
评论列表(2条)
谢谢!成功部署了sharkey和melisearch
@0w0:不客气,很高兴能帮到忙