Simulasi load balancing menggunakan dua server backend Node.js dan Nginx sebagai load balancer. Proyek ini menggunakan Docker dan Docker Compose untuk memudahkan setup dan deployment.
.
├── Dockerfile # Dockerfile untuk aplikasi Node.js
├── Dockerfile.nginx # Dockerfile untuk Nginx load balancer
├── docker-compose.yml # Konfigurasi docker-compose
├── index.js # Source code aplikasi Node.js
└── README.md
- Docker Desktop terinstall di Mac/Windows/Linux
dockerdandocker-composesudah tersedia di terminal
-
Clone repository ini
git clone https://github.com/username/load-balancer-simulation.git cd load-balancer-simulation -
Build dan jalankan container menggunakan Docker Compose
docker compose up --build
Perintah ini akan:
- Membangun image untuk aplikasi Node.js (
app1danapp2) - Membangun image untuk Nginx load balancer
- Menjalankan ketiga container (
app1,app2, dannginx)
- Membangun image untuk aplikasi Node.js (
app1berjalan di port internal3000dan di-mapping ke port host3001app2berjalan di port internal3000dan di-mapping ke port host3002- Nginx berjalan di port
80di dalam container dan di-mapping ke port host8080 - Nginx bertindak sebagai load balancer dan meneruskan permintaan ke
app1danapp2menggunakan algoritma Round Robin - Setiap aplikasi Node.js menampilkan pesan yang menunjukkan instance mana yang merespon (berdasarkan
INSTANCE_NAME)
Setelah container berjalan, akses load balancer melalui browser atau curl:
curl http://localhost:8080/Kamu akan melihat pesan dari app1 dan app2 secara bergantian (round robin).
Untuk menghentikan dan menghapus container, network, dan volume yang dibuat:
docker compose down-
Jika ingin melihat log dari container tertentu:
docker logs app1 docker logs app2 docker logs nginx
-
Jika melakukan perubahan kode aplikasi, jalankan ulang build dengan:
docker compose up --build
Dockerfile (Node.js app):
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
ENV PORT=3000
EXPOSE 3000
CMD ["node", "index.js"]Dockerfile.nginx:
FROM nginx:stable-alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]Jika ada pertanyaan atau butuh bantuan, silakan hubungi saya via email fikri.muha28@gmail.com!