From SME Server

How to install MongoDB 4.0

Important.png Note:
All info is based on SME Server 9 only but I have just started to test on v10 - see notes below

Install Official Repository

This should work for every version of Koozali SME

You may need to change the mongodb version as required

db yum_repositories set mongodb repository \
               BaseURL\$releasever/mongodb-org/4.0/\$basearch/ \
               EnableGroups no \
               GPGCheck yes \
               Name "MongoDB" \
               GPGKkey \
               Visible no \
               status disabled
signal-event yum-modify
yum install mongodb-org --enablerepo=mongodb

If refuses to install because of no GPG Key you can change GPGCheck above from Yes to No and try yum install... again or

rpm --import


yum install mongodb-org --enablerepo=mongodb --nogpgcheck

Start Mongo

Warning.png Warning:
Please check additional notes below before trying this section

Important.png Note:
If you start mongo like this you will run mongo as root.

When mongo later tries to start automatically it may fail because it will be started as the mongod user and won't be able to access the DB files.

/etc/init.d/mongod start

Add the symlinks to start automatically:

ln -s /etc/init.d/mongod /etc/rc.d/rc6.d/K03mongodb
ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongodb

Optional: create symlink to use mongo or mongodb as service name

ln /etc/init.d/mongod /etc/init.d/mongodb

To ensure everything is all right:

signal-event post-upgrade
signal-event reboot

Additional Notes

Note - I need to test this again This is my initial observation.

As far as I can see, the link above to mongodb is not necessary.

It may need this to set on and off correctly in other service levels:

chkconfig mongod on

Create a service link in in rc7.d:

ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongod

To use e-smith-service it will need a key:

config set mongod service status enabled

You should now be able to do:

service mongod start|stop|restart etc

Mongo should come up on boot.

Koozali SME v10

Warning.png Warning:
Complete work in progress - here be Dragons!



db yum_repositories set mongodb42 repository \
              BaseURL\$releasever/mongodb-org/4.2/\$basearch/ \
              EnableGroups no \
              GPGCheck yes \
              Name "MongoDB" \
              GPGKey \
              Visible no \
              status disabled
signal-event yum-modify

Use the above method to add the repo and then:

yum --enablerepo=mongodb42 install mongodb-org

We need a db config entry for SME to recognise it:

config set mongod service status enabled access private

We will need a file

mkdir -p /usr/lib/systemd/system/mongod.service.d
nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf

Something like:

[Unit] network.service wan.service

Using keys

config setprop mongod service status enabled

Minimal config I use for Rocket.Chat

grep '^[[:blank:]]*[^[:blank:]#;]' /etc/mongod.conf
 verbosity: 0
 destination: file
 logAppend: true
 path: /var/log/mongodb/mongod.log
 dbPath: /var/lib/mongo
   enabled: true
 fork: true  # fork and run in background
 pidFilePath: /var/run/mongodb/  # location of pidfile
 timeZoneInfo: /usr/share/zoneinfo
 port: 27017
 bindIp:  # Enter,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
  1. Enable replication for Rocket.Chat
 replSetName: rs0

Once started you need to initialises the replicaset:

mongo --eval "printjson(rs.initiate())"

Dump and restore

Samples - YMMV.

Quick little script to dump the Rocket.Chat collection:

echo "Dump with Users/Roles"
mongodump --dumpDbUsersAndRoles -d rocketchat -o /root/backup/rocketchatmongo
echo "dump all"
mongodump -d rocketchat -o /root/backup/rocketchatmongo-all

And to restore:

mongorestore /root/backup/rocketchatmongo-all

Do not restore between versions.

If you export from a version eg 4.0 then restore to that version. Do not try and restore 4.0 to 4.2 or higher.

Then change your repo, and then upgrade mongo.

Backup with system

With credit to Daniel Berteaud

Action script to dump the mongo DB on pre-backup event

mkdir -p /home/e-smith/db/mongo
cat <<_EOF > /etc/e-smith/events/actions/mongodb-dump
#!/bin/bash -e
/usr/bin/mongodump --quiet --out /home/e-smith/db/mongo/
chmod +x /etc/e-smith/events/actions/mongodb-dump
cd /etc/e-smith/events/pre-backup
ln -s ../actions/mongodb-dump ./S60mongodb-dump

Vaporise or reinitialise the database

Warning.png Warning:
This will totally and utterly vaporise your data. Got a backup?? You have been warned

Remove the directory contents:

rm -rf /var/lib/mongo/*

Or remove the entire directory and recreate it with the correct ownership:

rm -rf /var/lib/mongo
mkdir -p /var/lib/mongo
chown -R mongod:mongod /var/lib/mongo

If you have a replicaset set in /etc/mongod.conf make sure you initiate it:

mongo --eval "printjson(rs.initiate())"