このサイト、GravというCMSで構築しているんですが、先日Gravのバージョンを管理ページから更新したら、PHP8.3未満だと動作しないというエラーが更新後に出てきて(やる前に言えや)、サイトが文鎮化しました。ここ一週間ぐらい、サイトがエラーになっていたのはこのため。

すごい昔に、Lightsail x Docker で構築して以降、インフラ面は基本放置だったんですが、あまりに古くて、PHPのバージョンを上げたり、Dockerのバージョンを上げたりもできない(あまりにエラーが多すぎて、頑張って解決するならリプレースした方が早い)状態だったので、久々にゼロから構築しました。ので、そのメモを記念に。覚え書きと言いたいところだが、どうせ次に更新する頃には環境変わってて調べ直しになるだろう...

インスタンス選定

冒頭で AWS Lightsail を使っているという話をしたとおもうんですが、前に使っていた5ドル/月のプランがディスコンしていて、選択肢としては7ドルプランしかなかった。多少値上がりにはなるが、その昔、一番下のプランを使用したところ、DockerでのWebサイト運用ですらCPU利用上限に引っかかって、リソース上限のエラーが多発したのでそこはケチらない方向で。一応従来の5ドルプランと比べて仮想CPUが1=>2になっているので、スペックは多少上がっている模様。

正直、メモリとかディスク容量増えてくれた方が嬉しかった。

構築

その昔は、LightsailのLinuxイメージってCentOSだったんですが、今はAmazon Linux 2023 になっていました。 なので、デフォのユーザ名だったりコマンド体系がぐぐっと変わってるので、要注意。

追加インストール

適当にパッケージを入れます

  • 開発ツール系
    • emacs, wget, git
  • コンテナ
    • docker, docker-compose
      • docker-composeはdnfではなく、直接githubからダウンロード
    • Amazon Linux 2023のバージョンによっては(?)、dockerはデフォルトで入っている
  • Webサーバ
    • httpd, certbot, python3-certbot-apache, php

grav docker の構築

公式がdocker用の構成ファイルをメンテしてくれてるので、そちらを利用。 https://github.com/getgrav/docker-grav

git clone して、READMEに従って docker build すれば、さらっと通る

過去のバックアップデータを展開して、grav_dataパラメータにディレクトリのパスを渡しながら起動でOK

リバプロ構築

リバプロで一旦受けて、Dockerに渡すので、フロントのhttpdを適当に設定 一旦、/etc/hosts の書き換えで、ダミーのドメインで動作チェック

Route53(DNS)更新

Let's Encryptを使う都合上、DNS設定をちゃんとしとかないとダメなので、先に新サーバへ向き先変更。 まぁ、文鎮化してたし、構築途中で変えても問題なかろう。

SSL対応

Let's Encrypt します。 頻繁に使用が変わっているが、certbotでwebrootとcertonlyオプション使ってやるのが今も昔もいちばん事故が少ない気がする。

証明書生成後、httpdのsslの待受設定を更新。 mod_rewriteでhttpをhttpsに強制上書きする設定も合わせて有効化。

ここまでで、ひととおり復旧できた。

旧インスタンス破棄

コンソールから旧イメージを削除して、対応完了。お疲れ様でした。

Previous Post

サークルWebをAmazon Linux 2023 にリプレースしました