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
。
docker-compose.yml需要注意缩进,格式比较严格
default.yml
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Misskey configuration #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ┌─────┐ #───┘ URL └───────────────────────────────────────────────────── # Final accessible URL seen by a user. url: https://域名/ # ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE # URL SETTINGS AFTER THAT! # ┌───────────────────────┐ #───┘ Port and TLS settings └─────────────────────────────────── # # Misskey requires a reverse proxy to support HTTPS connections. # # +----- https://example.tld/ ------------+ # +------+ |+-------------+ +----------------+| # | User | ---> || Proxy (443) | ---> | Misskey (3000) || # +------+ |+-------------+ +----------------+| # +---------------------------------------+ # # You need to set up a reverse proxy. (e.g. nginx) # An encrypted connection with HTTPS is highly recommended # because tokens may be transferred in GET requests. # The port that your Misskey server should listen on. port: 3000 # ┌──────────────────────────┐ #───┘ PostgreSQL configuration └──────────────────────────────── #和项目配置文件中的配置一致 db: host: db port: 5432 # Database name db: 数据库名称 # Auth user: 数据库用户名 pass: 数据库密码 # Whether disable Caching queries #disableCache: true # Extra Connection options #extra: # ssl: true dbReplications: false # You can configure any number of replicas here #dbSlaves: # - # host: # port: # db: # user: # pass: # - # host: # port: # db: # user: # pass: # ┌─────────────────────┐ #───┘ Redis configuration └───────────────────────────────────── redis: host: redis port: 6379 #family: 0 # 0=Both, 4=IPv4, 6=IPv6 #pass: example-pass #prefix: example-prefix #db: 1 #redisForPubsub: # host: redis # port: 6379 # #family: 0 # 0=Both, 4=IPv4, 6=IPv6 # #pass: example-pass # #prefix: example-prefix # #db: 1 #redisForJobQueue: # host: redis # port: 6379 # #family: 0 # 0=Both, 4=IPv4, 6=IPv6 # #pass: example-pass # #prefix: example-prefix # #db: 1 #redisForTimelines: # host: redis # port: 6379 # #family: 0 # 0=Both, 4=IPv4, 6=IPv6 # #pass: example-pass # #prefix: example-prefix # #db: 1 # ┌───────────────────────────┐ #───┘ MeiliSearch configuration └───────────────────────────── # meilisearch: # host: meilisearch # port: 7700 # apiKey: '72dc8e8ed6382535a7efe2b2967b2fca50fb3da2629edf7b929d7f969c5245c2' # ssl: false # index: 'timi---notes' # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── # You can select the ID generation method. # You don't usually need to change this setting, but you can # change it according to your preferences. # Available methods: # aid ... Short, Millisecond accuracy # aidx ... Millisecond accuracy # meid ... Similar to ObjectID, Millisecond accuracy # ulid ... Millisecond accuracy # objectid ... This is left for backward compatibility # ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE # ID SETTINGS AFTER THAT! id: 'aidx' # ┌─────────────────────┐ #───┘ Other configuration └───────────────────────────────────── # Whether disable HSTS #disableHsts: true # Number of worker processes #clusterLimit: 1 # Job concurrency per worker # deliverJobConcurrency: 128 # inboxJobConcurrency: 16 # Job rate limiter # deliverJobPerSec: 128 # inboxJobPerSec: 16 # Job attempts # deliverJobMaxAttempts: 12 # inboxJobMaxAttempts: 8 # IP address family used for outgoing request (ipv4, ipv6 or dual) #outgoingAddressFamily: ipv4 # Proxy for HTTP/HTTPS #proxy: http://127.0.0.1:3128 proxyBypassHosts: - api.deepl.com - api-free.deepl.com - www.recaptcha.net - hcaptcha.com - challenges.cloudflare.com # Proxy for SMTP/SMTPS #proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT #proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4 #proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5 # Media Proxy #mediaProxy: https://example.com/proxy # Proxy remote files (default: true) proxyRemoteFiles: true # Sign to ActivityPub GET request (default: true) signToActivityPubGet: true #allowedPrivateNetworks: [ # '127.0.0.1/32' #] # Upload or download file size limits (bytes) #maxFileSize: 262144000
docker.env
POSTGRES_PASSWORD=数据库密码 POSTGRES_USER=数据库用户名 POSTGRES_DB=t数据库名
#Misskey的docker-compose.yml
version: "3" services: web: image: misskey/misskey:latest # 我们使用misskey提供的官方镜像 restart: always links: - db - redis # - meilisearch depends_on: db: condition: service_healthy redis: condition: service_healthy ports: - "3000:3000" networks: - internal_network - external_network volumes: - ./files:/misskey/files - ./.config:/misskey/.config:ro redis: restart: always image: redis:7-alpine networks: - internal_network volumes: - ./redis:/data healthcheck: test: "redis-cli ping" interval: 5s retries: 20 db: restart: always image: postgres:15-alpine networks: - internal_network env_file: - .config/docker.env volumes: - ./db:/var/lib/postgresql/data healthcheck: test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB" 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需要调整,记得改一改,可以参考官方文档
version: "3" services: web: image: ghcr.io/transfem-org/sharkey:stable # build: . restart: always links: - db - redis # - meilisearch depends_on: db: condition: service_healthy redis: condition: service_healthy ports: - "3000:3000" networks: - shonk volumes: - ./files:/sharkey/files - ./.config:/sharkey/.config:ro redis: restart: always image: eqalpha/keydb:latest networks: - shonk volumes: - ./redis:/data healthcheck: test: "keydb-cli ping" interval: 5s retries: 20 db: restart: always image: postgres:15-alpine networks: - shonk env_file: - .config/docker.env volumes: - ./db:/var/lib/postgresql/data healthcheck: test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB" 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: # - shonk # volumes: # - ./meili_data:/meili_data networks: shonk:
#Firefish的docker-compose.yml
Firefish的配置default.yml需要调整,记得改一改,可以参考官方文档
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的索引。
本文作者:𝙕𝙆𝘾𝙊𝙄
文章名称:Docker安装Misskey/Sharkey/Firefish(包含Meilisearch检索配置)
文章链接:https://www.zkcoi.com/365up/program/2787.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
评论列表(2条)
谢谢!成功部署了sharkey和melisearch
@0w0:不客气,很高兴能帮到忙