docker-parse-mongo
docker-parse-mongo copied to clipboard
Parse Server with MongoDB ReplicaSet using Docker (for AWS EC2 or GCP GCE)
Parse Server with MongoDB ReplicaSet using Docker
This branch is for AWS EC2
If you want to use Google Cloud Platform, try GCP branch
Notes
It's probably not a good idea to run this setup in production as each mongo instance should be split across different machines. However for a single ec2 instance environment this fits our needs.
Usage
-
Start and show logs (turn off logs : ctrl+c)
docker-compose up -d && docker-compose logs -f or) ./prod_start.sh
-
Stop
docker-compose down or) ./prod_stop.sh
-
Restart parseapi container
docker-compose restart parseapi or) ./prod_restart.sh
Setup
Init MongoDB
-
Initial replicaset
$ docker-compose -f docker-compose-init.yml up (Stop after all work is done : ctrl + c)
-
Copy, remove '_sample' from the name, and change password these files
- /scripts/config_sample.sh > /scripts/config.sh
- /parse-server/config_sample.sh > /parse-server/config.sh
- /parse-server/config_dev_sample.sh > /parse-server/config_dev.sh
-
Add authentication
$ docker-compose -f docker-compose-addauth.yml up (Stop after all work is done : ctrl + c)
If added user failed, retry until shown 'Successfully added user'.
Change Parse-server Keys
-
You need to change Parse-server keys in these files.
- /parse-server/config.sh
- /parse-server/config_dev.sh
-
For making new keys, I recommend to use randomkeygem.com
Parse-server
-
Default address
curl http://localhost/parse
-
Dashboard (Web Data Browser)
ttp://localhost/dashboard
Parse Server external path
- 'parse-server/cloud' and 'parse-server/public' are accessable volume.
- you can modify them and restart parseapi container for deploy.
Development
-
The MongoDB can be remotely located instance and you can run the local parse-server to facilitate cloud-code development.
ocker-compose -f docker-compose-dev.yml up -d && docker-compose logs -f or) ./dev_start.sh
Access Bash shell of Container
-
Check Status of Docker containers
docker ps ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ea1556bbf6 node:6 "/parse/setup.sh" About a minute ago Up About a minute 0.0.0.0:1337->1337/tcp dockerparsemongo_parseapi_1 2cfb5cdbfd8 mongo:3.4 "mongod --replSet ..." About a minute ago Up About a minute 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp dockerparsemongo_mongo1_1 c2627bb53a7 mongo:3.4 "mongod --replSet ..." About a minute ago Up About a minute 0.0.0.0:27019->27017/tcp, 0.0.0.0:28019->28017/tcp dockerparsemongo_mongo2_1 b3996cdf662 mongo:3.4 "mongod --replSet ..." About a minute ago Up About a minute 0.0.0.0:27018->27017/tcp, 0.0.0.0:28018->28017/tcp dockerparsemongo_mongo3_1
docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------------------------------- ockerparsemongo_mongo1_1 mongod --replSet rs0 --jou ... Up 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp ockerparsemongo_mongo2_1 mongod --replSet rs0 --jou ... Up 0.0.0.0:27019->27017/tcp, 0.0.0.0:28019->28017/tcp ockerparsemongo_mongo3_1 mongod --replSet rs0 --noj ... Up 0.0.0.0:27018->27017/tcp, 0.0.0.0:28018->28017/tcp ockerparsemongo_mongosetup_1 /scripts/setup.sh Exit 0 ockerparsemongo_parseapi_1 /parse/setup.sh Up 0.0.0.0:1337->1337/tcp
-
Access shell of Parse-server container with
-
docker exec -it dockerparsemongo_parseapi_1 bash
-
docker-compose exec parseapi bash
-
-
Access shell of MongoDB container with
-
docker exec -it dockerparsemongo_mongo1_1 bash
-
docker-compose exec mongo1 bash
-
And, access mongo shell using
mongo
-
Host O/S Guide
Choose your favorite Linux, such as AML or Ubuntu. Docker and Docker-Compose are required.
Add swap
-
t1-micro has 1Gb memory, requires swap
sudo fallocate -l 2G /swapfile sudo chown root:root /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon -a sudo vi /etc/fstab Add it to the last line.) swapfile swap swap defaults 0 0 sudo swapon -s free -m
MongoDB Storage for EC2
-
When created EC2 instance, add 3 ebs volumes for db path.
-
mount ebs volumes to './data/rs0-1', './data/rs0-2', './data/rs0-3'
-
The free tier provides 30 GB of storage, I recommend this capacity configuration.
- host : 9 GB / rs0-1 : 10 GB / rs0-2 : 10 GB / rs0-3 : 1 GB
sudo mkfs.ext4 /dev/xvdb sudo mkfs.ext4 /dev/xvdc sudo mkfs.ext4 /dev/xvdd echo '/dev/xvdb __your-path__/data/rs0-1 ext4 defaults,auto,noatime,noexec 0 0 dev/xvdc __your-path__/data/rs0-2 ext4 defaults,auto,noatime,noexec 0 0 dev/xvdd __your-path__/data/rs0-3 ext4 defaults,auto,noatime,noexec 0 0' | sudo tee -a /etc/fstab
MongoDB Guide
MongoDB Backup & Restore
- I recommend to use aws ebs snapshot for backup & restore.
- And, you can read it.
Management MongoDB
- I reccommend to use adminMongo
- Thank you @mrvautin