Changes

From SME Server
Jump to navigationJump to search
3,139 bytes added ,  17:57, 26 July 2023
no edit summary
Line 1: Line 1: −
== How to install MongoDB 4.0 ==
+
==How to install MongoDB==
   −
=== Install Official Repository ===
+
{{Note box| Manual configuration required}}
db yum_repositories set mongodb repository \
+
 
                BaseURL https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/ \
+
MongoDB 5.0+ requires the AVX CPU instruction set
                EnableGroups no \
+
 
                GPGCheck yes \
+
lscpu |grep avx
                Name "MongoDB" \
+
 
                GPGKkey https://www.mongodb.org/static/pgp/server-4.0.asc \
+
===Install Official Repository===
                Visible no \
+
 
                status disabled
+
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
 
If refuses to install because of no GPG Key you can change '''GPGCheck''' above from '''Yes''' to '''No''' and try '''yum install...'''  again or
Line 21: Line 35:  
Or
 
Or
   −
yum install mongodb-org --enablerepo=mongodb --nogpgcheck
+
  yum --enablerepo=mongodb4.2 install mongodb-org --nogpgcheck
   −
===Start Mongo===
+
===Starting Mongo===
    
{{Warning box|Please check additional notes below before trying this section}}
 
{{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
   −
{{Note box|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
+
{{Warning box| Do not restore between versions!!}}
   −
Add the symlinks to start automatically:
+
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.
   −
ln -s /etc/init.d/mongod /etc/rc.d/rc6.d/K03mongodb
+
Then change your repo, and then upgrade mongo.
ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongodb
     −
Optional: create symlink to use mongo or mongodb as service name
+
To restore:
   −
  ln /etc/init.d/mongod /etc/init.d/mongodb
+
  mongorestore /root/backup/rocketchatmongo-all
   −
To ensure everything is all right:
+
===Backup with system===
   −
signal-event post-upgrade
+
With credit to Daniel Berteaud
signal-event reboot
     −
===Additional Notes===
+
Action script to dump the mongo DB on pre-backup event
   −
Note - I need to test this again This is my initial observation.
+
mkdir -p /home/e-smith/db/mongo
   −
As far as I can see, the link above to mongodb is not necessary.
+
cat <<_EOF > /etc/e-smith/events/actions/mongodb-dump
 +
#!/bin/bash -e
 +
/usr/bin/mongodump --quiet --out /home/e-smith/db/mongo/
 +
_EOF
   −
It may need this to set on and off correctly in other service levels:
+
chmod +x /etc/e-smith/events/actions/mongodb-dump
 +
cd /etc/e-smith/events/pre-backup
 +
ln -s ../actions/mongodb-dump ./S60mongodb-dump
   −
chkconfig mongod on
+
===Vaporise or reinitialise the database===
   −
Create a service link in in rc7.d:
+
{{Warning box| This will totally and utterly vaporise your data. Got a backup?? You have been warned}}
   −
ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongod
+
Remove the directory contents:
   −
To use e-smith-service it will need a key:
+
rm -rf /var/lib/mongo/*
   −
config set mongod service status enabled
+
Or remove the entire directory and recreate it with the correct ownership:
   −
You should now be able to do:
+
rm -rf /var/lib/mongo
 +
mkdir -p /var/lib/mongo
 +
chown -R mongod:mongod /var/lib/mongo
   −
service mongod start|stop|restart etc
+
If you have a replicaset set in /etc/mongod.conf make sure you initiate it:
   −
Mongo should come up on boot.
+
mongo --eval "printjson(rs.initiate())"
    
----
 
----
 
[[Category:Howto]]
 
[[Category:Howto]]
 
[[Category:Administration]]
 
[[Category:Administration]]
 +
[[Category:Database]]

Navigation menu