Ebook Syafi
Koleksi
Admin
← DevOps Dengan AI
Edit Bab
💾 Simpan
Batal
Syarat
Mukadimah
Bab
Penutup
B
I
H2
H3
List
1.
Quote
Code
Link
Img
Table
Edit
Split
Preview
0 perkataan
# Bab 4: Ansible dan Docker dengan AI Kalau Terraform membina infrastruktur, Ansible dan Docker menguruskan apa yang berjalan di atasnya. Kedua-duanya penuh dengan sintaks yang mengingat bukan memahami, dan itulah sebabnya AI sangat berguna di sini. **Apa yang anda akan belajar:** - Cara minta AI tulis playbook yang idempotent - Empat kesilapan Ansible yang AI selalu buat - Cara kecilkan imej Docker dengan bantuan AI - Rutin semakan sebelum imej masuk ke registry ## 4.1 Ansible: Minta Idempotency Secara Terang Masalah nombor satu dengan playbook yang ditulis AI ialah ia guna `shell:` atau `command:` untuk semua benda. Cara itu jalan, tetapi ia bukan idempotent dan ia menyukarkan debugging. Sentiasa sebut perkataan idempotent dalam prompt, dan nyatakan modul yang anda mahu. ```text Tulis satu Ansible role untuk setup Nginx di Ubuntu 24.04. Syarat: - Guna modul ansible.builtin sahaja, FQCN penuh - Idempotent: run kedua tidak boleh ubah apa-apa - Guna handler untuk restart nginx, bukan task restart di hujung - Jangan guna shell: atau command: kalau ada modul yang sesuai - Tambah ansible-lint fqcn dan no-changed-when Beri saya tasks/main.yml, handlers/main.yml, dan defaults/main.yml. Terangkan setiap task dalam satu baris. ``` Empat kesilapan yang selalu muncul, dan cara betulkan: - **`shell:` untuk kerja yang ada modul.** Tukar kepada `ansible.builtin.apt`, `ansible.builtin.copy`, `ansible.builtin.template`. - **Tiada `changed_when`.** Task yang selalu melaporkan perubahan mengaburkan perubahan sebenar. - **Restart service di tengah task.** Guna handler supaya restart berlaku sekali sahaja di hujung. - **Root tanpa had.** Guna `become: true` hanya pada task yang perlu, bukan pada keseluruhan play. ## 4.2 Uji Sebelum Sentuh Server Sebenar Ansible ada dua jaringan keselamatan. Guna kedua-duanya. ```bash ansible-lint roles/nginx ansible-playbook -i inventories/dev.ini site.yml --check --diff ``` `--check` menjalankan playbook dalam mod simulasi. `--diff` menunjukkan apa yang akan berubah. Kalau AI kata playbook itu selamat, buktikan dengan dua arahan ini sebelum ia menyentuh server production. Untuk tahap seterusnya, minta AI tulis ujian dengan Molecule. Ia lebih banyak kerja pada awalnya, tetapi ia menjadikan role anda boleh dipercayai semula tanpa perlu uji manual setiap kali. ## 4.3 Rahsia: Jangan Sesekali dalam Kod AI suka letak nilai dalam `vars`. Jangan benarkan. ```text Ubah playbook ini supaya tiada satu pun credential tertulis dalam fail. Guna ansible.builtin.lookup dengan environment variable yang diisi dari secret manager (contoh: Infisical atau Vault). Tunjukkan contoh cara mengisi variable itu semasa run. ``` Kemudian sahkan sendiri: `grep -ri "password\|token\|secret" roles/` dan pastikan tiada nilai sebenar. Ini satu arahan yang patut jadi kebiasaan sebelum setiap commit. ## 4.4 Docker: Kecilkan Imej, Kurangkan Risiko Imej yang besar bukan sekadar lambat. Ia mengandungi lebih banyak pakej, dan lebih banyak pakej bermakna lebih banyak kelemahan yang boleh dieksploitasi. Prompt yang saya guna: ```text Ini Dockerfile aplikasi Node.js. Kecilkan imej dan kurangkan risiko: - Guna multi-stage build - Base image: node:22-alpine atau distroless, pilih satu dan jelaskan - Jangan lari sebagai root - Pin versi base image - .dockerignore yang betul - HEALTHCHECK Terangkan anggaran saiz imej akhir dan risiko setiap perubahan. ``` Biasanya saiz turun dari lebih satu gigabait kepada bawah dua ratus megabait. Tetapi semak sendiri dengan: ```bash docker build -t app:test . docker history app:test docker run --rm -p 3000:3000 app:test ``` Perhatikan `docker history`. Kadang kala rahsia terlekat dalam layer lama walaupun ia dipadam dalam layer berikutnya. Kalau ada rahsia dalam sejarah imej, imej itu perlu dibina semula dari awal, bukan ditampal. ## 4.5 Semakan CVE dan Tag Dua kebiasaan mudah yang menyelamatkan banyak masalah: - **Scan sebelum push.** Jalankan `trivy image app:test` atau `docker scout cves app:test` dalam pipeline. Gagalkan build kalau ada kelemahan kritikal. - **Jangan guna tag `latest`.** Pin kepada versi atau digest. `latest` bermakna deploy anda boleh berubah tanpa perubahan kod. Minta AI semak keseluruhan repo untuk kedua-dua perkara ini: ```text Cari semua rujukan imej Docker dalam repo ini. Senaraikan yang menggunakan tag latest atau tiada tag, dan cadangkan versi yang sesuai untuk dipin. ``` ## 4.6 Sambungan ke Homelab Kalau anda ada homelab, ini tempat terbaik untuk berlatih. Bina satu role Ansible yang setup Docker dan Nginx pada dua mesin, jalankan dengan `--check` dahulu, kemudian jalankan sebenar. Ulang kali sampai anda yakin. Kemahiran yang sama inilah yang digunakan untuk urus seratus server. Bezanya cuma skala, dan skala hanya masuk akal selepas asas ini kukuh. Bab seterusnya: mengalirkan semua ini melalui CI/CD. \newpage