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

この記事では、AWSをフルに使ってMisskeyインスタンスを構築する方法について解説します。

なお、1年以上前のAWSの情報であること、また筆者がAWSについてそこまで詳しくない状態でこの記事の作成にあたったことから、所々間違いがある可能性があります。間違いやご質問がありましたら、コメントにてお知らせください。

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

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

はじめに

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

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

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

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

なお、今回の記事では、一応、AWSの無料利用枠でできる範囲で動作させることができる。余談ではあるが、筆者がこの環境で自分だけで使うインスタンスを1年間動作させたところ、ELBやストレージ関係の足が出てしまう月があった。複数人で無料で動作させることは少し厳しいかもしれない。また、そもそも構成がフルスペックであるため、通常使用でこの構成で使うにはかなり足が出ると思う。特に、ロードバランサーが不要であればELBはコストがかかるので使わない方が無難だ。

構成と条件

  • EC2、RDS、ElastiCache、S3およびCloudFrontを利用する。
  • アベイラビリティゾーン(AZ)はap-northeast-1aとする。
  • 独自のドメインを購入する。
    • ドメインはGoogle Domainsなどで予め用意しておくこと。
  • ここではドメインをexample.tldとして解説を進めるので、自分が買ったドメインに適宜置き換えて読むこと。

nanoの使い方

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

nano /path/to/file

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

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

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

AWSにサインアップ

まずはAWSのサイトにアクセスし、サインアップしよう。

サインアップが完了したら、ここを開いてサインインする

リージョンを変更する

今回はリージョンを東京にしたいので、画像のように右上をクリックした後、アジアパシフィック(東京)を選択する。

セキュリティグループの作成

ローカルネットワークのみでアクセスできるようなセキュリティグループを作成する。

  1. セキュリティグループの設定を開く
  2. [セキュリティグループの作成]を選択
  3. 以下のように記入
    • [セキュリティグループ名]、[説明]ともにlocal
    • [ルールの追加]を選択し、
      • [タイプ]を全てのトラフィック
      • [CIDR、IP]に172.0.0.0/6

VPCをIPv6に対応させる

AWSは標準ではIPv6に対応しないので、IPv6を設定する。

IPv6 CIDR ブロックを VPC およびサブネットと関連付ける

VPC

  1. VPC一覧を開く。
  2. VPCを選択し、[アクション] – [CIDR の編集]と選択。
  3. [IPv6 CIDR の追加]を選択。IPv6 CIDRブロックが追加されたら[閉じる]を選択。

ここでVPCのID(vpc-…)をメモしておくこと。

サブネット

  1. 画面左側のナビゲーションペインで[サブネット]を選択。
  2. サブネットを選択し、[アクション] – [IPv6 CIDR の編集]と選択。
  3. [IPv6 CIDR の追加]を選択。16進法2文字でサブネットのCIDRブロックを割り当て(記入例: 00, 01)。
  4. [保存]を選択。VPC内の他のサブネットにも同様に繰り返す。

Egress Only インターネットゲートウェイの作成

  1. ナビゲーションペインで[Egress Only インターネットゲートウェイ]を選択。
  2. [Egress Only インターネットゲートウェイの作成]を選択。
  3. VPCを選択し[作成]を選択、さらに[閉じる]を選択。

ルートテーブルを更新

  1. ナビゲーションペインで[ルートテーブル]を選択し、ルートテーブルを選択。
  2. [ルート]タブで[ルートの編集]を選択。
  3. [ルートの追加]を選択。
    • [送信先]に::/0を指定
    • [ターゲット]を選択し、[Egress Only Internet Gateway] – eigw-(英数字)と選択。
  4. [ルートの保存]を選択、さらに[閉じる]を選択。

RDSインスタンスの作成

