less than 1 minute read

設定

mongodb-flをローカル環境にクローン。

READMEの記載の通りに設定すれば基本的にOK。

このとき、管理ユーザは以下で作成した。

mongosh
use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})

DB(kabucraft)ユーザは以下で作成

use kabucraft
db.createUser({ user: "kcuser" , pwd: "kcuser123!", roles: [ {role:"dbOwner",  db: "kabucraft"}, {role:"readWrite",  db: "kabucraft"}, {role: "dbAdmin", db: "kabucraft"}, {role: "userAdmin", db: "kabucraft"}]})

このままでも動作するが、重いクエリを実行するとOOMEでダウンするので以下でswapを定義する必要あり。

Dockerfileを以下のように修正

+ COPY docker-entrypoint /etc/docker-entrypoint
+ RUN chmod +x /etc/docker-entrypoint
...
- ENTRYPOINT ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]
+ ENTRYPOINT ["/etc/docker-entrypoint"]
+ CMD ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]

docker-entrypointをクローンしたmongodb-fly直下に配置。

#!/bin/bash -e

# If running the rails server then create or migrate existing database
#if [ "${*}" == "./bin/rails server" ]; then
#  ./bin/rails db:prepare
#fi

if [ $UID -eq 0 ]; then
  fallocate -l 512M /swapfile
  chmod 0600 /swapfile
  mkswap /swapfile
  echo 10 > /proc/sys/vm/swappiness
  swapon /swapfile
  echo 1 > /proc/sys/vm/overcommit_memory
  #exec su nobody -s /bin/bash -c "$0 $@"
  #exec su rails $0 $@
  exec "${@}"
fi

exec "${@}"

設定が上手くいけばMongoDB Compassから以下で接続できるようになる。

mongodb://mongoadmin:[email protected]:27017/?directConnection=true
mongodb://kcuser:[email protected]:27017/kabucraft?directConnection=true

参考情報