Changes

Jump to navigation Jump to search
782 bytes added ,  16:57, 26 July 2023
no edit summary
Line 1: Line 1: −
==How to install MongoDB 4.0==
+
==How to install MongoDB==
   −
{{Note box| All info is based on SME Server 9 only but I have just started to test on v10 - see notes below}}
+
{{Note box| Manual configuration required}}
 +
 
 +
MongoDB 5.0+ requires the AVX CPU instruction set
 +
 
 +
lscpu |grep avx
    
===Install Official Repository===
 
===Install Official Repository===
   −
This should work for every version of Koozali SME
+
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
   −
You may need to change the mongodb version as required
+
Please check which versions are deprecated - they should not be used.
   −
db yum_repositories set mongodb repository \
+
https://www.mongodb.com/support-policy/lifecycles
                BaseURL https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/$basearch/ \
+
 
                EnableGroups no \
+
As of July 2022 the oldest supported version is 4.2 until April 2023
                GPGCheck yes \
+
 
                Name "MongoDB" \
+
yum install smeserver-extrarepositories-mongodb
                GPGKkey https://www.mongodb.org/static/pgp/server-4.0.asc \
  −
                Visible no \
  −
                status disabled
      
  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 28: 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!}}
   −
{{Note box|If you start mongo like this you will run mongo as root.
+
We need a db config entry for SME to recognise it:
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
+
  config set mongod service status enabled access private
   −
Add the symlinks to start automatically:
+
We will need a file
   −
  ln -s /etc/init.d/mongod /etc/rc.d/rc6.d/K03mongodb
+
  mkdir -p /usr/lib/systemd/system/mongod.service.d
ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongodb
     −
Optional: create symlink to use mongo or mongodb as service name
+
nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf
   −
ln /etc/init.d/mongod /etc/init.d/mongodb
+
Something like:
   −
To ensure everything is all right:
+
[Unit]
 +
After=network.target network.service wan.service
 +
[Install]
 +
WantedBy=sme-server.target
   −
signal-event post-upgrade
+
===Configuration File===
signal-event reboot
     −
===Additional Notes===
+
Minimal config I use for Rocket.Chat
   −
Note - I need to test this again This is my initial observation.
+
<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
   −
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:
+
Once started you need to initialise the replicaset. Make sure to exit from the mongo instance and run from the cli:
   −
  chkconfig mongod on
+
  mongo --eval "printjson(rs.initiate())"
   −
Create a service link in in rc7.d:
+
You should now have a working mongoDB good enough to use with Rocket.Chat
   −
ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongod
     −
To use e-smith-service it will need a key:
+
===Other settings===
   −
  config set mongod service status enabled
+
  nano /etc/security/limits.conf
   −
You should now be able to do:
+
These settings are automatically added during installation
   −
service mongod start|stop|restart etc
+
@mongod       soft        nproc      unlimited
 +
@mongod      hard      nproc        unlimited
 +
@mongod      soft      nofile      64000
 +
@mongod      hard      nofile      64000
   −
Mongo should come up on boot.
+
Adding a user
    +
https://www.linode.com/docs/guides/install-mongodb-on-centos-7/
   −
==Koozali SME v10==
+
use admin
 +
 +
db.createUser(
 +
  {
 +
    user: "admin",
 +
    pwd: "admin123",
 +
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
 +
  }
 +
)
   −
{{Warning box| Complete work in progress - here be Dragons!}}
+
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
   −
===Install===
+
Add this:
   −
WIP
+
[Service]
 +
Environment="OPTIONS=-f /etc/mongod/mongod.conf"
   −
db yum_repositories set mongodb42 repository \
+
===Dump and restore===
              BaseURL [https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.2/$basearch/ https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.2/\$basearch/] \
  −
              EnableGroups no \
  −
              GPGCheck yes \
  −
              Name "MongoDB" \
  −
              GPGKkey https://www.mongodb.org/static/pgp/server-4.2.asc \
  −
              Visible no \
  −
              status disabled
      +
Samples - YMMV.
   −
Use the above method to add the repo and then:
+
Quick little script to dump the Rocket.Chat collection:
   −
  yum --enablerepo=mongodb install mongodb-org
+
  #!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
   −
We need a db config entry for SME to recognise it:
     −
config set mongod service status enabled access private
+
{{Warning box| Do not restore between versions!!}}
   −
We will need a file
+
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.
   −
/usr/lib/systemd/system/mongod.service/50koozali.conf
+
Then change your repo, and then upgrade mongo.
   −
Something like:
+
To restore:
   −
  [Unit]
+
  mongorestore /root/backup/rocketchatmongo-all
After=network.target network.service wan.service
  −
[Install]
  −
WantedBy=sme-server.target
      +
===Backup with system===
   −
===Using keys===
+
With credit to Daniel Berteaud
   −
config setprop mongod service status enabled
+
Action script to dump the mongo DB on pre-backup event
   −
Minimal config I use for Rocket.Chat
+
mkdir -p /home/e-smith/db/mongo
   −
  <nowiki>grep '^[[:blank:]]*[^[:blank:]#;]' /etc/mongod.conf</nowiki>
+
  cat <<_EOF > /etc/e-smith/events/actions/mongodb-dump
 +
#!/bin/bash -e
 +
/usr/bin/mongodump --quiet --out /home/e-smith/db/mongo/
 +
_EOF
   −
  systemLog:
+
  chmod +x /etc/e-smith/events/actions/mongodb-dump
  verbosity: 0
+
  cd /etc/e-smith/events/pre-backup
  destination: file
+
  ln -s ../actions/mongodb-dump ./S60mongodb-dump
  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.
  −
replication:
  −
  replSetName: rs0
      
===Vaporise or reinitialise the database===
 
===Vaporise or reinitialise the database===
Line 164: Line 215:  
[[Category:Howto]]
 
[[Category:Howto]]
 
[[Category:Administration]]
 
[[Category:Administration]]
 +
[[Category:Database]]

Navigation menu