ヘッドレスCMS+SSGを導入することに当たってNodeサーバー構築


目的:

担当する記事サイト改修でSSG/ヘッドレスCMSを導入する

問題:

・Vercelの利用を考えましたが、ドメイン変更が必要。
・SSG/ヘッドレスCMSを導入したいけど、ドメイン変更したくないというディレクターの要望。

検討

・とりあえず既存サーバー内にNodeサーバー構築し、いろいろ試すことに

nodenvとは

・nodeのバージョンを管理するためのコマンド
・プラグイン(nodenv-build)を入れることで、nodeのインストールが可能

nodenvのダウンロード

GitHubからnodenvのソースをcloneする

git clone https://github.com/nodenv/nodenv.git ~/.nodenv

nodenvのビルド

nodenvをビルドして実行可能な状態にする

cd ~/.nodenv && src/configure && make -C src

pathを通す

echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(nodenv init -)"' >> ~/.bash_profile

pathを通してコマンドを叩けるようになる

シェルを再起動する

exec $SHELL -l

ログインシェルを再起動して新しい設定ファイルを読ませる

nodenvバージョンの確認

nodenv --version

プラグインのインストール

プラグイン用のディレクトリ作成

mkdir -p "$(nodenv root)"/plugins

プラグインのインストール(clone)

git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build

nodenvアップデート用プラグインのインストール(clone)

git clone https://github.com/nodenv/nodenv-update.git "$(nodenv root)"/plugins/nodenv-update

nodenv updateとコマンドを叩くことで、nodenvとそのプラグインを自動的にアップデート可能

nodeのインストール

インストール可能nodeバージョンの確認

nodenv install --list

nodeのインストール(14.15.1は現時点でのLTSバージョン)

nodenv install 14.15.1

rehash実行

nodenv rehash

・nodenvからnodeやグローバルなnpmパッケージを見えるようにするため
・新しいnodeのバージョンを入れたり、npm install -gなどを行ったときに実行する必要がある

nodeバージョンの確認

nodenv versions
* 14.15.1 (set by /home/ec2-user/***_deploy/blog/.node-version)

nodeバージョンの指定

プロジェクトで使うnodeのバージョンを指定
プロジェクトのディレクトリでのみ使うnodeのバージョンを指定する

cd /home/ec2-user/xxx_deploy/blog
nodenv local 14.15.1

プロジェクトのディレクトリ (/home/ec2-user/xxx_deploy/xxx_blog)内に.node-versionという名前の不可視ファイルが生成され、その中にそのディレクトリで使うnodeのバージョンが記述

ちなみにグローバルで使う場合のnodeバージョン指定

nodenv global 14.15.1

グローバルとローカル両方指定した場合、ローカルで指定した方が優先らしい。

build

npm ci(少し時間かかる)
npm run build

Compiled successfully、Export successfulメッセージでbuildが完了し、プロジェクトのディレクトリにout(デフォルト)というフォルダが出来て色々吐き出される。
outフォルダ内の記事のhtmlファイルを開くと問題なく記事が表示されたのでbuildが正常に行われたと判断。

その他nodeコマンド

nodeアンインストール

nodenv uninstall 14.15.1

nodenvのアップデート

nodenv update

nodenvのアンインストール

~/.nodenvのディレクトリを消すだけ

rm -rf $(nodenv root)

サーバーで直接コマンド実行でbuildが正常に行われたので次はGitHubActtionでpush時に自動でgitから最新ソースをpull後にnodeサーバーでbuildする仕組みを下記のように実装。
https://qiita.com/kerry/items/5568232516b8ee323d4b