Skip to content

Submission 3 #35

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions Submission3/kubernetes/order/order-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment # Menetapkan objek yang didefinisikan berupa Deployment
metadata: # Menetapkan metadata untuk Deployment
name: order-service
namespace: e-commerce
spec: # Menetapkan spesifikasi untuk deployment
replicas: 1 # Menentukan jumlah replika pod yang harus dijalankan
selector: # Mengatur dan menentukan selector yang digunakan
matchLabels:
app: order-service
template: # Menentukan template untuk pod yang dibuat
metadata:
labels:
app: order-service
spec: # Menetapkan spesifikasi container yang dijalankan dan image yang digunakan
containers:
- name: order-service
image: ghcr.io/yahyakhaliman/order-service:latest
ports:
- containerPort: 3000 # Membuka port di dalam container untuk komunikasi
env: # Menetapkan environment variabel di dalam container
- name: PORT
value: "3000"
- name: AMQP_URL
value: "amqp://rabbitmq:5672"
14 changes: 14 additions & 0 deletions Submission3/kubernetes/order/order-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service # menentukan jenis objek yang akan didefinisikan
metadata: # mendefinisikan metadata terkait objek
labels:
app: order-service
name: order-service
namespace: e-commerce
spec: # memberikan spesifikasi untuk layanan
type: ClusterIP # Mengubah tipe layanan menjadi ClusterIP supaya dapat diakses rabbitmq
ports:
- port: 3000
targetPort: 3000
selector: # Menentukan selektor yang akan digunakan untuk menemukan pod yang terkait
app: order-service
30 changes: 30 additions & 0 deletions Submission3/kubernetes/rabbitmq/rabbitmq-pv-pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv # Nama PersistentVolume
namespace: e-commerce # memberikan namespace ke dalam e-commerce
spec:
capacity:
storage: 5Gi # Kapasitas penyimpanan yang dialokasikan
accessModes:
- ReadWriteOnce # Mode akses untuk volume, dalam hal ini, hanya bisa diakses oleh satu node pada satu waktu
hostPath:
path: "/mnt/data/rabbitmq" # Path di host (node) untuk penyimpanan PV
persistentVolumeReclaimPolicy: Retain # Kebijakan pemulihan jika PV dihapus

---

# pvc.yaml

# Definisi PersistentVolumeClaim (PVC) untuk RabbitMQ
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc # Nama PersistentVolumeClaim
namespace: e-commerce # memberikan namespace ke dalam e-commerce
spec:
accessModes:
- ReadWriteOnce # Mode akses yang cocok dengan PV
resources:
requests:
storage: 5Gi # Jumlah penyimpanan yang diminta oleh PVC
17 changes: 17 additions & 0 deletions Submission3/kubernetes/rabbitmq/rabbitmq-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: rabbitmq # Nama Service
namespace: e-commerce # memberikan namespace ke dalam e-commerce
spec:
selector:
app: rabbitmq # Selektor pod berdasarkan label "app: rabbitmq"
ports:
- protocol: TCP
port: 5672 # Port eksternal RabbitMQ
targetPort: 5672 # Port internal RabbitMQ
name: amqp
- protocol: TCP
port: 15672 # Port eksternal RabbitMQ Management
targetPort: 15672 # Port internal RabbitMQ Management
name: management
33 changes: 33 additions & 0 deletions Submission3/kubernetes/rabbitmq/rabbitmq-statefulset.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
namespace: e-commerce # memberikan namespace ke dalam e-commerce
spec:
serviceName: rabbitmq
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3.8-management
ports:
- containerPort: 5672
- containerPort: 15672
volumeMounts:
- name: rabbitmq-data
mountPath: /var/lib/rabbitmq
volumeClaimTemplates:
- metadata:
name: rabbitmq-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi # Ubah sesuai kebutuhan Anda
25 changes: 25 additions & 0 deletions Submission3/kubernetes/shipping/shipping-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment # Menetapkan objek yang didefinisikan berupa Deployment
metadata: # Menetapkan metadata untuk Deployment
name: shipping-service
namespace: e-commerce
spec: # Menetapkan spesifikasi untuk deployment
replicas: 1 # Menentukan jumlah replika pod yang harus dijalankan
selector: # Mengatur dan menentukan selector yang digunakan
matchLabels:
app: shipping-service
template: # Menentukan template untuk pod yang dibuat
metadata:
labels:
app: shipping-service
spec: # Menetapkan spesifikasi container yang dijalankan dan image yang digunakan
containers:
- name: shipping-service
image: ghcr.io/yahyakhaliman/shipping-service:latest
ports:
- containerPort: 3001 # Membuka port di dalam container untuk komunikasi
env: # Menetapkan environment variabel di dalam container
- name: PORT
value: "3001"
- name: AMQP_URL
value: "amqp://rabbitmq:5672"
14 changes: 14 additions & 0 deletions Submission3/kubernetes/shipping/shipping-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service # menentukan jenis objek yang akan didefinisikan
metadata: # mendefinisikan metadata terkait objek
labels:
app: shipping-service
name: shipping-service
namespace: e-commerce
spec: # memberikan spesifikasi untuk layanan
type: ClusterIP # Mengubah tipe layanan menjadi NodePort supaya dapat diakses melalui port di node
ports:
- port: 3001
targetPort: 3001
selector: # Menentukan selektor yang akan digunakan untuk menemukan pod yang terkait
app: shipping-service
2 changes: 2 additions & 0 deletions Submission3/link.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
https://github.com/users/YahyaKhaliman/packages/container/package/order-service
https://github.com/users/YahyaKhaliman/packages/container/package/shipping-service
24 changes: 24 additions & 0 deletions Submission3/order-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Menggunakan base image Node.js versi 14
FROM node:14

