Fediverse | FireFish实例搭建过程:如果某一天,打算跑路

为什么搭FireFish?

官方介绍:Firefish 是由 ThatOneCalculator 创建的 Misskey 的一个分支,自 2022 年开始开发。

相比Misskey,Firefish具有更清洁的UI页面,更扩展的用户功能(编辑嘟文、CSS设置、主题导入等)、更友好的管理设置,以及最重要的:Firefish的实验性功能,支持导入嘟文。

我最近经常为自建的Mastoson实例头疼:

  1. Eurgen的Mastodon未来规划和我的喜好不符,因为讨厌4.0版本的丑陋UI,我的Mastodon实例已经在3.5.3版本待了一年有余,显然不是长久之计,比如Pawoo曾经就因为版本太老,和联邦宇宙失联过一次,至今有些联结似乎还没有修复。同时,我使用的Mashirozx分支,维护者之前表明因为维护成本太高,不会再跟进维护,也就是说,当3.5.3版本落无可落时,只能选择跟进官方分支或者使用Glitch分支,迁移过程中也有很多地方不确定,它如果跑不了,我也不会改……
  2. Mastodon的琐碎文件实在太多了,庞然巨物,即便已经清了文件,它还是有一百多个G,实在不明白为什么至今不能清理多余媒体文件,又细又碎,我这还是仅个位数亲友玩耍的私人小站,想了一下活吧和嘟站那些大站的规模,眩晕。
  3. VPS的成本日趋上升,这次搬迁就是因为和朋友合租的服务器的月费飙升至不能接受的价格,只好搬回contabo,contabo也涨价,掐指一算,结合汇率,已经从之前的四百多一年涨到了近六百一年。基本已经到了我能接受的费用极限。但站点不是只有我一个人的数据,如果某天因为成本问题更换实例或者停止运营,总要考虑对其他人的嘟文数据负责。

于是尽管比较年轻,但更轻量,能导入嘟文的Firefish,看上去是个还不错的跑路选择。

Firefish搭建过程

一开始习惯性找中文教程,发现Firefish及前身Calckey都没什么资源,干脆啃源文档,啃完发现,看源文档就OK了,比较简单……

从Docker安装需要以下几个文件:
docker-compose.ymldocker.envdefault.yml

首先在VPS中创建Firefish文件夹,在Firefish中创建.config文件夹

mkdir Firefish
cd firefish
mkdir .config

然后在firefish文件夹中nano docker-compse.yml,复制官方给出的示例样本
进入firefish/.config,编辑docker.envdefault.yml

# db settings
POSTGRES_PASSWORD=example-firefish-pass #修改数据库密码
POSTGRES_USER=example-firefish-user #修改数据库用户名
POSTGRES_DB=firefish

default.yml我让ChatGPT翻译了一份中文的,需要修改的部分为:URL地址db和redis的host(修改为容器名称)数据库的user和密码

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Firefish配置
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# 启动服务器后,请不要更改URL!否则会破坏联邦功能。

#   ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# 用户看到的最终访问URL。
url: #输入站点域名

#   ┌───────────────────────┐
#───┘ 端口和TLS设置 └───────────────────────────────────

#
# Firefish需要一个反向代理来支持HTTPS连接。
#
#                 +----- https://example.com/ ------------+
#   +------+      |+-------------+      +----------------+|
#   | 用户 | ---> || 代理 (443)  | ---> | Firefish (3000) ||
#   +------+      |+-------------+      +----------------+|
#                 +---------------------------------------+
#
#   您需要设置一个反向代理。(例如:nginx,caddy)
#   强烈推荐使用带有HTTPS的加密连接,因为令牌可能会在GET请求中传输。

# 您的Firefish服务器应该监听的端口。
port: 3000 #如果之前在docker-compose.yml中修改了端口,这里也要相应修改

# Firefish服务器应该监听的绑定主机。
# 如果未指定,将使用通配符地址。
# bind: 127.0.0.1

#   ┌──────────────────────────┐
#───┘ PostgreSQL配置 └────────────────────────────────

db:
  host: firefish_db #容器名称
  port: 5432
  #ssl: false
  # 数据库名称
  db: firefish

  # 认证
  user: #之前在docker.env中输入的用户名
  pass: #之前在docker.env中输入的密码

  # 是否禁用查询缓存
  #disableCache: true

  # 额外的连接选项
  #extra:
  #  ssl:
  #   host: localhost
  #   rejectUnauthorized: false

#   ┌─────────────────────┐
#───┘ Redis配置 └─────────────────────────────────────

redis:
  host: firefish_redis #容器名称
  port: 6379
  #tls:
  #  host: localhost
  #  rejectUnauthorized: false
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass
  #prefix: example-prefix
  #db: 1
  #user: default

#   ┌─────────────────────────────┐
#───┘ 缓存服务器配置 └─────────────────────────────────────

