Kalau melihat panduan di dokumentasi official MongoDB, saat ini platform yang di support sampai di Focal 20.04 saja sedangkan sekarang Ubuntu sudah upgrade ke Jammy 22.04. Jadi deh kita coba², yakan, hehehe.
Menambahkan Repository MongoDB
Kalau mengikuti di dokumentasinya, menambahkan reposirotynya menggunakan perintah:
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
Nah, di Ubuntu Jammy 22.04 ternyata perintah ini sudah deprecated, akan ada error seperti ini:
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Jadinya kita akan menggunakan perintah:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
Instal MongoDB Community Edition
Kita tidak perlu install gnupg di Ubuntu Jammy 22.04, karena gnupg sudah terinstal.
sudo apt update && sudo apt install mongodb-org
Untuk menjalankan agar MongoDB berjalan otomatis saat system startup, jalankan perintah:
sudo systemctl enable mongod
Untuk menjalankan service MongoDB jalankan perintah:
sudo systemctl start mongod
Untuk melihat status service MongoDB jalankan perintah:
sudo systemctl status mongod
Well, sekarang Ubuntu and CentOS or turunan RedHat udah sama nih, ada enaknya sih hehehe.
Konfigurasi MongoDB
Pengamanan
Untuk pengamanan MongoDB bisa dibilang mudah.
sudo vim /etc/mongod.conf
Kemudian uncomment atau hapus hashtag pada bagian security dan kemudian tambahkan authorization: enabled, jadi seperti ini:
security:
authorization: enabled
PERHATIAN!!!
Jangan menggunakan tabulasi pada authorization. Tidak mengapa menggunakan spasi.
Setelah disimpan file /etc/mongod.conf restart MongoDB dan cek status servicesnya.
sudo systemctl restart mongod && sudo systemctl status mongod
Jika menggunakan tabulasi di konfigurasi /etc/mongod.conf bisa error seperti ini:
darto@ubuntu:~$ sudo systemctl status mongod × mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2022-06-14 18:49:07 WIB; 2s ago Docs: https://docs.mongodb.org/manual Process: 8552 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=2) Main PID: 8552 (code=exited, status=2) CPU: 51ms Jun 14 18:49:07 ubuntu systemd[1]: Started MongoDB Database Server. Jun 14 18:49:07 ubuntu mongod[8552]: Error parsing YAML config file: yaml-cpp: error at line 31, column 15: illegal map value Jun 14 18:49:07 ubuntu mongod[8552]: try '/usr/bin/mongod --help' for more information Jun 14 18:49:07 ubuntu systemd[1]: mongod.service: Main process exited, code=exited, status=2/INVALIDARGUMENT Jun 14 18:49:07 ubuntu systemd[1]: mongod.service: Failed with result 'exit-code'.
Ataupun jika error seperti dibawah ini, bisa jadi ada karakter yang tidak diinginkan, cek ulang, jangan ada spasi setelah security:. Intinya, file konfigurasi di MongoDB menggunakan YAML dan sebetulnya saya belum tahu juga sih YAML itu apa HAHAHA, tapi katanya case sensitive.
darto@ubuntu:~$ sudo systemctl status mongod × mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2022-06-14 18:54:09 WIB; 5s ago Docs: https://docs.mongodb.org/manual Process: 8660 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=2) Main PID: 8660 (code=exited, status=2) CPU: 32ms Jun 14 18:54:09 ubuntu systemd[1]: Started MongoDB Database Server. Jun 14 18:54:09 ubuntu mongod[8660]: Unrecognized option: security Jun 14 18:54:09 ubuntu mongod[8660]: try '/usr/bin/mongod --help' for more information Jun 14 18:54:09 ubuntu systemd[1]: mongod.service: Main process exited, code=exited, status=2/INVALIDARGUMENT Jun 14 18:54:09 ubuntu systemd[1]: mongod.service: Failed with result 'exit-code'.
Jika services MongoDB sudah active, lanjut dengan membuat user.
darto@ubuntu:~$ sudo systemctl status mongod ● mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-06-15 07:09:04 WIB; 6s ago Docs: https://docs.mongodb.org/manual Main PID: 14134 (mongod) Memory: 159.4M CPU: 1.480s CGroup: /system.slice/mongod.service └─14134 /usr/bin/mongod --config /etc/mongod.conf Jun 15 07:09:04 ubuntu systemd[1]: mongod.service: Consumed 1.945s CPU time. Jun 15 07:09:04 ubuntu systemd[1]: Started MongoDB Database Server.
Untuk cek services MongoDB active atau tidak, bisa juga menggunakan perintah:
mongo --eval 'db.runCommand({connectionStatus: 1})'
darto@ubuntu:~$ mongo --eval 'db.runCommand({connectionStatus: 1})' MongoDB shell version v5.0.9 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("213e7f40-c5f7-4f4e-8475-efae6262e53f") } MongoDB server version: 5.0.9 { "authInfo" : { "authenticatedUsers" : [ ], "authenticatedUserRoles" : [ ] }, "ok" : 1 }
Membuat User
Gunakan perintah mongosh untuk masuk ke MongoDB shell.
mongosh
darto@ubuntu:~$ mongosh Current Mongosh Log ID: 62a95add363af61d3acd5209 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.5.0 Using MongoDB: 5.0.9 Using Mongosh: 1.5.0 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ Warning: Found ~/.mongorc.js, but not ~/.mongoshrc.js. ~/.mongorc.js will not be loaded. You may want to copy or rename ~/.mongorc.js to ~/.mongoshrc.js. test>
Masuk ke admin database dengan perintah:
use admin
Dan kita akan membuat user dengan nama admin atau terserah yang Anda inginkan yang nantinya user admin ini akan berfungsi mengelola database.
db.createUser({user: "admin" , pwd: passwordPrompt() , roles: [{ role: "userAdminAnyDatabase" , db: "admin"}, "readWriteAnyDatabase"]})
Setelah Anda tekan Enter, akan ditanya password untuk user admin yang sedang kita buat dengan perintah diatas. Jika sudah, ketik quit atau exit untuk keluar dari MongoDB shell.
Selanjutnya Anda bisa login dengan perintah:
mongosh -u admin -p --authenticationDatabase admin
User Root
Anda juga bisa membuat user yang memiliki full akses seperti root, yaitu dengan perintah:
db.createUser({user: "mongo-root" , pwd: passwordPrompt() , roles: [{ role: "root" , db: "admin"}]})
Merubah Role
Jika ingin membuat user sebelumnya yang kita buat ingin dijadikan sebagai root, bisa menggunakan perintah:
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
Menghapus User
db.dropUser("admin", {w: "majority", wtimeout: 5000})
Beberapa perintah yang mungkin berguna selama berada di MongoDB shell.
Untuk menampilkan semua user:
show users
Untuk menampilkan semua database:
show dbs
Untuk melihat statistik semua database bisa menggunakan perintah:
db.adminCommand("top")
Selanjutnya kita akan menggunakan MongoDB Compass untuk remote server MongoDB.
Remote Server MongoDB dari macOS atau Windows
Kalau kita menggunakan server database MySQL, untuk remote melalui web interface kita bisa menggunakan phpMyAdmin. Nah begitu juga dengan server MongoDB, kita bisa remote melalui web interface atau desktop client. Untuk akses MongoDB melalui web interface bisa menggunakan phpMoAdmin atau MongoDB-PHP-GUI. Tapi sejauh pandangan saya, sebagai orang awam yang newbie, sepertinya masih kurang user friendly, hehehe. Atau mungkin ada yang bisa memberikan rekomendasi remote MongoDB menggunakan web interface?
Untuk remote server MongoDB, saya memilih melalui dekstop client dan setelah mencoba dari beberapa software, saya putuskan bahwa yang lebih user friendly adalah MongoDB Compass yang merupakan dari pengembang server MongoDB itu sendiri, ya iyaaaaa laaaahhhh, ya masa kagak.
Agar server MongoDB bisa diakses dari luar kita perlu melakukan satu hal, yaitu mencantumkan IP server dimana terinstal MongoDB kedalam konfigurasinya.
sudo vim /etc/mongod.conf
# network interfaces net: port: 27017 bindIp: 127.0.0.1,10.0.1.73
Masukkan IP setelah 127.0.0.1 dengan IP server Anda menginstal server MongoDB. Setelah itu restart server MongoDB. Untuk memastikan cek apakah MongoDB sudah berjalan di IP tersebut, dengan perintah:
sudo netstat -tlpn
darto@ubuntu:~$ sudo netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:37431 0.0.0.0:* LISTEN 1395/chrome --disab tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 771/systemd-resolve tcp 0 0 127.0.0.1:34515 0.0.0.0:* LISTEN 1279/chrome --disab tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 14134/mongod tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 895/mariadbd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 850/sshd: /usr/sbin tcp 0 0 127.0.0.1:40477 0.0.0.0:* LISTEN 2566/chrome --disab tcp 0 0 10.0.1.73:27017 0.0.0.0:* LISTEN 14134/mongod tcp6 0 0 :::22 :::* LISTEN 850/sshd: /usr/sbin tcp6 0 0 :::80 :::* LISTEN 907/apache2
Atau jika ingin mencoba tuk test dari perangkat lain, bisa menggunakan perintah:
nc -zv 10.0.1.73 27017
darto@Dartos-VMwareMac ~ % nc -zv 10.0.1.73 27017 Connection to 10.0.1.73 port 27017 [tcp/*] succeeded!
Setelah semua aman, download MongoDB Compass dan gunakan connection string:
mongodb://admin:<password-anda>@10.0.1.73/
Sesuaikan password dengan yang sudah Anda buat sebelumnya.