Sejak saya pertama kali ikut training Carbonio oleh Zextras, salah satu hal yang menarik perhatian saya adalah cara Zextras menyediakan playbook resmi lewat Ansible Galaxy. Bukan sekadar script install biasa, tapi sebuah role yang siap deploy seluruh komponen Carbonio dari satu titik. Dan kunci dari semua itu ada di satu file: inventory.
Di tulisan ini saya mau bahas singkat soal apa itu inventory di konteks Carbonio Ansible, isinya apa saja, dan kenapa setiap grup di dalamnya penting kalian pahami sebelum tekan enter pada perintah ansible-playbook.
Apa Itu Inventory Carbonio
Secara konsep, inventory di Ansible adalah daftar host beserta peran masing-masing. Di Carbonio, inventory ini berfungsi sebagai peta jalan: server mana yang akan jadi mailbox, mana yang jadi MTA, mana yang menjalankan Consul, dan seterusnya. Ansible akan baca file ini lalu mengeksekusi task yang sesuai di setiap node sesuai grupnya.
Ada dua varian playbook resmi yang tersedia di Ansible Galaxy:
zxbot.carbonio_installuntuk skenario multi-server (essential, full-standard, full-redundant)zxbot.carbonio_ssinstalluntuk skenario single-server
Dua varian ini punya struktur inventory yang mirip, tapi tidak identik. Beberapa grup yang muncul di multi-server justru tidak boleh diisi di single-server.
Catatan Sebelum Mengisi Inventory
Tiga hal yang sering bikin instalasi gagal kalau diabaikan:
- Inventory hanya menerima FQDN, bukan IP address. Pastikan resolusi DNS internal sudah jalan, atau setidaknya
/etc/hostssudah diisi konsisten di semua node. - Multi-master untuk directory server (LDAP) tidak didukung. Cuma boleh satu master, sisanya replica.
- dbsConnector akan otomatis dipasang di server Postgres, jadi grup
[dbsConnectorServers]di skenario standar harus dibiarkan kosong. Grup ini baru relevan kalau kalian pakai HA dengan Patroni (versi 24.12.0 ke atas).
Isi Inventory dan Peran Setiap Grup
Berikut grup-grup utama yang kalian akan temui di file inventory Carbonio, beserta peran singkatnya:
Komponen inti (wajib ada)
[postgresServers]: database utama untuk metadata Carbonio dan storage Files[masterDirectoryServers]: LDAP master, satu-satunya sumber kebenaran untuk akun dan domain[replicaDirectoryServers]: LDAP replica untuk redundansi (opsional di single-server)[serviceDiscoverServers]: Consul, service mesh yang menghubungkan semua komponen Carbonio[mtaServers]: Postfix, gerbang masuk dan keluar email[proxyServers]: Nginx proxy untuk webmail, IMAP, POP, dan trafik HTTP[applicationServers]: mailbox server, tempat data email sebenarnya disimpan
Variabel penting
[proxyServers:vars]denganwebmailHostname=mail.example.com: hostname publik yang dipakai user untuk akses webmail
Komponen opsional (fitur kolaborasi)
[filesServers]: Carbonio Files, fitur cloud storage internal[docsServers]: Carbonio Docs, editor dokumen kolaboratif[taskServers]: modul tasks[previewServers]: service untuk preview file di webmail dan Files[videoServers]: Carbonio Meeting, harus disertaipublic_ip_address=x.y.z.tdi sebelah hostname[workStreamServers]: chat dan messaging
Komponen observability
[prometheusServers]: metrics collector[syslogServer]: sentralisasi log
Perbedaan di Skenario Single-Server
Kalau kalian pakai zxbot.carbonio_ssinstall, semua grup inti di atas diarahkan ke satu hostname yang sama. Beberapa komponen opsional seperti taskServers, docsServers, videoServers, dan workStreamServers boleh dipisah ke VM lain, atau dikomentari kalau memang tidak dipakai. Grup [dbsConnectorServers] harus tetap kosong karena tidak didukung di single-server.
Best Practice
Beberapa hal yang saya pelajari selama training dan ngulik di lab:
- Simpan inventory di direktori khusus, misal
~/carbonio-inventories/lab/, supaya bisa kelola beberapa environment paralel - Beri nama file inventory yang deskriptif (bukan sekadar
inventory), karena nama file ini akan jadi prefix untuk file password yang digenerate sepertiinventoryname_postgrespassword,inventoryname_ldap_password, daninventoryname_consulpassword - Selalu pakai versi playbook yang sesuai dengan versi Carbonio target. Versi playbook dan versi Carbonio saling terikat
- Sebelum jalankan playbook, validasi dulu dengan
ansible all -i inventoryname -m pinguntuk memastikan semua node bisa dihubungi via SSH - Backup file inventory dan file password ke tempat aman setelah instalasi, karena file yang sama dipakai lagi untuk upgrade lewat
zxbot.carbonio_upgrade
Penutup
Inventory di Carbonio Ansible itu bukan sekadar daftar hostname. Dia adalah dokumen arsitektur instalasi kalian dalam bentuk paling padat. Sekali kalian paham peran setiap grup, kalian sudah punya mental model yang cukup untuk memahami bagaimana komponen-komponen Carbonio saling terhubung di balik layar, termasuk waktu nanti harus troubleshoot kalau ada service yang ngambek.
Untuk eksplorasi lebih lanjut, dua repo resmi Zextras yang saya rekomendasikan kalian baca: carbonio-install-ansible dan carbonio-ansible-ssinstall di GitHub. Di sana kalian bisa lihat contoh inventory lengkap untuk masing-masing skenario, sekalian ngintip role-nya kalau penasaran sama yang terjadi di balik layar.


Leave a Reply