MongoDB Ops Manager+mkcertでhttps化する (前編)#MongoDB #mkcert #OpsManager
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
MongoDBでは、MongoDBサーバをデプロイ、監視、バックアップ、スケーリングを可能にするセルフホステッド管理プラットフォームOps Managerが用意されています。レプリカセットやシャーディングで台数が増えがちなMongoDBサーバを一元管理できる大変便利なツールです。Automation,Monitoring,Backupという主に3つの機能が用意されています。
手軽に始めたいのであれば、Ops Managerのクラウド版であるCloudManagerがあるのでそちらで試すことができます。モニタリング目的ならば、New RelicやDatadogといったオブザーバビリティSaaSにあるMongoDBプラグインを使うのが良いでしょう。しかし、閉じられた環境で稼働するMongoDBサーバを管理するために、Ops Managerを導入したい場面もあるかと思います。
管理者はブラウザを使用してwebUIからOps Managerを操作します。昨今、webUIはhttps化が前提とされており、Ops Managerも例外ではありません。Ops ManagerでTLS通信を有効にする方法は公式でドキュメント化されていますが、実際にやってみると躓くポイントが多かったため、Ops Managerインストールからhttps化し、MongoDB Agentを通してMongoDBサーバのMonitoringを開始するまでの手順を記事にまとめることにしました。
暗号化する経路
今回の手順を実施することで、以下の経路が暗号化されます。
- 管理者のPCからOps ManagerのwebUI管理画面への接続
- MongoDBサーバのMongoDB AgentからOps Managerへの接続
構築環境
これらのサーバはすべて同一セグメント内に存在し、互いに通信・名前解決が可能です。
Ops Managerは評価環境として構築します。Ops Managerのアプリケーションと、アプリケーションDBとなるMongoDB(Community版)を同一サーバにインストールします。本番環境ではアプリケーションDBもReplicaSetで構築することが推奨されていることに注意してください。
使用するバージョンとホスト名は以下の通りです。登場するサーバのOSはすべてDebian GNU/Linux bullzeye (11.7)を使用しています。
Ops Manager | 6.0.13 |
ホスト名 | opsmgrsv.mongo.lab |
一般ユーザ | suletta |
rootユーザ | root |
アプリケーションDB | MongoDB Community 5.0.17 |
MongoDB Server | MongoDB Enterprise 5.0.17 |
ホスト名 | rep1sv.mongo.lab |
一般ユーザ | nika |
rootユーザ | root |
Ops Managerのインストール
アプリケーションDBのインストール
MongoDB Community Editionをインストールします。インストール手順については以下のドキュメントを参照してください。公式ドキュメントの手順ではRHEL8系を使用していますが、もちろんDebian GNU/Linuxでもインストール可能です。
Install MongoDB Community Edition
Install a Simple Test Ops Manager Installation — MongoDB Ops Manager 6.0
$ sudo apt-get install gnupg $ curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \ sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \ --dearmor $ echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list $ sudo apt-get update $ sudo apt-get install -y mongodb-org $ sudo systemctl disable mongod
アプリケーションDBとして利用するためのディレクトリを作成します。
$ sudo mkdir -p /data/appdb $ sudo chown -R mongodb:mongodb /data
設定ファイルを修正します。
suletta@opsmgrsv /etc $diff mongod.conf.orig mongod.conf 8c8,9 < dbPath: /var/lib/mongodb --- > # dbPath: /var/lib/mongodb > dbPath: "/data/appdb" 10c11,13 < # wiredTiger: --- > wiredTiger: > engineConfig: > cacheSizeGB:1 16c19,20 < path: /var/log/mongodb/mongod.log --- > # path: /var/log/mongodb/mongod.log > path: "/data/appdb/mongodb.log" 22a27,28 > setParameter: > enableLocalhostAuthBypass: false
起動します。
$sudo systemctl status mongod ● mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2023-05-18 16:28:27 JST; 1min 32s ago Docs: https://docs.mongodb.org/manual Main PID: 2662 (mongod) Memory: 174.0M CPU: 575ms CGroup: /system.slice/mongod.service mq2662 /usr/bin/mongod --config /etc/mongod.conf 5月 18 16:28:27 opsmgrsv systemd[1]: Started MongoDB Database Server. 5月 18 16:28:27 opsmgrsv mongod[2662]: {"t":{"$date":"2023-05-18T07:28:27.999Z"},"s":"I", "c":"CONTROL", "id":5760901, > 5月 18 16:28:27 opsmgrsv mongod[2662]: {"t":{"$date":"2023-05-18T07:28:27.999Z"},"s":"I", "c":"CONTROL", "id":7484500,
suletta@opsmgrsv /etc $ps -ef | grep mongod mongodb 2662 1 0 16:28 ? 00:00:00 /usr/bin/mongod --config /etc/mongod.conf suletta 2716 2507 0 16:30 pts/1 00:00:00 grep mongod
サービスも稼働していますし、プロセスもありますね。mongodは問題なく動いているようです。
Ops Managerのインストール
Debian GNU/Linuxを使用しているので、以下のドキュメントを参考に実行しました。公式でパッケージを検証する方法もドキュメント化されているので、併せて実施することにします。
Install Ops Manager with a deb Package — MongoDB Ops Manager 6.0
Verify Integrity of Ops Manager Packages — MongoDB Ops Manager 6.0
Ops Managerは誰でも公式サイトからダウンロード可能ですが、MongoDB Enterprise Advanced(EA, 有償版)で提供しているツールです。本番環境で使用するとライセンス違反となるでしょう。
Ops Managerのdebパッケージ、公開鍵、公開署名をダウンロードします。
$ curl -O https://downloads.mongodb.com/on-prem-mms/deb/mongodb-mms-6.0.13.100.20230502T1610Z.amd64.deb $ curl -O https://pgp.mongodb.com/opsmanager-6.0.asc $ curl -O https://downloads.mongodb.com/on-prem-mms/deb/mongodb-mms-6.0.13.100.20230502T1610Z.amd64.deb.sig
ascファイルをインポートし、パッケージを検証します。
$ gpg --import opsmanager-6.0.asc $ gpg --verify mongodb-mms-6.0.13.100.20230502T1610Z.amd64.deb.sig mongodb-mms-6.0.13.100.20230502T1610Z.amd64.deb gpg: Signature made Wed May 3 01:21:06 2023 JST gpg: using RSA key DFC3F9FC236ED5A4 gpg: Good signature from "Ops Manager 6.0 Release Signing Key <packaging@mongodb.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4565 4291 5E7F 5EAA 7971 1721 DFC3 F9FC 236E D5A4
Good signatureと表示されていれば、署名を正常に検証できています。
前置きが大変長くなりました!Ops Managerをインストールしましょう。
$ sudo dpkg --install mongodb-mms-6.0.13.100.20230502T1610Z.amd64.deb
インストールが終わったので、起動してみましょう。
$ sudo systemctl status mongodb-mms.service ● mongodb-mms.service - MongoDB Ops Manager Loaded: loaded (/lib/systemd/system/mongodb-mms.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2023-05-18 16:52:51 JST; 4s ago Main PID: 2825 (mongodb-mms) Memory: 2.0M CPU: 14ms CGroup: /system.slice/mongodb-mms.service mq2825 /bin/bash /opt/mongodb/mms/bin/mongodb-mms start 5月 18 16:52:51 opsmgrsv systemd[1]: Started MongoDB Ops Manager. 5月 18 16:52:51 opsmgrsv mongodb-mms[2833]: tput: No value for $TERM and no -T specified 5月 18 16:52:51 opsmgrsv mongodb-mms[2825]: Generating new Ops Manager private key... 5月 18 16:52:51 opsmgrsv su[2846]: (to mongodb-mms) root on none 5月 18 16:52:51 opsmgrsv su[2846]: pam_unix(su:session): session opened for user mongodb-mms(uid=998) by (uid=0)
systemctlからは動いているように見えますが、実際にweb管理画面にアクセスできるようになるまでには5分ほどかかります。
以下のURLでアクセス可能です。
http://<FQDN>:8080/
ログイン画面が表示されれば、インストールは成功です!
忘れないうちに、初期設定を済ませておきます。Sign Upからユーザー登録をしておきましょう。
そのあとは初期設定を行います。https用のサーバ証明書もここで設定可能ですが、今の段階ではひとまず空欄でOKです。
Client Certificate Modeは今回は使用しないため、Noneにしておきます。
他のrequired(必須項目)を埋めていきます。Email Addressは実際に利用可能なアドレスを入力してください。
Ops Managerからメールを送信するため、SMTPサーバの設定が必須となっています。今回はOps Managerをインストールするサーバ内にpostfixをインストールし、利用可能としていますが、外部のSMTPサーバでも構いません。
設定したらContinueで先に進みます。2,3,4,5ページ目もデフォルト設定とします。
この画面までこれば初期設定は完了です。
ログアウトする前にプロジェクトを作成しておきましょう。
作成しておかないと、ログアウト後にログインできなくなってしまいます。筆者もこのトラブルに遭遇し、「そんなことあるか?!」と思ったのですが、同じトラブルに出会った人がForumsに投稿してくれていました。ログアウトしてしまうとOps Managerの再インストールするしかなくなりますので注意してください。私は…再インストールしました。
Ops Manager new install, unable to login
長くなってしまったので、後編に続きます。
次回はmkcertでオレオレCAを構築するところからやっていきます。