ProLiant DL360 G7のシステムROM(BIOS)を更新した
ついうっかり諸々の検証用に1UラックマウントサーバHP ProLiant DL360 G7を手に入れた.
my new gear.... pic.twitter.com/nKEA96U2ha
— waipu (@Ayaragi7755) 2020年12月29日
とりあえずBIOSを更新したいので,↓のページから手元のWin10マシンにダウンロードした.
USBキーを作るため,解凍したSoftPaq中の ROMPaq USB Key\HPEUSB.exe
*1を実行すると,別に挿したUSBメディアにプロテクトなどかけていないのに「Device media is write-protected.」などと怒られた.
解決法は↓の動画で紹介されている.
概要欄にまとめられているが,日本語で要約すると
「 HPEUSB.exe
はパーティション形式がMBRでないメディアを扱えないらしく,Rufus(など)を使ってメディアにGPTで適当なイメージを焼いた後,diskpartで convert mbr
& clean
という手順を踏む必要がある」
とのこと.ちなみにこの問題は HPEUSB.exe
でのみ起こるもので,別途SmartStartのブートメディアを作るために実行した hpusbkey.exe
では起こらなかった.
これでUSBキーを作成し,サーバでインストーラを起動してBIOSを新しめにすることができた.今はとりあえずESXi 6.7をインストールしてみている.
目下の問題は置き場所と消費電力である.
Mastodonのおひとり様サーバを(とりあえず)無料で建てた
なんで建てた
9か月ほど続けていた某企業のインフラエンジニアの手伝いという職を4月一杯で失うことになり,春休み中なんもしてないじゃんとなりなんか手を動かさねば…と思っていた内に急に思い立った.
— waipu (@Ayaragi7755) 2020年4月19日
そのアルバイトではAWSを扱っていて,その感覚を忘れないうちにAWSの無料枠を使ってみることにした.なのでとりあえず1年は無料.
(アルバイトで得た知見などもそのうち記事にまとめたい.手伝いとはいえとても個人ではできないことを体験できたので)
ちなみに建てたのは今現在のTwitter運営に関する諸々の騒動が発生する前である.だから何というわけではないが建ててよかった. 今は気分でTwitterとMastodonを使い分けている.
自鯖というものを持ってWebコンテンツを運用するという経験がなかったのもある.
ところで,現在Mastodonのサーバは「インスタンス」ではなく「サーバ」と呼ばれているらしい.いつから変わったかとか,変わった理由などはよくわからないが,とにかく公式(https://joinmastodon.org/)の紹介文に「インスタンス」という語はない.よってこの記事では「インスタンス」はEC2のインスタンスを,「サーバ」はMastodonのサーバを指すことにする.
ただし https://docs.joinmastodon.org/ では"instance"という表記がほとんどである.どっちだよ.
使ったAWSのいろいろ
- EC2(t2.micro)
なんとこれ(CPUコア1つにRAM 1G + swap)でMastodonは動く.
- SES
Mastodonのアカウントの作成にはSMTPサーバが必要.
- S3とCloudFront
メディアストレージとして.
- ElasticsearchとCognito
トゥートの全文検索用ではなく,ロギングのため.CognitoはKibanaへのログインのため.
作業工程
ドメイン名を買う
最初に無料で建てたと言ったな?あれは嘘だ.
ドメイン名すら持ってなかったので買った.Webサービスを自分で運用するなら最低限ドメイン名は持つ必要がある.
レジストラはGoogle Domainにした.Gに依存するのはよくないとはよく言われるが,サイトのUIがシンプルだしWHOIS公開代行は無料だし日本語表記なので使いやすい.
その辺のサービス品質は業界では普通なのかもしれないが,ほかにお名前.comしか使ったことがないのでわからない.
後から知ったのだが,".dev"というgTLDはGoogleがレジストリで,なぜかhttpsが必須らしい.
ついでに「ドメイン」ではなく「ドメイン名」と表現するのも初めて知った.
AWSインフラの構築
インスタンスを建てる前準備
AWSのアカウントを作り,ルートアカウントをそのまま使うのでは何かと不用心なので作業用のIAMユーザを作り,適当にポリシ(AdministratorAccess)を付与しておく.
ついでにルートアカウントで使用料の通知設定をしておく.この辺の入門的な作法は「AWSをはじめよう」という技術書がわかりやすい.完全に初歩から(AWS以前に,インフラとは何か?から)書かれており,題名の通りAWSを初めて触るにはいいと思う.
作業用のIAMユーザでサインインし直してVPCとサブネットを作成する.もちろんインスタンスを作成するときに一括でできるが,復習のために予め作った.一応IPv6 CIDRも設定した.
セキュリティグループも作っておく.インバウンドのポートは22,80,443,それにGitが使う9418を開けておく.後から考えると当たり前だが,9418を開けなかったせいでかなり苦労した(後述).アウトバウンドは全開放とした.
EC2インスタンスを作成する
Mastodonの公式ドキュメントの前提になっている,Ubuntu18.04を選択した.
EBSボリュームはデフォルトの8GBから少し増やした方がよかった.20GBまで無料である.もちろん後から足してマウントすればいいのがEBSだが.
インスタンスが建ったらElastic IP(固定IPv4アドレス)を設定しておいた.
SES
これを参考にした.おひとり様サーバなのでアカウントは一つしか作らない.よってメールは自分に対して送るだけなので,英作文して承認されるなどの作業は必要ではない.
そもそも一つしかアカウントを作らないならDBを直接いじればいいそうだが,よくわからなかったので別にSMTPサーバを用意した.
Elasticsearch
後述.
Mastodonをセットアップする
Preparing your machine - Mastodon documentation
と
Installing from source - Mastodon documentation
と
Setting up your new instance - Mastodon documentation
の通りにやった.本当に書いてある通りにやっただけなので書くことはあまりない.ファイアウォールの設定はセキュリティグループがあるので省略した.
Dockerコンテナがあるのでそれを使う方が作業は少ないが,nginxやらpostgresqlやらを触るのも初めてだったので,非Docker環境とした.シングルコアなのでビルドに数時間かかるし,SSHセッションも切れる.
一か所詰まったところがあって,bundle install
の際にhttp_parser.rb
というgemがどうにも正常に入らず,
を見つけてGemfile
の当該箇所を0.6.1に勝手に上げた.
これでhttpsでgemをクローンすることができるようになったのでひとまずビルドが成功し,トゥートもできたが,リモートフォローができない状態だった.
結局http_parser.rb
のバージョンを戻し,一時的に9418を開けてbundle install
し直し,さらに再ビルドすることで事なきを得た.意地でも9418を開けなかったために数日を無駄にした.
とりあえずこれでMastodonが動いた.めでたしめでたし.
建ててからしたこと
メディアのS3移行
別におひとり様なのでストレージ数が足りなくなるわけではないが,
を参考にしてやってみた.ついでにCloudFrontも間に導入してみた.
しかし数日でS3のリクエスト数の無料枠上限が埋まりそうになったので,すぐにインスタンスのローカルに戻した.Mastodonは自サーバのアカウントがフォローしている他のFediverseアカウントのメディアもキャッシュするからだと思われる.
戻し方はaws s3 sync
で逆をやり,.env.production
のS3なんとかの行をコメントアウトして各サービスをrestart
するだけ.
スワップの追加
流石にRAMが1GBでは無理があったようで,WebUIが非常にモッサリする.
そこでEBSを2GB足してスワップ領域を追加した.これでサクサク動くようになった.
Filebeat+Elasticsearch+Kibanaによるロギング環境の構築
これは別記事にまとめる.
おわりに
こうして出来上がったのが
これ.とりあえずTwitterなどで知ってる人と鯖缶っぽい人をフォローしてみている.
サーバを建ててから約1か月経っているので,すでに忘れていることが多々ある.
万が一この記事を参考にMastodonのサーバを建ててみるという人がいた場合,情報が欠けている可能性があることに注意してほしい.
文中に書かなかった参考文献
「AWSをはじめよう」の前作.
過去にjpとpawooとqiitadonのアカウントを作っていたが使っておらず,現在のMastodonを知らなかった.
保守.
jpの閉鎖告知の後,なぜかアクセスができなくなったのでチューニングを考えていた際に見つけた. おひとり様サーバなのに負荷がかかったのなぜ…?そもそも負荷が増えたのか…??
他にAWSの公式ドキュメントをいろいろ読んだ.