Support LiteSpeed /server path via GLOBAL_PREFIX
Allow Nest prefix server/api and overlay dist from git onto the deploy bundle so proxy paths match without a full retar. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3,4 +3,6 @@
|
||||
!Dockerfile
|
||||
!docker-compose.yml
|
||||
!docker-entrypoint.sh
|
||||
!dist
|
||||
!dist/**
|
||||
!.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
|
||||
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
|
||||
Vendored
+5
-4
@@ -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
|
||||
Vendored
+1
-1
@@ -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"}
|
||||
{"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"}
|
||||
+6
-4
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user