Fediverse入門！DebianにMisskey入れてみた


とにかくFediverseはじめてみようという趣旨です。

OSCでFediverse関連ブースが出てたので、気になっただけで何もせず放置していたMastodonをすっ飛ばして、いきなりMisskeyを使ってみようという背景です。

## Fediverse？Misskey？

Fediverseは、複数の独立したサーバーが連携する分散型ソーシャルメディアです。ユーザーは異なるサーバー間でも交流できます。特にMastodonが代表的です。

Misskeyは、分散型ソーシャルメディアの一つで、Fediverseと連携可能なプラットフォームです。多様なリアクションやカスタマイズ性が特徴です。

## 環境について

Debian（バージョンは13 Trixie）を使います。
今回はdebootstrapでminbaseをインストールしたものに、適宜NetworkManagerやカーネルをインストール済みのイメージを使います。

仮想マシンはAArch64のKVMです。

```
user@localhost:~$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux trixie/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=trixie
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

```
user@localhost:~$ sudo virt-what 
kvm
```

## 着手

まずこのマークダウンを参考に適宜オリジナリティーを交えつつすすめていきたいと思います。

https://github.com/misskey-dev/misskey-hub/blob/main/src/en/docs/install/manual.md

### 依存関係のインストール

早速つまづきポイントですnodejsのバージョンがDebianのtestingでもそんなに新しくないです。

> *あたらしいnodejs*
> *欲しい！*

せっかくDebianなのでDebianらしくunstableから前借りします。

#### sid(unstable)の前借り設定＋nodejsのインストール

unstableのリポジトリを有効にします。

```:/etc/apt/sources.list（抜粋）（この行を追加）
deb https://deb.debian.org/debian sid main contrib non-free non-free-firmware
```

unstableのリポジトリの優先順位を下げます。
これにより、全てのパッケージがsidのものに置き換えられてしまうのを防ぎます。

```:/etc/apt/preferences.d/90sid（この内容でファイルを追加）
Package: *
Pin: release n=sid
Pin-Priority: 80
```

新しいnodejsのインストールします。

```bash:ターミナルで実行
sudo apt-get update
sudo apt-get install -t sid nodejs npm
```

```:node -v
v20.13.1
```

新しいのが入りました✨

#### 残りのインストール

```bash:ターミナルで実行
sudo apt-get install redis postgresql postgresql-contrib ffmpeg build-essential git corepack
```

corepackを有効化します。corepackはyarnやpnpmを１つづつインストールしなくてもyarnやpnpmを使うことができるツールです。

```:ターミナルで実行
sudo corepack enable
```

### ~~ユーザー作成~~

ユーザーはmisskeyで作りました。（が、結局このユーザーを使わなくても出来ました……）

```bash
sudo useradd -U -r -s /usr/sbin/nologin -M misskey
```

### ビルド

さて主たる話題のビルドです！GitHubから取ってきてビルドするだけです。

```bash:ターミナルで実行
git clone --recurse-submodules --depth=1 -b master https://github.com/misskey-dev/misskey
cd misskey
git submodule update --init
pnpm install --frozen-lockfile
cp .config/example.yml .config/default.yml
NODE_ENV=production pnpm run build
```

### DB準備

```bash
sudo -u postgres psql
```

データベースを作って、パスワード付きのユーザーを作って、そのユーザーにそのデータベースの全部を許可します。
パスワードもデータベースもユーザー名も全部misskeyにする場合は↓こんな感じです。

```sql:↑のコマンドの中で作業
CREATE DATABASE misskey WITH encoding='UTF-8';
REATE USER misskey WITH encrypted password 'misskey';
GRANT ALL PRIVILEGES ON DATABASE misskey TO misskey;
ALTER DATABASE misskey owner TO misskey;
\q
```

### 初期設定

`.config/default.yml`を適宜変更します。特に`db`のところにあるパスワードを変えておくのを忘れると起動しませんでした。

データベース、パスワード、ユーザー名、全部misskeyの構成ではこんな感じの変更でした。

```diff:
diff --git a/.config/example.yml b/.config/default.yml
index 7fea929..e794357 100644
--- a/.config/example.yml
+++ b/.config/default.yml
@@ -102,8 +102,8 @@ db:
   db: misskey
 
   # Auth
-  user: example-misskey-user
-  pass: example-misskey-pass
+  user: misskey
+  pass: misskey
 
   # Whether disable Caching queries
   #disableCache: true
```

あとはコマンドを実行します。

```bash
pnpm run init
```

### 起動

あとは起動するだけです。

```bash:ターミナルで実行
NODE_ENV=production pnpm run start
```

ポートは3000でLISTENするようです。

![image_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782801/7f670ff6-4f8b-59fc-4be8-6873d8f59eb2.png)

動いた✨

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782801/d84c14cc-85fb-fde9-487a-f1a84c4c503e.png)

つぶやけた✨

大成功🎉