Masdika Loading..
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portfolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  • Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt
  • Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  • Panduan Lengkap Deploy WordPress + Redis + MySQL di Kubernetes dengan SSL Cloudflare
  • Panduan Lengkap Install & Konfigurasi Ceph 3 Node dengan RGW (S3 Compatible)

Recent Comments

  1. Riyan on Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  2. Ardian on Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  3. Masdika.ID on Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  4. Rudy on Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  5. Firman on Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt

August 27, 2025 Tutorial by Masdika.ID
Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt

Buat kamu yang lagi Deploy aplikasi dengan Next.js dan pengen jalan di Kubernetes dengan domain custom + SSL otomatis, artikel ini cocok banget. Kita akan bahas step-by-step mulai dari build Docker image, deploy ke cluster Kubernetes, sampai aktifin HTTPS pakai Ingress NGINX + cert-manager. πŸ”’βœ¨

πŸ”§ 1. Build Docker Image Next.js

Pertama, bikin Dockerfile khusus Kubernetes:

# ---------- Stage 1: Build Next.js ----------
FROM node:20-alpine AS builder

WORKDIR /app

# Install dependencies
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install

# Copy source code
COPY . .

# Build Next.js
RUN pnpm build

# ---------- Stage 2: Runtime ----------
FROM node:20-alpine

WORKDIR /app

# Copy only necessary runtime files
COPY --from=builder /app ./

EXPOSE 3000

CMD ["pnpm", "start"]

Build dan push ke Docker Hub:

docker build -f Dockerfile.kube -t masdika/infradevcomunity:latest .
docker push masdika/infradevcomunity:latest

☸️ 2. Deploy ke Kubernetes

Bikin manifest infradev-final.yaml:

# ---------- Namespace (tempat khusus untuk resource app ini) ----------
apiVersion: v1
kind: Namespace
metadata:
  name: infradev

---
# ---------- Deployment (definisi pod Next.js, berisi container app) ----------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: infradev-deployment
  namespace: infradev
spec:
  replicas: 2                       # jumlah pod (auto scaling manual)
  selector:
    matchLabels:
      app: infradev-app             # selector cocokkan ke label pod
  template:
    metadata:
      labels:
        app: infradev-app           # label pod
    spec:
      containers:
      - name: infradev-container
        image: masdika/infradevcomunity:latest  # image dari Docker Hub
        ports:
        - containerPort: 3000       # port yang dipakai app Next.js

---
# ---------- Service (akses internal cluster ke pod) ----------
apiVersion: v1
kind: Service
metadata:
  name: infradev-service
  namespace: infradev
spec:
  selector:
    app: infradev-app               # target pod berdasarkan label
  ports:
  - port: 80                        # port service (akses internal)
    targetPort: 3000                # port dalam container
  type: ClusterIP                   # hanya bisa diakses internal (untuk Ingress)

---
# ---------- Ingress (akses publik via domain + HTTPS) ----------
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: infradev-ingress
  namespace: infradev
  annotations:
    kubernetes.io/ingress.class: "nginx"          # gunakan Ingress NGINX
    cert-manager.io/cluster-issuer: "letsencrypt-prod" # issuer TLS cert-manager
spec:
  tls:
  - hosts:
    - infradev.masdika.biz.id        # domain publik
    secretName: infradev-tls         # nama secret TLS otomatis dibuat cert-manager
  rules:
  - host: infradev.masdika.biz.id    # host/domain yang diarahkan
    http:
      paths:
      - path: /                      # route path
        pathType: Prefix
        backend:
          service:
            name: infradev-service   # service tujuan
            port:
              number: 80             # port service tujuan

Apply ke cluster:

kubectl apply -f infradev-final.yaml

🌐 3. Konfigurasi DNS

Arahkan domain/subdomain ke IP publik dari Ingress Controller (MetalLB):

infradev.masdika.biz.id β†’ 206.237.97.18

Atur di Cloudflare sebagai A Record. Proxy (☁️) bisa ON atau OFF, karena cert-manager pakai DNS-01 challenge.

πŸ”’ 4. SSL Otomatis dengan cert-manager

Cert-manager akan otomatis bikin sertifikat TLS dari Let’s Encrypt. Cek status:

kubectl -n infradev get certificate
kubectl -n infradev describe certificate infradev-tls

Kalau sukses, aplikasi bisa diakses lewat:

https://infradev.masdika.biz.id

⚑ Kesimpulan

Dengan setup ini:

  • βœ… Next.js berjalan di Kubernetes
  • βœ… Routing via Ingress NGINX
  • βœ… SSL otomatis via cert-manager (Let’s Encrypt)
  • βœ… MetalLB kasih IP publik

Hasilnya, aplikasi kamu lebih aman, scalable, dan production-ready πŸš€πŸ”₯

πŸ‘‰ Yuk coba implementasi di projectmu! Kalau ada masalah kayak DNS belum resolve atau sertifikat belum issued, cek log cert-manager dan pastikan DNS di Cloudflare udah benar. πŸ˜‰

Share:
Tags: dockerkubernetes
Related Posts
Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop

πŸš€ Apa itu K3s? K3s adalah distribusi Kubernetes ringan dari Rancher yang dirancang untuk mempermudah proses instalasi dan penggunaan Kubernetes….

Panduan Lengkap Deploy WordPress + Redis + MySQL di Kubernetes dengan SSL Cloudflare

Mau bikin website WordPress super cepat, aman, dan bisa di-scale di Kubernetes? πŸ’‘ Artikel ini akan membahas langkah demi langkah…

Post navigation

Prev
Next
2 Comments
  • Dikiy 8:50 pm August 27, 2025 Reply

    Nice mas

  • Firman 9:03 pm August 27, 2025 Reply

    Thanks mas ehehe πŸ™‚

Write a comment Cancel Reply


Β© 2025 www.masdika.id β€” Semua hak cipta dilindungi