RDSコンソール(https://console.aws.amazon.com/rds/) を開き、[データベースの作成]を選択。
以下の設定で進める。

説明
エンジンPostgreSQL *1
バージョン11.5以上 *2
テンプレート無料利用枠
DB インスタンス識別子pg
マスターユーザー名postgres
マスターパスワード
パスワードを確認
password *3
ストレージの自動スケーリングを有効にするチェックを外す
接続の追加の接続設定(開く)
VPC セキュリティグループlocalを選択 (あればdefaultを削除)
アベイラビリティーゾーンap-northeast-1a
追加設定(開く)
最初のデータベース名mk1
バックアップ保持期間3日間

*1: Aurora PostgreSQLでの動作は確認していないが、11.4以上であれば恐らく動くと思われる
*2: 無料利用枠で利用したい場合、エンジンをPostgreSQLにすると無料利用枠を選択できる
*3: 当然ながら自分で考えて設定すること

[データベースの作成]を選択。

pgを選択し、データベースを起動するまで待つ。

起動したら、エンドポイントをメモする。ここではpg.xxxxxxxx.ap-northeast-1.rds.amazonaws.comとして説明する。

ElastiCacheインスタンスの作成

ElastiCacheコンソール(https://console.aws.amazon.com/elasticache/) を開き、[作成]を選択。

以下のように値を設定する。

説明
クラスターエンジンRedis
クラスターモード無効
名前redis
ポート6379
ノードのタイプcache.t3.micro
レプリケーション数0

サブネットグループ

(新規作成)

説明
名前subnet
サブネット全てにチェック
優先アベイラビリティーゾーンゾーンの選択 – ap-northeast-1a

[作成]を選択。

redisを選択し、プライマリエンドポイントを確認。ここではredis.xxxxxx.0001.apne0.cache.amazonaws.com:6379であったものとして説明する。

セキュリティグループ

✏を選択し、localにする。

S3バケットの準備

IAMユーザーの作成

IAM/ユーザーを追加を開く。
以下のように設定する。

説明
ユーザー名mks3
アクセスの種類プログラムによるアクセスにチェック

[次のステップ]を選択。

[既存のポリシーを直接アタッチ]を選択し、AmazonS3FullAccessにチェック。
[次のステップ]へ。さらに[次のステップ]を選択。そして[ユーザーの作成]を選択。

アクセスキー ID、およびシークレットアクセスキーを表示し、メモしておく。

バケットの作成

S3コンソール

を開き、[+バケットを作成する]を選択。

名前とリージョン

以下のように設定する。

説明
バケット名example.tld
リージョンアジアパシフィック(東京)

[次へ]を選択。

オプションの設定

何もすることはないので[次へ]を選択。

アクセス許可の設定

何もすることはないので[次へ]を選択。

確認

[バケットを作成]を選択。

アクセスポイントの作成

example.tld を選択。[アクセスポイント]タブを開き、[+アクセスポイントを作成]を選択。
以下のように設定する。

説明
アクセスポイント名s3ap
リージョンアジアパシフィック(東京)
VPC IDメモしておいたVPC IDを貼り付け

[アクセスポイントを作成]を選択。

CloudFrontディストリビューションの作成

  1. CloudFrontディストリビューションの作成ウィザードを開始 する。
  2. Webの[Get Started]を選択
  3. 次のように設定する
説明
Origin Domain Nameexample.tld.s3.amazonaws.com
Restrict Bucket AccessYes
Origin Access IdentityCreate a New Identity
Grant Read Permissions on BucketYes, Update Bucket Policy
Viewer Protocol PolicyRedirect HTTP to HTTPS
Object CachingCustomize
Minimum TTL31536000
Maximum TTL315360000
Default TTL315360000
Compress Objects AutomaticallyYes
Price ClassUse U.S., Canada, Europe, Asia, Middle East and Africa

ナビゲーションペインでDistributionsを選択し、作成されたディストリビューションのDomain nameをメモしておく。ここではxxxxxxxxxx.cloudfront.netであるとする。

EC2インスタンスの準備

EC2インスタンスを作成しよう。

  1. インスタンスウィザードを開始する。
  2. 右上の青い[選択]ボタンを選択。
  3. 無料枠ならデフォルトのt2.microを選択し、[次のステップ]を選択。
  4. サブネットをap-northeast-1aのに選択。
  5. [起動]を選択。
  6. [既存のキーペアの選択]のところを[新しいキーペアの選択]に変更し、キーペア名を入力。ここではkeyとする。
  7. [キーペアのダウンロード]を選択。key.pemがダウンロードされるので確認する。
  8. [インスタンスの作成]を選択。
  9. key.pem%USERPROFILE%\.ssh内に移動。
  10. ブラウザに戻り、次のインスタンスの作成が開始されました:に続くリンクを選択。

IPv6に対応させる

  1. [アクション]を選択し、[ネットワーキング]-[IP アドレスの管理]を選択。
  2. ダイアログが出てきたら、IPv6 アドレスの[新しい IP の割り当て]を選択し、[更新する]を選択
  3. [更新する]を選択し、さらに[キャンセル]を選択。

ロードバランサーの作成

ロードバランサーの作成ウィザードを開く。

1: ロードバランサーの設定

以下のように設定する。

説明
名前misskey
IPアドレスタイプdualstack
ロードバランサーのプロトコルHTTP, HTTPS
VPC(プルダウンから選択)
アベイラビリティーゾーン全てチェックをつける

[次の手順]を選択

2: セキュリティ設定の構成

  1. [ACM から新しい証明書をリクエスト]を選択
  2. 新しいタブが開くので、example.tld(ドメイン)を入力、また[この証明書に別の名前を追加]を選択し*.example.tldを入力
  3. DNS の検証を選択し[次へ]を選択
  4. [確認]を選択
  5. [確定とリクエスト]を選択
  6. example.tldを選択し、使っているDNSに表示された設定を追加する
  7. [続行]を選択
  8. 5分程度待つ
  9. 状況が発行済みになったら、タブを閉じる
  10. 証明書の名前に先ほど発行した証明書が設定されているのを確認し、[次の手順]を選択

3: セキュリティグループの設定

新しいセキュリティグループを作成するを選択。

  • セキュリティグループ名はpublicとする
  • タイプを変更する
    • 1つ目はHTTP
    • 2つ目はHTTPS

[次の手順]を選択。

4: ルーティングの設定

名前をmisskeyにし、[次の手順]を選択。

5: ターゲットの登録

ポートを3000とし、インスタンスから作成したインスタンスを選択し[登録済みに追加]を選択。
[次の手順]を選択。

6: 確認

[作成]を選択。成功したら[閉じる]を選択。

DNSを設定

お使いのDNSで、example.tldCNAMEとして作成したロードバランサーのDNS 名を指定する。

SSHで接続する

ナビゲーションペインで[インスタンス]を選択し、作成したインスタンスの状態がrunningかつステータスチェックが「チェックに合格しました」となっていることを確認。なっていなければ待つ。

インスタンスのパブリックDNS(IPv4)をメモしよう。ここではec2-13-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.comとする。

sshでEC2インスタンスに接続する。

ssh [email protected] -i %USERPROFILE%\.ssh\key.pem

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

sudo adduser misskey

Node.js

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

curl -sL https://rpm.nodesource.com/setup_15.x | sudo bash -
sudo yum update
sudo yum install -y nodejs

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

node -v

v15.x.xなどと表示されればOK。v8など一桁台の数字が表示された場合は、お近くのAWSに詳しい方に助けを求めよう。

Gitその他

Git(バージョン管理ソフト)などをインストールする。

sudo yum install -y git
sudo yum groupinstall "Development Tools"

ffmpeg

シェルスクリプトを用意したので、それを実行する。
この作業にはだいぶ時間がかかるので、この間にローカルでMisskeyのビルドをしておこう。

wget https://gist.githubusercontent.com/tamaina/05c9119260e55ceed36a87c6415935d3/raw/ecdb4862f4ad1426cf317baba508ce6cdf43e87f/installFFmpegIntoAmazonLinux.sh
sh installFFmpegIntoAmazonLinux.sh

Misskeyのインストール

引き続きMisskeyのインストールを行う。

misskeyユーザーに変更。

sudo su - misskey

Gitでファイル類を展開。

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

npmパッケージのインストール

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

npx yarn install

default.ymlを作成

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

nano .config/default.yml

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

設定できる値と記述方法は.config/example.ymlに書かれている。

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

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

# ● RDSの設定。
db:
  # ●: RDSのエンドポイント
  host: pg.xxxxxxxx.ap-northeast-1.rds.amazonaws.com
  port: 5432
  db  : mk1      # 〇 RDSの最初のデータベース名
  user: postgres # 〇 RDSのマスターユーザー名
  pass: password # ● RDSのマスターパスワード

# ● ElastiCacheの設定。
redis:
  # ●: ElastiCacheのエンドポイント
  host: redis.xxxxxx.0001.apne0.cache.amazonaws.com
  port: 6379

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

指定できたら保存する。

Misskeyのビルド

t2.microではMisskeyはビルドできないため、ローカルでビルドしたものを転送しよう。
Node.jsなので、Windowsでビルドしたものを適用できる。

  1. サーバーと同じバージョンのNode.jsをインストール
  2. Gitでclone(git clone -b master git://github.com/syuilo/misskey.git)、もしくはGitHubからMisskeyのソースをダウンロードする
  3. サーバーと同様の.config/default.ymlを作成
  4. npx yarn install
  5. NODE_ENV=production npm run build
    1. PowerShellでは変数指定がこの方法でできないので、以下のようにする:
      $env:NODE_ENV="production"
      npm run build
  6. sftpでコピーする。

builtディレクトリを準備

# SSH
exit
mkdir built

ローカル環境からsftpでビルドしたファイルを転送

# ローカル
sftp -i %USERPROFILE%\.ssh\key.pem [email protected]:built
sftp> put -rf path/to/built
sftp> bye

サーバー内でコピー(一瞬で終わるが問題ない)

# SSH
sudo cp -rf built /home/misskey/misskey/
sudo chown -R misskey /home/misskey/misskey/built

データベースの初期化

sudo su - misskey
cd misskey
npm run init

Misskeyを起動する

NODE_ENV=production npm start

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

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

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

S3を設定する

インスタンス > 設定 > オブジェクトストレージで、オブジェクトストレージを使用を有効にする。

以下の設定を行う。

説明
URLxxxxxxxxxx.cloudfront.net
バケット名example.tld
プレフィックスm
エンドポイントs3.ap-northeast-1.amazonaws.com
リージョンap-northeast-1
ポート(空白)
アクセスキー(ユーザー作成時にメモしたキー)
シークレットキー(ユーザー作成時にメモしたキー)

無料利用枠で収めようとするなら、リモートのファイルをキャッシュするトグルはオフにしておこう。

[保存]を選択し、設定を保存する。

Misskeyのデーモンを作成

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

exit
sudo nano /etc/systemd/system/misskey.service

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

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/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デーモンを開始。

sudo systemctl daemon-reload
sudo systemctl enable misskey
sudo systemctl start misskey

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

sudo systemctl status misskey

activeならOK。

これでMisskeyのインストールはおおよそ完了だ。

“AWS版Misskeyインストール方法詳説” への1件の返信

コメントを残す

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

PAGE TOP