riki.dev
Published on

Next.jsの本番環境

Authors
  • avatar
    Name
    Riki "Remicck" Kawai
    Twitter
    @Ricckn

まったく大きくないNext.jsのアプリケーションを書いている。

普段はお遊び程度で終わらせるもんだから、いざ本番環境を作るというときの知見がなくて困った。

とりあえず雑に以下の構成で動かしている。

  • Node.js
  • next serve
  • pm2

pm2で永続化しておけばなんとかなるかなぁという荒い理解ではあるのだけど、ひとまず稼働としては問題なさそう。

インフラもそれほど重要ではないのでLightsailの1インスタンスに全体的にデータを突っ込む構成にしている。

  • MySQL
  • Docker ( Metabase用 )
  • Nginx
  • Let's Encrypt

ついでにデプロイはGitHub Actionsを使って、

  1. SSHでログイン
  2. git pull
  3. npm run build
  4. pm2 restart production

するようなスクリプトを流しているところ

Migrationの必要な場合は、別途手動で行う必要があることだけめんどくさい。

Vercelを使ってデモ環境を建てていたこともあり、現状は_middlewereを使ってBesicAuthを設定している。
一応今回はBasicAuth環境でのリリースとなりそうな感じ。・・・他の提案もしていたけど個人情報等は含まれないので許容できる範囲かなぁと。

不安はあるけどもとりあえず外側からの監視と内側の監視をMackerelで入れてあるので、いざという時は手で対応する形になりそう。

本当にすべきこと?

Next.jsとかNode.js系の本番環境の個人的なイメージはなんとなくContainerで全部やるイメージが合った。
本来はコンテナベースで環境を作るべきなんだろうけど、アクセス数も少なければ業務的なインパクトも小さい部分なのでコストを下げる方向となっている。

個人的に、まだガッツリとしたコンテナベースのWebアプリケーションを扱ったことないため、一度はそういうサーバーを組んでみたい気持ちもある。
具体的にはKubernetesで全体的に管理してみたい、どうなるんだろ。