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. Masdika.ID on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  2. Sahrull on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  3. Masdika.ID on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  4. Sahrull on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  5. Riyan on Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Panduan Lengkap Deploy Aplikasi Microservices dengan Docker + Caddy SSL

August 9, 2025 Tutorial by Masdika.ID
Panduan Lengkap Deploy Aplikasi Microservices dengan Docker + Caddy SSL

Ingin membangun sistem microservices dengan deployment yang simpel dan aman? Artikel ini akan membimbing kamu langkah demi langkah membuat aplikasi e-commerce berbasis microservices menggunakan Docker dan Caddy untuk otomatisasi HTTPS. 🌟

🧠 Apa Itu Microservices

Microservices adalah pendekatan arsitektur di mana sebuah aplikasi besar dibagi menjadi beberapa layanan kecil yang berdiri sendiri, tetapi saling berkomunikasi. Setiap layanan:

  • Mengelola satu fungsi spesifik (seperti user, produk, atau order)
  • Dapat dikembangkan, diuji, dan di-deploy secara independen
  • Skalabel secara individual

Contoh nyata dari pendekatan ini adalah aplikasi e-commerce yang kamu akan buat dalam artikel ini. πŸ’‘

Keunggulan Microservices:

  • πŸ”„ Mudah scaling per layanan
  • πŸ§ͺ Testing lebih fleksibel
  • πŸ”§ Tim bisa kerja paralel
  • πŸ”’ Keamanan dan isolasi lebih baik

🧱 Struktur Aplikasi

Aplikasi ini terdiri dari 4 service utama:

  • User Service πŸ‘€ – Menyediakan data user
  • Product Service πŸ›οΈ – Menyediakan data produk
  • Order Service πŸ“¦ – Menyediakan data pesanan
  • Gateway 🌐 – Reverse proxy internal untuk merutekan request ke service lain

Semua service dijalankan menggunakan docker-compose dan diakses dari internet melalui Caddy yang otomatis menangani HTTPS via Let’s Encrypt. πŸ”

πŸ“‚ Struktur Folder

.
β”œβ”€β”€ Caddyfile
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ gateway
β”‚   β”œβ”€β”€ app.js
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── package.json
β”œβ”€β”€ order-service
β”‚   β”œβ”€β”€ app.js
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── package.json
β”œβ”€β”€ product-service
β”‚   β”œβ”€β”€ app.js
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── package.json
└── user-service
    β”œβ”€β”€ app.js
    β”œβ”€β”€ Dockerfile
    └── package.json

βš™οΈ Konfigurasi File

πŸ“œ 1. Caddyfile

api.masdika.my.id {
    reverse_proxy gateway:3000
}

🐳 2. docker-compose.yml

services:
  user-service:
    build: ./user-service
    networks: [internal]

  product-service:
    build: ./product-service
    networks: [internal]

  order-service:
    build: ./order-service
    networks: [internal]

  gateway:
    build: ./gateway
    expose: ["3000"]
    networks: [internal]

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks: [internal]

volumes:
  caddy_data:
  caddy_config:

networks:
  internal:
    driver: bridge

πŸŒ‰ 3. Gateway

πŸ“„ gateway/app.js

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();

app.use('/users', createProxyMiddleware({ target: 'http://user-service:3001', changeOrigin: true }));
app.use('/products', createProxyMiddleware({ target: 'http://product-service:3002', changeOrigin: true }));
app.use('/orders', createProxyMiddleware({ target: 'http://order-service:3003', changeOrigin: true }));

app.listen(3000, () => {
  console.log('Gateway running on port 3000');
});

πŸ“„ gateway/Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]

πŸ“„ gateway/package.json

{
  "name": "gateway",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2",
    "http-proxy-middleware": "^2.0.6"
  }
}

πŸ‘€ 4. User Service

πŸ“„ user-service/app.js

const express = require('express');
const app = express();
app.use(express.json());

app.get('/users', (req, res) => {
  res.json([{ id: 1, name: 'Andika' }]);
});

app.listen(3001, () => {
  console.log('User Service running on port 3001');
});

πŸ“„ user-service/Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]

πŸ“„ user-service/package.json

{
  "name": "user-service",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}

πŸ“¦ 5. Product Service

πŸ“„ product-service/app.js

const express = require('express');
const app = express();
app.use(express.json());

app.get('/products', (req, res) => {
  res.json([{ id: 1, name: 'Kaos ChatGPT', price: 100000 }]);
});

app.listen(3002, () => {
  console.log('Product Service running on port 3002');
});

πŸ“„ product-service/Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]

πŸ“„ product-service/package.json

{
  "name": "product-service",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}

πŸ›’ 6. Order Service

πŸ“„ order-service/app.js

const express = require('express');
const app = express();
app.use(express.json());

app.get('/orders', (req, res) => {
  res.json([{ id: 1, userId: 1, productId: 1 }]);
});

app.listen(3003, () => {
  console.log('Order Service running on port 3003');
});

πŸ“„ order-service/Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]

πŸ“„ order-service/package.json

{
  "name": "order-service",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}

🏁 Cara Menjalankan

  1. Pastikan domain kamu sudah mengarah ke IP server.
  2. Jalankan project:
docker compose up -d --build
  1. Akses:
  • https://api.masdika.my.id/users
  • https://api.masdika.my.id/products
  • https://api.masdika.my.id/orders

βœ… Kesimpulan

πŸš€ Kamu sudah berhasil membuat dan menjalankan aplikasi e-commerce berbasis microservices dengan Docker dan Caddy sebagai reverse proxy otomatis SSL!

Keuntungan:

  • πŸ” Otomatis HTTPS dengan Let’s Encrypt
  • πŸ“¦ Modular & terisolasi antar service
  • 🐳 Dockerized – mudah dipindah dan diskalakan

Selanjutnya, kamu bisa mengembangkan ini dengan:

  • Database (MySQL, MongoDB)
  • Redis cache
  • Authentication JWT
  • CI/CD (GitHub Actions, Drone)
  • Monitoring (Grafana, Prometheus)

Semoga bermanfaat! ❀️

Share:
Tags: caddydockermicroservicessl
Related Posts
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…

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
Write a comment Cancel Reply


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