Help us translate

This document is translated by the community. You can contribute on Crowdin. We appreciate your cooperation 🙏.

Misskey install shell script v3.0.0

This shell script was made to make the installation of Misskey easy!

いくつかの質問に答えるだけで、UbuntuサーバーへMisskeyを簡単にインストールできます!

また、アップデートスクリプトもあります。

v12の場合はこちら

Requirements

  1. Domain
  2. Ubuntu server
  3. Cloudflare account (recommended)
Danger

Do not recreate the database with the domain/hostname of the server once you have started using it!

Let's Encryptの認証を試行できる回数が少ないので、サーバーのネットワークやDNSの設定を十分確認してからインストールを開始してください。

Cloudflareの設定

Cloudflareを使う場合、Cloudflareのドメインの設定を完了してからインストールを開始するようにしてください。
ネームサーバーの適用には最大で3日程度かかる場合があります。

また、nginxとCloudflareを設定する場合、Cloudflareの設定画面にて、

  • DNSを設定してください。
  • SSL/TLS設定にて、暗号化モードを「フル」に設定してください。

操作

1. SSH

サーバーにSSH接続します。
(サーバーのデスクトップを開いている方はシェルを開きましょう。)

2. 環境を最新にする

すべてのパッケージを最新にし、再起動します。

sudo apt update; sudo apt full-upgrade -y; sudo reboot

3. Installation

SSHを接続しなおして、Misskeyのインストールを始めましょう。

ただ、インストール前にTipsを読むことを強くお勧めします。

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh

example.comは自分のドメインに置き換えてください。

4. Update

アップデートのためのスクリプトもあります。

アップデートスクリプトは、環境のアップデートは行いません。CHANGELOG(日本語)およびGitHubのリリース一覧(英語)を参考に、適宜マイグレーション操作を行なってください。

まずはダウンロードします。

wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/update.ubuntu.sh -O update.sh

アップデートしたいときにスクリプトを実行してください。

sudo bash update.sh
  • systemd環境では、-rオプションでシステムのアップデートと再起動を行うことができます。
  • docker環境では、引数に更新後のリポジトリ名:タグ名を指定することができます。

動作を確認した環境

Oracle Cloud Infrastructure

このスクリプトは、Oracle Cloud InfrastructureのAlways Freeサービスで提供されている2種類のシェイプのいずれにおいても動作します。

  • VM. Standard. E2.1. Micro (AMD)
  • VM. Standard. A1. Flex (ARM) 1OCPU RAM6GB or greater

iptablesを使うようにしてください。

Issues & PRs Welcome

上記の環境で動作しない場合、バグの可能性があります。インストールの際に指定された条件を記載の上、GitHubのIssue機能にてご報告いただければ幸いです。

上記以外の環境についてのサポートは難しいですが、状況を詳しくお教えいただければ解決できる可能性があります。

機能の提案についても歓迎いたします。

Tips

選択肢の選び方や仕様についてなど。

Systemd or Docker?

v1から、インストールメソッドにsystemdとDockerとを選べるようにしました。

Dockerと言っても、MisskeyだけをDockerで実行し、RedisやPostgresなどはホストで直接実行します。
docker-composeですべての機能を動かす方法については、mamemonongaさんが作成したこちらの記事がおすすめです。

Docker Hubイメージを使う設定であれば、Misskeyのビルドが不要になるため、一番お勧めです
ただし、マイグレーションは必要なので、アップデート時にMisskeyを使えない時間がゼロになるわけではありません。
また、Misskeyのビルド環境を準備しない(git pullしない)ので、フォークを動かしたくなった時に設定が面倒になります。

ローカルでDockerをビルドする方式は、パフォーマンス面で非推奨です。

systemdは、Docker Hubにイメージを上げるまでもないものの、フォークを使いたい場合にお勧めです。

お勧めする順番は次の通りです。

  1. Docker Hub
  2. systemd
  3. Dockerビルド

nginxを使うかどうか

以下のケースに該当する場合を除き、インターネットとMisskeyの仲立ちをするリバースプロキシとしてnginxの採用をおすすめしています。

  • ユーザは自分のみ(いわゆるお一人様サーバー)or ごく少数
  • ロードバランサー等nginxのリバースプロキシ・キャッシュ機能を他の手段で賄う用意がある(上級者向け)

