87e9346d62
- NestJS backend with 11 modules: Auth, Employees, Departments, Attendance, Leaves, Payroll, Reimbursements, Announcements, Tax, Reports, Admin - JWT authentication with refresh tokens, role-based access (employee/hr_admin/super_admin) - MongoDB schemas with Mongoose for all entities - PDF payslip generation with pdfkit - OpenTelemetry tracing to SigNoz - Automatic database seeding on first startup - Next.js 14 frontend with App Router, Tailwind CSS - 25 pages covering all employee, HR admin, and super admin workflows - Multi-stage Dockerfile with nginx proxy - test-manifest.json for E2E testing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61 lines
1.4 KiB
YAML
61 lines
1.4 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
mongodb:
|
|
image: mongo:7
|
|
restart: always
|
|
ports:
|
|
- "27017:27017"
|
|
volumes:
|
|
- mongo_data:/data/db
|
|
environment:
|
|
MONGO_INITDB_DATABASE: hr_portal
|
|
|
|
backend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: backend-builder
|
|
ports:
|
|
- "3001:3001"
|
|
environment:
|
|
MONGODB_URI: mongodb://mongodb:27017/hr_portal
|
|
JWT_SECRET: dev-secret-key-change-in-production
|
|
JWT_REFRESH_SECRET: dev-refresh-secret-change-in-production
|
|
PORT: 3001
|
|
NODE_ENV: development
|
|
SIGNOZ_OTEL_ENDPOINT: http://100.64.0.10:4318/v1/traces
|
|
depends_on:
|
|
- mongodb
|
|
command: node dist/main.js
|
|
|
|
frontend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: frontend-builder
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
NEXT_PUBLIC_API_URL: http://localhost:3001
|
|
command: node .next/standalone/server.js
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
ports:
|
|
- "80:80"
|
|
environment:
|
|
MONGODB_URI: mongodb://mongodb:27017/hr_portal
|
|
JWT_SECRET: dev-secret-key-change-in-production
|
|
JWT_REFRESH_SECRET: dev-refresh-secret-change-in-production
|
|
PORT: 3001
|
|
NODE_ENV: production
|
|
SIGNOZ_OTEL_ENDPOINT: http://100.64.0.10:4318/v1/traces
|
|
depends_on:
|
|
- mongodb
|
|
|
|
volumes:
|
|
mongo_data:
|