# Menentukan working directory untuk container
WORKDIR /app

# Salin package.json dan package-lock.json ke direktori kerja
COPY package*.json ./

# Menginstal dependencies yang diperlukan
RUN npm install

# Menyalin seluruh source code ke working directory di container
COPY . .

# Ekspos port 8080 yang digunakan oleh aplikasi
EXPOSE 3000

# Set Environment Variabel
ENV PORT=3000
ENV AMQP_URL="amqp://guest:guest@localhost:5672"

# Saat container diluncurkan, jalankan server dengan perintah npm start
CMD ["node", "index.js"]
3 changes: 3 additions & 0 deletions Submission3/order-service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Order Service

Order Service adalah bagian dari E-Commerce yang merupakan starter project dari kelas Belajar Membangun Arsitektur Microservices
8 changes: 8 additions & 0 deletions Submission3/order-service/build_push_image_order_service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Membuat Docker image dari Dockerfile sesuai tag Github Container Registry
docker build -t ghcr.io/yahyakhaliman/order-service .

# Login ke Github Container Registry
echo $PAT | docker login ghcr.io --username yahyakhaliman --password-stdin

# Mengunggah image ke Github Container Registry
docker push ghcr.io/yahyakhaliman/order-service
48 changes: 48 additions & 0 deletions Submission3/order-service/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require('dotenv').config()

const express = require("express");
const app = express();

const bp = require("body-parser");
app.use(bp.json());

const amqp = require("amqplib");
const amqpServer = process.env.AMQP_URL;
var channel, connection;

connectToQueue();

async function connectToQueue() {
connection = await amqp.connect(amqpServer);
channel = await connection.createChannel();
try {
const queue = "order";
await channel.assertQueue(queue);
console.log("Connected to the queue!")
} catch (ex) {
console.error(ex);
}
}

app.post("/order", (req, res) => {
const { order } = req.body;
createOrder(order);
res.send(order);
});

const createOrder = async order => {
const queue = "order";
await channel.sendToQueue(queue, Buffer.from(JSON.stringify(order)));
console.log("Order succesfully created!")
process.once('SIGINT', async () => {
console.log('got sigint, closing connection');
await channel.close();
await connection.close();
process.exit(0);
});
};

app.listen(process.env.PORT, () => {
console.log(`Server running at ${process.env.PORT}`);
});

Loading