はじめに
マークダウン形式でWikipediaのようにドキュメントを生成できるGrowiは以下公式サイトにあるようにdocker-compose
で利用でき
構成コンテナを見れば分かりますがMongoDBがデータベースとして利用されています。
$ docker-compose.exe ps Name Command State Ports ----------------------------------------------------------------------------------------- growi_app_1 /sbin/tini -e 143 -- /dock ... Up 127.0.0.1:3000->3000/tcp growi_elasticsearch_1 /usr/local/bin/docker-entr ... Up 9200/tcp, 9300/tcp growi_mongo_1 docker-entrypoint.sh mongod Up 27017/tcp
本記事ではGROWIで書いたデータが格納されている場所を特定して実際にMongoDB上で確認してみました。
環境情報
# mongo --version MongoDB shell version v4.2.6
サンプル記事作成
GROWIの初回アクセス時にSignUp/SignInの画面に遷移し、最初のユーザがAdmin権限となります。
app_1 | user { app_1 | isGravatarEnabled: false, app_1 | isEmailPublished: true, app_1 | lang: 'en-US', app_1 | status: 2, app_1 | admin: true, app_1 | _id: 5ef53e703f3d69004825c35a, app_1 | createdAt: xx, app_1 | name: 'test', app_1 | username: 'test', app_1 | email: 'testattest.com', app_1 | __v: 0 app_1 | }
testユーザで以下ページを作成した場合MongoDBにはどのように見えるのでしょうか。(一度 hoge とだけ書いて保存し再度以下のようにしました)
MongoDB上で確認する
MongoDBコンテナにログインしてデータベースを確認すると以下の構成です。
> show dbs admin 0.000GB config 0.000GB growi 0.001GB local 0.000GB
ここでuse growi
として記事作成前後でレコードが変化しているコレクションは以下。
> show collections ... pages ... revisions ...
さらに記事を修正するとrevisionsのみがレコードが増えるので、「pages」で記事の情報が、「revisions」で記事の中身が管理されていることが分かります。
実際に中身を確認すれば
> db.revisions.find()
以下のようにbody部分に「# hoge\ntest」という文言が確認できます。また、一度「hoge」という本文だけで保存したことも履歴として残っています。
{ "_id" : ObjectId("5ef5a71012cc0e004785f350"), "format" : "markdown", "createdAt" : ISODate(".."), "path" : "/user/test/me mo/../test", "body" : "hoge", "author" : ObjectId("5ef53e703f3d69004825c35a"), "__v" : 0 } { "_id" : ObjectId("5ef5abe012cc0e004785f353"), "format" : "markdown", "createdAt" : ISODate(".."), "path" : "/user/test/me mo/../test", "body" : "# hoge\ntest", "author" : ObjectId("5ef53e703f3d69004825c35a"), "hasDiffToPrev" : true, "__v" : 0 }
そして、pagesを見れば以下のように記事単位で管理している情報が確認できます。
{ "_id" : ObjectId("5ef5a71012cc0e004785f34f"), "status" : "published", "grant" : 1, "grantedUsers" : [ ], "liker" : [ ], "seenUsers" : [ ObjectI d("5ef53e703f3d69004825c35a") ], "commentCount" : 0, "extended" : "\"{}\"", "createdAt" : ISODate(".."), "updatedAt" : ISOD ate(".."), "path" : "/user/test/memo/../test", "creator" : ObjectId("5ef53e703f3d69004825c35a"), "lastUpdateUser" : ObjectId("5ef53e703f3d69004825c35a"), "redirectTo" : null, "grantedGroup" : null, "__v" : 1, "revision" : ObjectId("5ef5abe012cc0e004785f353") }
終わりに
GROWIとしてのブラウザを利用せずに記載されているテキストを見たい場合に利用できます。
ちなみに、MongoDB上では「Only me (Browsing of this page is restricted)」となっているページも内容も確認できるのでデータの取り扱いにはご注意ください。
以上、GROWIの格納データの中身を見る方法でした。