diff --git a/.dockerignore b/.dockerignore index 0221fab..fba28b9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,4 +3,6 @@ !Dockerfile !docker-compose.yml !docker-entrypoint.sh +!dist +!dist/** !.env.example diff --git a/.env.example b/.env.example index 80d1847..3258c46 100644 --- a/.env.example +++ b/.env.example @@ -11,6 +11,8 @@ DATABASE_URL=postgresql://fabric:fabric123@localhost:5432/fabric_trade?schema=pu API_PORT=8585 PORT=3000 +# پشت LiteSpeed با URI=/server این را بگذار: +GLOBAL_PREFIX=server/api API_IMAGE=fabric-trade-api:latest RUN_SEED=false diff --git a/Dockerfile b/Dockerfile index d4cd6de..a8c91d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -# bookworm کامل (نه slim) تا OpenSSL از قبل داخل ایمیج باشد -# سرورهای ایران معمولاً به deb.debian.org دسترسی ندارند +# bookworm کامل تا OpenSSL آماده باشد (بدون apt روی سرور ایران) FROM node:22-bookworm WORKDIR /app @@ -9,6 +8,8 @@ COPY deploy-bundle.tar.gz /tmp/deploy-bundle.tar.gz RUN tar -xzf /tmp/deploy-bundle.tar.gz -C /app \ && rm /tmp/deploy-bundle.tar.gz +# dist و entrypoint از گیت — بدون بازسازی کل باندل +COPY dist /app/dist COPY docker-entrypoint.sh /app/docker-entrypoint.sh RUN chmod +x /app/docker-entrypoint.sh diff --git a/dist/main.js b/dist/main.js index a3e946e..aef60e6 100644 --- a/dist/main.js +++ b/dist/main.js @@ -6,7 +6,8 @@ const swagger_1 = require("@nestjs/swagger"); const app_module_1 = require("./app.module"); async function bootstrap() { const app = await core_1.NestFactory.create(app_module_1.AppModule); - app.setGlobalPrefix('api'); + const globalPrefix = process.env.GLOBAL_PREFIX || 'api'; + app.setGlobalPrefix(globalPrefix); app.enableCors({ origin: true, credentials: true, @@ -24,11 +25,11 @@ async function bootstrap() { .addBearerAuth() .build(); const document = swagger_1.SwaggerModule.createDocument(app, swaggerConfig); - swagger_1.SwaggerModule.setup('api/docs', app, document); + swagger_1.SwaggerModule.setup(`${globalPrefix}/docs`, app, document); const port = process.env.PORT ?? 3000; await app.listen(port); - console.log(`Fabric Trade API listening on http://localhost:${port}/api`); - console.log(`Swagger docs at http://localhost:${port}/api/docs`); + console.log(`Fabric Trade API listening on http://localhost:${port}/${globalPrefix}`); + console.log(`Swagger docs at http://localhost:${port}/${globalPrefix}/docs`); } bootstrap(); //# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/dist/main.js.map b/dist/main.js.map index fa728e8..b098a96 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,2CAAgD;AAChD,6CAAiE;AACjE,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAEhD,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3B,GAAG,CAAC,UAAU,CAAC;QACb,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE;KACrD,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,yBAAe,EAAE;SACxC,QAAQ,CAAC,kBAAkB,CAAC;SAC5B,cAAc,CAAC,sBAAsB,CAAC;SACtC,UAAU,CAAC,KAAK,CAAC;SACjB,aAAa,EAAE;SACf,KAAK,EAAE,CAAC;IACX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAClE,uBAAa,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,MAAM,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,WAAW,CAAC,CAAC;AACnE,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,2CAAgD;AAChD,6CAAiE;AACjE,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAGhD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC;IACxD,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAClC,GAAG,CAAC,UAAU,CAAC;QACb,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE;KACrD,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,yBAAe,EAAE;SACxC,QAAQ,CAAC,kBAAkB,CAAC;SAC5B,cAAc,CAAC,sBAAsB,CAAC;SACtC,UAAU,CAAC,KAAK,CAAC;SACjB,aAAa,EAAE;SACf,KAAK,EAAE,CAAC;IACX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAClE,uBAAa,CAAC,KAAK,CAAC,GAAG,YAAY,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,IAAI,YAAY,EAAE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,YAAY,OAAO,CAAC,CAAC;AAC/E,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 87ce5f7..747fe6b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,7 +6,9 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - app.setGlobalPrefix('api'); + // پشت LiteSpeed روی /server → GLOBAL_PREFIX=server/api + const globalPrefix = process.env.GLOBAL_PREFIX || 'api'; + app.setGlobalPrefix(globalPrefix); app.enableCors({ origin: true, credentials: true, @@ -27,11 +29,11 @@ async function bootstrap() { .addBearerAuth() .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); - SwaggerModule.setup('api/docs', app, document); + SwaggerModule.setup(`${globalPrefix}/docs`, app, document); const port = process.env.PORT ?? 3000; await app.listen(port); - console.log(`Fabric Trade API listening on http://localhost:${port}/api`); - console.log(`Swagger docs at http://localhost:${port}/api/docs`); + console.log(`Fabric Trade API listening on http://localhost:${port}/${globalPrefix}`); + console.log(`Swagger docs at http://localhost:${port}/${globalPrefix}/docs`); } bootstrap();