タグ: nodejs

Node.jsの混在環境の解消。

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を使いたい

という状況。これを直していきます。

さっくりとした手順

  1. 元々のNode.jsをアンインストールします。
  2. root環境の一本化と最新化を行います。
  3. ついでに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

のように帰る必要がありますが、そこは割り切りましょう。

growi v6.0.15 → v6.1.0へのバージョンアップでハマったこと。

概要

日々の記録に、ブログ/redmineの下書きに、思考の整理にと役立っているgrowi。

https://github.com/weseek/growi/releases/tag/v6.1.0

で、growiの新しいバージョンを確認したので実施しましたが、ハマりましたのでメモとして残します。

アップデートした環境

  • growi 6.0.15
  • Ubuntu 20.04
  • mongodb 4.4.13
  • node 14.21.3 (後述するバージョンアップによりv18.16.0)

また、以下を実施済みです。

実施手順

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/28

こちらに沿って実施しました。

  1. growiのサービスを停止します。
  2. gitコマンドで最新版を引っ張ります。
  3. アップグレードを行います。
  4. growiのサービスを再開します。
  5. アップグレードされたことを確認します。

ハマったこと1:nodeのバージョンが合わない

  • 実行コマンド
sudo yarn
  • エラー
[1/5] Validating package.json...
error growi@6.1.0: The engine "node" is incompatible with this module. Expected version "^16 || ^18". Got "14.21.3"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

とあったので、nodeのバージョンアップが必要でした。

ハマったこと1への対処

以下の記事で、最新安定版のnode.jsに差し替えました。

https://manualmaton.com/2023/03/15/

nodeのアップデート後、正常にyarnを行うことができました。

ハマったこと2: 起動スクリプトが動作しない。

sudo systemctl start growi.service

を実行しても起動せず。

systemctl status growi.service

で状況を確認します。

/bin/sh: 1: turbo: not found

というエラーが出ました。

ハマったこと2への対処

1への対処時、付随するnpmパッケージを削除したことが原因です。

sudo npm install -g turbo

として、再度

sudo systemctl start growi.service

を実行。

systemctl status growi.service

起動を確認しました。

実行後

このバージョンアップは是が非でも行いたいものでした。

なぜなら、念願のmermaid.jsが実装されたからです。

これで、別のアプリを起動せず、growiのみでのmermaid記法が楽になりました。

Ubuntu 20.04に最新安定版のnodejsのインストール。

ふと思い立ったので、AWS Lightsailで稼働するUbuntuに最新安定版のnodejsを入れてみました。

動作確認環境

  • Ubuntu 20.04

実施した手順

さっくりとした手順

  1. aptitude(apt)を用いてnodejsとnpmをインストールします。
  2. n packageシステムをインストールします。
  3. n packageで最新安定版のnodejsをインストールします。
  4. 最初に入れたnodejsとnpmをアンインストールします。
  5. nodeとnodejsが同じコマンドを参照するようにシンボリックリンクを張ります。

aptitudeによるnodejsとnpmのインストール

パッケージインストール

こちらではaptitudeを用いています。好みなどに合わせてaptに読み替えてください。

sudo aptitude update

sudo aptitude install nodejs

sudo aptitude install npm
# 300近いパッケージが一気にインストールされます

インストール後の確認

nodejs -v
# v10.19.0が表示されることを確認

npm -v
# 6.14.140が表示されることを確認

n packageのインストール

sudo npm install -g n

n packageによる最新版安定版のインストール

sudo n stable

表示確認

node -v
# 18.15.0が表示されることを確認
nodejs -v
# 10.19.0が表示されることを確認

と、両者のバージョンが異なります。aptitude(apt)でインストールしたパッケージが残っているために発生しているようです。

そこで、最初にインストールしたパッケージをアンインストールします。

最初に入れたnodejsとnpmをアンインストール

sudo apt purge nodejs npm

その後、一度シェルから抜けます。

シンボリックリンク実行

再ログイン後、nodejsのパスが通っていませんでした。

which node
# /usr/local/bin/nodeと表示


which nodejs
# 何も表示されず

コマンドが見つからないので、これも修正します。

sudo ln -s /usr/local/bin/node /usr/local/bin/nodejs
node -v
# 18.15.0が表示されることを確認

nodejs -v
# 18.15.0が表示されることを確認

両方で同じバージョンが表示されるようになりました。

動作確認日

2023/03/13

Powered by WordPress & Theme by Anders Norén