Ubuntu版Misskeyインストール方法詳説

この記事では、一般的なUbuntuサーバーにMisskeyインスタンスを構築する方法について解説します。

Misskeyインスタンスを構築するほかの手段についても記事がありますので、そちらも併せてご覧ください。

インストール方法詳説は旧joinmisskeyから移植した記事なので、文語体で書かれています。後ほど直しますが、ひとまずご了承ください。

はじめに

この記事では、リポジトリに同梱されている『Misskey構築の手引き』 (setup.md) を基に、一般的なUbuntuサーバーへMisskeyをインストールし公開する方法の一挙手一投足を解説する。

Bashのコマンド入力、いくつかの設定ファイルの編集、そしてブラウザの操作だけで設定が完了するようにしている。インストールするソフトウェアについて簡単に説明しているが、気にする必要はない。

大まかな流れは上の目次をクリックし展開することで確認できる。

この記事では、具体性を重視し、特定の環境に特化した記述をしている。
OSの違い、Misskey本体や依存するソフトウェアのバージョンアップで変わってしまった部分等があるかもしれないが、ご容赦いただきたく思う。

わからない単語については、『「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典』 で調べて分かった気になってほしい。

環境と条件

  • OSはUbuntu 20.04.1 LTSを利用する。
  • ハードウェア要件としては、CPUは最近のものなら最小限で動く。アーキテクチャはamd64として解説を進める。
    メモリは2GB程度あればよい。
  • 独自のドメインを購入し、CloudFlareを使用する。
    • ドメインはGoogle Domainsなどで予め用意しておくこと。
  • ここではドメインをexample.tldとして解説を進めるので、自分が買ったドメインに適宜置き換えて読むこと。

nanoの使い方

今回はテキストエディターにnanoを使う。次のように起動する。

nano /path/to/file

一般的な矢印ボタンやHome/Endなどを利用してカーソルを移動できる。

終了はCtrl+Xで、変更を保存するか聞かれた場合Y(Yes)を入力しEnterすると保存できる。

下部にコマンド一覧が表示されるので、^CtrlM-Altと読み替えて参考にしよう。

ユーザーの作成

Misskeyはrootで実行しない方がよいため、専用のユーザーを作成する。

adduser --disabled-password --disabled-login misskey

基本的なソフトウェアのインストールと設定

基本的なソフトウェアのインストールを行う。

Node.js

Node.jsは、サーバーサイドJavaScript環境であり、Misskeyの基本的な実行環境である。

apt install -y curl
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
apt install -y nodejs

Node.jsがインストールされたので、バージョンを確認する。

node -v

v16.x.xなどと表示されればOK。v8.x.xのように低いバージョンが表示された場合は、正しくインストールが行えていないため、サーバーを再起動してもう一度インストールし直すなどしてみよう。

PostgreSQL

PostgreSQLは、オブジェクト関係データベース管理システムであり、Misskeyの種々のデータを保存するために必要不可欠なソフトだ。

インストール

シェルスクリプトを実行し、最新バージョンをインストールしよう。

wget https://salsa.debian.org/postgresql/postgresql-common/raw/master/pgdg/apt.postgresql.org.sh
sh apt.postgresql.org.sh -i -v 13

systemctlでデーモンの状態を確認。

systemctl status postgresql

activeならOK。

ユーザーとデータベースの作成

psqlを起動。

sudo -u postgres psql

postgresユーザーのパスワードを変更する。ここではhogeとしているが、当然ながら自分で考えて設定すること。

alter role postgres with password 'hoge';

データベースを作成。データベース名をmk1としている。

create database mk1;
exit

Redis

Redisは、NoSQLのインメモリデータベースソフトであり、データベースや連合との通信を管理するなどのために必要だ。

add-apt-repository ppa:chris-lea/redis-server
    (Enterを押す)
apt update
apt install -y redis-server
systemctl start redis-server
systemctl enable redis-server

systemctlでデーモンの状態を確認。

systemctl status redis-server

activeならOK。

nginx

nginxは、主としてリバースプロキシに用いられるWebサーバーソフトである。Misskeyには必須ではないが、キャッシュ等をするとパフォーマンスが向上したり、httpからhttpsへの転送などをするために、インストールしておこう。

nginx.orgのドキュメント http://nginx.org/en/linux_packages.html#Ubuntu に従ってインストールする。

