スマートフォン・タブレットからインターネットサーバーオペレーション

APPW.jp
 
ConoHa VPS移設記/2GB・3コア → 4GB・4コア/Ubuntu 26.04 LTS

⑬ Node.js

ディレクトリごとscpでコピー済みだったが、node_modulesはあえて作り直した回。 ネイティブアドオンを含むパッケージの扱いと、記録されていなかったグローバルパッケージの棚卸しがテーマ。

作業端末: iPad mini(Termius)

MIGRATION ROADMAP — 全17工程
  1. ① SSH、ユーザー追加
  2. ② IPv4/IPv6追加、netplan、ufw
  3. ③ Apache2
  4. ④ Let's Encrypt
  5. ⑤ PHP
  6. ⑥ MariaDB
  7. ⑦ WordPress
  8. ⑧ Dovecot、Postfix
  9. ⑨ Vsftpd
  10. ⑩ Python
  11. ⑪ llama.cpp、ChromaDB
  12. ⑫ Anaconda、Keras、TensorFlow
  13. ⑬ Node.js
  14. ⑭ MongoDB
  15. ⑮ Mosquitto
  16. ⑯ RabbitMQ
  17. ⑰ Supervisor

01nvmとNode.jsのインストール

login-user@新サーバー
# github.com/nvm-sh/nvm/releases/latest で最新タグを確認してから $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/(確認したバージョン)/install.sh | bash $ source ~/.bashrc $ nvm install 24.16.0 $ nvm use 24.16.0 $ nvm alias default 24.16.0

旧サーバーのnode -v(v24.16.0)と同じバージョンで揃えた。

02node_modulesはコピーせず作り直す

開発ディレクトリ一式はscpでコピー済みだったが、node_modulesだけは削除して新サーバー上で入れ直した。 package.jsonを確認すると@tensorflow/tfjs-node・sharpという、どちらもネイティブアドオン(コンパイル済みバイナリを含む)のパッケージが使われており、 旧サーバーのOS・CPU向けにビルドされたものをそのまま持ち込むと、動作しない・原因不明のクラッシュにつながるリスクがあったため。

login-user@新サーバー
$ cd /home/login-user/node $ rm -rf node_modules $ npm ci $ cd /home/login-user/node/ogp-generator $ rm -rf node_modules $ npm ci
npm warnについて インストール中にnpm warn install-scripts(tfjs-node・sharpがインストール時にスクリプトを実行する旨の通知)や「〇 packages are looking for funding」が表示されたが、これはエラーではなく単なる情報表示。近年npmがinstallスクリプト持ちパッケージを可視化するようになった仕様で、正当な理由(バイナリ取得・ビルド確認)で使われている場合は問題ない。

03parcelをdevDependenciesへ明示的に追加

旧サーバーではparcelをグローバルインストールし、実行はnpx parcelだったが、package.jsonのどちらのファイルにも記録がなかった。 「動いてはいたが記録されていない」状態はバージョン管理上望ましくないため、この機会にプロジェクトの依存関係として明示することにした。

login-user@新サーバー
$ npm install --save-dev parcel

これでnpx parcelはローカルのものを優先的に使うようになり、バージョンも固定される。

04棚卸しで見つかったレガシー依存(対応は次回以降)

パッケージ状況
http / httpsNode.js組み込みモジュール。npm依存として書く必要は本来ない
request開発元により公式に非推奨化。将来的にfetch等への置き換えを検討
jsdom-no-contextifyvmモジュールが未成熟だった時代のjsdomフォーク。Node.js 24では素のjsdomで足りるはず
mathjax-nodemathjax v3以降でNode.js対応が本体に統合され非推奨。実際にrequire('mathjax-node')で使用中と確認

今回のインストールをブロックするものではないため、対応は後日まわしとした。

05動作確認

login-user@新サーバー
$ node -e "require('@tensorflow/tfjs-node'); console.log('tfjs-node OK')" $ node -e "const sharp = require('sharp'); console.log('sharp OK', sharp.versions)"
確認完了 両方ともOK。sharpはlibvips等のバージョン情報も表示され、ネイティブバイナリのビルド・リンクまで正常に完了していることを確認した。

06ここまでの状態

  • nvm経由でNode.js v24.16.0を導入、旧サーバーとバージョンを一致
  • node_modulesはコピーせず新サーバー上で再インストール(ネイティブアドオン対策)
  • parcelをdevDependenciesへ明示的に追加
  • tfjs-node・sharpの動作を直接確認済み
  • 非推奨・不要と思われる依存(request、jsdom-no-contextify等)を洗い出し、対応は次回以降に持ち越し
← 前回: ⑫ Anaconda、Keras、TensorFlow 次回: ⑭ MongoDB →

『ConoHa VPS移設記 ⑬ Node.js』を公開しました。