- ① SSH、ユーザー追加
- ② IPv4/IPv6追加、netplan、ufw
- ③ Apache2
- ④ Let's Encrypt
- ⑤ PHP
- ⑥ MariaDB
- ⑦ WordPress
- ⑧ Dovecot、Postfix
- ⑨ Vsftpd
- ⑩ Python
- ⑪ llama.cpp、ChromaDB
- ⑫ Anaconda、Keras、TensorFlow
- ⑬ Node.js
- ⑭ MongoDB
- ⑮ Mosquitto
- ⑯ RabbitMQ
- ⑰ Supervisor
01インストールと構成
旧サーバーの/etc/supervisor/conf.d/配下の設定ファイルを1つずつ確認しながら、これまでの各回で環境の置き場所が変わったものを反映していった。
02環境パスの反映
| プロセス | 旧 | 新 |
|---|---|---|
| mnist_consumer | alpha-user / Anaconda 3.13 | login-userユーザー / /home/login-user/env3.13 |
| mnist_producer | login-user / env3.14 | 変更なし |
| w2v_engine | login-user / env3.12 | そのままenv3.12として作成(env-gensimという別名は使わず) |
| rag_consumer / rag_producer | login-user / env3.14 | 変更なし、ただしHF_TOKENの追加が必要だった |
rag_consumerは⑪で.bashrcに設定したHF_TOKENが、Supervisor経由(ログインシェルを介さない)では読み込まれない。confファイルに直接追記して対応した。
03mnist_producer:ホスト名のハードコードが招いた起動失敗
mnist_producerがOSError: could not bind on any addressで起動失敗。原因はスクリプト内のWEBSOCKET_HOSTが"www.iseeit.jp"というホスト名で、旧サーバーの公開IPへ名前解決されていたため、新サーバーには存在しないアドレスにbindしようとしていた。
調べると、このWebSocketサーバーは実際には外部非公開で、ApacheがRewriteRuleでリバースプロキシしている構成だった(login-user.tokyoの/rag/と同じパターン)。であればDNS解決に依存する理由はなく、ループバックへ固定するのが最も安全だった。
Apache側のRewriteRuleも旧サーバーの公開IP宛からwss://127.0.0.1:8770へ修正。バックエンドが自己署名証明書(/etc/ssl/local/local.crt、gwaw.jpとは別のもの)を使っていたため、SSLProxyVerify none等のSSLProxy系設定がiseeit.jp側にも必要だった。
04MeCab辞書は再構築
w2v_mecabが辞書未検出で起動失敗。mecab-ipadic-neologd辞書はバイナリ形式のため、⑪・⑬のネイティブアドオンと同じ理由でコピーではなく新サーバー上でのビルドが必要だった。
05PHPログシステムにAPCu拡張が漏れていた
5サイト共通ログシステム(page530g-log.php)でapcu_fetch()が未定義エラーに。⑤の拡張リストにAPCuを含めていなかったための漏れだった。
06Node.js版MNISTツール:Node.jsのバージョンの壁
iseeit.jpの係数シリーズ関連(pr_consumer他)はNode.js製で、@tensorflow/tfjs-nodeを使用。⑬で導入したNode.js v24.16.0で実行すると
TypeError: (0, util_1.isNullOrUndefined) is not a functionで即クラッシュした。
util.isNullOrUndefined()はNode.js v22.0.0で「Runtime非推奨」となった後、その後のメジャーバージョンで完全に削除された。
メンテナンスが停滞気味の@tensorflow/tfjs-nodeがこの削除済みAPIに依存したままになっており、v24系では動作しない。
旧サーバーの設定ファイルに、実は動作実績のあるv22.14.0への切り替えがコメントアウトで残されていた。一度v24.14.0への変更を試して失敗し、確認しないままコメントアウトで元に戻す記録ミスがあったと判明。
最終的にこのv22.14.0に合わせることで解決した。
07最終確認
08ここまでの状態
- Supervisorで全常駐プロセスを管理下に。旧サーバーからの環境パス変更をすべて反映
- mnist_producerのホスト名ハードコード問題を、ループバック固定+Apacheリバースプロキシへの統一で解消
- MeCab辞書の再構築、APCu拡張の追加漏れを解消
- Node.js版MNISTツールは、tfjs-nodeがNode.js側で削除されたAPIに依存しているためv22系への固定が必要と判明
- 5サイトの表示・機能、WordPress画像アップロードまで含めて全面的に動作確認完了
2GB RAM・3コアの旧サーバーから、4GB RAM・4コアの新サーバー(Ubuntu 26.04 LTS)へ。 SSHの鍵運用からはじまり、ネットワーク、Web、メール、データベース、各種言語環境、メッセージング、 そして常駐プロセス管理まで、全17工程を通じて2021年以前の設定を洗い出し、見直しながらの移設となった。 途中、バージョン間の非互換や既知のバグ、単純な設定ミスなど数多くの壁にぶつかったが、 その一つひとつが今後同じ状況に立つ自分(あるいは同じ壁にぶつかった誰か)への記録として残った。