nginxをリバースプロキシとして採用することにより、画像ファイルなどの静的コンテンツをキャッシュしサーバーリソースの浪費を抑えることが出来ます。 また、nginxにはキャッシュが無い状態での大量アクセスを上手くコントロールする機能が搭載されていますので、Misskeyの負荷増大を抑える効果を期待できます。

設定例はnginxの設定ページにて記載しています。

Add more swaps!

スワップを設定している場合、メモリが合計で3GB以上でなければスクリプトが動作しないようになっています。

途中で失敗してまたスクリプトを実行する場合

万が一途中で失敗してもう一度スクリプトを動作させる場合、次のことに注意してください。

  • RedisやPostgresのインストールが終わっている場合、「install locally」はNoにしてください。
    host・port設定はそのままEnterを押します。 ユーザー名やパスワードは、前回実行した際に指定したものを入力します。

.envファイルについて

インストールスクリプトは、2つの.envファイルを作成します。
アップデートの際に使用します。

/root/.misskey.env

misskeyを実行するユーザーを覚えておくために必要です。

/home/(misskeyユーザー)/.misskey.env

systemdの場合に生成されます。
主にディレクトリを覚えておくのに使用します。

/home/(misskeyユーザー)/.misskey-docker.env

Dockerの場合に生成されます。
実行されているコンテナとイメージの番号を保存しています。
コンテナの番号はアップデートの際に更新されます。古いイメージは削除されます。

自分で管理する

インストール後、構成を変更する際に役立つかもしれないメモです。

"example.com"を自分のドメインに置き換えて読んでください。

Misskeyディレクトリ

Misskeyのソースは/home/ユーザー/ディレクトリとしてcloneされます。
(ユーザー、ディレクトリの初期値はともにmisskeyです。)

Misskeyディレクトリへは、以下のように移動するとよいでしょう。

sudo -iu ユーザー
cd ディレクトリ

もとのユーザーに戻るにはexitを実行します。

exit

systemd

systemdのプロセス名はexample.comです。
たとえば再起動するには次のようにします。

sudo systemctl restart example.com

journalctlでログを確認できます。

journalctl -t example.com

設定ファイルは/etc/systemd/system/example.com.serviceとして保存されています。

Docker

DockerはMisskeyユーザーでrootless実行されています。

sudo でMisskeyユーザーに入るときは、XDG_RUNTIME_DIRDOCKER_HOSTを変更する必要があります。

sudo -iu ユーザー
export XDG_RUNTIME_DIR=/run/user/$UID
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

# プロセス一覧を表示
docker ps

# ビルド (リポジトリ: local/misskey:latest)
docker build -t local/misskey:latest ./misskey

# docker run
docker run -d -p 3000:3000 --add-host=docker_host:10.0.0.1 -v /home/misskey/misskey/files:/misskey/files -v "/home/misskey/misskey/.config/default.yml":/misskey/.config/default.yml:ro --restart unless-stopped -t "local/misskey:latest"

# ログを表示
docker logs --tail 50 -f コンテナID

ワンライナーなら次のようにします。

sudo -u ユーザー XDG_RUNTIME_DIR=/run/user/$(id -u ユーザー) DOCKER_HOST=unix:///run/user/$(id -u ユーザー)/docker.sock docker ps

nginx

nginxの設定は/etc/nginx/conf.d/example.com.confとして保存されています。

Redis

requirepassとbindを/etc/redis/misskey.confで設定しています。

Q. アップデート後に502でアクセスできない

Dockerでは、起動後にマイグレーションをするため、すぐにアクセスできません。
マイグレーションが終わっているかどうか確認してみてください。

systemdの場合では、pnpm installに失敗している可能性があります。

Misskeyディレクトリで次の内容を実行し、もう一度アップデートを実行してみてください。

pnpm run clean-all

journalctlでログを確認すると、たいていre2が云々という記述が見当たります。

Q. 同じサーバーにもう1つMisskeyを建てたい

スクリプトは同じサーバーに追加でMisskeyをインストールすることは想定していません。
幾つかの設定が上書きされるか、途中でエラーになってしまうでしょう。