Ebook Syafi
Koleksi
Admin
← DevOps Dari Homelab ke Production
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 1: Apa Itu DevOps? Anda mungkin pernah dengar perkataan "DevOps" berpuluh kali. Mungkin dalam iklan kerja, dalam artikel teknologi, atau dalam perbualan dengan rakan sekerja. Tapi apa sebenarnya DevOps? Adakah ia satu jawatan? Satu perisian? Satu budaya? Jawapan ringkasnya: semua sekali. Dan dalam bab ini, kita akan kupas satu persatu supaya anda betul-betul faham apa yang anda sedang masuki. **Apa yang anda akan belajar:** - Definisi DevOps dan kenapa ia wujud - Perbezaan antara DevOps dan IT tradisional - Tiang-tiang utama budaya DevOps - Peranan dan laluan kerjaya dalam DevOps - Bagaimana kemahiran homelab anda boleh diterjemahkan ke DevOps ## 1.1 Definisi DevOps DevOps adalah gabungan dua perkataan: **Development** dan **Operations**. Pada asasnya, ia adalah satu set amalan, budaya, dan alatan yang menyatukan pasukan pembangunan perisian (Dev) dan pasukan operasi IT (Ops) supaya mereka boleh bekerja bersama dengan lebih cekap. Dalam model tradisional, developer menulis kod dan kemudian "lempar" kepada pasukan operations untuk di-deploy. Kalau ada masalah, kedua-dua pihak saling menuding jari. Developer kata "Di mesin saya jalan," dan Ops kata "Itu bukan masalah server." > **Nota Beginner:** Istilah "Dev" merujuk kepada sesiapa yang menulis kod atau membina aplikasi. "Ops" merujuk kepada sesiapa yang menguruskan server, rangkaian, dan infrastruktur. DevOps menyatukan kedua-dua dunia ini. DevOps menyelesaikan masalah ini dengan menghapuskan "tembok" antara kedua-dua pasukan. Dalam persekitaran DevOps, semua orang berkongsi tanggungjawab dari menulis kod sehingga memastikan ia berjalan dengan baik dalam production. Secara praktikal, DevOps melibatkan: - **Automation** untuk proses berulang seperti testing dan deployment - **CI/CD pipeline** untuk menghantar kod dari development ke production secara konsisten - **Infrastructure as Code (IaC)** untuk menguruskan infrastruktur seperti menulis perisian - **Monitoring dan observability** untuk mengesan masalah sebelum pengguna merasakannya - **Collaboration** antara semua pihak yang terlibat dalam pembangunan perisian ## 1.2 DevOps vs IT Tradisional Untuk benar-benar memahami DevOps, kita perlu bandingkan dengan cara kerja tradisional. Saya akan gunakan analogi yang mudah difahami. ### Model Tradisional (Waterfall) Bayangkan anda sedang membina rumah. Dalam model tradisional, prosesnya seperti ini: 1. Arkitek lukis pelan (Planning) 2. Tukang bina, bina rumah (Development) 3. Inspektor periksa rumah (Testing) 4. Pemilik terima kunci (Deployment) Setiap langkah mesti selesai sebelum langkah seterusnya bermula. Kalau inspektor jumpa masalah struktur, tukang bina kena buat semula. Proses ini lambat dan mahal. Dalam IT tradisional, developer menulis kod selama berbulan-bulan, kemudian serahkan kepada QA team untuk diuji, dan akhirnya Ops team deploy ke production. Keseluruhan proses boleh mengambil masa berminggu-minggu atau berbulan-bulan. ### Model DevOps Sekarang bayangkan pendekatan berbeza. Anda bina rumah satu bilik dulu, periksa, dan biarkan orang duduk. Kemudian tambah bilik lagi, periksa, dan bukakan untuk penghuni. Setiap penambahan kecil tetapi kerap. Inilah intipati DevOps. Kod dihantar dalam bahagian kecil (small batches), diuji secara automatik, dan di-deploy dengan cepat. Kalau ada masalah, ia dikesan awal dan diperbaiki segera. Berikut perbandingan ringkas: | Aspek | IT Tradisional | DevOps | |-------|---------------|--------| | Deployment | Sebulan sekali atau kurang | Berkali-kali sehari | | Testing | Manual, di akhir proses | Automatik, berterusan | | Infrastruktur | Setup manual, snowflake servers | Infrastructure as Code, immutable | | Pasukan | Dev dan Ops berasingan | Pasukan bersepadu | | Kegagalan | Besar dan jarang | Kecil dan mudah dipulihkan | | Maklum balas | Lambat (minggu/bulan) | Pantas (minit/jam) | > **Nota Beginner:** "Snowflake server" bermaksud server yang dikonfigurasi secara manual sehingga setiap satu unik seperti kepingan salji. Ini menyukarkan penyelenggaraan. DevOps menggantikan ini dengan server yang boleh dibina semula secara automatik menggunakan kod. ## 1.3 Budaya DevOps DevOps bukan sekadar alatan. Saya ulang: DevOps bukan sekadar alatan. Ramai orang tersalah faham bahawa dengan memasang Jenkins atau menggunakan Kubernetes, mereka sudah "buat DevOps." Itu tidak benar. DevOps pada terasnya adalah satu **budaya**. Alatan hanyalah pemudah cara. Tanpa budaya yang betul, alatan terbaik dunia pun tidak akan membantu. Mari kita lihat tiang-tiang utama budaya DevOps. ### Collaboration (Kerjasama) Dalam budaya DevOps, tembok antara pasukan diruntuhkan. Developer, Ops, QA, Security, semuanya bekerja bersama dari awal projek. Bukan lagi "saya buat bahagian saya, anda buat bahagian anda." Dari pengalaman saya, perubahan budaya ini selalunya yang paling susah. Teknikal boleh dipelajari dalam beberapa bulan, tetapi mengubah cara orang bekerja bersama boleh mengambil masa bertahun-tahun. ### Automation (Automasi) Kalau sesuatu tugas perlu dilakukan lebih dari sekali, ia patut diautomasi. Ini adalah prinsip asas DevOps. Anda mungkin sudah mengamalkan ini dalam homelab anda. Mungkin anda tulis script Bash untuk backup, atau guna Docker Compose supaya tak perlu taip arahan Docker yang panjang setiap kali. Itu sudah automation. Dalam dunia DevOps profesional, automation dibawa ke tahap seterusnya: - **Build automation:** Kod dikompil secara automatik setiap kali ada perubahan - **Test automation:** Ujian dijalankan secara automatik tanpa campur tangan manusia - **Deployment automation:** Aplikasi di-deploy ke production secara automatik selepas lulus ujian - **Infrastructure automation:** Server dan rangkaian dibina menggunakan kod ### CI/CD (Continuous Integration / Continuous Delivery) CI/CD adalah nadi DevOps. Ia adalah amalan menghantar perubahan kod secara kerap dan automatik. **Continuous Integration (CI)** bermaksud setiap developer menggabungkan (merge) kod mereka ke repository utama secara kerap, biasanya beberapa kali sehari. Setiap penggabungan mencetuskan automated build dan test untuk mengesan masalah awal. **Continuous Delivery (CD)** bermaksud kod yang telah lulus semua ujian sentiasa dalam keadaan sedia untuk di-deploy ke production. Deployment boleh dilakukan pada bila-bila masa dengan satu klik butang. **Continuous Deployment** (juga CD) pergi satu langkah lebih jauh. Setiap perubahan yang lulus ujian akan secara automatik di-deploy ke production tanpa campur tangan manusia. > **Nota Beginner:** Jangan keliru antara Continuous Delivery dan Continuous Deployment. Delivery bermaksud kod sedia untuk di-deploy (tetapi manusia masih klik butang). Deployment bermaksud ia secara automatik di-deploy. Kebanyakan organisasi bermula dengan Delivery sebelum beralih ke Deployment. ### Monitoring dan Observability Dalam DevOps, kerja anda tidak tamat selepas deploy. Anda perlu sentiasa memantau aplikasi dan infrastruktur untuk memastikan semuanya berjalan lancar. Monitoring bermaksud mengumpul data seperti penggunaan CPU, memori, masa tindak balas (response time), dan kadar ralat (error rate). Observability pergi lebih jauh dengan memberikan anda keupayaan untuk memahami keadaan dalaman sistem berdasarkan data luaran. Kalau anda pernah guna Grafana atau Prometheus dalam homelab, anda sudah ada asas yang baik. Dalam production, monitoring menjadi lebih kritikal kerana downtime boleh menjejaskan ribuan pengguna dan menyebabkan kerugian wang. ### Infrastructure as Code (IaC) IaC bermaksud menguruskan infrastruktur (server, rangkaian, firewall) menggunakan fail konfigurasi yang boleh disimpan dalam version control. Ini bermaksud anda boleh membina semula seluruh infrastruktur anda dari kosong hanya dengan menjalankan satu arahan. Alatan popular untuk IaC termasuk Terraform, Ansible, dan Pulumi. Kalau anda pernah guna Docker Compose atau menulis Ansible playbook untuk homelab, anda sudah mula dengan IaC tanpa menyedarinya.  ## 1.4 Peranan dan Laluan Kerjaya DevOps Salah satu soalan yang sering ditanya ialah, "Apa sebenarnya kerja seorang DevOps engineer?" Jawapannya bergantung kepada organisasi, tetapi secara umum, terdapat beberapa peranan utama dalam ekosistem DevOps. ### DevOps Engineer Ini adalah peranan yang paling umum. DevOps engineer bertanggungjawab membina dan menyelenggara CI/CD pipeline, mengurus infrastruktur menggunakan IaC, dan memastikan proses deployment berjalan lancar. Kemahiran utama yang diperlukan: - Linux administration - Scripting (Bash, Python) - CI/CD tools (Jenkins, GitLab CI, GitHub Actions) - Containerization (Docker, Podman) - Container orchestration (Kubernetes) - IaC tools (Terraform, Ansible) - Cloud platforms (AWS, Azure, GCP) ### Site Reliability Engineer (SRE) SRE adalah pendekatan Google terhadap DevOps. SRE memberi tumpuan kepada kebolehpercayaan (reliability) sistem. Mereka menetapkan Service Level Objectives (SLO) dan menggunakan error budget untuk mengimbangi antara kelajuan pembangunan dan kestabilan sistem. ### Platform Engineer Platform engineer membina dan menyelenggara platform dalaman yang memudahkan developer melakukan deployment sendiri. Mereka membina "jalan raya" supaya developer boleh fokus memandu tanpa perlu risau tentang infrastruktur. ### Cloud Engineer Cloud engineer fokus kepada pengurusan infrastruktur dalam persekitaran cloud. Mereka mereka bentuk, membina, dan mengoptimumkan sumber cloud untuk prestasi dan kos. ### Security Engineer (DevSecOps) Dalam DevSecOps, keselamatan diintegrasikan ke dalam setiap peringkat pipeline DevOps. Security engineer memastikan kod dan infrastruktur mematuhi piawaian keselamatan secara automatik. > **Nota Beginner:** Anda tidak perlu kuasai semua peranan ini. Pilih satu yang menarik minat anda dan fokus di situ. Kebanyakan profesional bermula sebagai DevOps engineer sebelum mengkhusus dalam bidang tertentu. ## 1.5 Kemahiran Homelab Anda Sudah Relevan Ini bahagian yang saya paling suka. Kalau anda sudah ada pengalaman homelab, anda sebenarnya sudah ada banyak kemahiran yang diperlukan dalam DevOps. Anda cuma perlu tahu cara menterjemahkannya. Mari kita lihat: | Kemahiran Homelab | Terjemahan DevOps | |-------------------|-------------------| | Pasang Proxmox, buat VM | Virtualization, cloud computing | | Guna Docker, Docker Compose | Containerization, container orchestration | | Setup pfSense/OPNsense | Network engineering, firewall management | | Tulis script Bash untuk automation | Scripting, automation | | Pasang Grafana + Prometheus | Monitoring, observability | | Setup Nginx reverse proxy | Load balancing, ingress management | | Backup dan restore | Disaster recovery, business continuity | | Troubleshoot masalah rangkaian | Incident response, debugging | | Guna SSH untuk remote access | Remote administration, security | | Self-host Gitea | Version control, Git workflows | Nampak tak? Anda sudah ada asas yang kukuh. Yang anda perlukan sekarang adalah untuk memformalkan kemahiran ini dan belajar cara menggunakannya dalam konteks profesional. Dari pengalaman saya, orang yang datang dari latar belakang homelab selalunya lebih cepat memahami konsep DevOps berbanding orang yang belajar teori sahaja. Ini kerana anda sudah "kotor tangan" dan tahu perasaan bila server crash tengah malam. Perbezaan utama antara homelab dan production ialah **skala**, **kebolehpercayaan**, dan **kerjasama pasukan**. Dalam homelab, kalau server mati, anda sahaja yang terjejas. Dalam production, ribuan pengguna mungkin terkesan. Dalam homelab, anda bekerja seorang diri. Dalam production, anda bekerja dalam pasukan. Tetapi jangan risau. Buku ini akan membimbing anda melalui peralihan ini langkah demi langkah. Kita akan bermula dengan asas yang paling penting dalam DevOps, iaitu version control dengan Git, dan kemudian bergerak ke CI/CD, containerization, IaC, dan seterusnya. ## 1.6 Peralatan Yang Anda Perlukan Sebelum kita mula bab seterusnya, pastikan anda mempunyai perkara berikut: 1. **Komputer dengan Linux** (atau WSL2 pada Windows). Homelab anda boleh digunakan. 2. **Git** dipasang pada mesin anda. 3. **Docker** dipasang dan berjalan. 4. **Akaun GitHub atau GitLab** (atau Gitea dalam homelab anda). 5. **Text editor** yang anda selesa, sama ada VS Code, Vim, atau Nano. Untuk memasang Git dan Docker pada Ubuntu/Debian: ```bash # Pasang Git sudo apt update sudo apt install git -y # Sahkan pemasangan git --version # Pasang Docker sudo apt install docker.io -y sudo systemctl enable docker sudo systemctl start docker # Tambah user anda ke docker group sudo usermod -aG docker $USER ``` > **Nota Beginner:** Kalau anda guna homelab, anda boleh buat satu VM khas untuk belajar DevOps. Saya cadangkan Ubuntu Server 22.04 LTS atau lebih baru. Beri sekurang-kurangnya 2 CPU, 4GB RAM, dan 40GB disk. Selepas pasang, konfigurasikan Git dengan identiti anda: ```bash git config --global user.name "Nama Anda" git config --global user.email "email@anda.com" ``` ## Senarai DevOps Tools dan Fungsinya Sebelum kita masuk ke bab seterusnya, saya nak bagi gambaran besar tentang tools yang akan kita guna sepanjang ebook ini. Tak perlu hafal semua sekarang. Anggap ini sebagai rujukan pantas yang boleh anda kembali bila-bila masa.  ### Source Control (Urus Kod) | Tool | Fungsi | Nota | |---|---|---| | **Git** | Version control system untuk track perubahan kod | Wajib tahu. Asas segala-galanya dalam DevOps. | | **GitHub** | Platform hosting Git dengan CI/CD, issues, PR | Paling popular. Free untuk projek peribadi. | | **GitLab** | Alternatif GitHub dengan CI/CD terbina dalam | Boleh self-host. Sesuai untuk organisasi. | | **Gitea** | Self-hosted Git server yang ringan | Sesuai untuk homelab. Kita dah setup dalam ebook pertama. | ### CI/CD (Automate Build, Test, Deploy) | Tool | Fungsi | Nota | |---|---|---| | **GitHub Actions** | CI/CD terbina dalam GitHub | Percuma untuk repo public. Mudah bermula. | | **GitLab CI** | CI/CD terbina dalam GitLab | Konfigurasi via `.gitlab-ci.yml`. | | **Jenkins** | CI/CD server yang paling matang | Self-hosted. Sangat fleksibel tapi agak kompleks. | | **ArgoCD** | GitOps continuous delivery untuk Kubernetes | Auto-sync dari Git ke K8s cluster. | | **Drone CI** | CI/CD ringan berasaskan container | Setiap step jalan dalam container sendiri. | ### Containerization (Pakej Aplikasi) | Tool | Fungsi | Nota | |---|---|---| | **Docker** | Bina dan jalankan container | Standard industri. Anda dah biasa dari homelab. | | **Docker Compose** | Urus multi-container dengan YAML | Sesuai untuk development dan homelab. | | **Podman** | Alternatif Docker tanpa daemon | Rootless by default. Serasi dengan Docker CLI. | | **containerd** | Container runtime untuk production | Digunakan oleh Kubernetes secara dalaman. | ### Orchestration (Urus Container Berskala) | Tool | Fungsi | Nota | |---|---|---| | **Kubernetes (K8s)** | Orkestrasi container untuk production | Standard industri. Kita guna K3s untuk belajar. | | **K3s** | Kubernetes ringan untuk edge dan homelab | Kurang dari 100MB. Sesuai untuk bermula. | | **Helm** | Package manager untuk Kubernetes | Macam `apt` tapi untuk K8s deployments. | | **Docker Swarm** | Orkestrasi Docker yang lebih simple | Lebih mudah dari K8s tapi kurang ciri. | ### Infrastructure as Code (Provision dan Configure) | Tool | Fungsi | Nota | |---|---|---| | **Terraform** | Provision infrastruktur secara deklaratif | Cipta VM, network, cloud resources dari kod. | | **Ansible** | Configuration management dan automasi | Agentless. Guna SSH. Mudah dipelajari. | | **Pulumi** | IaC menggunakan bahasa pengaturcaraan sebenar | Alternatif Terraform untuk developer. | | **Packer** | Bina machine image secara automatik | Cipta template VM atau AMI. | ### Monitoring (Pantau Kesihatan Sistem) | Tool | Fungsi | Nota | |---|---|---| | **Prometheus** | Kumpul dan simpan metrik masa nyata | Standard untuk monitoring dalam K8s. | | **Grafana** | Visualisasi data dalam dashboard cantik | Boleh connect dengan pelbagai data source. | | **Uptime Kuma** | Pantau uptime perkhidmatan | Ringan. Kita dah guna dalam homelab. | | **Datadog** | Platform monitoring all-in-one (SaaS) | Mahal tapi sangat berkuasa. | | **Zabbix** | Monitoring enterprise, self-hosted | Percuma. Agak kompleks untuk bermula. | ### Logging (Kumpul dan Analisa Log) | Tool | Fungsi | Nota | |---|---|---| | **Loki** | Sistem agregasi log oleh Grafana Labs | Ringan. Integrates baik dengan Grafana. | | **Promtail** | Pengumpul log untuk Loki | Hantar log dari server ke Loki. | | **ELK Stack** | Elasticsearch + Logstash + Kibana | Berkuasa tapi berat. Perlukan banyak RAM. | | **Fluentd** | Pengumpul log universal | Sokongan banyak output destinations. | ### Security (Keselamatan Pipeline) | Tool | Fungsi | Nota | |---|---|---| | **Trivy** | Imbas kerentanan container image | Percuma, cepat, mudah integrate dalam CI/CD. | | **SonarQube** | Analisis kualiti dan keselamatan kod (SAST) | Self-hosted. Sokong banyak bahasa. | | **OWASP ZAP** | Imbas kerentanan aplikasi web (DAST) | Percuma. Boleh automate dalam pipeline. | | **HashiCorp Vault** | Urus secrets dan credentials | Simpan API keys, password dengan selamat. | | **Snyk** | Imbas kerentanan dalam dependencies | Integrate dengan GitHub. Free tier tersedia. | ### Cloud Providers | Provider | Kelebihan | Sesuai Untuk | |---|---|---| | **AWS** | Paling banyak servis, paling besar pasaran | Enterprise, persijilan, kerjaya | | **Google Cloud** | Kuat dalam data dan Kubernetes (GKE) | K8s, machine learning | | **Azure** | Integrasi Microsoft, hybrid cloud | Organisasi guna Microsoft stack | | **DigitalOcean** | Simple, murah, developer-friendly | Projek kecil, belajar cloud | | **Hetzner** | Sangat murah, prestasi baik | VPS bajet, dedicated servers | ### Testing (Uji Kualiti) | Tool | Fungsi | Nota | |---|---|---| | **Jest** | Testing framework untuk JavaScript | Paling popular untuk Node.js. | | **PyTest** | Testing framework untuk Python | Simple dan berkuasa. | | **Selenium / Playwright** | End-to-end browser testing | Automate ujian UI web. | | **k6** | Load testing dan performance testing | Tulis test dalam JavaScript. | | **Postman / Newman** | API testing | Newman untuk automate dalam CI/CD. | > **Nota Beginner:** Jangan rasa overwhelmed tengok senarai ni. Anda tak perlu belajar semua sekarang. Dalam ebook ini, kita akan fokus kepada tools yang paling penting dan praktikal. Mulakan dengan Git, Docker, dan GitHub Actions, kemudian tambah satu persatu mengikut keperluan anda. ### Tools Mana Nak Mula Dulu? Kalau anda baru nak bermula, ini susunan yang saya cadangkan: 1. **Git + GitHub** (Bab 2). Ini asas. Tanpa ini, semua yang lain tak boleh berfungsi. 2. **Docker** (Bab 4). Anda dah biasa dari homelab, sekarang bawa ke level production. 3. **GitHub Actions** (Bab 3). Automate deployment pertama anda. 4. **Ansible** (Bab 6). Automate server configuration. 5. **Prometheus + Grafana** (Bab 7). Pantau apa yang anda deploy. 6. **Kubernetes** (Bab 5). Bila anda dah selesa dengan semua di atas. Selebihnya, tambah mengikut keperluan projek anda. ## Ringkasan Dalam bab ini, kita telah belajar: - **DevOps** ialah gabungan budaya, amalan, dan alatan yang menyatukan development dan operations - DevOps bukan sekadar alatan, ia adalah **budaya** yang menekankan kerjasama, automasi, dan penambahbaikan berterusan - Tiang utama DevOps termasuk **CI/CD**, **automation**, **monitoring**, dan **Infrastructure as Code** - Terdapat pelbagai laluan kerjaya dalam DevOps termasuk DevOps engineer, SRE, platform engineer, dan lain-lain - **Kemahiran homelab anda sudah relevan** dan boleh diterjemahkan terus ke dunia DevOps profesional Anda sudah ada asas yang kukuh dari pengalaman homelab anda. Sekarang tiba masanya untuk membina di atas asas itu. Dalam bab seterusnya, kita akan mula dengan kemahiran yang paling fundamental dalam DevOps: Git dan version control. Jom teruskan perjalanan ini bersama. \newpage