Ubuntu24.04サーバでGrowiを運用していた際に、2系統のNode.jsが独立して存在していた状況が発生しました。
環境
通常ユーザー環境
- パス:
/usr/local/bin/node - バージョン:
v20.18.0(Nodesource経由のシステムインストール) - 状況:
pnpmなどの最新ツールが利用不可、または古いバージョンを参照。
rootユーザー環境
- パス: /
root/.nvm/versions/node/v24.14.1/bin/node - バージョン:
v24.14.1(nvm経由) - 状況: 最新版がインストールされているが、systemdなどのサービスから正しく参照できていない可能性があった。
そもそも論として
「各ユーザーにnvmをインストールすればいいのでは?」は確かにその通りですが、筆者サーバーはWebサーバ。つまり、nodeを主に用いるのはGrowi環境であり、
- rootに最新Node.jsを使わせたい。
- そして、
sudo配下できちんとroot環境でのNode.jsを使いたい
という状況。これを直していきます。
さっくりとした手順
- 元々のNode.jsをアンインストールします。
- root環境の一本化と最新化を行います。
- ついでにGrowi起動スクリプトの動的かを行います。
Node.jsをアンインストール
※これを用いるまでに
sudo su -
の後、
which node
を実行し、
/root/.nvm/versions/node/v24.14.1/bin/node
rootが参照しているNode.jsが.nvm経由であることを確認し、
exit
でroot環境から抜けます。
- 一般ユーザーが持つNode.jsをアンインストール
sudo apt-get purge -y nodejs
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/bin/npx
sudo rm -rf /usr/local/bin/pnpm
- hashをクリア
hash -r
一般ユーザーのNode.js系のプログラムの向き先を合わせる
- Node.jsの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/node /usr/local/bin/node
which node
→ /usr/local/bin/nodeを確認。
node -v
→ v24.14.1などを確認。
- npmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/npm /usr/local/bin/npm
which npm
→ /usr/local/bin/npmを確認。
npm -v
→ 11.13.0などを確認。
- pnpmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/pnpm /usr/local/bin/pnpm
which pnpm
→ /usr/local/bin/pnpmを確認。
pnpm -v
→ 10.33.2などを確認。
Growiの起動スクリプト修正
Growi起動スクリプト(growi-start.sh)を修正し、rootが見ているデフォルトバージョンを参照するように修正しました。
DEFAULT_NODE_VER=$(cat "$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$DEFAULT_NODE_VER/bin:$PATH"
この修正により、同じ場所を見るような運用が可能になります。
それでも残る問題点
将来的にnodeのバージョンを上げた場合、一般ユーザーでも
sudo ln -sf /root/.nvm/versions/node/v25.xx.yy/bin/node /usr/local/bin/node
のように帰る必要がありますが、そこは割り切りましょう。