Bab 6: Pengelolaan Infrastruktur
6.1. Penggunaan Docker untuk Containerization
Apa itu Docker?
Docker adalah platform untuk containerization, memungkinkan aplikasi dan dependensinya dibungkus ke dalam satu kontainer.
Keuntungan Docker
-
Portabilitas: “Write once, run anywhere.”
-
Isolasi Lingkungan: Setiap aplikasi berjalan di lingkungan independen.
-
Efisiensi: Memanfaatkan sumber daya lebih ringan dibandingkan virtual machine.
Istilah Penting dalam Docker -
Image: Template read-only untuk membuat container.
-
Container: Instance dari image yang berjalan.
-
Dockerfile: File yang mendefinisikan bagaimana image dibuat.
Contoh Dockerfile untuk Node.js:# Menggunakan image Node.js FROM node:16 # Set direktori kerja WORKDIR /app # Salin file package.json COPY package*.json ./ # Install dependensi RUN npm install # Salin seluruh file proyek COPY . . # Jalankan aplikasi CMD ["node", "app.js"]
Perintah Dasar Docker
-
Build Image:
docker build -t my-app .
-
Jalankan Container:
docker run -d -p 3000:3000 my-app
6.2. Manajemen Server dengan Kubernetes
Apa itu Kubernetes?
Kubernetes adalah sistem orkestrasi untuk mengelola container dalam skala besar.
Komponen Utama Kubernetes
-
Pod: Unit terkecil dalam Kubernetes, biasanya mewakili satu container atau beberapa container.
-
Node: Mesin fisik/virtual tempat pod berjalan.
-
Cluster: Sekumpulan node yang dikelola Kubernetes.
Keuntungan Kubernetes -
Scalability: Memungkinkan menambah/mengurangi container sesuai beban kerja.
-
Reliability: Jika container gagal, Kubernetes dapat memulai ulang otomatis.
-
Load Balancing: Mengarahkan lalu lintas ke container yang aktif.
Contoh File Deployment Kubernetes:apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-app:latest ports: - containerPort: 3000
Perintah Dasar Kubernetes
-
Deploy Aplikasi:
kubectl apply -f deployment.yaml
-
Melihat Pod:
kubectl get pods
6.3. DevOps Dasar untuk Backend Developer
Apa itu DevOps?
DevOps adalah pendekatan kolaboratif antara tim pengembangan (Development) dan tim operasional (Operations) untuk mempercepat pengiriman aplikasi.
Prinsip Dasar DevOps
-
Continuous Integration (CI): Mengintegrasikan kode ke repository secara otomatis dan terus-menerus.
-
Continuous Delivery (CD): Mengotomatisasi pengujian dan deployment kode.
-
Automation: Menggunakan alat seperti Jenkins, GitLab CI/CD, atau GitHub Actions.
Contoh Pipeline CI/CD dengan GitHub Actions:name: Node.js CI on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Node.js uses: actions/setup-node@v2 with: node-version: 16 - run: npm install - run: npm test
6.4. Deploy Aplikasi: AWS, Azure, DigitalOcean, Heroku
Pilihan Platform Deployment
-
AWS (Amazon Web Services): Cocok untuk aplikasi berskala besar dengan banyak layanan tambahan.
-
Azure: Terintegrasi baik dengan ekosistem Microsoft.
-
DigitalOcean: Mudah digunakan untuk aplikasi kecil hingga menengah.
-
Heroku: Platform sederhana untuk deployment cepat.
Contoh Deployment Heroku (Node.js)
-
Login Heroku:
heroku login
-
Buat Aplikasi:
heroku create my-app
-
Deploy Aplikasi:
git push heroku main
AWS Elastic Beanstalk:
-
Install CLI AWS:
aws configure
-
Deploy Aplikasi:
eb init eb deploy
6.5. Monitoring dan Logging (Grafana, ELK Stack)
Mengapa Monitoring Penting?
Untuk memastikan aplikasi berjalan optimal dan mendeteksi masalah sejak dini.
Alat Monitoring dan Logging
-
Grafana: Untuk visualisasi metrik aplikasi dan server.
-
ELK Stack: Kombinasi Elasticsearch, Logstash, dan Kibana untuk analisis log.
Implementasi Dasar Grafana
-
Instal Grafana di server.
-
Tambahkan data source (seperti Prometheus).
-
Buat dashboard untuk memantau metrik aplikasi.
Contoh Konfigurasi Log ELK Stack
-
Logstash Config:
input { file { path => "/var/log/my-app/*.log" start_position => "beginning" } } output { elasticsearch { hosts => ["http://localhost:9200"] } }
-
Kibana: Gunakan untuk membuat visualisasi log dari Elasticsearch.
Kesimpulan:
Bab ini membahas pengelolaan infrastruktur modern untuk aplikasi backend. Dengan memahami containerization (Docker), orkestrasi (Kubernetes), DevOps dasar, dan deployment, pengembang dapat mengelola aplikasi secara lebih efisien dan scalable. Monitoring dan logging juga memastikan aplikasi tetap berjalan dengan baik dalam produksi.