apt install -y curl gnupg2 ca-certificates lsb-release
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
gpg --dry-run --quiet --import --import-options show-only /tmp/nginx_signing.key

このとき出力に 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 とあるか確認する。

sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
apt update
apt install -y nginx

systemctlでデーモンの状態を確認。

systemctl status nginx

activeならOK。そうでなければ、次のコマンドを実行。

systemctl start nginx
systemctl enable nginx

http://localhost にアクセスし、Welcome to nginx!と表示されればOK。

curl http://localhost

その他

Git(バージョン管理ソフト)およびbuild-essential(Misskeyのビルド時に必要)をインストールする。

apt update
apt install -y git build-essential

追加の設定とインストール

サーバーをインターネットに公開する準備をする。

ファイヤーウォール

今回は、ファイヤーウォールとしてufwを使用する。

次では、接続許可をホワイトリスト形式とし、22番SSHポートを接続回数制限を設けながら開放、80番HTTPポート及び443番HTTPSポートを開放とした。

ufw enable
ufw default deny
ufw limit 22
ufw allow 80
ufw allow 443

ufwのステータスを確認しておく。

ufw status

systemctlで永続化する。

systemctl enable ufw

CloudFlare

CloudFlareは、自分のドメインに対してDNSサーバー・リバースプロキシ・CDNをいっぺんに提供してくれるたいへん便利なサービスである。
CloudFlareを経由せずにサーバーを公開することも可能だが、たいへん便利なので導入することをお勧めする。

CloudFlareにサインアップ し、購入したドメインを案内に従って登録する。
DNSの登録画面でサーバーのIPアドレスを入力しておくとよい。
ドメインを購入した所によっては適用に3日程度かかる場合がある。

Certbot (Let’s Encrypt) の設定

HTTPS・WSS通信に使用する証明書をCloudFlareを使う方式でLet’s Encryptから取得する。

certbotとCloudFlareプラグインをインストール

apt install -y certbot python3-certbot-dns-cloudflare

CloudFlareの情報を記載した設定ファイル/etc/cloudflare/cloudflare.iniを作成する。

mkdir /etc/cloudflare
nano /etc/cloudflare/cloudflare.ini

dns_cloudflare_email(下の例では[email protected])にはCloudFlareで登録しているメールアドレスを設定する。

dns_cloudflare_api_key(下の例のxxx...)は、次の手順で取得できる。

  1. ブラウザでCloudFlareにログイン
  2. 右上をクリック
  3. My Profileを選択
  4. API Tokensを選択
  5. Global API KeyのViewを選択
  6. パスワードを入力しreCAPTCHAを解除、Viewを選択
dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxx

これを保存し、パーミッションを600に設定。

chmod 600 /etc/cloudflare/cloudflare.ini

準備ができたのでコマンドを実行する。途中の2箇所のexample.tldは自分のものに置き換えること

certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d example.tld -d *.example.tld --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 50

Congratulations!と表示されたらOK。生成された.pemファイルのパスは今後使うので記録しておくこと。

cronの設定はインストールと同時に行われているため不要。

Misskeyのインストール

これで前準備はあらかた終わったので、Misskeyを準備していく。

setup.mdの3.

を順に実行する。なお、一部アレンジを加えている。

misskeyユーザーに変更。

su - misskey

Gitでファイル類を展開。

git clone -b master git://github.com/misskey-dev/misskey.git
cd misskey
git checkout master

必要なnpmパッケージをインストール。

npx yarn install

Misskeyを設定する

default.yml

設定ファイル.config/default.ymlを作成。

nano .config/default.yml

次の内容を貼り付け、適宜置き換える。設定値の変更が必要な箇所はで、これまでの流れの中で設定した値を用いる箇所はで示した。
この設定ファイルはYAML形式で書かれており、行頭のスペースの数などを間違えるとMisskeyが動かないので、特に注意すること。

設定できる値と記述方法は.config/example.yml

に書かれている。

# ● Misskeyを公開するURL
url: https://example.tld/

#   ポートを3000とする。
port: 3000

# ● PostgreSQLの設定。
db:
  host: localhost
  port: 5432
  db  : mk1      # 〇 PostgreSQLのデータベース名
  user: postgres # 〇 PostgreSQLのユーザー名
  pass: hoge     # ● PostgreSQLのパスワード

#   Redisの設定。
redis:
  host: localhost
  port: 6379

#   IDタイプの設定。
id: 'aid'

