前言#
最近看到有些朋友尝试搭建了自己的实例,比如这位。于是想着搭一个 Sharkey 来玩玩,并因此开始了一轮长时间的折腾。这篇文章尝试把最近折腾的内容都整合到一块供有类似想法的参考。
为什么是 Sharkey?#
首先,Misskey 系界面很对我胃口;其次,我之前试折腾所使用的 Firefish 进入维护状态准备停更了(要不然本文的推荐就改成 Firefish 了);再者,Sharkey 应该是 Misskey 的分支里边除 Firefish 之外添加的新特性是最多的,非常好玩;最后,我内存够。
目前本人所使用的是 Sharkey-stelpolva,来自無名星屑站长的 Fork,在原版 Sharkey 的基础上又加了一堆特性。不过该 Fork 没有提供已构建好的 Docker 镜像,为了减少每次更新服务器都得编译镜像的压力,自己搓了一个工作流定期拉取源码构建镜像并上传到 DockerHub。你可以在这里查看该镜像信息。
部署#
首先新建个目录 mkdir Sharkey && mkdir Sharkey/.config
存一下配置文件。
接下来拿一下配置示例并进入目录:(若使用原版 Sharkey 则复制带井号的命令)
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
)
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
,谢谢喵。
参考资料#
此文由 Mix Space 同步更新至 xLog
原始链接为 https://zwh.moe/posts/technology/sharkey-deploy