Difference between revisions of "MongoDB"
(28 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | == How to install MongoDB | + | ==How to install MongoDB== |
− | === Install Official Repository === | + | {{Note box| Manual configuration required}} |
− | + | ||
− | + | MongoDB 5.0+ requires the AVX CPU instruction set | |
− | + | ||
− | + | lscpu |grep avx | |
− | + | ||
− | + | ===Install Official Repository=== | |
− | + | ||
− | + | Use ExtraRepositories from here | |
+ | |||
+ | https://wiki.koozali.org/Extrarepositories | ||
+ | |||
+ | Note that versions are available from 4.0/1/2/3/4 -> 5.0 -> 6.0 | ||
+ | |||
+ | Please check which versions are deprecated - they should not be used. | ||
+ | |||
+ | https://www.mongodb.com/support-policy/lifecycles | ||
+ | |||
+ | As of July 2022 the oldest supported version is 4.2 until April 2023 | ||
+ | |||
+ | yum install smeserver-extrarepositories-mongodb | ||
signal-event yum-modify | signal-event yum-modify | ||
− | yum install mongodb-org --enablerepo=mongodb | + | Install your chosen version: |
+ | |||
+ | yum --enablerepo=mongodb4.2 install mongodb-org | ||
+ | |||
+ | 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 https://www.mongodb.org/static/pgp/server-4.0.asc | ||
+ | |||
+ | Or | ||
+ | |||
+ | yum --enablerepo=mongodb4.2 install mongodb-org --nogpgcheck | ||
+ | |||
+ | ===Starting Mongo=== | ||
+ | |||
+ | {{Warning box|Please check additional notes below before trying this section}} | ||
+ | {{Warning box| Complete work in progress - here be Dragons!}} | ||
+ | |||
+ | 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] | ||
+ | After=network.target network.service wan.service | ||
+ | [Install] | ||
+ | WantedBy=sme-server.target | ||
+ | |||
+ | ===Configuration File=== | ||
+ | |||
+ | Minimal config I use for Rocket.Chat | ||
+ | |||
+ | <nowiki>grep '^[[:blank:]]*[^[:blank:]#;]' /etc/mongod.conf</nowiki> | ||
+ | |||
+ | systemLog: | ||
+ | verbosity: 0 | ||
+ | destination: file | ||
+ | logAppend: true | ||
+ | path: /var/log/mongodb/mongod.log | ||
+ | storage: | ||
+ | dbPath: /var/lib/mongo | ||
+ | journal: | ||
+ | enabled: true | ||
+ | processManagement: | ||
+ | fork: true # fork and run in background | ||
+ | pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile | ||
+ | timeZoneInfo: /usr/share/zoneinfo | ||
+ | net: | ||
+ | port: 27017 | ||
+ | bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. | ||
+ | # Enable replication for Rocket.Chat | ||
+ | replication: | ||
+ | replSetName: rs0 | ||
+ | |||
+ | |||
+ | Once started you need to initialise the replicaset. Make sure to exit from the mongo instance and run from the cli: | ||
+ | |||
+ | mongo --eval "printjson(rs.initiate())" | ||
+ | |||
+ | You should now have a working mongoDB good enough to use with Rocket.Chat | ||
+ | |||
+ | |||
+ | ===Other settings=== | ||
+ | |||
+ | nano /etc/security/limits.conf | ||
+ | |||
+ | These settings are automatically added during installation | ||
+ | |||
+ | @mongod soft nproc unlimited | ||
+ | @mongod hard nproc unlimited | ||
+ | @mongod soft nofile 64000 | ||
+ | @mongod hard nofile 64000 | ||
+ | |||
+ | Adding a user | ||
+ | |||
+ | https://www.linode.com/docs/guides/install-mongodb-on-centos-7/ | ||
+ | |||
+ | use admin | ||
+ | |||
+ | db.createUser( | ||
+ | { | ||
+ | user: "admin", | ||
+ | pwd: "admin123", | ||
+ | roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | show users | ||
+ | |||
+ | We can then set Mongo to force authentication when connecting. | ||
+ | |||
+ | nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf | ||
+ | |||
+ | Add: | ||
+ | |||
+ | [Service] | ||
+ | Environment="OPTIONS=--auth -f /etc/mongod.conf" | ||
+ | |||
+ | Restart Mongo | ||
+ | |||
+ | systemctl restart mongod | ||
+ | |||
+ | You should now need a password to login. | ||
+ | |||
+ | ===Templating mongod.conf=== | ||
+ | |||
+ | This is possible but we need to create a new file so we do not overwrite the original - otherwise yum/rpm will complain. | ||
+ | |||
+ | Something like /etc/mongod/mongod.conf | ||
+ | |||
+ | Template fragments in | ||
+ | |||
+ | /etc/e-smith/templates/etc/mongod/mongod.conf | ||
+ | |||
+ | We can then amend the systemd overrride | ||
+ | |||
+ | nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf | ||
+ | |||
+ | Add this: | ||
+ | |||
+ | [Service] | ||
+ | Environment="OPTIONS=-f /etc/mongod/mongod.conf" | ||
+ | |||
+ | ===Dump and restore=== | ||
+ | |||
+ | Samples - YMMV. | ||
+ | |||
+ | Quick little script to dump the Rocket.Chat collection: | ||
+ | |||
+ | #!bin/bash | ||
+ | echo "Dump with Users/Roles" | ||
+ | mongodump --dumpDbUsersAndRoles -d rocketchat -o /root/backup/rocketchatmongo | ||
+ | echo "dump all" | ||
+ | mongodump -d rocketchat -o /root/backup/rocketchatmongo-all | ||
+ | |||
+ | |||
+ | {{Warning box| 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. | ||
+ | |||
+ | To restore: | ||
+ | |||
+ | mongorestore /root/backup/rocketchatmongo-all | ||
+ | |||
+ | ===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/ | ||
+ | _EOF | ||
+ | |||
+ | 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 box| 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())" | |
− | |||
---- | ---- | ||
[[Category:Howto]] | [[Category:Howto]] | ||
[[Category:Administration]] | [[Category:Administration]] | ||
+ | [[Category:Database]] |
Latest revision as of 16:57, 26 July 2023
How to install MongoDB
MongoDB 5.0+ requires the AVX CPU instruction set
lscpu |grep avx
Install Official Repository
Use ExtraRepositories from here
https://wiki.koozali.org/Extrarepositories
Note that versions are available from 4.0/1/2/3/4 -> 5.0 -> 6.0
Please check which versions are deprecated - they should not be used.
https://www.mongodb.com/support-policy/lifecycles
As of July 2022 the oldest supported version is 4.2 until April 2023
yum install smeserver-extrarepositories-mongodb
signal-event yum-modify
Install your chosen version:
yum --enablerepo=mongodb4.2 install mongodb-org
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 https://www.mongodb.org/static/pgp/server-4.0.asc
Or
yum --enablerepo=mongodb4.2 install mongodb-org --nogpgcheck
Starting Mongo
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] After=network.target network.service wan.service [Install] WantedBy=sme-server.target
Configuration File
Minimal config I use for Rocket.Chat
grep '^[[:blank:]]*[^[:blank:]#;]' /etc/mongod.conf
systemLog: verbosity: 0 destination: file logAppend: true path: /var/log/mongodb/mongod.log storage: dbPath: /var/lib/mongo journal: enabled: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27017 bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
- Enable replication for Rocket.Chat
replication: replSetName: rs0
Once started you need to initialise the replicaset. Make sure to exit from the mongo instance and run from the cli:
mongo --eval "printjson(rs.initiate())"
You should now have a working mongoDB good enough to use with Rocket.Chat
Other settings
nano /etc/security/limits.conf
These settings are automatically added during installation
@mongod soft nproc unlimited @mongod hard nproc unlimited @mongod soft nofile 64000 @mongod hard nofile 64000
Adding a user
https://www.linode.com/docs/guides/install-mongodb-on-centos-7/
use admin db.createUser( { user: "admin", pwd: "admin123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
show users
We can then set Mongo to force authentication when connecting.
nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf
Add:
[Service] Environment="OPTIONS=--auth -f /etc/mongod.conf"
Restart Mongo
systemctl restart mongod
You should now need a password to login.
Templating mongod.conf
This is possible but we need to create a new file so we do not overwrite the original - otherwise yum/rpm will complain.
Something like /etc/mongod/mongod.conf
Template fragments in
/etc/e-smith/templates/etc/mongod/mongod.conf
We can then amend the systemd overrride
nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf
Add this:
[Service] Environment="OPTIONS=-f /etc/mongod/mongod.conf"
Dump and restore
Samples - YMMV.
Quick little script to dump the Rocket.Chat collection:
#!bin/bash echo "Dump with Users/Roles" mongodump --dumpDbUsersAndRoles -d rocketchat -o /root/backup/rocketchatmongo echo "dump all" mongodump -d rocketchat -o /root/backup/rocketchatmongo-all
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.
To restore:
mongorestore /root/backup/rocketchatmongo-all
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/ _EOF
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
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())"