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すると保存できる。
下部にコマンド一覧が表示されるので、^
をCtrl、M-
をAltと読み替えて参考にしよう。
AWSにサインアップ
まずはAWSのサイトにアクセスし、サインアップしよう。
サインアップが完了したら、ここを開いてサインインする。
リージョンを変更する
今回はリージョンを東京にしたいので、画像のように右上をクリックした後、アジアパシフィック(東京)を選択する。
セキュリティグループの作成
ローカルネットワークのみでアクセスできるようなセキュリティグループを作成する。
- セキュリティグループの設定を開く
- [セキュリティグループの作成]を選択
- 以下のように記入
- [セキュリティグループ名]、[説明]ともに
local
- [ルールの追加]を選択し、
- [タイプ]を
全てのトラフィック
に - [CIDR、IP]に
172.0.0.0/6
- [タイプ]を
- [セキュリティグループ名]、[説明]ともに
VPCをIPv6に対応させる
AWSは標準ではIPv6に対応しないので、IPv6を設定する。
IPv6 CIDR ブロックを VPC およびサブネットと関連付ける
VPC
- VPC一覧を開く。
- VPCを選択し、[アクション] – [CIDR の編集]と選択。
- [IPv6 CIDR の追加]を選択。IPv6 CIDRブロックが追加されたら[閉じる]を選択。
ここでVPCのID(vpc-…)をメモしておくこと。
サブネット
- 画面左側のナビゲーションペインで[サブネット]を選択。
- サブネットを選択し、[アクション] – [IPv6 CIDR の編集]と選択。
- [IPv6 CIDR の追加]を選択。16進法2文字でサブネットのCIDRブロックを割り当て(記入例: 00, 01)。
- [保存]を選択。VPC内の他のサブネットにも同様に繰り返す。
Egress Only インターネットゲートウェイの作成
- ナビゲーションペインで[Egress Only インターネットゲートウェイ]を選択。
- [Egress Only インターネットゲートウェイの作成]を選択。
- VPCを選択し[作成]を選択、さらに[閉じる]を選択。
ルートテーブルを更新
- ナビゲーションペインで[ルートテーブル]を選択し、ルートテーブルを選択。
- [ルート]タブで[ルートの編集]を選択。
- [ルートの追加]を選択。
- [送信先]に
::/0
を指定 - [ターゲット]を選択し、[Egress Only Internet Gateway] –
eigw-(英数字)
と選択。
- [送信先]に
- [ルートの保存]を選択、さらに[閉じる]を選択。
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、およびシークレットアクセスキーを表示し、メモしておく。
バケットの作成
を開き、[+バケットを作成する]を選択。
名前とリージョン
以下のように設定する。
説明 | 値 |
---|---|
バケット名 | example.tld |
リージョン | アジアパシフィック(東京) |
[次へ]を選択。
オプションの設定
何もすることはないので[次へ]を選択。
アクセス許可の設定
何もすることはないので[次へ]を選択。
確認
[バケットを作成]を選択。
アクセスポイントの作成
example.tld を選択。[アクセスポイント]タブを開き、[+アクセスポイントを作成]を選択。
以下のように設定する。
説明 | 値 |
---|---|
アクセスポイント名 | s3ap |
リージョン | アジアパシフィック(東京) |
VPC ID | メモしておいたVPC IDを貼り付け |
[アクセスポイントを作成]を選択。
CloudFrontディストリビューションの作成
- CloudFrontディストリビューションの作成ウィザードを開始 する。
- Webの[Get Started]を選択
- 次のように設定する
説明 | 値 |
---|---|
Origin Domain Name | example.tld.s3.amazonaws.com |
Restrict Bucket Access | Yes |
Origin Access Identity | Create a New Identity |
Grant Read Permissions on Bucket | Yes, Update Bucket Policy |
Viewer Protocol Policy | Redirect HTTP to HTTPS |
Object Caching | Customize |
Minimum TTL | 31536000 |
Maximum TTL | 315360000 |
Default TTL | 315360000 |
Compress Objects Automatically | Yes |
Price Class | Use U.S., Canada, Europe, Asia, Middle East and Africa |
ナビゲーションペインでDistributionsを選択し、作成されたディストリビューションのDomain nameをメモしておく。ここではxxxxxxxxxx.cloudfront.net
であるとする。
EC2インスタンスの準備
EC2インスタンスを作成しよう。
- インスタンスウィザードを開始する。
- 右上の青い[選択]ボタンを選択。
- 無料枠ならデフォルトのt2.microを選択し、[次のステップ]を選択。
- サブネットを
ap-northeast-1a
のに選択。 - [起動]を選択。
- [既存のキーペアの選択]のところを[新しいキーペアの選択]に変更し、キーペア名を入力。ここでは
key
とする。 - [キーペアのダウンロード]を選択。
key.pem
がダウンロードされるので確認する。 - [インスタンスの作成]を選択。
key.pem
を%USERPROFILE%\.ssh
内に移動。- ブラウザに戻り、
次のインスタンスの作成が開始されました:
に続くリンクを選択。
IPv6に対応させる
- [アクション]を選択し、[ネットワーキング]-[IP アドレスの管理]を選択。
- ダイアログが出てきたら、IPv6 アドレスの[新しい IP の割り当て]を選択し、[更新する]を選択
- [更新する]を選択し、さらに[キャンセル]を選択。
ロードバランサーの作成
ロードバランサーの作成ウィザードを開く。
1: ロードバランサーの設定
以下のように設定する。
説明 | 値 |
---|---|
名前 | misskey |
IPアドレスタイプ | dualstack |
ロードバランサーのプロトコル | HTTP, HTTPS |
VPC | (プルダウンから選択) |
アベイラビリティーゾーン | 全てチェックをつける |
[次の手順]を選択
2: セキュリティ設定の構成
- [ACM から新しい証明書をリクエスト]を選択
- 新しいタブが開くので、
example.tld
(ドメイン)を入力、また[この証明書に別の名前を追加]を選択し*.example.tld
を入力 - DNS の検証を選択し[次へ]を選択
- [確認]を選択
- [確定とリクエスト]を選択
- example.tldを選択し、使っているDNSに表示された設定を追加する
- [続行]を選択
- 5分程度待つ
- 状況が
発行済み
になったら、タブを閉じる - 証明書の名前に先ほど発行した証明書が設定されているのを確認し、[次の手順]を選択
3: セキュリティグループの設定
新しいセキュリティグループを作成するを選択。
- セキュリティグループ名は
public
とする - タイプを変更する
- 1つ目はHTTP
- 2つ目はHTTPS
[次の手順]を選択。
4: ルーティングの設定
名前をmisskey
にし、[次の手順]を選択。
5: ターゲットの登録
ポートを3000
とし、インスタンスから作成したインスタンスを選択し[登録済みに追加]を選択。
[次の手順]を選択。
6: 確認
[作成]を選択。成功したら[閉じる]を選択。
DNSを設定
お使いのDNSで、example.tld
にCNAMEとして作成したロードバランサーの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でビルドしたものを適用できる。
- サーバーと同じバージョンのNode.jsをインストール
- Gitでclone(
git clone -b master git://github.com/syuilo/misskey.git
)、もしくはGitHubからMisskeyのソースをダウンロードする - サーバーと同様の
.config/default.yml
を作成 npx yarn install
NODE_ENV=production npm run build
- PowerShellでは変数指定がこの方法でできないので、以下のようにする:
$env:NODE_ENV="production"
npm run build
- PowerShellでは変数指定がこの方法でできないので、以下のようにする:
- 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を設定する
インスタンス
> 設定
> オブジェクトストレージ
で、オブジェクトストレージを使用
を有効にする。
以下の設定を行う。
説明 | 値 |
---|---|
URL | xxxxxxxxxx.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件の返信