指定できたら保存する。

nginxの設定

nginxの設定を行う。

ルート権限で行う。

exit

Misskey付属の設定ファイル docs/examples/misskey.nginx/etc/nginx/sites-available/misskey.confとして保存し、nanoで開く。

cp /home/misskey/misskey/docs/examples/misskey.nginx /etc/nginx/conf.d/misskey.conf
nano /etc/nginx/conf.d/misskey.conf

次の部分を自分のものに書き換える。

  • 18行目と30行目のドメイン名
  • 34-35行目の証明書へのパスをCertbotで取得したものに

変更を保存する。

設定ファイルがきちんと機能するか確認。

nginx -t

OKならば、nginxデーモンを再起動。

systemctl restart nginx

ステータスを確認。

systemctl status nginx

activeであればOK。

Misskeyのビルド

misskeyユーザーにログインし直す。

su - misskey

ビルドをする。yes we can…

cd misskey
NODE_ENV=production npm run build

サーバーでビルドできない場合

サーバーのマシンスペックが低すぎてビルドが不可能な場合、ローカル環境(Windows、Macでもよい)でビルドしSFTPやSCPで転送することでも対応できる。
ビルドにはメモリが2GB程度必要と言われている。

  1. サーバーと同じバージョンのNode.jsをインストール
  • Windowsではnが利用できないので注意。
  1. Git clone、もしくはGitHubからMisskeyのソースをダウンロードする
  2. サーバーと同様の.config/default.ymlを作成
  3. npx yarn install
  4. NODE_ENV=production npx yarn build
  • PowerShellでは変数指定がこの方法でできないので、以下のようにする:
    $env:NODE_ENV="production"
    npm run build
  1. 生成されたbuiltフォルダーをサーバーにコピー

データベースの初期化

npm run init

Misskeyを起動する

NODE_ENV=production npx yarn start

Now listening on port 3000 on http://example.tld と表示されたら、設定したURLにアクセスする。

Misskeyのウェルカムページが表示されるはずだ。

アカウントの作成、ノートの作成やファイルのアップロードといった一通りの操作が正しく行えるか確認しよう。

アクセスできない場合

CloudFlareのDNSを確認する

CloudFlareのDNS設定が正しいIPアドレスになっているかもう一度確認しよう。

ルーターの設定を確認する

自宅サーバーの場合、ルーターがサーバーと外部との80ポート・443ポートの通信を許可する設定になっているかどうか確認しよう。

Misskeyのデーモンを作成

いったんCtrl+Cでプロセスをキルし、Misskeyをデーモンで起動する設定をしよう。

ルート権限で行う。

exit

/etc/systemd/system/misskey.serviceを作成する。

nano /etc/systemd/system/misskey.service

次の内容を貼り付け、保存する。

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/local/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

systemdを設定し、misskeyデーモンを開始。

systemctl daemon-reload
systemctl enable misskey
systemctl start misskey

systemctlでデーモンの状態を確認。起動に少し時間がかかるため、15秒程度待ってからのほうが良い。

systemctl status misskey

activeならOK。

これでMisskeyのインストールはほぼ完了だ。

ドライブの保存先の設定(オプション)

初期設定では、ドライブのファイルはワーキングディレクトリのfilesディレクトリ(つまり/home/misskey/misskey/files)に直接保存される。
サーバーのストレージが限られている場合、他の場所に保存する必要がある。

オブジェクトストレージを使用する

VPSはディスク容量が制限されており単価が高いため、オブジェクトストレージの利用は必須に近い。

インスタンス > 設定 > オブジェクトストレージでオブジェクトストレージを設定できる。

公式インスタンスのmisskey.ioでは、オブジェクトストレージにDigitalOcean Spacesを利用している。
こちらのリンク https://m.do.co/c/bb9c27bc1a07 からDigitalOceanに登録すると、$50分のクレジットがもらえるのでぜひ登録してみてほしい。
クレジットカードを持っていない方も、PayPalアカウントで登録できる。

外部ストレージにシンボリックリンクを張る

自宅サーバーなどでオブジェクトストレージを契約するほどではないものの、ストレージの容量が足りない等の理由で保存先を変更したい場合がある。
このような場合、filesディレクトリとしてシンボリックリンクを作ることで外部ストレージ等にファイルを保存できる。

コメントを残す

メールアドレスが公開されることはありません。

PAGE TOP