# 用于缓存的Redis兼容服务器(DragonflyDB,Keydb,Redis)
# 如果留空,将使用上述的Redis服务器

#cacheServer:
  #host: localhost
  #port: 6379
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass
  #prefix: example-prefix
  #db: 1

# 请配置MeiliSearch或Sonic其中之一。
# 如果MeiliSearch和Sonic配置同时存在,则MeiliSearch将优先。

#   ┌───────────────────────────┐
#───┘ MeiliSearch配置 └─────────────────────────────────────
#meilisearch:
#  host: meilisearch
#  port: 7700
#  ssl: false
#  apiKey:

#   ┌─────────────────────┐
#───┘ Sonic配置 └─────────────────────────────────────

#sonic:
#  host: firefish_sonic #容器名称
#  port: 1491
#  auth: SecretPassword
#  collection: notes
#  bucket: default


#   ┌───────────────┐
#───┘ ID生成 └───────────────────────────────────────────

# 在大规模和/或分布式服务器上运行时,大多数情况下不需要取消注释,但您可能希望更改这些设置。

# cuid:
#   # 最小16,最大24
#   length: 16
#
#   # 如果您的工作程序在多台主机上运行,请设置为唯一的字符串(例如,机器的主机名)。
#   fingerprint: my-fingerprint


#   ┌─────────────────────┐
#───┘ 其他配置 └─────────────────────────────────────

# 帖子的最大长度(默认为3000,最大为100000)
maxNoteLength: 3000

# 图片标题的最大长度(默认为1500,最大为8192)
maxCaptionLength: 1500

# 仅管理员才能使用的保留用户名
reservedUsernames: [
  'root',
  'admin',
  'administrator',
  'me',
  'system'
]

# 是否禁用HSTS
#disableHsts: true

# 工作进程数
#clusterLimit: 1

# 仅工作进程模式
#onlyQueueProcessor: 1

# 工作进程的作业并发数
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16

# 作业速率限制器
# deliverJobPerSec: 128
# inboxJobPerSec: 16

# 作业尝试次数
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8

# 用于出站请求的本地地址
#outgoingAddress: 127.0.0.1

# 出站请求的IP地址族(ipv4、ipv6或双栈)
#outgoingAddressFamily: ipv4

# Syslog选项
#syslog:
#  host: localhost
#  port: 514

# 代理HTTP/HTTPS
#proxy: http://127.0.0.1:3128

#proxyBypassHosts: [
#  'web.kaiteki.app',
#  'example.com',
#  '192.0.2.8'
#]

# 代理SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128   # 使用HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080  # 使用SOCKS4
#proxySmtp: socks5://127.0.0.1:1080  # 使用SOCKS5

# 媒体代理
#mediaProxy: https://example.com/proxy

# 代理远程文件(默认值:false)
#proxyRemoteFiles: true

#allowedPrivateNetworks: [
#  '127.0.0.1/32'
#]

# TWA
#twa:
#  nameSpace: android_app
#  packageName: tld.domain.twa
#  sha256CertFingerprints: ['AB:CD:EF']

# 上传或下载文件大小限制(字节)
#maxFileSize: 262144000

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 祝贺您,您已经到达了适用于大多数部署的配置文件的末尾!
# 祝您使用Firefish服务器愉快!
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 托管托管设置
# >>> 普通自助托管,请远离! <<<
# >>> 您不需要这些! <<<
# 每个类别都是可选的,但是每个类别中的每个项目都是强制性的!
# 如果您搞砸了,那是您的责任,您已经被警告了...
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

#maxUserSignups: 100
#isManagedHosting: true
#deepl:
#  managed: true
#  authKey: ''
#  isPro: false
#
#email:
#  managed: true
#  address: 'example@email.com'
#  host:

之后docker-compose up -d让容器上线,再配置反代即可。

反代我用的还是老一套配置,可以在之前的文章中看到。

配置对象存储

打开Firefish之后发现无法显示头像,水母说是这个版本本地存储图像有问题。于是配个对象存储。
吭哧吭哧抄水母发给我的配置,Firefish把很多管理方面的设置都集成到了控制面板,特别地友好

首先根据pullopen站长的教程申请一个Scaleway桶,跟着做到“生成API Key”的部分。

之后点开Firefish的控制面板(使用管理员账号),打开对象存储,Base URL的部分输入桶设置中的地址,如https://[桶名称].s3.fr-par.scw.cloud,再输入桶名、Endpoint的部分输入https://s3.fr-par.scw.cloud(根据桶位置不同,地址不同,就是把Base URL的桶名称删掉),最后下面输入Access key和Secret Key,打开“使用SSL”和“上传时设置为public-read”

再重新上传一下头像,能成功上传就OK了!

之前Scaleway有75G的免费存储和流量,但目前免费额度取消了,也不知道每个月会扣我多少钱……

感言:

怎么这么容易,过程中除了Nginx之外都没报什么问题,敢信,又不敢信……
没配sonic搜索,没看懂……