前言

以前就知道有 Fediverse 這件事情,但最近看到 Misskey 後,喚起了我 self-host 的興趣,因此嘗試在家中的 PVE 主機架設 Misskey 實例,沒想到意外的成功,所以在這邊紀錄安裝過程。

以下安裝過程有部分參考於 Misskey 官方文檔

甚麼是 Proxmox VE

Proxmox Virtual Environment(PVE)是一套開源的伺服器虛擬化平台,整合了 KVM(虛擬機)與 LXC(容器)管理,提供網頁介面、備份、叢集等功能,社群也很完整,我認為這是一個很適合 self-host 玩家的平台。

甚麼是 LXC

LXC(Linux Containers)與完整虛擬機不同,容器共用 Kernal 但在使用者空間上彼此隔離。LXC 很省資源,同時能有接近真實主機的體驗。不過因為共用 Kernal 因此在安全性上不如虛擬機,且 LXC 的生態不如 Docker 熱鬧,設定也稍微複雜一點。

甚麼是 Misskey

Misskey 是起源於日本的聯邦宇宙(Fediverse)平台,支援 ActivityPub,與 Mastodon 相比,具有豐富的 UI 與互動功能。

甚麼是 Fediverse

「Fediverse」是 federated + universe 的合成詞,中文可以稱為聯邦宇宙。Fediverse 最主要的特色就是去中心化,沒有單一的大公司控制演算法或規則,而是不同的實例之間互相交流形成的社群。不同實例之間的交流透過 ActivityPub 協議進行。

安裝步驟

網域連線設定

因這部分不是本篇文章重點,只簡單帶過。

  1. 設定 DNS 紀錄
    需要有自己的網域,並且設定 A 或是 AAAA 紀錄將網域指向家中 IP。以 CloudFlare 為例:
    CloudFlare 頁面

    (也可以使用 DDNS)

  2. 設定通訊埠轉發
    需要進到路由器後台,將 80 與 443 port 轉發到安裝 Caddy 的 LXC。

  3. 設定 Reverse Proxy
    可以用 Nginx,我則是使用 Caddy。安裝 Caddy 可以參考 Proxmox VE Helper-Scripts 的腳本

    在 Caddy 中的 /etc/caddy/Caddyfile 加入以下設定:

    1
    2
    3
    <your domain> {
    reverse_proxy <your misskey lxc ip>:3000
    }

    並且重啟 Caddy:

    1
    systemctl restart caddy

建立 LXC

  1. 下載範本
    到儲存 CT 範本的地方,點範本進入範本下載頁面。
    點擊範本按鈕

  2. 搜尋 debian
    在右上角搜尋框搜尋 debian 後,選擇 debian-12-standard 後,點擊下載
    下載範本

  3. 按下建立 CT 按鈕
    按下右上角的建立 CT 按鈕以建立一個新的 LXC。
    建立 CT 按鈕

  4. 依照指引建立 LXC

    • 範本:debian-12-standard
    • 磁碟:10 GB 以上(視使用情況可能會需要更多空間)
    • CPU:二核心以上
    • RAM:4096 MB 以上

    其他維持預設即可。

  5. 進入 LXC
    從 PVE 管理網頁進入 LXC 終端,或者是從 PVE 的終端輸入 pct enter <ID>。可以進入就是安裝完成。

環境設定

以下指令皆在 LXC 中執行。

修復 locale 設定

在進入容器時若有看到以下警告的話,就要安裝 locale 解決。若沒有解決,後續安裝環境會有問題。

1
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
  1. 安裝 locale 套件
    執行以下指令:

    1
    2
    apt update
    apt install -y locales
  2. 啟用 en_US.UTF-8
    執行以下指令:

    1
    sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
  3. 產生 locale
    執行以下指令:

    1
    locale-gen

    應該會看到以下:

    1
    2
    3
    Generating locales (this might take a while)...
    en_US.UTF-8... done
    Generation complete.
  4. 設定預設 locale
    執行以下指令:

    1
    update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
  5. 重開容器與驗證
    重開後就會看到警告消失了。輸入 locale 看是否有錯誤訊息。

安裝前置環境

以下是官方列出的前置環境,將一個一個安裝。

  • Node.js (20.4.x以上)
  • pnpm (v10以上)
  • PostgreSQL (v15以上)
  • Redis
  • FFmpeg

需要特別注意的是,中文翻譯文檔有落後最新進度,Node.js 的最低版本要求其實是 22.15.0 以上或是 24.10 以上,因此後續安裝會以 22.x 為主。

同時官網也說明,如果您使用 Debian/Ubuntu,最好安裝 build-essential 軟體包。為了防止錯誤所以將一併安裝。

  1. 安裝 Node.js
    執行以下指令安裝:

    1
    2
    curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
    apt install -y nodejs

    安裝後執行以下指令確認版本:

    1
    node -v
  2. 安裝 pnpm
    執行以下指令啟用 corepack:

    1
    corepack enable

    接著執行以下指令安裝 pnpm v10:

    1
    corepack prepare pnpm@10 --activate

    安裝後執行以下指令確認版本:

    1
    pnpm -v
  3. 安裝 PostgreSQL
    執行以下指令安裝:

    1
    apt install -y postgresql postgresql-contrib

    執行以下指令啟動:

    1
    systemctl enable --now postgresql

    安裝後執行以下指令確認版本:

    1
    psql --version
  4. 安裝 Redis
    執行以下指令安裝:

    1
    apt install -y redis-server

    執行以下指令啟動:

    1
    systemctl enable --now redis-server

    安裝後執行以下指令測試,應該會看到 PONG

    1
    redis-cli ping
  5. 安裝 FFmpeg
    執行以下指令安裝:

    1
    apt install -y ffmpeg

    安裝後執行以下指令確認版本:

    1
    ffmpeg -version
  6. 安裝 build-essential
    執行以下指令安裝:

    1
    apt install -y build-essential
  7. 安裝 git
    執行以下指令安裝:

    1
    apt install -y git

