Catatan Carbonio: Inventory di Ansible Galaxy Carbonio

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_install untuk skenario multi-server (essential, full-standard, full-redundant)
  • zxbot.carbonio_ssinstall untuk 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:

  1. Inventory hanya menerima FQDN, bukan IP address. Pastikan resolusi DNS internal sudah jalan, atau setidaknya /etc/hosts sudah diisi konsisten di semua node.
  2. Multi-master untuk directory server (LDAP) tidak didukung. Cuma boleh satu master, sisanya replica.
  3. 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] dengan webmailHostname=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 disertai public_ip_address=x.y.z.t di 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:

  1. Simpan inventory di direktori khusus, misal ~/carbonio-inventories/lab/, supaya bisa kelola beberapa environment paralel
  2. Beri nama file inventory yang deskriptif (bukan sekadar inventory), karena nama file ini akan jadi prefix untuk file password yang digenerate seperti inventoryname_postgrespassword, inventoryname_ldap_password, dan inventoryname_consulpassword
  3. Selalu pakai versi playbook yang sesuai dengan versi Carbonio target. Versi playbook dan versi Carbonio saling terikat
  4. Sebelum jalankan playbook, validasi dulu dengan ansible all -i inventoryname -m ping untuk memastikan semua node bisa dihubungi via SSH
  5. 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.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *