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