自架 Misskey instance 拿回資料自主權

最近 Elon Musk 把 Twitter 買下來後,好像亂搞了一陣,隨意大砍員工亂關門之類的,Twitter 上一片風聲鶴唳,覺得遲早會被他玩到倒掉,掀起最新一波逃難潮,至於逃到哪呢?最知名的就是 Mastodon 這種聯邦式的 microblog 服務。

早在幾年前就已經有註冊過 g0v.social 這個 g0v 台灣人社群自架、感覺相對有規模和保障的的帳號,最近也開始比較活躍地使用。不過只要是資料在人手裡,總是沒辦法確保站點會不會倒掉,多年經營付諸流水。就像 blog 要自架一樣,認真考慮起自架一個 microblog 服務。

最開始的選擇當然還是 Mastodon,介面比較習慣,有 App 可用,官方也有出 docker compose 的設定讓人快速架站,但聽聞它的底層是 ruby on rails,而且好像會有效能問題,就稍微卻步了。

後來看到有人推薦 Misskey,說比較適合個人用,便上了它的官網去試用一下 UI 順不順手。

感覺很不錯,有類似 Twitter 的介面,而且是日本人做的,日系配色還蠻順眼的,可以成功的跨 instance 追蹤、回覆等等,功能完整,就用了一個晚上把自己的 instance 架起來。

為了節省 virtual machine 的費用,也不追求完全不停服務的狀態,自己用而已,和 blog 一樣,架在家裡的 NAS (Synology DS1621+) 上。

安裝的過程也是有點坎坷,官方提供的 docker compose 設定是自己拉 GitHub 上的 source code 下來 build,但我一開始居然 build 不成功,再試一次才過,但 docker compose up 又跑不起來。本來還以為真的可以三分鐘快速架站的。

後來改用官方的 docker image,也是跑不起來,看 log 發現是 redis 一直起不來,出現錯誤訊息:

Fatal error loading the DB: Permission denied.

把 redis 的目錄權限設好就 OK 了。

要提供 https 連線要用 nginx 的 reverse proxy 來做,先在 Synology DSM > Web Station 開好 virtual host 後,在 /usr/local/etc/nginx/sites-available/ 找到對應的設定檔,再從裡面找到可以讓 user 客制化的設定檔目錄 /usr/local/etc/nginx/conf.d/xxx/user.conf* 建一個 reverse proxy 用的設定檔。

官方有提供範例,關於 ssl 的部份讓 Synology 去處理就好,只要把 location / 那段貼上即可:

    # Proxy to Node
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_redirect off;

        # If it's behind another reverse proxy or CDN, remove the following.
        #proxy_set_header X-Real-IP $remote_addr;
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header X-Forwarded-Proto https;

        # For WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        #proxy_cache cache1;
        #proxy_cache_lock on;
        #proxy_cache_use_stale updating;
        #add_header X-Cache $upstream_cache_status;
    }

因為我有掛 Cloudflare,所以第二段要 comment out,第三段要打開才能和他站通訊,理論上第四段 cache 應該也可以打開,但只要一開,NAS 上所有 virtual host 都會爛掉,所以就先算了,會動就好。

sudo systemctl restart nginx

效能也不錯,reload 畫面馬上就會出現。

目前運作了一天左右,可以正常地 follow 外站的人、發文回文外站看得到、傳私訊會通,看來應該是可以把這裡當成未來所有支援 ActivityPub 協議的訊息集中地(聽說 Tumblr 也要開始支援了!)。

自架的好處是自己資料自己掌握,比較不怕對方倒站,也可以選自己喜歡的 id,domain 用自己的也有一定程度代表性,例如我目前就是用 @[email protected],網址只用一個 m 除了比較短,也可以表示 “m”icroblog 或 “M”isskey。

壞處當然是自己顧 server 很麻煩,不像 WordPress 直接在 admin page 裡升級就好,Misskey docker image 的升級、db 要不要 migrate 等等都要注意,不然把資料搞爛了也是自找的。Misskey 的開發團隊似乎只在 GitHub 上發 release note,是有一個 Discoid channel,但用不慣,沒有其他 SNS 的帳號用來發佈更新和注意事項,覺得可惜了點。

另一個小缺點是 Misskey 目前沒有自己的 App,也不能和 Mastodon 通用,目前在手機上只能用瀏覽器,雖然已經做得很像原生 App,但一些操作方式還是不同,例如想點開討論串,直接點該則推文是沒反應的,要點右上角的時間連結。

老實說我不認為 Twitter 被 Elon Musk 這樣一整頓會就此沒落,但藉這個機會把 microblog 所有權重新拿回到自己手裡也是件不錯的事,之後就兩邊同時經營,且戰且走囉!


One Comments

Leave a Reply