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}} |
| | | |
− | === Install Official Repository ===
| + | MongoDB 5.0+ requires the AVX CPU instruction set |
| | | |
− | This should work for every version of Koozali SME
| + | lscpu |grep avx |
| | | |
− | You may need to change the mongodb version as required
| + | ===Install Official Repository=== |
| | | |
− | db yum_repositories set mongodb repository \
| + | Use ExtraRepositories from here |
− | BaseURL https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/$basearch/ \
| + | |
− | EnableGroups no \
| + | https://wiki.koozali.org/Extrarepositories |
− | GPGCheck yes \
| + | |
− | Name "MongoDB" \
| + | Note that versions are available from 4.0/1/2/3/4 -> 5.0 -> 6.0 |
− | GPGKkey https://www.mongodb.org/static/pgp/server-4.0.asc \
| + | |
− | Visible no \
| + | Please check which versions are deprecated - they should not be used. |
− | status disabled
| + | |
| + | 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 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!}} |
| + | |
| + | We need a db config entry for SME to recognise it: |
| + | |
| + | config set mongod service status enabled access private |
| | | |
− | {{Note box|If you start mongo like this you will run mongo as root.
| + | We will need a file |
− | 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 | + | mkdir -p /usr/lib/systemd/system/mongod.service.d |
| | | |
− | Add the symlinks to start automatically:
| + | nano /usr/lib/systemd/system/mongod.service.d/50koozali.conf |
| | | |
− | ln -s /etc/init.d/mongod /etc/rc.d/rc6.d/K03mongodb
| + | Something like: |
− | ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongodb
| |
| | | |
− | Optional: create symlink to use mongo or mongodb as service name
| + | [Unit] |
| + | After=network.target network.service wan.service |
| + | [Install] |
| + | WantedBy=sme-server.target |
| | | |
− | ln /etc/init.d/mongod /etc/init.d/mongodb
| + | ===Configuration File=== |
| | | |
− | To ensure everything is all right:
| + | Minimal config I use for Rocket.Chat |
| | | |
− | signal-event post-upgrade | + | <nowiki>grep '^[[:blank:]]*[^[:blank:]#;]' /etc/mongod.conf</nowiki> |
− | signal-event reboot
| |
| | | |
− | ===Additional Notes===
| + | 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 |
| | | |
− | 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.
| + | Once started you need to initialise the replicaset. Make sure to exit from the mongo instance and run from the cli: |
| | | |
− | It may need this to set on and off correctly in other service levels:
| + | mongo --eval "printjson(rs.initiate())" |
| | | |
− | chkconfig mongod on
| + | You should now have a working mongoDB good enough to use with Rocket.Chat |
| | | |
− | Create a service link in in rc7.d:
| |
| | | |
− | ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongod
| + | ===Other settings=== |
| | | |
− | To use e-smith-service it will need a key:
| + | nano /etc/security/limits.conf |
| | | |
− | config set mongod service status enabled
| + | These settings are automatically added during installation |
| | | |
− | You should now be able to do:
| + | @mongod soft nproc unlimited |
| + | @mongod hard nproc unlimited |
| + | @mongod soft nofile 64000 |
| + | @mongod hard nofile 64000 |
| | | |
− | service mongod start|stop|restart etc
| + | Adding a user |
| | | |
− | Mongo should come up on boot.
| + | https://www.linode.com/docs/guides/install-mongodb-on-centos-7/ |
| | | |
| + | use admin |
| + | |
| + | db.createUser( |
| + | { |
| + | user: "admin", |
| + | pwd: "admin123", |
| + | roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] |
| + | } |
| + | ) |
| | | |
− | ==Koozali SME v10==
| + | show users |
| | | |
− | {{Warning box| Complete work in progress - here be Dragons!}} | + | 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. |
| | | |
− | ===Install===
| + | To restore: |
− | Use the above method to add the repo and then:
| |
| | | |
− | yum --enablerepo=mongodb install mongodb-org | + | mongorestore /root/backup/rocketchatmongo-all |
| | | |
− | Mongo will automatically create a symlink so currently there is no way to enable/disable it apart from manually. Once Koozali SME has some more systemd tools we can use DB keys etc.
| + | ===Backup with system=== |
| | | |
− | Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service
| + | With credit to Daniel Berteaud |
| | | |
− | To enable/disable this just use:
| + | Action script to dump the mongo DB on pre-backup event |
| | | |
− | systemctl {en|dis}able mongodb | + | mkdir -p /home/e-smith/db/mongo |
| | | |
− | And to start stop
| + | cat <<_EOF > /etc/e-smith/events/actions/mongodb-dump |
| + | #!/bin/bash -e |
| + | /usr/bin/mongodump --quiet --out /home/e-smith/db/mongo/ |
| + | _EOF |
| | | |
− | systemctl {start|stop|restart} mongodb | + | 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=== | | ===Vaporise or reinitialise the database=== |
Line 120: |
Line 215: |
| [[Category:Howto]] | | [[Category:Howto]] |
| [[Category:Administration]] | | [[Category:Administration]] |
| + | [[Category:Database]] |