翻訳にご協力ください

このドキュメントはコミュニティによる翻訳です。ドキュメントの翻訳はCrowdinから行えます。ご協力をお願いします🙏

マニュアルインストール時のトラブルシューティング

2018年10月07日 / 2021年12月20日 最終更新 / 文責 aqz/tamaina

MisskeyInstallBattle参加者が増えましたが、それに伴い時期を追うごとに重軽傷者が増加しています。
この記事ではそのような負傷者を減らすため、過去に事故が起きてしまった個所の傾向と対策をわかりやすく解説します。

まず最初に、構築の手引きを熟読してください。

また、拙著のUbuntu向けsystemd版解説Oracle Cloud版詳細解説も参考までにお読みいただけると幸いです。

Ubuntu向けシェルスクリプトのお知らせ

Ubuntu向け解説はコピペばかりでつまらない!時間がかかる!とにかく面倒!

……あれ、コピペだけでできるなら、つまり完全自動化できるのでは?

というわけで、シェルスクリプトでほぼ全部やってくれるやつを作ってみました!
詳細と使用方法はこちらから! https://github.com/joinmisskey/bash-install#readme

ドメインの購入とCloudflareのセットアップ、サーバーの確保についてはご自身でご準備ください。

シェルスクリプトに不具合があれば製作者(aqz)にお知らせいただければと思います。

インストールとビルド

構築の手引きをよく読みましょう。

ImageMagick関連

ImageMagickは不要です!

ビルドが失敗する

Misskeyのビルドには、経験則上、最低でも2GBのメモリが必要となっています。
サーバーをスケールアップする手もありますが、お使いのPCでビルドしてサーバーにデプロイするという手もあります。

なんだかうまくいかない

  • 構築の手引きをよく読みましょう。
  • node.jsのバージョンが古いかも?
    • 新しめのバージョンにしましょう。
  • インストールやビルドの際にErrorとかWARNとかが出てくることがありますが、問題ない場合もあります。とりあえずnpm startして動作確認しちゃいましょう。
  • node-gypがインストールされていないかも?
    • apt install build-essentialを試す。
    • Windowsはこの記事も参考にしてみる。
  • これでもだめそうだったら、最初から構築の手引きの手順に従ってやり直してみてください。

バージョンアップ後に不具合が発生した

  • 構築の手引きおよびリリースノートをよく読みましょう。
  • Misskeyのバージョンアップ時にはしっかりpnpm installpnpm run migrateしてください。それでも直らない場合、pnpm run clean-all && pnpm installを試し、pnpm run build && pnpm run migrate && pnpm startしてみてください。
  • これでもだめそうだったら、最初から構築の手引きの手順に従ってやり直してみてください。

設定

構築の手引きをよく読みましょう。

.config/default.ymlで設定を行います。 .config/example.ymlをコピーし、コメントに従って記述します。