安裝 Misskey

  1. 建立 misskey 使用者
    執行以下指令建立:

    1
    2
    adduser --disabled-password --disabled-login misskey
    usermod -s /bin/bash misskey
  2. 建立 PostgreSQL 使用者與資料庫
    執行以下指令切換 postgres 使用者:

    1
    su - postgres

    執行以下指令建立使用者:

    1
    createuser misskey

    執行以下指令進入 psql:

    1
    psql

    接著輸入 SQL 指令,並記得改密碼:

    1
    2
    3
    4
    5
    6
    7
    ALTER USER misskey WITH PASSWORD '請自行更換密碼';
    ALTER USER misskey CREATEDB;
    CREATE DATABASE misskey OWNER misskey
    LC_COLLATE 'en_US.UTF-8'
    LC_CTYPE 'en_US.UTF-8'
    TEMPLATE template0;
    \q

    執行以下指令切回 root 使用者:

    1
    exit
  3. 安裝 Misskey
    執行以下指令切換 misskey 使用者:

    1
    su - misskey

    接著執行以下指令以下載 misskey 並安裝:

    1
    2
    3
    4
    5
    git clone --recursive https://github.com/misskey-dev/misskey.git
    cd misskey
    git checkout master
    git submodule update --init
    NODE_ENV=production pnpm install --frozen-lockfile
  4. 建立 misskey 設定檔
    執行以下指令:

    1
    cp .config/example.yml .config/default.yml
  5. 編輯 misskey 設定
    執行以下指令開啟編輯器編輯:

    1
    nano .config/default.yml

    確認以下設定都有改到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    url: https://<your domain>

    db:
    host: localhost
    port: 5432
    db: misskey
    user: misskey
    pass: <剛剛設定的密碼>

    redis:
    host: localhost
    port: 6379

    確認後按 Ctrl + S 儲存,再按 Ctrl + X 退出。

  6. 建構和初始化 misskey
    執行以下指令:

    1
    2
    NODE_ENV=production pnpm run build
    pnpm run init

    完成後執行以下指令切回 root 使用者:

    1
    exit
  7. 建立 systemd 設定檔
    執行以下指令開啟編輯器編輯:

    1
    nano /etc/systemd/system/misskey.service

    再編輯器中貼上以下設定:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [Unit]
    Description=Misskey daemon

    [Service]
    Type=simple
    User=misskey
    ExecStart=/usr/bin/npm start
    WorkingDirectory=/home/misskey/misskey
    Environment="NODE_ENV=production"
    TimeoutSec=60
    StandardOutput=journal
    StandardError=journal
    SyslogIdentifier=misskey
    Restart=always

    [Install]
    WantedBy=multi-user.target

    最後按 Ctrl + S 儲存,再按 Ctrl + X 退出。

  8. 重新載入 systemd 並啟用 misskey 服務
    執行以下指令:

    1
    2
    systemctl daemon-reload
    systemctl enable misskey
  9. 啟動 misskey 服務
    執行以下指令:

    1
    systemctl start misskey

進入 Misskey UI 介面

在瀏覽器中輸入在 #網域連線設定 設定的網域,見到管理者創建頁面,就大功告成!

Misskey Relay 設定

甚麼是中繼器(Relay)

想要讓自己實例的 Timeline 有來自其他實例的豐富內容,除了主動追蹤別人以外,就是要加入中繼器(Relay)。Relay 能夠將其他實例的貼文送進自己的實例,同時也會將自己實例的內容推播出去,因此加入中繼器能夠與聯邦宇宙世界有更多互動。

推薦的 Relay

ActivityRelay

為聯邦宇宙的繁體中文與臺語貼文所設立的中繼器。

訂閱連結:https://relay-tw.seediqbale.xyz/inbox

喵家中继

有許多使用簡體中文的實例。

訂閱連結:https://relay.nya.one/inbox

YUKIMOCHI Toot Relay Service

有許多使用日文的實例。

訂閱連結:https://relay.toot.yukimochi.jp/inbox

#FediBuzz Relay

可以依照興趣訂閱某個 tag 或是某個實例。

說明網址:https://relay.fedi.buzz/

後記

安裝後覺得 Fediverse 真的很有趣,像是 Threads 竟然也支援 ActivityPub 協議,我能夠在我的實例中追蹤 Threads 上的人。但是大部分的臺灣人 Threads 都不會開啟聯邦功能,我覺得很可惜。

另外,我同時我也遇到了一些問題,像是 misskey.io 這個最大的 Misskey 實例似乎沒有加入任何 Relay,所以除了追蹤 misskey.io 上的人以外很難讓這個實例的貼文出現在我的實例中。雖然有 #FediBuzz Relay 可以用,但是它是透過機器人轉發的方式將貼文傳進實例中,我不是很喜歡。