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

  • Dari Laptop Bekas Jadi Server Pribadi: Cara Membangun Home Server Murah Menggunakan ISP MyRepublic dengan Public IP
  • Pembuatan Subnet dan Alokasi IP Address pada Amazon Web Service VPC
  • Instalasi dan Konfigurasi AWS CLI pada EC2 (Lab Guide)
  • Membangun Arsitektur Web + Database Highly Available di AWS (RDS Multi-AZ)
  • Cara Reset Password OpenBSD di Proxmox via VNC

Recent Comments

  1. Alif on Jangan Gunakan latest Tag pada Docker Images! Ini Alasannya
  2. Sahrull on Panduan Lengkap Anti-DDoS: Installasi Iptables, Hardening, dan Cloudflare Proxy
  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

Categories

  • Tutorial

Masdika.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
Membangun Jenkins Production Stabil dengan Inbound Agent dan Traefik SSL

Panduan ini menjelaskan instalasi Jenkins production menggunakan Docker + Traefik (SSL otomatis via DNS Challenge Cloudflare), dengan fokus utama pada…

Instalasi SSL Let’s Encrypt di Proxmox VE via Web UI

Let’s Encrypt adalah layanan gratis untuk membuat sertifikat SSL agar akses web Proxmox menjadi aman (HTTPS). Mulai dari versi 6.3,…

Post navigation

Prev
Next
Write a comment Cancel Reply


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