fly.io上でmongodb環境を構築
設定
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