Skip to content
Merged
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
156 changes: 79 additions & 77 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,96 +1,98 @@
version: '3.8'

services:
# Databases
order-db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: order_db
api-gateway:
build: ./services/api-gateway
ports:
- "5432:5432"
networks:
- valerix-net

inventory-db:
image: postgres:15-alpine
- "8080:8080"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: inventory_db
ports:
- "5433:5432"
networks:
- valerix-net
- PORT=8080
- ORDER_SERVICE_URL=http://order-service:3001
- INVENTORY_SERVICE_URL=http://inventory-service:3002
depends_on:
- order-service
- inventory-service
restart: always

# Services
order-service:
build: ./order-service
environment:
DATABASE_URL: postgresql://user:password@order-db:5432/order_db
INVENTORY_SERVICE_URL: http://inventory-service:3001
PORT: 3002
build: ./services/order-service
ports:
- "3002:3002"
- "3001:3001"
environment:
- PORT=3001
- DATABASE_URL=postgresql://user:password@order-db:5432/orderdb
- INVENTORY_SERVICE_URL=http://inventory-service:3002
depends_on:
- order-db
- inventory-service
networks:
- valerix-net
command: sh -c "bunx prisma db push && bun dist/index.js"
restart: always

inventory-service:
build: ./inventory-service
environment:
DATABASE_URL: postgresql://user:password@inventory-db:5432/inventory_db
PORT: 3001
build: ./services/inventory-service
ports:
- "3001:3001"
- "3002:3002"
environment:
- PORT=3002
- DATABASE_URL=postgresql://user:password@inventory-db:5432/inventorydb
depends_on:
- inventory-db
networks:
- valerix-net
command: sh -c "bunx prisma db push && bun dist/index.js"
restart: always

# # Monitoring
# prometheus:
# image: prom/prometheus:latest
# volumes:
# - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
# ports:
# - "9090:9090"
# networks:
# - valerix-net
frontend:
build: ./services/frontend
ports:
- "5173:5173"
environment:
- VITE_ORDER_SERVICE_URL=http://localhost:3001
- VITE_INVENTORY_SERVICE_URL=http://localhost:3002
depends_on:
- order-service
- inventory-service

order-db:
image: postgres:14-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=orderdb
volumes:
- order-db-data:/var/lib/postgresql/data
ports:
- "5434:5432"

# grafana:
# image: grafana/grafana:latest
# ports:
# - "3000:3000"
# environment:
# - GF_SECURITY_ADMIN_PASSWORD=admin
# volumes:
# - ./grafana/provisioning:/etc/grafana/provisioning
# networks:
# - valerix-net
inventory-db:
image: postgres:14-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=inventorydb
volumes:
- inventory-db-data:/var/lib/postgresql/data
ports:
- "5435:5432"

prometheus:
image: prom/prometheus
volumes:
- ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"

# # Frontend (Vite Dev Server)
# # Keeping it simple for dev: bind mount source and run dev
# # Note: Requires 'frontend' folder to exist and have package.json
# # We will generate frontend next.
# frontend:
# image: node:18-alpine
# working_dir: /app
# volumes:
# - ./frontend:/app
# - /app/node_modules
# command: sh -c "npm install && npm run dev -- --host"
# ports:
# - "5173:5173"
# environment:
# - VITE_ORDER_API=http://localhost:3002
# - VITE_INVENTORY_API=http://localhost:3001
# networks:
# - valerix-net
grafana:
image: grafana/grafana
ports:
- "3003:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
depends_on:
- prometheus
volumes:
- grafana-storage:/var/lib/grafana
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
- ./monitoring/grafana/dashboards:/var/lib/grafana/my_dashboards

networks:
valerix-net:
driver: bridge
volumes:
order-db-data:
inventory-db-data:
grafana-storage:
84 changes: 84 additions & 0 deletions monitoring/grafana/dashboards/valerix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"annotations": {
"list": []
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"datasource": "Prometheus",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 1
}
]
},
"unit": "s"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"textMode": "auto"
},
"pluginVersion": "8.3.3",
"targets": [
{
"expr": "rate(http_request_duration_seconds_sum{job=\"order-service\"}[30s]) / rate(http_request_duration_seconds_count{job=\"order-service\"}[30s])",
"refId": "A"
}
],
"title": "Order Service Latency (30s Avg)",
"type": "stat"
}
],
"schemaVersion": 34,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-5m",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Valerix Dashboard",
"uid": "valerix-main",
"version": 1,
"weekStart": ""
}
11 changes: 11 additions & 0 deletions monitoring/grafana/provisioning/dashboards/dashboard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: 1

providers:
- name: 'Default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/my_dashboards
8 changes: 8 additions & 0 deletions monitoring/grafana/provisioning/datasources/datasource.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: 1

datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
11 changes: 11 additions & 0 deletions monitoring/prometheus/prometheus.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
global:
scrape_interval: 5s

scrape_configs:
- job_name: 'order-service'
static_configs:
- targets: ['order-service:3001']

- job_name: 'inventory-service'
static_configs:
- targets: ['inventory-service:3002']
33 changes: 0 additions & 33 deletions services/api-gateway/.gitignore
Original file line number Diff line number Diff line change
@@ -1,34 +1 @@
# dependencies (bun install)
node_modules

# output
out
dist
*.tgz

# code coverage
coverage
*.lcov

# logs
logs
_.log
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# caches
.eslintcache
.cache
*.tsbuildinfo

# IntelliJ based IDEs
.idea

# Finder (MacOS) folder config
.DS_Store
13 changes: 8 additions & 5 deletions services/api-gateway/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ FROM oven/bun:latest

WORKDIR /app

COPY package*.json ./
COPY package.json ./

RUN bun install

COPY src ./src
COPY tsconfig.json ./
COPY . .

RUN bun run build

EXPOSE 8080

EXPOSE 3000
CMD ["bun", "run", "src/app.ts"]
CMD ["bun", "dist/index.js"]
32 changes: 22 additions & 10 deletions services/api-gateway/package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
{
"name": "api-gateway",
"module": "index.ts",
"type": "module",
"private": true,
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^5"
}
"name": "api-gateway",
"version": "1.0.0",
"description": "API Gateway",
"main": "dist/index.js",
"scripts": {
"start": "bun dist/index.js",
"dev": "bun --watch src/index.ts",
"build": "bun build ./src/index.ts --outdir ./dist --target node"
},
"dependencies": {
"express": "^4.18.2",
"http-proxy-middleware": "^2.0.6",
"cors": "^2.8.5",
"dotenv": "^16.4.5"
},
"devDependencies": {
"typescript": "^5.3.3",
"@types/node": "^20.11.20",
"@types/express": "^4.17.21",
"@types/cors": "^2.8.17",
"@types/http-proxy-middleware": "^1.0.0"
}
}
Loading