在 Proxmox VE 的 LXC 中安裝 Misskey 實例
前言
以前就知道有 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 協議進行。
安裝步驟
網域連線設定
因這部分不是本篇文章重點,只簡單帶過。
-
設定 DNS 紀錄
需要有自己的網域,並且設定 A 或是 AAAA 紀錄將網域指向家中 IP。以 CloudFlare 為例:
(也可以使用 DDNS)
-
設定通訊埠轉發
需要進到路由器後台,將 80 與 443 port 轉發到安裝 Caddy 的 LXC。 -
設定 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
-
下載範本
到儲存 CT 範本的地方,點範本進入範本下載頁面。
-
搜尋 debian
在右上角搜尋框搜尋debian後,選擇debian-12-standard後,點擊下載。
-
按下
建立 CT按鈕
按下右上角的建立 CT按鈕以建立一個新的 LXC。
-
依照指引建立 LXC
- 範本:
debian-12-standard - 磁碟:10 GB 以上(視使用情況可能會需要更多空間)
- CPU:二核心以上
- RAM:4096 MB 以上
其他維持預設即可。
- 範本:
-
進入 LXC
從 PVE 管理網頁進入 LXC 終端,或者是從 PVE 的終端輸入pct enter <ID>。可以進入就是安裝完成。
環境設定
以下指令皆在 LXC 中執行。
修復 locale 設定
在進入容器時若有看到以下警告的話,就要安裝 locale 解決。若沒有解決,後續安裝環境會有問題。
1 | bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) |
-
安裝 locale 套件
執行以下指令:1
2apt update
apt install -y locales -
啟用 en_US.UTF-8
執行以下指令:1
sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
-
產生 locale
執行以下指令:1
locale-gen
應該會看到以下:
1
2
3Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete. -
設定預設 locale
執行以下指令:1
update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
-
重開容器與驗證
重開後就會看到警告消失了。輸入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 軟體包。為了防止錯誤所以將一併安裝。
-
安裝 Node.js
執行以下指令安裝:1
2curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs安裝後執行以下指令確認版本:
1
node -v
-
安裝 pnpm
執行以下指令啟用 corepack:1
corepack enable
接著執行以下指令安裝 pnpm v10:
1
corepack prepare pnpm@10 --activate
安裝後執行以下指令確認版本:
1
pnpm -v
-
安裝 PostgreSQL
執行以下指令安裝:1
apt install -y postgresql postgresql-contrib
執行以下指令啟動:
1
systemctl enable --now postgresql
安裝後執行以下指令確認版本:
1
psql --version
-
安裝 Redis
執行以下指令安裝:1
apt install -y redis-server
執行以下指令啟動:
1
systemctl enable --now redis-server
安裝後執行以下指令測試,應該會看到
PONG:1
redis-cli ping
-
安裝 FFmpeg
執行以下指令安裝:1
apt install -y ffmpeg
安裝後執行以下指令確認版本:
1
ffmpeg -version
-
安裝 build-essential
執行以下指令安裝:1
apt install -y build-essential
-
安裝 git
執行以下指令安裝:1
apt install -y git
安裝 Misskey
-
建立 misskey 使用者
執行以下指令建立:1
2adduser --disabled-password --disabled-login misskey
usermod -s /bin/bash misskey -
建立 PostgreSQL 使用者與資料庫
執行以下指令切換 postgres 使用者:1
su - postgres
執行以下指令建立使用者:
1
createuser misskey
執行以下指令進入 psql:
1
psql
接著輸入 SQL 指令,並記得改密碼:
1
2
3
4
5
6
7ALTER 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
-
安裝 Misskey
執行以下指令切換 misskey 使用者:1
su - misskey
接著執行以下指令以下載 misskey 並安裝:
1
2
3
4
5git 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 -
建立 misskey 設定檔
執行以下指令:1
cp .config/example.yml .config/default.yml
-
編輯 misskey 設定
執行以下指令開啟編輯器編輯:1
nano .config/default.yml
確認以下設定都有改到:
1
2
3
4
5
6
7
8
9
10
11
12url: https://<your domain>
db:
host: localhost
port: 5432
db: misskey
user: misskey
pass: <剛剛設定的密碼>
redis:
host: localhost
port: 6379確認後按
Ctrl + S儲存,再按Ctrl + X退出。 -
建構和初始化 misskey
執行以下指令:1
2NODE_ENV=production pnpm run build
pnpm run init完成後執行以下指令切回 root 使用者:
1
exit
-
建立 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退出。 -
重新載入 systemd 並啟用 misskey 服務
執行以下指令:1
2systemctl daemon-reload
systemctl enable misskey -
啟動 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 或是某個實例。
後記
安裝後覺得 Fediverse 真的很有趣,像是 Threads 竟然也支援 ActivityPub 協議,我能夠在我的實例中追蹤 Threads 上的人。但是大部分的臺灣人 Threads 都不會開啟聯邦功能,我覺得很可惜。
另外,我同時我也遇到了一些問題,像是 misskey.io 這個最大的 Misskey 實例似乎沒有加入任何 Relay,所以除了追蹤 misskey.io 上的人以外很難讓這個實例的貼文出現在我的實例中。雖然有 #FediBuzz Relay 可以用,但是它是透過機器人轉發的方式將貼文傳進實例中,我不是很喜歡。







