- ① 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
01PECLとComposer、実は同じ拡張だった
PHPアプリのMongoDB接続は、初期のものがPECL、最近作成したものがComposerライブラリ(mongodb/mongodb)と分かれていた。
調べてみると、Composerのmongodb/mongodbはPECLのmongodb拡張(Cで書かれた低レベルドライバー)の上に構築された高レベルライブラリで、
内部的に同じ拡張へ依存している。つまりPECL拡張を1回入れれば、新旧どちらのアプリも満たせる。
02Ubuntu 26.04向けの公式リポジトリがまだない
MongoDB社の公式aptリポジトリは、26.04(コードネーム: resolute)向けにまだ提供されていなかった。 現時点での標準的な回避策として、Ubuntu 24.04(noble)向けのリポジトリをそのまま使う。
03起動失敗:カーネル6.19以降との既知の非互換
MongoDB 8.x系に同梱されているTCMalloc(メモリアロケータ)と、Linuxカーネル6.19以降のrseq(restartable sequences)関連の変更に非互換がある、既知の問題だった。
バージョンを上げても直らない(TCMalloc側の問題でMongoDBのバージョン番号とは無関係なため)。mongodのsystemdユニットは標準でGLIBC_TUNABLES=glibc.pthread.rseq=0(rseq無効化)を設定しているが、
これがTCMallocとの相性問題を引き起こしているため、上書き設定で再度有効化する。
04mongorestoreのディレクトリ指定でつまずく
--dirにデータベース名のディレクトリそのものを指定してしまい、直下の.bsonファイルがどのデータベースに属すか判断できず「skipping」される事態に。
--dirには本来、データベース名ディレクトリを含む親ディレクトリを指定する。今回はMariaDBのバックアップと同じ場所に格納していた事情もあり、
--dbで対象を明示する方法で対応した。
mongosh loggingでshow collections・db.coll.findOne()を実行し、データ移行を確認。
05ここまでの状態
- PECL拡張を1つ入れることで、PECL直利用・Composerライブラリ両方のPHPアプリに対応
- Ubuntu 26.04向け公式リポジトリが未提供のため、Noble(24.04)向けリポジトリで代用
- カーネル6.19以降とTCMallocの既知の非互換を、systemdのGLIBC_TUNABLES上書きで回避
- mongorestoreの--dir/--db指定を整理し、データ移行を確認
- PHPアプリ側(Web経由・MQTT併用)の実地確認は⑮以降にあわせて実施予定