Skip to content

Proyek ini bertujuan untuk membangun dan mengelola beberapa microservices sederhana menggunakan Docker dan Nginx sebagai reverse proxy

Notifications You must be signed in to change notification settings

ajimaulana123/microservice-be

Repository files navigation

Microservice Project with Docker and Nginx

Deskripsi

Proyek ini bertujuan untuk membangun dan mengelola beberapa microservices sederhana menggunakan Docker dan Nginx sebagai reverse proxy. Setiap service berjalan dalam container Docker yang terisolasi dan dapat berkomunikasi satu sama lain dengan mudah melalui jaringan Docker.

Microservices:

  1. Service A - Authentication: Mengelola login dan logout menggunakan token JWT.
  2. Service B - Data Service: Menyediakan API untuk CRUD (Create, Read, Update, Delete) data pengguna.
  3. Service C - Logging: Mencatat dan menyimpan log untuk setiap request dan response yang terjadi di microservices lain.
  4. Nginx: Reverse proxy untuk routing antar services.

Teknologi yang Digunakan

  • Docker: Untuk membuat container yang menjalankan microservices.
  • Docker Compose: Untuk mengelola dan mengatur dependency antar services.
  • Nginx: Sebagai reverse proxy untuk mengarahkan request ke microservices yang tepat.
  • Express.js: Framework Node.js yang digunakan untuk membuat RESTful API pada setiap microservice.
  • JWT (JSON Web Token): Untuk autentikasi pada Service A.

Fitur

  1. Layanan Autentikasi:

    • Kontrol Akses Berbasis Peran (RBAC) untuk peran admin dan user.
    • Autentikasi berbasis JWT (JSON Web Token).
  2. Layanan Data:

    • Operasi CRUD untuk data pengguna.
    • Caching dengan Redis untuk meningkatkan kecepatan respons.
  3. Layanan Logging:

    • Penanganan log terpusat menggunakan antrian Bull untuk pemrosesan log.
    • Mekanisme retry otomatis untuk log yang gagal diproses.
  4. Tooling DevOps:

    • Monitoring menggunakan Prometheus dan visualisasi dengan Grafana.
    • Sentralisasi log dengan ELK Stack (Elasticsearch, Logstash, Kibana).
    • Pipeline CI/CD menggunakan GitHub Actions.
    • Deployment ke cluster Kubernetes.

Cara Menjalankan Proyek

Prasyarat

  1. Pastikan Docker dan Docker Compose sudah terinstal di mesin kamu. Kamu bisa mengunduhnya di Docker dan Docker Compose.

Menjalankan Semua Service

  1. Clone repository ini ke mesin lokal kamu:

    git clone <repository-url>
    cd <repository-folder>
  2. Bangun dan jalankan semua services menggunakan Docker Compose:

    docker-compose up --build

    Perintah ini akan membangun image Docker untuk setiap microservice dan menjalankan container-nya.

Mengakses API

Untuk melakukan curl ke microservices yang telah dibuat dengan Nginx sebagai reverse proxy, berikut adalah beberapa contoh perintah curl untuk masing-masing layanan:

1. Authentication Service (Login dan Profile)

  • Login (POST request untuk mendapatkan token JWT):

    curl -X POST http://localhost/auth/login -d '{"username": "john"}' -H "Content-Type: application/json"

    Respons yang akan diberikan adalah token JWT seperti ini:

    {
      "accessToken": "your_jwt_token_here"
    }
  • Akses Profile (GET request dengan JWT token): Setelah mendapatkan token dari login, gunakan token tersebut untuk mengakses profile.

    curl -X GET http://localhost/auth/profile -H "Authorization: your_jwt_token_here"

    Respons:

    {
      "message": "Welcome john"
    }

2. Data Service (CRUD Data Pengguna)

  • Ambil Data Pengguna (GET request):

    curl -X GET http://localhost/data/users

    Respons yang akan diberikan adalah daftar pengguna:

    [
      {
        "id": 1,
        "name": "John Doe",
        "email": "[email protected]"
      },
      {
        "id": 2,
        "name": "Jane Doe",
        "email": "[email protected]"
      }
    ]
  • Tambah Pengguna Baru (POST request):

    curl -X POST http://localhost/data/users -d '{"id": 3, "name": "Alice", "email": "[email protected]"}' -H "Content-Type: application/json"

    Respons:

    {
      "id": 3,
      "name": "Alice",
      "email": "[email protected]"
    }
  • Update Data Pengguna (PUT request):

    curl -X PUT http://localhost/data/users/1 -d '{"name": "John Updated", "email": "[email protected]"}' -H "Content-Type: application/json"

    Respons:

    {
      "id": 1,
      "name": "John Updated",
      "email": "[email protected]"
    }
  • Hapus Pengguna (DELETE request):

    curl -X DELETE http://localhost/data/users/1

3. Logging Service (Menyimpan dan Melihat Log)

  • Menyimpan Log (POST request):

    curl -X POST http://localhost/log/log -d '{"request": "/data/users", "response": "200 OK"}' -H "Content-Type: application/json"

    Respons:

    "Log saved"
  • Lihat Log (GET request):

    curl -X GET http://localhost/log/logs

    Respons:

    [
      {
        "request": "/data/users",
        "response": "200 OK"
      }
    ]

Menjalankan Secara Terpisah

Jika ingin menjalankan service secara terpisah, kamu bisa menjalankan container yang sesuai:

  • Authentication Service:

    docker run -p 5001:5001 auth-service
  • Data Service:

    docker run -p 5002:5002 data-service
  • Logging Service:

    docker run -p 5003:5003 logging-service
  • Nginx:

    docker run -p 80:80 nginx

Struktur Proyek

.
├── auth-service
│   ├── Dockerfile
│   ├── app.js
│   └── package.json
├── data-service
│   ├── Dockerfile
│   ├── app.js
│   └── package.json
├── logging-service
│   ├── Dockerfile
│   ├── app.js
│   └── package.json
├── nginx
│   ├── default.conf
├── docker-compose.yml
└── README.md

Troubleshooting

  • Jika kamu mengalami masalah dengan memory saat menjalankan container, pastikan untuk menyesuaikan konfigurasi Docker kamu.
  • Pastikan semua port yang dibutuhkan (5001, 5002, 5003, 80) tidak digunakan oleh aplikasi lain di sistem kamu.

Kontribusi

Jika kamu ingin berkontribusi atau mengembangkan proyek ini lebih lanjut, silakan fork dan kirim pull request.

About

Proyek ini bertujuan untuk membangun dan mengelola beberapa microservices sederhana menggunakan Docker dan Nginx sebagai reverse proxy

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published