Help us understand the problem. What is going on with this article?

Misskeyインスタンスを運用するとき躓きやすいところ

More than 1 year has passed since last update.

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

まず最初に、公式ドキュメント(setup.md)を熟読してください。

インストールとビルド

公式ドキュメント(setup.md)をよく読みましょう。

ImageMagick関連

ImageMagickは不要です!

ビルドが失敗する

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

なんだかうまくいかない

  • 公式ドキュメント(setup.md)をよく読みましょう。
  • node.jsのバージョンが古い
    • 新しめのバージョンにしましょう。
  • node-gypがインストールされていない
  • インストールやビルドの際にErrorとかWARNとかが出てくることがありますが、問題ない場合もあります。とりあえずnpm startして動作確認しちゃいましょう。
  • これでもだめそうだったら、最初から公式ドキュメント(setup.md)の手順に従ってやり直してみてください。

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

  • 公式ドキュメント(setup.md)をよく読みましょう。
  • Misskeyのバージョンアップ時にはしっかりnpm installしてください。それでも直らない場合、npm run cleanもしくはnpm run cleanallを試し、npm run build && npm startしてみてください。
  • node.jsのバージョンを変更した場合、npm rebuild && npm install && npm run buildしてみてください。
  • これでもだめそうだったら、最初から公式ドキュメント(setup.md)の手順に従ってやり直してみてください。

設定

公式ドキュメント(setup.md)をよく読みましょう。

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

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

URLとポート番号

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

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

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

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(, Caddy))をセットアップする必要があります。
#   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でサーバーを立てられたものの、その後不具合に遭遇してしまう場合もあります。

まず、公式ドキュメント(setup.md)をよく読みましょう。

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のバージョンや、インストールの設定ももう一度よく確認しましょう。

また、mongoDBとMisskeyの接続を確認しましょう。
mongodは起動していますか?正しくdefault.ymlが書かれていますか?

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

タイムラインの読み込みに失敗する場合、mongoDBのバージョンが古い可能性があります。
mongoDBはバージョン4以上になっていますか?

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

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

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

Caddy

Caddyなら、Caddyfileのproxywebsocketを追加します。(Caddyfile参考)

nginx

nginxなら、以下のようにconfを設定することで解消すると思います。

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {

    …

    location / {

        …

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

(参考: 1 2)

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

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

S3 example (with CDN, custom domain)

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

S3互換サービスでの設定

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

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

Google Cloud Storageの場合の設定例

drive:
  storage: 'db'
  storage: 'minio'
  bucket: bucket-name
  prefix: files
  config:
    endPoint: storage.googleapis.com
    region: us-west-2
    useSSL: true
    accessKey: XXX
    secretKey: YYY

(参考: #4643)


マイグレーション

v10 → v11

v11へのマイグレーション方法をよく読んで下さい。

v11内

migrationディレクトリの、一番最初に導入したバージョンで存在したスクリプト(.tsファイル)をすべて削除してください。

その他についてはv11へのマイグレーション方法をよく読んでください。

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

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

  1. Misskeyのドキュメントをよく読む。
  2. Googleで検索してみる(もっとも、これを読んでいる方は検索から来たものと思いますが...。検索結果には古いバージョンの記事も混じっているので注意しましょう。ツール > 期間指定で期間を指定すると吉)。
  3. MisskeyリポジトリのIssuesを検索してみる(同じエラーに遭遇している場合や、Misskeyのバグの可能性もあります)。
  4. Fedeloper Forumを検索してみる。
  5. 検索してどうしても見つからなかったら、専門家に質問してみてください。
    1. 開発者(しゅいろをはじめとするCollaborator)にリプライやダイレクト投稿を送信して聞いてみる
    2. Fedeloper Forumで質問する
tamaina
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした