Belajar DevOps Engineer - Linux & Scripting (Bash/Python)
Episode 3 of 28

Belajar DevOps Engineer - Linux & Scripting (Bash/Python)

Linux adalah rumah bagi hampir semua server produksi, dan scripting adalah bahasa otomasinya; di episode ini kalian memperdalam administrasi Linux (proses, service, networking) lalu membangun skrip Bash dan Python yang berakhir pada sebuah script deploy sederhana

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 2 kita memetakan arsitektur DevOps, sekarang saatnya membangun fondasi paling praktis: Linux dan scripting. Mengapa ini menjadi pembuka fase praktik? Karena setiap komponen arsitektur DevOps — pipeline, container, cluster, cloud — pada akhirnya hanyalah sekumpulan proses Linux yang diotomasi. Kalian akan mengotomasi server dengan Bash, menulis logika kompleks dengan Python, dan membuat semua tool lain bekerja.

Episode ini bukan pengganti series belajar Linux yang lengkap, melainkan filter: apa saja yang paling sering dipakai DevOps Engineer setiap hari, dan bagaimana membangun script pertama yang benar-benar berguna.

Administrasi Linux untuk DevOps

Proses: Menemukan dan Mengelola

Setiap layanan di server adalah proses. Kalian wajib bisa menemukan proses, melihat resource-nya, dan menghentikannya:

LinuxMengelola proses
ps aux | grep nginx
top -b -n 1 | head -15
kill -9 <PID>

Service: systemd

Sebagian besar distro modern memakai systemd. Unit service dideskripsikan dalam file unit, dan diatur dengan systemctl:

LinuxMengelola service dengan systemctl
sudo systemctl status nginx
sudo systemctl enable --now nginx
sudo systemctl restart nginx
systemctl is-active nginx

Memahami unit file penting karena di episode 7 dan 10 kalian akan memakainya lagi (di dalam container dan lewat Ansible).

Networking: Port, Socket, dan Firewall

Diagnosis "aplikasi tidak bisa diakses" hampir selalu berujung pada port atau firewall:

Diagnosis networking
ss -tlnp
curl -v http://localhost:8080
sudo ufw status

ss -tlnp menunjukkan port yang sedang listen, curl -v menunjukkan proses handshake HTTP, dan ufw status mengecek firewall.

Log: Sumber Kebenaran Diagnosis

Membaca log
journalctl -u nginx -n 50 --no-pager
journalctl -f -u nginx
tail -n 20 /var/log/nginx/error.log

Bash Scripting: Fondasi Otomasi

Bash adalah bahasa glue DevOps. Sebuah script yang baik punya tiga sifat: idempotent (jalan berulang aman), exit code yang jujur, dan output yang informatif.

Script Bash dasar
#!/usr/bin/env bash
set -euo pipefail
 
APP_DIR="/opt/myapp"
BACKUP_DIR="/var/backups/myapp"
 
echo "Membuat direktori..."
mkdir -p "$APP_DIR" "$BACKUP_DIR"
 
echo "Menyalin file aplikasi..."
cp -r ./app/* "$APP_DIR/"
 
echo "Backup konfigurasi lama..."
cp "$APP_DIR/.env" "$BACKUP_DIR/.env.bak"
 
echo "Selesai."

set -euo pipefail adalah tiga pengaman yang wajib di setiap script: berhenti saat error (-e), error saat variabel tak terdefinisi (-u), dan mendeteksi kegagalan di tengah pipeline (-o pipefail). Tanpa ini, script yang "gagal" bisa tetap melanjutkan ke langkah berikutnya — musuh terbesar otomasi.

Python: Logika yang Lebih Kompleks

Bash tetap dipakai untuk tugas singkat, tetapi saat logika mulai kompleks — parsing JSON, berinteraksi dengan API, parallel task — Python jauh lebih produktif. Python juga menjadi bahasa utama banyak tool DevOps (Ansible, Terraform plugin, SDK cloud).

Otomasi dengan Python
import subprocess
import sys
 
services = ["nginx", "postgresql"]
 
def is_active(name: str) -> bool:
    result = subprocess.run(
        ["systemctl", "is-active", "--quiet", name]
    )
    return result.returncode == 0
 
failed = []
for svc in services:
    if is_active(svc):
        print(f"[OK] {svc} aktif")
    else:
        print(f"[FAIL] {svc} tidak aktif")
        failed.append(svc)
 
sys.exit(1 if failed else 0)

Perhatikan pola pentingnya: script di atas memeriksa status alih-alih langsung mengasumsikan, dan mengembalikan exit code non-zero saat ada kegagalan. Ini membuatnya layak dipakai sebagai health check dalam pipeline CI (episode 5).

Praktik: Script Deploy Sederhana

Sekarang kita gabungkan: sebuah script deploy yang (1) mengambil versi terbaru dari Git, (2) menjalankan build, (3) menghentikan service lama, (4) memulai service baru, dan (5) mengecek hasilnya.

deploy.sh - script deploy sederhana
#!/usr/bin/env bash
set -euo pipefail
 
SERVICE="myapp"
BRANCH="main"
 
echo "[1/5] Pull kode terbaru..."
git pull origin "$BRANCH"
 
echo "[2/5] Build..."
npm ci && npm run build
 
echo "[3/5] Hentikan service lama..."
sudo systemctl stop "$SERVICE"
 
echo "[4/5] Pasang build baru..."
sudo cp -r build/ /opt/myapp/
sudo systemctl start "$SERVICE"
 
echo "[5/5] Verifikasi..."
sleep 3
if systemctl is-active --quiet "$SERVICE"; then
    echo "Deploy $BRANCH berhasil."
else
    echo "Deploy gagal!" >&2
    exit 1
fi

Warning

Script di atas berguna untuk satu server, tetapi memiliki kelemahan klasik yang nanti kita selesaikan sepanjang series: tidak ada rollback otomatis, state-nya tidak terpusat, dan berjalan manual. Episode 6 (CD), episode 9 (Terraform), dan episode 10 (Ansible) adalah evolusi natural dari script semacam ini.

Pitfall Umum

  • Menyalin-paste perintah tanpa memahami — script kalian akan dijalankan berkali-kali; pahami setiap baris.
  • Lupa set -euo pipefail — kegagalan diam-diam adalah bencana dalam otomasi.
  • Hardcode nilai — gunakan variabel dan (nanti) environment / secret, bukan nilai yang diketik langsung.
  • Mengabaikan exit code — pipeline CI mempercayai exit code sebagai sinyal sukses/gagal.

Penutup

Inti yang harus dibawa pulang:

  • DevOps Engineer harus nyaman dengan proses, service, networking, dan log Linux.
  • Bash untuk otomasi singkat; selalu gunakan set -euo pipefail.
  • Python untuk logika kompleks dan interaksi API/cloud.
  • Script deploy sederhana adalah cikal bakal pipeline CD yang akan kalian bangun.

Di episode 4 selanjutnya kita membahas version control & Git workflow — karena semua otomasi yang kita tulis harus hidup di repository, direview, dan bisa dilacak. Git adalah sumber kebenaran untuk seluruh siklus DevOps.

Belajar DevOps Engineer - Linux & Scripting (Bash/Python) | Belajar DevOps Engineer