TwitterがオワコンなのでMisskeyを自鯖で建てよう！

## 概要
2023年、Twitterはイーロンの炎に包まれた！
TwitterAPIは枯れ、TweetDeckが裂け、全てのツイッタラーが消滅したように見えた。
だが、ツイ廃は死滅していなかった！

# 下準備
## Misskeyを使うサーバを用意する
* Indigoがオススメ

https://web.arena.ne.jp/indigo/

* メモリ2GBプランなら月額814円で利用可能

## 独自ドメインを取得する
* 自分の場合ムームードメインで取得

https://muumuu-domain.com/

## サーバ下準備
### サーバを建てる
1. Indigoの場合、インスタンス名は建てる時しか決めれないので注意
1. 出来たらIPアドレスをコピーする
### DNS設定
1. 取得したドメインに、今回立てたインスタンスのIPを割り当てる
### Linuxの基礎設定（Indigoを前提に説明）
* 秘密鍵を指定し、IPアドレスで直接ログイン
* `$ ssh ubuntu@000.000.000.000 -i ~/.ssh/key/key`
### Userを作る
* Ubuntuアカウントだと攻撃の可能性があがるため

```
sudo useradd hirarira
sudo passwd hirarira
usermod -aG hirarira admin
```

https://kb.seeck.jp/archives/21578

### ssh設定
* `hirarira` アカウントしかSSHで入れないようにする
* `$ vim /etc/ssh/sshd_config`
    ```
    AllowUsers hirarira
    PermitRootLogin no
    port 2222
    ```

* 必ず今繋いでるターミナルからはログアウトせず、別のターミナルからSSH出来ることを確認
    1. ダメな時締め出されちゃうので
### GitHub設定
* `ssh-keygen` でKeyを作る
* GitHubのconfigのSSH and GPG Keysに公開鍵を登録しとく
* `~/.ssh/config` に以下を記述

```bash
Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/fafnir_github
```

* `$ ssh -T git@github.com` でログインを確認
### コンピュータ名を変更
```bash
sudo vim /etc/hostname
sudo hostnamectl set-hostname fafnir
sudo reboot
```
### Dockerのインストール
* `$ apt-get install docker`
### Docker-compose のインストール
```bash
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
docker compose version
```

* 参考

https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/

### Apacheの停止
* IndigoはデフォルトでApacheが入っているので消す
* `$ sudo apt-get remove apache2`

https://web.arena.ne.jp/support/vps-cloud/manual/apache.html

### SSL証明書を用意する
* みんな大好きLet's Encryptを利用
* CertBotを入れる
    * CertBot入れる過程で普通のNginxも入るのでこっちは止めておく
    * コンテナ化しなくても普通のNginxに以下の設定入れるでも良し

https://qiita.com/shin4488/items/8738e13b92143c88aab6

### Nginxコンテナを立てる

* NginxコンテナでSSL証明書を配置して、433ポートから3000ポートに転送させる
* `/etc/nginx/keys/` に発行した証明書を配置
* Nginxの `default.conf` はこんな感じで

```config
server {
    listen       80;
    server_name  (SERVER HOST);
    return 301 https://$host$request_uri;
}

server {
  listen       443 ssl;
  server_name  (SERVER HOST);
  ssl_certificate     /etc/nginx/keys/fullchain.pem;
  ssl_certificate_key /etc/nginx/keys/privkey.pem;

  location /status {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
  
  location / {
    proxy_pass http://127.0.0.1:3000/;
  }
}


server {
  listen 80 default_server;
  listen 443;
  server_name (Server IP Address);
  return 444;
}
```

### スワップ領域の解放
* やらないとdocker compose buildの段階でフリーズする（メモリ2GBだと）
* 手順はリンク先を参照

https://web.archive.org/web/20210618084223/https://yoneyan.blog/server/increase-swap-space-with-vps/

### Misskeyコンテナを立てる
* 公式がリファレンスを用意してくれてるので従う

https://misskey-hub.net/docs/install/docker.html

* `.config/default.yml` を編集

```bash
# Final accessible URL seen by a user.
url: https://example.tld/ # 運用するページのURLを設定
```

* Build


```
sudo docker compose build
sudo docker compose run --rm web pnpm run init
```

* 起動

```
sudo docker compose up -d
```

* アクセスできることを確認する

### 詰まった点
* 画像がアップロード出来ない
    * コンテナにrootでログインして共有フォルダのオーナーを `misskey` に変更
    * これで正しいやり方化は不明


## まとめ
* TweetDeckが復活したので急いでMisskey鯖立てなくても良かったかもしれん