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


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。