(YAML形式では、#から行末まではコメントとして扱われます。)

URLとポート番号

URLとポート番号のしくみは、少し分かりにくいと思います。

URL, ポートとTLS証明書の設定(Port and TLS settings)part A: example.ymlの解説

リビジョン番号85a0f69時点での.config/example.ymlに、「Port and TLS settings」として説明図付きで順に書かれていますので、それに沿って設定をしていきましょう。 本文の解説を日本語訳しながらやっていきます。

URLの設定

# Final accessible URL seen by a user.
# 最終的にユーザーがアクセスするURL
url: https://example.tld/

url: には、サーバーにブラウザでアクセスしたときアドレスバーに表示される(したい)URLを書きます。

ポートと証明書の設定


#   ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────
#### ポートと証明書の設定      ####################################
#
# Misskey supports two deployment options for public.
# Misskeyは2つのサーバー開設方法をサポートしています。
#

# Option 1: With Reverse Proxy
# 方法その1 リバースプロキシを挟む
#
#                 +----- https://example.tld/ ------------+
#   +------+      |+-------------+      +----------------+|
#   | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
#   +------+      |+-------------+      +----------------+|
#                 +---------------------------------------+
#
#   You need to setup reverse proxy. (eg. Nginx)
#   この方法では、リバースプロキシ(例: Nginx)をセットアップする必要があります。
#   You do not define 'https' section.
#   'https'セクション(後述)は設定せず、コメントアウトしたままにします。

# Option 2: Standalone
# 方法その2 スタンドアロン
#           (リバースプロキシを挟まず、nodeのプロセスで直接ユーザーからのアクセスを受ける)
#
#                 +- https://example.tld/ -+
#   +------+      |   +---------------+    |
#   | User | ---> |   | Misskey (443) |    |
#   +------+      |   +---------------+    |
#                 +------------------------+
#
#   You need to run Misskey as root.
#   この方法では、Misskeyをルート(の権限をもたせた状態)で実行する必要があります。
#   You need to set Certificate in 'https' section.
#   'https'セクション(後述)で証明書の設定を行う必要があります。
方法1 リバースプロキシを挟むとき
# To use option 1, uncomment below line.
# オプション1で設定する場合、以下の行をコメントアウトします → しました
port: 3000    # A port that your Misskey server should listen.

以上の3行は、リバースプロキシを挟むときの話です。 この例では、Misskeyはポート3000で通信します。 リバースプロキシでは、ローカル側の宛先にこのポート番号を指定します。

方法2 リバースプロキシを挟まないとき
# To use option 2, uncomment below lines.
# オプション2で設定する場合は、以下の6行をコメントアウトします → しました
port: 443

https:
  # path for certification
  key: /etc/letsencrypt/live/example.tld/privkey.pem
  cert: /etc/letsencrypt/live/example.tld/fullchain.pem

以上の8行は、リバースプロキシを挟まないときの話です。 ポート443(https)で直接ユーザーと通信します(ポート443を利用するのでMisskeyのプロセスにはルート権限が必要です)。

TLS証明書を別途取得し、取得した証明書のディレクトリをhttps:で設定します。 ここ書かれているのは、Let's Encryptでexample.tldに対する証明書を発行したときの例です。


URL, ポートとTLS証明書の設定(Port and TLS settings)part B: 全体像

example.ymlの解説文を省くと、default.ymlにおけるポートとTLS証明書の設定は以下のようになります。

方法1 リバースプロキシを挟むとき

url: https://example.tld/
port: 3000
# https:
#   # path for certification
#   key: /etc/letsencrypt/live/example.tld/privkey.pem
#   cert: /etc/letsencrypt/live/example.tld/fullchain.pem

方法2 リバースプロキシを挟まず直接通信するとき

url: https://example.tld/
# port: 3000
https:
  # path for certification
  key: /etc/letsencrypt/live/example.tld/privkey.pem
  cert: /etc/letsencrypt/live/example.tld/fullchain.pem

npm startやアクセス時によく遭遇するエラー

npm startでサーバーを立てられたものの、その後不具合に遭遇してしまう場合もあります。

まず、構築の手引きをよく読みましょう。

YAMLのエラーが出る

default.ymlの構文にミスがある可能性があります。 行頭に余分なスペースはありませんか?

redisに接続できない

redis-serverは起動していますか? 何らかの接続数の上限に達していませんか?

11.20.2より前のバージョンのMisskeyはredisのパスワードを解くことができません。以下の2点を確認してください。

  • redisにパスワードを設定しない。
  • default.ymlredis:pass:の行をコメントアウトする。

上部に「開発ビルドです」と書かれた赤いバーが表示される

サーバーを公開する場合は必ずproductionビルドを使いましょう。

製品ビルドにするには、環境変数がNODE_ENV=productionになるように設定しnpm run build && npm startします。

新規登録できない

APIに接続できないようです。 default.ymlの冒頭のurl:が正しく設定されているか確認しましょう。 Node.jsのバージョンや、インストールの設定ももう一度よく確認しましょう。

また、正しくdefault.ymlが書かれていますか?

タイムラインの表示に問題が発生する、リアルタイムでTLが更新されない

タイムラインの読み込みに失敗する場合、mongoDBやPostgreSQLのバージョンが古い可能性があります。 PostgreSQLはなるべくv13にしてください。

redisの接続も確認した方がよいでしょう。 → redisに接続できない? を参照

永遠に「再接続中」と右下に表示される、リアルタイムでTLが更新されない

プロキシを利用している場合、それがWebSocket通信を阻害している可能性が考えられます。

オブジェクトストレージ使用時、不具合が出る

オブジェクトストレージの権限の設定が厳しくなっている可能性があります。「ファイル(オブジェクト)が誰でも取得可能」なように権限を設定してみてください。 また、default.ymlをもう一度確認してみてください。

S3 example (with CDN, custom domain)

S3 example (with CDN, custom domain)は、AWSのデフォルトのドメインではなく独自ドメインでストレージを公開したい場合の設定です。 endpointと公開ドメインが同じサービスの場合はS3 exampleのようにbaseUrlは明記しなくてよく、さらにregionの概念がないサービスの場合はregionの行は必要ありません。

S3互換サービスでの設定

Misskeyではオブジェクトストレージの接続にaws-sdkを利用しています。 Amazon S3に互換性のあるオブジェクトストレージであれば利用できる可能性があります。

各サービス/ソフトウェアのドキュメントをよく読み、設定してみてください。

ローディングが終わらない

Cloudflare を使用している場合は、Rocket LoaderやAuto Minifyが有効になっていないか確認してください。有効になっている場合は無効にすることで解決する場合があります。


まったく解決しなかった場合

以下の順序を試してみてください。

  1. Misskeyのドキュメントをよく読む。
  2. Googleで検索してみる。
  3. MisskeyリポジトリのIssuesを検索してみる(同じエラーに遭遇している場合や、Misskeyのバグの可能性もあります)。
  4. 検索してどうしても見つからなかったら、専門家に質問してみてください。
    1. MisskeyのDiscordサーバーなどで聞いてみる
    2. 開発者(aqzやしゅいろ)にリプライやダイレクト投稿を送信して聞いてみる