Skip to content

Commit 0bd6de6

Browse files
authored
Merge pull request #62 from CS3219-AY2425S1/feat/matching-service
Implement matching service
2 parents db23cec + 3b186ad commit 0bd6de6

23 files changed

+1907
-7
lines changed

docker-compose.prod.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
services:
2+
redis-server:
3+
image: redis:latest
4+
container_name: redis-server
5+
ports:
6+
- "6379:6379"
7+
networks:
8+
- peerprep-network
29
frontend:
310
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest
411
platform: linux/amd64
@@ -38,6 +45,21 @@ services:
3845
- peerprep-network
3946
env_file:
4047
- ./user-service/.env
48+
matching-service:
49+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/matching-svc:latest
50+
build:
51+
context: ./matching-service
52+
dockerfile: Dockerfile
53+
target: development
54+
volumes:
55+
- ./matching-service:/app
56+
- ./matching-service/node_modules:/app/node_modules
57+
ports:
58+
- "5001:5001"
59+
networks:
60+
- peerprep-network
61+
env_file:
62+
- ./matching-service/.env.production
4163
networks:
4264
peerprep-network:
4365
driver: bridge

docker-compose.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
services:
2+
redis-server:
3+
image: redis:latest
4+
container_name: redis-server
5+
ports:
6+
- "6379:6379" # Expose Redis port
7+
networks:
8+
- peerprep-network
29
frontend:
310
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest
411
build:
@@ -44,6 +51,21 @@ services:
4451
- peerprep-network
4552
env_file:
4653
- ./user-service/.env
54+
matching-service:
55+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/matching-svc:latest
56+
build:
57+
context: ./matching-service
58+
dockerfile: Dockerfile
59+
target: development
60+
volumes:
61+
- ./matching-service:/app
62+
- ./matching-service/node_modules:/app/node_modules
63+
ports:
64+
- "5001:5001"
65+
networks:
66+
- peerprep-network
67+
env_file:
68+
- ./matching-service/.env.dev
4769
networks:
4870
peerprep-network:
4971
driver: bridge

k8s/matching-service.yml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: matching-svc
5+
labels:
6+
type: backend
7+
app: matching-svc
8+
spec:
9+
selector:
10+
matchLabels:
11+
type: backend
12+
app: matching-svc
13+
template:
14+
metadata:
15+
name: matching-svc
16+
labels:
17+
type: backend
18+
app: matching-svc
19+
spec:
20+
containers:
21+
- name: matching-svc
22+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/matching-svc:latest
23+
imagePullPolicy: Always
24+
ports:
25+
- containerPort: 5001
26+
envFrom:
27+
- secretRef:
28+
name: matching-service-config
29+
resources:
30+
requests:
31+
memory: "512Mi"
32+
cpu: "500m"
33+
limits:
34+
memory: "1Gi"
35+
cpu: "1"
36+
dnsPolicy: ClusterFirst
37+
---
38+
# This is an internal service, not exposed
39+
apiVersion: v1
40+
kind: Service
41+
metadata:
42+
name: matching-svc
43+
spec:
44+
type: ClusterIP
45+
ports:
46+
- port: 5001
47+
targetPort: 5001
48+
selector:
49+
type: backend
50+
app: matching-svc
51+
---
52+
apiVersion: autoscaling/v2
53+
kind: HorizontalPodAutoscaler
54+
metadata:
55+
name: matching-svc
56+
spec:
57+
scaleTargetRef:
58+
apiVersion: apps/v1
59+
kind: Deployment
60+
name: matching-svc
61+
minReplicas: 1
62+
maxReplicas: 5
63+
metrics:
64+
- type: Resource
65+
resource:
66+
name: cpu
67+
target:
68+
type: Utilization
69+
averageUtilization: 80

k8s/redis-server.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: redis-server
5+
labels:
6+
app: redis-server
7+
spec:
8+
selector:
9+
matchLabels:
10+
app: redis-server
11+
template:
12+
metadata:
13+
labels:
14+
app: redis-server
15+
spec:
16+
containers:
17+
- name: redis-server
18+
image: redis:latest
19+
imagePullPolicy: Always
20+
ports:
21+
- containerPort: 6379
22+
dnsPolicy: ClusterFirst
23+
24+
---
25+
# This is an internal service, not exposed
26+
apiVersion: v1
27+
kind: Service
28+
metadata:
29+
name: redis-server
30+
spec:
31+
type: ClusterIP # Internal service type
32+
ports:
33+
- port: 6379
34+
targetPort: 6379
35+
selector:
36+
app: redis-server
37+
38+
---
39+
apiVersion: autoscaling/v2
40+
kind: HorizontalPodAutoscaler
41+
metadata:
42+
name: redis-server
43+
spec:
44+
scaleTargetRef:
45+
apiVersion: apps/v1
46+
kind: Deployment
47+
name: redis-server
48+
minReplicas: 1
49+
maxReplicas: 5
50+
metrics:
51+
- type: Resource
52+
resource:
53+
name: cpu
54+
target:
55+
type: Utilization
56+
averageUtilization: 80

matching-service/.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Dockerfile
2+
.dockerignore
3+
node_modules
4+
npm-debug.log
5+
dist

matching-service/.gitignore

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# npm
2+
node_modules
3+
*.log
4+
*.gz
5+
6+
# Coveralls
7+
.nyc_output
8+
coverage
9+
10+
# Benchmarking
11+
benchmarks/graphs
12+
13+
# ignore additional files using core.excludesFile
14+
# https://git-scm.com/docs/gitignore
15+
16+
.env.*
17+
/dist

matching-service/Dockerfile

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Base stage for both dev and prod
2+
FROM node:18-alpine AS base
3+
4+
# Install pnpm globally
5+
RUN npm install -g pnpm
6+
7+
# Set the working directory in the container
8+
WORKDIR /app
9+
10+
# Copy package.json and pnpm-lock.yaml
11+
COPY package.json ./
12+
13+
RUN pnpm install
14+
15+
# Development stage
16+
FROM base AS development
17+
18+
COPY src ./src
19+
COPY tsconfig.json ./
20+
21+
# Note: Don't expose ports here, Compose will handle that for us
22+
23+
CMD ["pnpm", "dev"]
24+
25+
26+
# Production stage
27+
FROM base AS production
28+
ENV NODE_ENV=production
29+
ENV PORT=5001
30+
31+
COPY src ./src
32+
COPY tsconfig.json ./
33+
34+
EXPOSE ${PORT}
35+
36+
CMD ["pnpm", "start"]

matching-service/package.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "matching-service",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"dev": "nodemon src/app.ts",
8+
"start": "tsc && node dist/app.js",
9+
"build": "tsc",
10+
"format": "prettier --write \"src/**/*.ts\"",
11+
"test": "echo \"Error: no test specified\" && exit 1",
12+
"pre-commit": "pnpm format && git add -u"
13+
},
14+
"keywords": [],
15+
"author": "",
16+
"license": "ISC",
17+
"dependencies": {
18+
"amqplib": "^0.10.4",
19+
"cors": "^2.8.5",
20+
"dotenv": "^16.4.5",
21+
"express": "^4.21.1",
22+
"redis": "^4.7.0"
23+
},
24+
"devDependencies": {
25+
"@types/amqplib": "^0.10.5",
26+
"@types/cors": "^2.8.17",
27+
"@types/express": "^5.0.0",
28+
"nodemon": "^3.1.7",
29+
"prettier": "^3.3.3",
30+
"ts-node": "^10.9.2",
31+
"typescript": "^5.6.3"
32+
}
33+
}

0 commit comments

Comments
 (0)