Sharkey 搭建及优化记录

前言

最近看到有些朋友尝试搭建了自己的实例，比如这位。于是想着搭一个 Sharkey 来玩玩，并因此开始了一轮长时间的折腾。这篇文章尝试把最近折腾的内容都整合到一块供有类似想法的参考。

为什么是 Sharkey？

首先，Misskey 系界面很对我胃口；其次，我之前试折腾所使用的 Firefish 进入维护状态准备停更了（要不然本文的推荐就改成 Firefish 了）；再者，Sharkey 应该是 Misskey 的分支里边除 Firefish 之外添加的新特性是最多的，非常好玩；最后，我内存够。

目前本人所使用的是 Sharkey-stelpolva，来自無名星屑站长的 Fork，在原版 Sharkey 的基础上又加了一堆特性。不过该 Fork 没有提供已构建好的 Docker 镜像，为了减少每次更新服务器都得编译镜像的压力，自己搓了一个工作流定期拉取源码构建镜像并上传到 DockerHub。你可以在这里查看该镜像信息。

部署

首先新建个目录 mkdir Sharkey && mkdir Sharkey/.config 存一下配置文件。

接下来拿一下配置示例并进入目录：（若使用原版 Sharkey 则复制带井号的命令）

Copy
wget -O Sharkey/docker-compose.yml https://raw.githubusercontent.com/Lhcfl/sharkey-stelpolva/refs/heads/stelpolva/compose_example.yml
# wget -O Sharkey/docker-compose.yml https://activitypub.software/TransFem-org/Sharkey/-/raw/stable/compose_example.yml
wget -O Sharkey/.config/default.yml https://raw.githubusercontent.com/Lhcfl/sharkey-stelpolva/refs/heads/stelpolva/.config/docker_example.yml
# wget -O Sharkey/.config/default.yml https://activitypub.software/TransFem-org/Sharkey/-/raw/stable/.config/docker_example.yml
wget -O Sharkey/.config/docker.env https://raw.githubusercontent.com/Lhcfl/sharkey-stelpolva/refs/heads/stelpolva/.config/docker_example.env
# wget -O Sharkey/.config/docker.env https://activitypub.software/TransFem-org/Sharkey/-/raw/stable/.config/docker_example.env
cd Sharkey

编辑 .config/default.yml。在 url 处修改自己所用的域名，其他变量可视情况进行修改。

随后编辑 docker-compose.yml，取消注释在 service/web 下的 image 一行，若使用上文提到的构建镜像可将内容改为 wuhang2003/sharkey-stelpolva-docker:latest，并注释掉下一行的 build。

Note

可以尝试把镜像自带的 Redis 改成基于 Redis 开源版本 Fork 而来的 Valkey，完美兼容且性能比原版强。

修改 service/db 下的 image 一行，内容改为 groonga/pgroonga:latest，这是修改版的必要依赖。

完成后的 docker-compose.yml 参考如下：（网络为了方便在 1Panel 管理修改成了 1panel-network）

Copy
services:
web:
image: wuhang2003/sharkey-stelpolva-docker:latest
restart: always
links:
- db
- valkey
depends_on:
db:
condition: service_healthy
valkey:
condition: service_healthy
ports:
- "4514:3000"
networks:
- 1panel-network
# env_file:
# - .config/docker.env
volumes:
- ./files:/sharkey/files
- ./.config:/sharkey/.config:ro

valkey:
restart: always
image: valkey/valkey:8-alpine
networks:
- 1panel-network
volumes:
- ./valkey:/data
healthcheck:
test: "valkey-cli ping"
interval: 5s
retries: 20

db:
restart: always
image: groonga/pgroonga:3.2.5-alpine-17
networks:
- 1panel-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

networks:
1panel-network:
external: true

完成后先启动一下 PostageSQL 和 Redis（或 Valkey） sudo docker compose up -d db redis，复制两个容器名字（假设这里是 sharkey-valkey-1 和 sharkey-db-1），随后修改 .config/default.yml 里 db 部分和 redis 部分的 host 为对应容器名字。随后进入 db 容器通过 psql 连接数据库，执行 CREATE EXTENSION pgroonga; 为数据库添加 pgroonga 扩展。这样正式启动前的所有准备工作就准备好了。

接下来，docker compose up -d。参照 Misskey 文档配置反向代理。在 Sharkey 目录下执行 sudo chown -R 991:991 files/ 修改文件夹归属以避免网页端无法上传文件的问题。

完成后，登录网页注册初始账号，进行一下站点体验的优化。

优化

修改实例信息并加入中继

修改实例信息：控制面板 -> 设置 -> 常规设置

添加服务器和站点 logo：控制面板 -> 设置 -> 品牌

加入中继：控制面板 -> 设置 -> 中继。常见的中文中继：喵家中继、DragonRelay、岛站的中继。

开启中继后，小实例可能会出现跨站消息堵塞（中继中有大站点，信息流太频繁，堵塞了小实例的 sidekiq），跨站时间轴混乱（来自更远时间前的内容插入了当前跨站时间轴）等情况，请确认能够接受（基本无伤大雅）。同时，添加的中继多，会导致服务器的 PostgreSQL 数据库体积增加。

CloudFlare

站点添加的过程就不详述了，只提一个特别的点，对于实例的域名需要关闭 Rocket Loader，可以直接全局关闭该选项（速度 -> 优化 -> 内容优化）或者使用 Configuration Rules 设置特定站点的规则。

除此之外可以考虑使用 R2 存储图片等资源。

添加权限组并打开部分权限

控制面板 -> 角色，新建一个角色，角色权限设为管理员，授权对象为手动。策略设置如下：

速率限制取消默认并拉到最小 0%（后面使用工具上传表情调用到 API 时不容易炸）

开启管理自定义表情符号 / 管理头像挂件

网盘容量酌情拉大（大概 500M 到 1G）以方便接下来添加自定义表情和头像挂件

随后给自己的号分配这个角色，返回到角色设置，在基本角色处打开 “是否可以搜索帖子” 的选项，完成。

添加表情（抓取 + 上传一条龙）

由于上传自定义表情符号会存到对应账号的网盘，所以一般建议单独开一个号专门负责存表情等公用资源，该账号需要分配上述的管理员角色以使其能不受限制地上传表情。

抓取其他 Misskey 站点的表情：powerfullz/misskey-emoji-downloader

批量分类上传：pentaCoxian/misskey-emoji-bulk-uploader

防 SPAM

考虑到去年十月出现了一波针对 Fediverse 的 SPAM 潮，故加上这部分内容，主要分为内防（禁止非授权注册）和外防（防止外部实例 SPAM 消息流）。

禁止非授权注册：Sharkey 不需要主动设置，默认关闭开放注册（即需要邀请码），可在控制面板 -> 管理处把 “注册账户需要电子邮箱地址” 和 “新用户需要被手动批准” 打开，同时在 “安全” 选项卡下设置验证码和邮箱验证。

防止外部实例 SPAM 消息流：控制面板 -> 角色，新建角色，角色权限不动（普通用户），授权对象选择 “符合条件”，设置条件和策略见此条帖子的配图，保存。

更新

都用 Docker Compose 部署了，一行 docker compose pull && docker compose up -d 搞定。

最后，欢迎关注 @wuhang2003@m.zwh.moe，还有我的老号 @wuhang2003@nya.one，谢谢喵。

参考资料

Misskey 官方文档

Sharkey 官方文档

sharkey-stelpolva

Lhcfl 的帖子

此文由 Mix Space 同步更新至 xLog
原始链接为 https://zwh.moe/posts/technology/sharkey-deploy