Masdika Loading..
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portofolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • CI/CD Laravel: Otomatisasi Deployment dengan Jenkins & Docker
  • Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  • Panduan Lengkap Autoscaling di Kubernetes Bare-Metal (Lengkap untuk Pemula)
  • Panduan Lengkap: Deploy Website Statis ke Kubernetes Menggunakan Docker + NodePort
  • Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern

Recent Comments

  1. Olan Ma'arif on CI/CD Laravel: Otomatisasi Deployment dengan Jenkins & Docker
  2. Masdika.BIZ.ID on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  3. VSTRA on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  4. Rikiy on Cara Mudah Deploy Website Node.js Menggunakan Docker
  5. Masdika.BIZ.ID on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Archives

  • August 2025
  • July 2025
  • June 2025

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
Blog Post

Panduan Lengkap: Deploy Website Statis ke Kubernetes Menggunakan Docker + NodePort

July 27, 2025 Tutorial by Masdika.BIZ.ID
Panduan Lengkap: Deploy Website Statis ke Kubernetes Menggunakan Docker + NodePort

Ingin men-deploy website statis HTML+CSS buatan sendiri ke Kubernetes tanpa ribet? Panduan ini cocok untuk kamu yang ingin:

  • Belajar membuat custom Docker image πŸ“¦
  • Deploy ke Kubernetes tanpa Ingress (cukup pakai NodePort) ☸️
  • Cocok untuk latihan custom images, tugas akhir, atau testing infrastruktur ringan 🎯

πŸ—‚οΈ Struktur Proyek

Berikut struktur direktori yang rapi dan jelas, ideal jika kamu memisahkan antara build Docker dan server Kubernetes (dua mesin berbeda):

custom-html/
β”œβ”€β”€ index.html             # Halaman utama website
β”œβ”€β”€ styles.css             # Style CSS
β”œβ”€β”€ Dockerfile             # Script build Docker image
β”œβ”€β”€ deployment.yaml        # YAML untuk deploy di Kubernetes (server berbeda)
└── service-nodeport.yaml  # YAML untuk expose service NodePort di Kubernetes

⚠️ Penting: Build Docker image dilakukan di server Docker, lalu di-push ke Docker Hub agar server Kubernetes bisa mengaksesnya.

πŸ”§ Langkah 1: Siapkan Folder Proyek di Server Docker

mkdir custom-html && cd custom-html

πŸ–ΌοΈ Langkah 2: Buat File HTML dan CSS

πŸ“„ index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>My Simple Page</title>
  <link rel="stylesheet" href="styles.css" />
  <meta name="description" content="Website statis HTML sederhana yang dijalankan di Kubernetes menggunakan Docker dan NodePort.">
</head>
<body>
  <h1>Hello from Kubernetes! πŸš€</h1>
  <p>This is a static page served from a custom Docker image.</p>
</body>
</html>

🎨 styles.css

body {
  font-family: sans-serif;
  background-color: #f5f5f5;
  text-align: center;
  padding-top: 50px;
  color: #333;
}

🐳 Langkah 3: Buat Dockerfile

πŸ“„ Dockerfile

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
COPY styles.css /usr/share/nginx/html/styles.css

File ini membuat image ringan berbasis nginx dan menyalin HTML+CSS ke direktori default nginx.

πŸ“¦ Langkah 4: Build dan Push Docker Image dari Server Docker

⚠️ Karena server Docker dan Kubernetes berbeda, kamu harus push image ke registry publik seperti Docker Hub.

# Build image (ganti "masdika" dengan username Docker Hub kamu)
docker build -t masdika/custom-html:latest .

# Login ke Docker Hub (jika belum)
docker login -u userKamu

# Push image ke Docker Hub
docker push masdika/custom-html:latest

βœ… Setelah ini, kamu bisa berpindah ke server Kubernetes untuk proses deployment.

☸️ Langkah 5: Buat Deployment Kubernetes (di Server Kubernetes)

πŸ“„ deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: custom-html
spec:
  replicas: 1
  selector:
    matchLabels:
      app: custom-html
  template:
    metadata:
      labels:
        app: custom-html
    spec:
      containers:
      - name: web
        image: masdika/custom-html:latest
        ports:
        - containerPort: 80

🌐 Langkah 6: Buat Service dengan NodePort (di Server Kubernetes)

πŸ“„ service-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: custom-html-svc
spec:
  selector:
    app: custom-html
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080
  type: NodePort

πŸš€ Langkah 7: Deploy ke Kubernetes

kubectl apply -f deployment.yaml
kubectl apply -f service-nodeport.yaml

πŸ“Œ Pastikan kubectl sudah terhubung ke cluster dan image bisa di-pull dari Docker Hub.

🌍 Langkah 8: Akses Website dari Browser

Buka browser:

http://<IP-PUBLIC-NODE>:30080

Contoh:

http://206.237.97.18:30080

βœ… Jika tampil halaman HTML, berarti sukses!

πŸ§ͺ Debug & Monitoring

kubectl get pods -l app=custom-html
kubectl logs <nama-pod>
kubectl get svc custom-html-svc

πŸ”’ Bonus Opsional untuk Produksi

  • πŸ”€ Tambahkan liveness dan readiness probe
  • πŸ” Tambah Ingress + cert-manager untuk HTTPS otomatis
  • ♻️ Auto update image pakai Watchtower atau ArgoCD

πŸŽ‰ Penutup

Dengan tutorial ini, kamu telah:

  • Deploy website statis sederhana untuk latihan
  • Build Docker image dan push ke Docker Hub
  • Deploy ke Kubernetes via NodePort tanpa Ingress

πŸ”₯ Cocok untuk portofolio, pembelajaran DevOps, dan testing cluster bagi pemula yang baru belajar!

Share:
Tags: dockerkubernetesnode port

Post navigation

Prev
Next
Write a comment Cancel Reply

Β© 2025 www.masdika.biz.id β€” Semua Hak Dilindungi