Line 1: |
Line 1: |
− | == How to install MongoDB 4.0 == | + | ==How to install MongoDB== |
| + | |
| + | {{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 |
| | | |
− | === Install Official Repository ===
| |
− | db yum_repositories set mongodb repository \
| |
− | BaseURL https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/ \
| |
− | EnableGroups no \
| |
− | GPGCheck yes \
| |
− | Name "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
| |
− | if refuses to install because o GPG Key you can change '''GPGCheck''' above from '''Yes''' to '''No''' and try '''yum install...''' again or
| |
− | yum install mongodb-org --enablerepo=mongodb --nogpgcheck
| |
| | | |
− | ===Start Mongo=== | + | Install your chosen version: |
− | /etc/init.d/mongod start | + | |
| + | 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: |
| | | |
− | and add the symlinks to start automatically:
| + | rm -rf /var/lib/mongo |
− | ln -s /etc/init.d/mongod /etc/rc.d/rc6.d/K03mongodb | + | mkdir -p /var/lib/mongo |
− | ln -s /etc/init.d/mongod /etc/rc.d/rc7.d/S57mongodb | + | chown -R mongod:mongod /var/lib/mongo |
− | 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:
| + | If you have a replicaset set in /etc/mongod.conf make sure you initiate it: |
| | | |
− | signal-event post-upgrade | + | mongo --eval "printjson(rs.initiate())" |
− | signal-event reboot
| |
| | | |
| ---- | | ---- |
| [[Category:Howto]] | | [[Category:Howto]] |
| [[Category:Administration]] | | [[Category:Administration]] |
| + | [[Category:Database]] |