Docker安装Misskey/Sharkey/Firefish(包含Meilisearch检索配置)

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

Docker下安装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.ymldocker.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索引功能

一般情况下自带即可,控制面板中开启

Docker安装Misskey/Sharkey/Firefish(包含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_USERPOSTGRES_DB的实际值。

2.转换数据格式为JSON

将导出的数据转换为JSON格式,为导入MeiliSearch做准备。首先安装jq,然后使用sedjq来处理文件。

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_nameyour_master_key)以及正确地设置文件路径。这个过程不需要重启Misskey,因为你是直接操作MeiliSearch的索引。

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:Docker安装Misskey/Sharkey/Firefish(包含Meilisearch检索配置)

文章链接:https://www.zkcoi.com/365up/program/2787.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2023年11月1日
下一篇 2023年11月5日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

评论列表(2条)

  • 0w0
    0w0 2024年2月2日 下午3:35

    谢谢!成功部署了sharkey和melisearch喝彩

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部