banner
wuhang2003

Zwh's Blog

ZH/EN | 一个人不在计算机专业却时不时就想折腾计算机相关东西的咸鱼

Sharkey 搭建及优化记录

前言#

最近看到有些朋友尝试搭建了自己的实例,比如这位。于是想着搭一个 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


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。