تایپاسکریپت - نستجیاس - انگولار - استراتژی استقرار
من یک برنامه کوچک برای یک کارخانه که نیاز خاصی داشت، توسعه دادهام. این یک برنامه کوچک است که به صورت محلی توسط کمتر از ۱۰ نفر استفاده خواهد شد.
فعلاً بکاند و فرانتاندم را در همان مخزن گیت دارم.
ساختار مخزن به این شکل است
--README.md
--.gitignore
--document
--projects
|--backend // Nestjs API
|--frontend // Angular
من NestJS را برای سرو کردن فایلهای ایستا آماده کردهام، که به این معنی است که من سازنده Angular خود را به صورت زیر پیکربندی کردهام:
angular.json
...
"options": {
"outputPath": "../backend/client/dist",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
...
سرور NestJs من برای ارائه فایلهای ایستا پیکربندی شده است :
main.ts
const PORT = process.env.PORT || 8080;
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.enableCors();
app.setGlobalPrefix('api');
await app.listen(PORT);
}
...
app.module.ts
imports: [
TypeOrmModule.forRoot(),
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'client/dist'),
}),
تا امروز، من از npm با npm run start:dev استفاده میکردم، که به من اجازه میداد بهطور خودکار پایگاه دادهام را بسازم و سرور بکاند را اجرا کنم. اکنون، من نیاز دارم بکاند و فرانتاند خود را در همان سرور مستقر کنم و همه چیز را بسازم.
بهترین روش چیست؟ آیا ابتدا باید Angular را در پوشه dist بسازم، سپس NestJS را بسازم... من فقط میتوانم پوشه dist را روی سرور تولید ببرم، درست است؟
پاسخ شماره ۱
کاری که من انجام میدهم، این است که اپلیکیشن Angular خود را بسازم و فایلها را در جایی که فرانتاند خود را سرو میکنید کپی کنم. اگر اپلیکیشن شما مسیریابی شده است، همچنین باید یک برگشت به index.html پیکربندی کنید، میتوانید نحوه آن را اینجا ببینید: استقرار Angular
برای برنامه nestjs خود، میتوانید آن را تقریباً در هرجایی از سرور خود قرار دهید و pm2 آن را روی پورت 8080 سرو خواهد کرد. ابتدا همه فایلهای خود را از nestjs کشیده و از دستور npm install استفاده کنید (در تولید نیز به node_modules با nestjs نیاز دارید). سپس از nest build برای ساخت برنامه خود استفاده کنید. با pm2، باید از main.js برای شروع API خود استفاده کنید. سپس میتوانید به پیکربندی پروکسی معکوس نگاه کنید تا همه درخواستهای API شما به 8080 هدایت شوند. کاری که میکند این است که اگر به example.com/api برسید، سرور شما فهمیده که باید به صورت داخلی به 8080 هدایت شود، بنابراین نیازی به باز کردن هیچ پورت دیگری به جز 80 نخواهید داشت که همان چیزی است که میخواهید.
من همچنین توصیه میکنم که pm2 را در هنگام راهاندازی سرور خود شروع کنید و پیکربندی pm2 خود را ذخیره کنید تا اگر سرور خود را دوباره راهاندازی کردید، بهطور خودکار بکاند شما را شروع کند.
پاسخ شماره ۲
من چندین بار از همان فرایند عبور کردهام و تصمیم گرفتم یک دموی پایهای در مورد چگونگی رسیدن به این هدف به سادهترین و تمیزترین شکل ممکن به اشتراک بگذارم.
رویکرد من این است که هم فرانتاند و هم بکاند را در ایمیجهای داکر روی سرور میزبان بستهبندی کنم. من همچنین یک نمونه Jenkins بستهبندی کردهام که بهطور خودکار هر دو Angular و NestJS را میسازد و کانتینرهای داکر را بازبارگذاری میکند.
شما میتوانید برنامه خود را بهراحتی مستقر کنید و تصمیم بگیرید که در هر کامیت یک ساخت ایجاد شود. این بهطور خودکار به سرور تولید شما منتقل خواهد شد.
شما میتوانید به پروژه نمونه در اینجا مراجعه کنید:
https://github.com/godardth/typescript-fullstack-boilerplate