MisskeyをDocker+Cloudflare+Xserver+WSLで建てた際の覚書

鯖構築について勉強不足な筆者が、色々なサイトを参考にMisskeyの鯖構築をした際の覚書です。
特有の内容も含みますが、一般的な知識の方が多いかと思います。
___
先に環境構成について列挙し、
次に以下について簡潔に書いていきます。
・参考にしたサイトの紹介
・躓いたときの対処内容

記載内容についての質問はお気軽にどうぞ
記載になくても、手順中にある内容なら答えられるかもしれません。
# 環境構成 
| ソフトウェア | バージョンや備考 |
|:-|:-|
| WSL2(Ubuntu)   | windows11、導入手順は省略  |
| Docker  | 導入手順は省略  |
| └Misskey   | 13.13.2  |
| └redis  | 7-alpine  |
| └postgreSQL  | 15-alpine  |
| └nginx  | 1.19  |
| └Cloudflare Tunnel  | 無料プラン、契約手順は省略 |
| Xserverサーバー  | 10日間お試しレンタル、契約手順は省略 |
| Xserverドメイン  | ドメインの取得、契約手順は省略 |
| FFFTP  | ファイル編集後のアップロードに使用 |


# 構築手順
大筋はこちらのサイトを参考にさせていただきました。
[MisskeyをDocker Compose+Cloudflare Tunnelでサクッと建てる](https://zenn.dev/hrko/scraps/29df6c7ac02f03)
こちらを参照の上で環境を同一にしないと、手順の通じない点が多いかと思います。

compose.ymlの設定値は```db:```と```tunnel:```の間に```nginx:```を追記しました。
```compose.yml
~
  nginx:
    container_name: "nginx"
    image: nginx:1.19
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
~
```

___
前後に必要な手順があったため下記に紹介します。
他に思い出したら加筆します。
* docker-composeの導入
[Ｗindows で ＷSL2 (Ubuntu) ＋ docker compose 環境構築](https://footloose-engineer.com/wsl2-ubuntu-docker-compose-setup/#index_id3)

* FFFTPの導入とWSLとの接続設定
[UbuntuでFTPを使えるようにする](https://blackbird-blog.com/ubuntu-ftp-setup)


# 確認ポイントと解決手順

### 1.DNSレコードの編集が完了していること
[【XserverVPS】DNSレコードの編集](https://vps.xserver.ne.jp/support/manual/man_server_dns.php)
こちらを参考にDNS設定の編集が必要ですが、XserverVPSを契約していない場合、手順通りに設定ページへアクセスすることが出来ません。
この場合、Xserverレンタルサーバーのサービス管理ページから、ドメインを選択することで、編集画面に遷移することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/419cd2d1-db9a-32dc-61ff-4170080a8ef4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/7e9e1b82-7db7-dcb2-05c0-d87ce52769d5.png)

ネームサーバーの設定値は、Cloudflareを参照して編集し、設定変更確認のリクエストを送信してください。
最大24時間かかる旨の記載はありますが、私の場合は数分でメールが届きました。


### 2.レンタルサーバーとのSSH接続
今回は使用はしませんでしたが、レンタルサーバーとTeratermを使ってSSH接続できるように設定しました。
ログ確認等に役立つかもしれません。
ポートの設定と、認証にひと手間あるため注意が必要です。

SSH設定を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/06339fcd-3f32-205a-276a-e3683f03e8c7.png)
パスフレーズを入力して、秘密鍵を生成してローカルに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/c0fe3324-287c-9c98-6ea1-a9635547722e.png)
Teratermの新しい接続でホストとTCPポート10022を入力し、
ユーザ名、パスフレーズの入力の上、秘密鍵にローカルの秘密鍵ファイルを設定することで接続できます。
（参照の際、ファイル形式を「秘密鍵ファイル」から「すべてのファイル」にする必要があります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/05dbd8ec-e25e-a6f2-bc08-34dcfb9cde87.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/f3ac6236-ba24-add9-bc29-98a9def4d46c.png)

### 3.docker起動コマンド ```docker compose up -d``` 実行時の権限確認
起動時点でファイルとフォルダのアクセス権限が適切でない場合があります。
私は下記を実行しました。
（一括で読み/書き/実行を可能 [777] に指定しています。厳密にはあまりよくないかもしれません。）
```
cd ./misskey
ll -s
sudo chmod 777 data data/db data/misskey data/redis
sudo chmod 777 compose.yml default.yml
ll -s
```

### 4.docker起動コマンド ```docker compose up -d``` 実行後のログ確認

各コンテナのステータスを確認し、作成されたコンテナ名 ( NAMES ) を参照します。
```
$ sudo docker container ls 
    CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS                  PORTS                                       NAMES
    XXXXXXXXXXXX   misskey/misskey:13.13.2   "/usr/bin/tini -- pn…"   17 hours ago   Up 17 hours (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   misskey-misskey-1
    XXXXXXXXXXXX   nginx:1.19                "/docker-entrypoint.…"   42 hours ago   Up 17 hours             0.0.0.0:80->80/tcp, :::80->80/tcp           nginx
    XXXXXXXXXXXX   cloudflare/cloudflared    "cloudflared --no-au…"   44 hours ago   Up 17 hours                                                         misskey-tunnel-1
    XXXXXXXXXXXX   postgres:15-alpine        "docker-entrypoint.s…"   44 hours ago   Up 17 hours (healthy)   5432/tcp                                    misskey-db-1
    XXXXXXXXXXXX   redis:7-alpine            "docker-entrypoint.s…"   44 hours ago   Up 17 hours (healthy)   6379/tcp                                    misskey-redis-1
```
次のコマンドで各コンテナのログを参照することができます。任意の行数を指定してください。
```
sudo docker logs --tail [行数] [コンテナ名]
```

私は misskey-misskey-1 のパーミッションエラーに上記3.の対処を実施しました。
また、misskey-db-1 のログにSQLエラーが吐かれていたため対処が必要になっていた気がしますが、こちらは対処内容を紛失したため省略します…。

### 5.アクセスログの取得
私はリクエストが到達していること、ドメインの設定、トンネルの設定が誤っていないことの確認に使用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/fb4b8a04-b963-b6cf-27ee-4124c012aea0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105906/55c26dbd-8537-4df5-974c-6703e70168b7.png)


以上です。