Mastodon,害
大概还有人记得我们之前也是有过一个Mastodon实例的,后来因为实力原因也停掉了。在那段短暂接触的时光里Mastodon没有给我留下特别深刻的印象,若不是使用的Mashirozx魔改版的mastodon,UI更加丑陋,也略显平庸,再去看看别家的misskey,网盘图库各种花里胡哨的功能应有尽有,总之有被种草。
同时mastdon有着非常大占用空间,自动获取联邦宇宙其他站点的媒体文件不说,定期清理文件仍然是占用巨大,同样也吃内存。
种种原因,当我再次搭建联邦宇宙sns实例时,我选择尝试misskey这边。
Firefish是?
官网:https://joinfirefish.org/
Firefish 的开发始于 2022 年,原名叫Calckey,是 Misskey 的软分叉(我们将永远感激!),它最初是 ThatOneCalculator 或 Kainoa Kanter 的个人项目。在 2022 年底,越来越多的用户开始注意到 Firefish,开始感兴趣并积极参与其中,我们很高兴地说,我们现在已经自然而然地演变成一个社区驱动的项目。我们不再基于 Misskey 的最新版本,因为在某些时候很明显我们有不同的愿景,所以我们决定继续作为一个独立的项目。从那时起,我们添加了自己独特的功能,例如帐户迁移、查看帖子和浏览线程的新布局,我们目前正在实施 Mastodon API 兼容性和帖子编辑——未来计划进行更多更改和改进!
firefish在各方面支持也比较全面
你也可以来看看我们的实例 晓汐茶馆 :https://cplus.app
开始搭建
以下将提供两种方法,分别为基于预配好的docker容器和手动编译,不熟悉想开服的可以使用docker。
docker compose一把梭
1.在你的机器上准备好docker和docker compose插件,若没有,可以使用docker官方官方一键安装命令。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
2.创建Firefish的目录,编辑docker-compose.yaml文件
mkdir /firefish && cd /firefish
vim docker-compose.yml
在 docker-compose.yaml中填入以下内容
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:12.2-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和sonic为全文搜索引擎,两者可以选择一个去掉注释启用。Meilisearch搜索效果更好,sonic更加轻量。
3.在Firefish根目录下创建 .config文件夹,下载example.yml和docker_example.env,按照以下提示进行修改,而后分别重命名为default.yml和docker.env。
example.yml中11行的url:https://example.com 应改为你的域名,
30行的port可根据实际选择3000-4000内任意一个
40行和63行db和redis的host由localhost分别改成firefish_db和redis
别改成若选择启用了meilisearch或sonic请自行去除注释,邮件配置和S3配置不用再此处修改,后期可到UI界面后台控制面板修改。
docker_example.env保持原封不动贴入即可。若修改了default.yml中47、48行的user pass,请同样对应修改doxker.env中的POSTGRES_USER和POSTGRES_PASSWORD。
4.最后回到firefish根目录,持久化运行容器。
docker compose up -d
这样你的firefish服务已经成功运行在3000端口了,有关反向代理设置,请查看文末。
2.手动运行
以下将以Debian 11的环境介绍安装过程。
官方文档提示的依赖
💻依赖项
- 🐢 至少 NodeJS v18.16.0(建议使用 v20)
- 至少有 PostgreSQL v12(建议使用 v14)
- 🍱 至少 Redis v7
- 网络代理(以下之一)
Nginx(推荐使用)
🦦 Caddy
🪶 Apache
- ⚡ libvips
😗 可选依赖项
用于视频转码的 FFmpeg
全文搜索(以下之一)
🦔 Sonic
MeiliSearch
ElasticSearch
缓存服务器(以下之一)
🐲 DragonflyDB(推荐)
👻 KeyDB
另一个 Redis 服务器
🏗️ 构建依赖项
- 🦀 至少 Rust v1.68.0
- C/C++ 编译器和构建工具
Debian/Ubuntu Linux 上的 build-essential
Arch Linux 上的 base-devel
- Python 3
1.安装构建依赖Rust、Nodejs、build-essential和python3
安装安装rust依赖以及build-essential python3
apt install python3 curl build-essential gcc make -y
使用rustup工具安装rust,输入
curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs | sh
而后输入1 Proceed with installation(default)
由于使用内置包管理器安装的nodejs版本为过旧的12.2.0,这里你可以使用官方的安装命令Setup。
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
2.下载Firefish源代码
git clone https://git.joinfirefish.org/firefish/firefish.git
cd firefish/
3.安装包管理器pnpm和进程守护pm2
corepack enable
corepack prepare pnpm@latest --activate
pnpm -i
npm i -g pm2
pm2 install pm2-logrotate
pm2-logrotate 可确保日志文件不会无限增大,因为 Firefish 会生成大量日志
4.pgsql安装与数据库创建
apt install postgresql
使用Postgresql超级用户登录pgsql命令行。超级用户是具有最高权限的用户,通常是“postgres”用户。可以使用以下命令登录到PostgreSQL:
sudo -u postgres psql
创建用户,数据库,授予用户数据库访问权限。
CREATE USER <your_username> WITH PASSWORD '<your_password>';
CREATE DATABASE firefish WITH encoding = 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE firefish TO '<your_username>'
5.可选配置 缓存服务,全文搜索
💰缓存服务器
如果流量很大,最好再设置一个 Redis 兼容的缓存服务器。如果没有设置,就会退回到必须的 Redis 服务器。DragonflyDB 因其无与伦比的性能和易用性而成为推荐选择。
🔎 设置搜索
🦔 Sonic
Sonic 更适合部署规模较小的自助主机商。它几乎不占用任何资源和磁盘空间,速度也相对较快。
按照 sonic 的安装指南进行操作:https://github.com/valeriansaliou/sonic#installation
注意事项
如果使用 IPv4:在 Sonic 的目录下,编辑 config.cfg 文件,将 inet 改为 "0.0.0.0:1491"。
Meilisearch
Meilisearch 更适合大型部署。它的速度更快,但使用的资源和磁盘空间要大得多。
按照 Meilisearch 的快速入门指南进行操作
在 Firefish 的目录中,用正确的信息填写 .config/default.yml 中的 meilisearch 部分。
ElasticSearch
请不要使用 ElasticSearch,除非您已经安装了 ElasticSearch 并希望在 Firefish 中继续使用。ElasticSearch 既慢又重,与 Sonic/Meilisearch 相比几乎没有什么优势。
6.修改配置文件
在 Firefish目录下.config文件夹中,复制example.yml并重命名为default.yml,url更改为https://<你的域名>,db 部分,user与pass改为你创建的用户名与密码。Sonic, Meilisearch等按照情况去掉注释填写。
7.构建与启动
使用如下命令启动
pnpm install
NODE_ENV=production pnpm run build && pnpm run migrate
pm2 start "NODE_ENV=production pnpm run start" --name Firefish
后期如果要升级,请运行git pull和上述命令即可。
反向代理
执行完上述步骤后,你的Firefish服务已经成功启动并暴露在3000端口(默认的),但是如果你需要别人也能访问,先别急,配置一下反向代理。
对于nginx,你只需要将下列文件修改14行server改成你的域名,34,35行改成你的域名SSL证书和密钥所在目录,并将其保存etc/nginx/conf.d/your_domain.yml 然后重启nginx nginx -s reload。
# Replace example.tld with your domain
# For WebSocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;
server {
listen 80;
listen [::]:80;
server_name example.tld;
# For SSL domain validation
root /var/www/html;
location /.well-known/acme-challenge/ { allow all; }
location /.well-known/pki-validation/ { allow all; }
location / { return 301 https://$server_name$request_uri; }
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.tld;
ssl_session_timeout 1d;
ssl_session_cache shared:ssl_session_cache:10m;
ssl_session_tickets off;
# To use Let's Encrypt certificate
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# SSL protocol settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
# Change to your upload limit
client_max_body_size 80m;
# Proxy to Node
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_redirect off;
# If it's behind another reverse proxy or CDN, remove the following.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
# For WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Cache settings
proxy_cache cache1;
proxy_cache_lock on;
proxy_cache_use_stale updating;
add_header X-Cache $upstream_cache_status;
}
}
事实上对于ubuntu,他们有个一键安装脚本
https://firefish.dev/firefish/ubuntu-bash-install
不过名称还是Calckey,感兴趣可以自行琢磨