diff --git a/README.md b/README.md deleted file mode 100644 index 96ca8c917..000000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# a433-microservices -Repository ini digunakan untuk kebutuhan kelas Belajar Membangun Arsitektur Microservices diff --git a/RabbitMQ/rabbitmq-deployment.yml b/RabbitMQ/rabbitmq-deployment.yml new file mode 100644 index 000000000..697ed5d8d --- /dev/null +++ b/RabbitMQ/rabbitmq-deployment.yml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: rabbitmq +spec: + replicas: 1 + selector: + matchLabels: + app: rabbitmq + template: + metadata: + labels: + app: rabbitmq + spec: + containers: + - name: rabbitmq + image: rabbitmq:3.11-management + ports: + - containerPort: 5672 + - containerPort: 15672 + volumeMounts: + - name: rabbitmq-data + mountPath: /var/lib/rabbitmq/ + - name: rabbitmq-log + mountPath: /var/log/rabbitmq/ + volumes: + - name: rabbitmq-data + emptyDir: {} + - name: rabbitmq-log + emptyDir: {} diff --git a/RabbitMQ/rabbitmq-headless-service.yml b/RabbitMQ/rabbitmq-headless-service.yml new file mode 100644 index 000000000..9fd1d45a4 --- /dev/null +++ b/RabbitMQ/rabbitmq-headless-service.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: rabbitmq-headless + labels: + app: rabbitmq +spec: + ports: + - port: 5672 + name: amqp + clusterIP: None + selector: + app: rabbitmq diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..2beb81a70 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,65 @@ +# Menggunakan versi Docker Compose 3.8 +version: '3.8' + +# Mendefinisikan services +services: + + order-svc: + # Menggunakan image dari GitHub Container Registry + image: ghcr.io/rzlpratama77/order-service:latest + # Memetakan port dari container ke host + ports: + - 3000:3000 + # Service ini bergantung pada RabbitMQ + depends_on: + - rabbitmq-svc + # Menentukan jaringan yang digunakan oleh container + networks: + - rabbitmq-network + # Mengatur agar container selalu restart jika terhenti + restart: always + # Mendefinisikan variabel lingkungan untuk URL RabbitMQ + environment: + AMQP_URL: "amqp://guest:guest@rabbitmq-local:5672/" + + shipping-svc: + # Menggunakan image dari GitHub Container Registry + image: ghcr.io/rzlpratama77/shipping-service:latest + # Memetakan port dari container ke host + ports: + - 3001:3001 + # Service ini bergantung pada RabbitMQ + depends_on: + - rabbitmq-svc + # Menentukan jaringan yang digunakan oleh container + networks: + - rabbitmq-network + # Mengatur agar container selalu restart jika terhenti + restart: always + # Mendefinisikan variabel lingkungan untuk URL RabbitMQ + environment: + AMQP_URL: "amqp://guest:guest@rabbitmq-local:5672/" + + rabbitmq-svc: + # Menggunakan image RabbitMQ dari Docker Hub + image: rabbitmq:3.11-management + # Menentukan nama container + container_name: 'rabbitmq-local' + # Memetakan port dari container ke host + ports: + - 5672:5672 + - 15672:15672 + # Memetakan volume untuk menyimpan data dan log RabbitMQ + volumes: + - ~/.docker/rabbitmq/data/:/var/lib/rabbitmq/ + - ~/.docker/rabbitmq/log/:/var/log/rabbitmq/ + # Menentukan jaringan yang digunakan oleh container + networks: + - rabbitmq-network + # Mengatur agar container selalu restart jika terhenti + restart: always + +# Mendefinisikan jaringan dengan tipe bridge network +networks: + rabbitmq-network: + driver: bridge diff --git a/kubernetes/order-service-gateway.yml b/kubernetes/order-service-gateway.yml new file mode 100644 index 000000000..328da2236 --- /dev/null +++ b/kubernetes/order-service-gateway.yml @@ -0,0 +1,33 @@ +apiVersion: networking.istio.io/v1alpha3 # Versi API yang digunakan oleh Istio +kind: Gateway # Jenis objek yang dibuat adalah Gateway +metadata: # Metadata untuk mengidentifikasi objek + name: order-service-gateway # Nama Gateway ini adalah 'order-service-gateway' +spec: # Spesifikasi untuk Gateway + selector: # Selector untuk memilih resource yang sesuai dengan label tertentu + istio: ingressgateway # Menggunakan Istio ingress gateway + servers: # Konfigurasi server untuk Gateway + - port: # Port yang digunakan adalah 80 dengan protokol HTTP + number: 80 + name: http + protocol: HTTP + hosts: # Menerima lalu lintas dari host manapun + - "*" +--- +apiVersion: networking.istio.io/v1alpha3 # Versi API yang digunakan oleh Istio +kind: VirtualService # Jenis objek yang dibuat adalah VirtualService +metadata: # Metadata untuk mengidentifikasi objek + name: order-service-vs # Nama VirtualService ini adalah 'order-service-vs' +spec: # Spesifikasi untuk VirtualService + hosts: # Menerima permintaan dari host manapun + - "*" + gateways: # Merujuk pada Gateway yang dibuat sebelumnya + - order-service-gateway + http: # Konfigurasi untuk lalu lintas HTTP + - match: # Mencocokkan URL yang mengandung path '/order' + - uri: + exact: /order + route: # Konfigurasi rute untuk permintaan + - destination: # Tujuan rute permintaan adalah 'order-service' pada port 3000 + host: order-service + port: + number: 3000 \ No newline at end of file diff --git a/kubernetes/order-service.yml b/kubernetes/order-service.yml new file mode 100644 index 000000000..1bf8658b0 --- /dev/null +++ b/kubernetes/order-service.yml @@ -0,0 +1,47 @@ +apiVersion: v1 # Versi API Kubernetes yang digunakan +kind: Service # Jenis sumber daya adalah Service +metadata: # Metadata untuk identifikasi objek + labels: # Label untuk mengidentifikasi Service + app: order-service + tier: producer + name: order-service # Nama Service +spec: # Spesifikasi Service + selector: # Selector untuk mengasosiasikan Pod yang memiliki label tertentu + app: order-service + tier: producer + ports: # Spesifikasi port yang diekspos oleh Service + - name: http-nodejs + port: 3000 # Port yang diekspos oleh Service +--- +apiVersion: apps/v1 # Versi API Kubernetes yang digunakan untuk Deployment +kind: Deployment # Jenis sumber daya adalah Deployment +metadata: # Metadata untuk identifikasi objek + labels: # Label untuk mengidentifikasi Deployment + app: order-service + tier: producer + name: order-service # Nama Deployment +spec: # Spesifikasi Deployment + replicas: 1 # Jumlah replika Pod yang akan dibuat + selector: # Selector untuk mengasosiasikan Pod yang dikelola oleh Deployment ini + matchLabels: + app: order-service + tier: producer + template: # Template untuk membuat Pod baru + metadata: # Metadata untuk identifikasi Pod + labels: # Label untuk Pod yang dibuat oleh Deployment ini + app: order-service + tier: producer + spec: # Spesifikasi Pod + containers: # Daftar kontainer dalam Pod + - name: order-service # Nama kontainer + image: ghcr.io/rzlpratama77/order-service:latest # Image Docker yang digunakan + ports: # Port yang digunakan oleh kontainer + - containerPort: 3000 + env: # Definisi variabel environment untuk kontainer + - name: AMQP_PASSWORD # Mengambil nilai password dari secret + valueFrom: + secretKeyRef: + name: rabbitmq + key: rabbitmq-password + - name: AMQP_URL # URL untuk menghubungkan ke RabbitMQ + value: "amqp://guest:$(AMQP_PASSWORD)@rabbitmq-headless:5672/" \ No newline at end of file diff --git a/kubernetes/shipping-service.yml b/kubernetes/shipping-service.yml new file mode 100644 index 000000000..e5492d95b --- /dev/null +++ b/kubernetes/shipping-service.yml @@ -0,0 +1,47 @@ +apiVersion: v1 # Versi API Kubernetes yang digunakan +kind: Service # Jenis sumber daya adalah Service +metadata: # Metadata untuk identifikasi objek + name: shipping-service # Nama Service + labels: # Label untuk mengidentifikasi Service + app: shipping-service + tier: consumer +spec: # Spesifikasi Service + selector: # Selector untuk mengasosiasikan Pod yang memiliki label tertentu + app: shipping-service + tier: consumer + ports: # Spesifikasi port yang diekspos oleh Service + - name: http-nodejs + port: 3001 # Port yang diekspos oleh Service +--- +apiVersion: apps/v1 # Versi API Kubernetes yang digunakan untuk Deployment +kind: Deployment # Jenis sumber daya adalah Deployment +metadata: # Metadata untuk identifikasi objek + name: shipping-service # Nama Deployment + labels: # Label untuk mengidentifikasi Deployment + app: shipping-service + tier: consumer +spec: # Spesifikasi Deployment + replicas: 1 # Jumlah replika Pod yang akan dibuat + selector: # Selector untuk mengasosiasikan Pod yang dikelola oleh Deployment ini + matchLabels: + app: shipping-service + tier: consumer + template: # Template untuk membuat Pod baru + metadata: # Metadata untuk identifikasi Pod + labels: # Label untuk Pod yang dibuat oleh Deployment ini + app: shipping-service + tier: consumer + spec: # Spesifikasi Pod + containers: # Daftar kontainer dalam Pod + - name: shipping-service # Nama kontainer + image: ghcr.io/rzlpratama77/shipping-service:latest # Image Docker yang digunakan + ports: # Port yang digunakan oleh kontainer + - containerPort: 3001 + env: # Definisi variabel environment untuk kontainer + - name: AMQP_PASSWORD # Mengambil nilai password dari secret + valueFrom: + secretKeyRef: + name: rabbitmq + key: rabbitmq-password + - name: AMQP_URL # URL untuk menghubungkan ke RabbitMQ + value: "amqp://guest:$(AMQP_PASSWORD)@rabbitmq-headless:5672/" diff --git a/link.txt b/link.txt new file mode 100644 index 000000000..f80b525b0 --- /dev/null +++ b/link.txt @@ -0,0 +1,9 @@ + +Link github +https://github.com/rzlpratama77/a433-microservices + +Link package order-service +https://github.com/users/rzlpratama77/packages/container/package/order-service + +Link package shipping-service +https://github.com/users/rzlpratama77/packages/container/package/shipping-service \ No newline at end of file