diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index 344530e..12da7e5 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -154,6 +154,12 @@ services: OFFSET_FLUSH_TIMEOUT_MS: 5000 ports: - "127.0.0.1:48083:8083" + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:8083/ || exit 1"] + interval: 30s + timeout: 10s + start_period: 30s + retries: 3 depends_on: kafka: condition: service_healthy diff --git a/backend/services/admin-service/Dockerfile b/backend/services/admin-service/Dockerfile index f98dc1c..70c7fa8 100644 --- a/backend/services/admin-service/Dockerfile +++ b/backend/services/admin-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/admin-service/node_modules ./node_modules COPY --from=builder /app/services/admin-service/package.json ./ USER node EXPOSE 3012 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3012/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/ai-service/Dockerfile b/backend/services/ai-service/Dockerfile index 8bb1bf4..f6c7968 100644 --- a/backend/services/ai-service/Dockerfile +++ b/backend/services/ai-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/ai-service/node_modules ./node_modules COPY --from=builder /app/services/ai-service/package.json ./ USER node EXPOSE 3006 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3006/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/ai-service/src/app.module.ts b/backend/services/ai-service/src/app.module.ts index ba2e2a4..ffe7269 100644 --- a/backend/services/ai-service/src/app.module.ts +++ b/backend/services/ai-service/src/app.module.ts @@ -2,10 +2,12 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { AiModule } from './ai.module'; @Module({ imports: [ + HealthModule, ConfigModule.forRoot({ isGlobal: true }), TypeOrmModule.forRoot({ type: 'postgres', diff --git a/backend/services/auth-service/Dockerfile b/backend/services/auth-service/Dockerfile index fed004d..05ce872 100644 --- a/backend/services/auth-service/Dockerfile +++ b/backend/services/auth-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/auth-service/node_modules ./node_modules COPY --from=builder /app/services/auth-service/package.json ./ USER node EXPOSE 3010 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3010/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/auth-service/src/app.module.ts b/backend/services/auth-service/src/app.module.ts index d6abff1..f324b1b 100644 --- a/backend/services/auth-service/src/app.module.ts +++ b/backend/services/auth-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { AuthModule } from './auth.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost', diff --git a/backend/services/chain-indexer/Dockerfile b/backend/services/chain-indexer/Dockerfile index 6c7ef02..99004e2 100644 --- a/backend/services/chain-indexer/Dockerfile +++ b/backend/services/chain-indexer/Dockerfile @@ -11,4 +11,6 @@ WORKDIR /app COPY --from=builder /server . USER nobody:nobody EXPOSE 3009 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3009/health || exit 1 CMD ["./server"] diff --git a/backend/services/clearing-service/Dockerfile b/backend/services/clearing-service/Dockerfile index ba04882..54e2544 100644 --- a/backend/services/clearing-service/Dockerfile +++ b/backend/services/clearing-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/clearing-service/node_modules ./node_modules COPY --from=builder /app/services/clearing-service/package.json ./ USER node EXPOSE 3004 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3004/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/clearing-service/src/app.module.ts b/backend/services/clearing-service/src/app.module.ts index 81a459c..83e4111 100644 --- a/backend/services/clearing-service/src/app.module.ts +++ b/backend/services/clearing-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { ClearingModule } from './clearing.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost', diff --git a/backend/services/compliance-service/Dockerfile b/backend/services/compliance-service/Dockerfile index 1afa173..f3eb9aa 100644 --- a/backend/services/compliance-service/Dockerfile +++ b/backend/services/compliance-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/compliance-service/node_modules ./node_modules COPY --from=builder /app/services/compliance-service/package.json ./ USER node EXPOSE 3005 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3005/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/compliance-service/src/app.module.ts b/backend/services/compliance-service/src/app.module.ts index 9ed350b..af65083 100644 --- a/backend/services/compliance-service/src/app.module.ts +++ b/backend/services/compliance-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { ComplianceModule } from './compliance.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost', diff --git a/backend/services/issuer-service/Dockerfile b/backend/services/issuer-service/Dockerfile index 4defb44..e1fb1f3 100644 --- a/backend/services/issuer-service/Dockerfile +++ b/backend/services/issuer-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/issuer-service/node_modules ./node_modules COPY --from=builder /app/services/issuer-service/package.json ./ USER node EXPOSE 3002 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3002/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/issuer-service/src/app.module.ts b/backend/services/issuer-service/src/app.module.ts index ebc52cd..cc24fbe 100644 --- a/backend/services/issuer-service/src/app.module.ts +++ b/backend/services/issuer-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { IssuerModule } from './issuer.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost', diff --git a/backend/services/notification-service/Dockerfile b/backend/services/notification-service/Dockerfile index a840482..42dfc3f 100644 --- a/backend/services/notification-service/Dockerfile +++ b/backend/services/notification-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/notification-service/node_modules ./node_modul COPY --from=builder /app/services/notification-service/package.json ./ USER node EXPOSE 3008 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3008/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/notification-service/src/app.module.ts b/backend/services/notification-service/src/app.module.ts index 99de8b9..9d2fbc5 100644 --- a/backend/services/notification-service/src/app.module.ts +++ b/backend/services/notification-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { NotificationModule } from './notification.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost', diff --git a/backend/services/telemetry-service/Dockerfile b/backend/services/telemetry-service/Dockerfile index d88d2fc..2072b30 100644 --- a/backend/services/telemetry-service/Dockerfile +++ b/backend/services/telemetry-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/telemetry-service/node_modules ./node_modules COPY --from=builder /app/services/telemetry-service/package.json ./ USER node EXPOSE 3011 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3011/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/trading-service/Dockerfile b/backend/services/trading-service/Dockerfile index e561cfb..bb68246 100644 --- a/backend/services/trading-service/Dockerfile +++ b/backend/services/trading-service/Dockerfile @@ -11,4 +11,6 @@ WORKDIR /app COPY --from=builder /server . USER nobody:nobody EXPOSE 3003 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3003/health || exit 1 CMD ["./server"] diff --git a/backend/services/translate-service/Dockerfile b/backend/services/translate-service/Dockerfile index e093cc9..53930ab 100644 --- a/backend/services/translate-service/Dockerfile +++ b/backend/services/translate-service/Dockerfile @@ -11,4 +11,6 @@ WORKDIR /app COPY --from=builder /server . USER nobody:nobody EXPOSE 3007 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3007/health || exit 1 CMD ["./server"] diff --git a/backend/services/user-service/Dockerfile b/backend/services/user-service/Dockerfile index 551d5de..8984d78 100644 --- a/backend/services/user-service/Dockerfile +++ b/backend/services/user-service/Dockerfile @@ -29,4 +29,6 @@ COPY --from=builder /app/services/user-service/node_modules ./node_modules COPY --from=builder /app/services/user-service/package.json ./ USER node EXPOSE 3001 +HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3001/health || exit 1 CMD ["dumb-init", "node", "dist/main"] diff --git a/backend/services/user-service/src/app.module.ts b/backend/services/user-service/src/app.module.ts index c932a59..8b04431 100644 --- a/backend/services/user-service/src/app.module.ts +++ b/backend/services/user-service/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ThrottlerModule } from '@nestjs/throttler'; +import { HealthModule } from '@genex/common'; import { UserModule } from './user.module'; @Module({ imports: [ + HealthModule, TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST || 'localhost',