Dokumentasi / Cloud-init dan machine image

Cloud-init dan machine image

Dua cara melewati pemasangan manual: menempelkan templat cloud-init saat membuat VPS, atau membangun machine image yang isinya sudah terpasang semua.

Cloud-init (satu server sekali jalan)

panel/deploy/cloud-init.yaml adalah templat user-data. Sunting beberapa setelan di bagian atas, tempel ke kotak "user data" penyedia Anda saat membuat server, dan panel sudah hidup begitu server selesai booting. Kemajuan dan setiap kegagalan tercatat di /var/log/nimbopanel-provision.log.

Jangan perlakukan user data sebagai tempat menyimpan rahasia

Bagian ini layak dibaca dua kali. Di semua penyedia besar, user data tetap bisa diambil dari dalam instance yang sedang berjalan lewat HTTP ke 169.254.169.254 — dan alamat itu bisa dijangkau proses apa pun di mesin tersebut, termasuk skrip PHP milik pelanggan hosting Anda.

Jadi kunci lisensi yang ditempel di user data bisa dibaca oleh setiap pelanggan yang Anda tampung, kecuali ada yang mencegahnya. Templat ini mencegahnya dalam dua langkah, berurutan:

  1. menutup layanan metadata untuk semua orang kecuali root, sebelum kuncinya menyentuh disk;
  2. setelah pemasang menyimpan kuncinya di konfigurasi khusus-root, ia menghancurkan salinan user-data yang ada di disk.

Kalau Anda lebih suka tidak menaruh kuncinya di sana sama sekali, kosongkan saja dan masukkan dari panel setelahnya. Server berjalan tanpa lisensi sampai Anda melakukannya, dan itu keadaan yang didukung.

Machine image (banyak server dari satu bangunan)

panel/deploy/packer/nimbopanel.pkr.hcl membangun image dengan seluruh tumpukan sudah terpasang. Di situlah waktu habis — paket, PHP, surel, DNS, basis data — dan tak satu pun dari itu berbeda antar server.

Kesalahan yang membuat semua klona jadi server yang sama

Sebuah image tidak boleh membawa identitas. Kalau membawanya, setiap server yang dibangun darinya berbagi identitas itu:

Ikut terpanggang keliru Yang terjadi di tiap klona
Kunci host SSH Semuanya menyodorkan kunci yang sama. Siapa pun yang bisa menyusup di antara pelanggan dan servernya bisa menyamar sebagai server itu — di semua klona sekaligus, tanpa peringatan apa pun muncul
Instance-id Nimbopanel Sidik jari lisensi diturunkan darinya, dan pemasang tak pernah menyemai ulang id yang sudah ada — jadi seribu server terlihat sebagai satu aktivasi
/etc/machine-id Identitas systemd, sewa DHCP, dan journald saling bentrok
Basis data dan konfigurasi panel Sandi admin, kunci lisensi, dan semua akun ikut terkirim di dalam berkas yang diunduh orang asing
Kunci DKIM, sertifikat TLS Diterbitkan untuk mesin pembangun; tak bermakna di klona, dan bocor ke semua orang yang punya image-nya

Tak satu pun dari ini mengumumkan dirinya. Semuanya ditemukan belakangan, oleh orang lain.

panel/deploy/image-deidentify.sh membuang semuanya, dan proses Packer menjalankannya sebagai langkah terakhir lalu menjalankannya lagi dengan --check — sehingga pembangunannya gagal alih-alih menghasilkan snapshot yang cuma tampak bersih. Semua yang dibuang dibuat ulang saat klona pertama kali menyala: sshd membuat kunci host baru, systemd menulis machine-id baru, pemasang menyemai instance-id baru.

/etc/machine-id ditinggalkan kosong, bukan dihapus — systemd membaca berkas kosong sebagai "buatkan satu saat boot", sedangkan berkas yang hilang membuat sebagian image gagal booting.

Periksa sebelum menerbitkan

sudo ./image-deidentify.sh          # buang
sudo ./image-deidentify.sh --check  # pastikan; keluar dengan status gagal kalau ada yang tersisa

Jalankan pemeriksaannya juga di klona yang sudah menyala, bukan cuma saat membangun. Kalau ia melaporkan sesuatu, jangan terbitkan image-nya.

Pendaftaran ke marketplace

Program "1-click app" tiap penyedia (Vultr, DigitalOcean, Linode, Contabo) punya format pengajuan dan proses peninjauan sendiri. Image di atas adalah barang yang mereka minta; urusan administrasinya berbeda-beda per penyedia dan bukan sesuatu yang bisa dikerjakan oleh perkakas ini.