From charlesreid1

Covering some notes on MongoDB for the UGR wifi project.

Goals for This Page

MongoDB goals:

  • Figure out remote installation procedure for MongoDB on reidmachine.party
  • Get MongoDB running on remote machine
  • Hello world scripts for local usage
    • Adding db (term.?)
    • Adding table (term.?)
    • Adding document
    • Query documents, all records within date range, all records matching mac address, all clients on certain network, all macs matching certain prefix pattern
  • Hello world scripts for remote usage
    • Remote usage if no network firewall
    • Server listens on remote port for external requests
    • Client sends requests out on a public port
  • Get MongoDB working over stunnel
  • Get MongoDB set up in a docker container with a persistent data storage volume

Helpful links

Use the already-finished instructions here:

Once all of this is done, use the PyMODM library:

Installing

Mac

On a Mac, to test things out:

brew install mongodb --with-openssl
pip install pymodm

Ubuntu

On Ubuntu, the eventual server platform - do not apt-get install mongodb! It is crusty and an entire major version out of date.

Instead, follow MongoDB instructions here: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

To get Python interface to MongoDB:

apt-get install python-pip    # may be necessary
pip install pymodm

Configuration File

Path to config files

On a Mac, the configuration file should be located in /usr/local/etc/mongod.conf.

On Unbuntu, the config file should be in /etc/mongod.conf.

Default config files

The default port is 27017 and the default bind address is 127.0.0.1. That will make MongoDB available only locally:

mongod.conf (homebrew default, v 3.4.2)

systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

mongod.conf (following instructions from MongoDB, see above, 3.4.3)

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1


#processManagement:

#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

To get MongoDB up and running and tested locally, I will stick with the default config file.

Starting

Starting Using Mongod Command

The location of the mongo daemon mongod should be in your PATH, but if not, enter the full path to the binary when running the mongod command. This will use the default configuration file.

<path to binary>/mongod

On Ubuntu, if installing via apt-get, it should be available as a service that can be started and stopped:

sudo service mongod start

Verify everything is hunky dory by checking the log file:

cat /var/log/mongodb/mongod.log

You can also check if it is running:

ps aux | grep [m]ongod


Starting Mongod with Specified Configuration File

To start with a specified config file, use the -f flag:

mongod -f /usr/local/etc/mongod.conf

Starting Mongod with Specified Data Directory

To specify the path to a directory to use as the database directory, use the --dbpath flag:

mongod --dbpath <path to data directory>

Alternatively, if you are on Ubuntu and starting MongoDB as a service, use the configuration file to set where MongoDB data is stored:

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb