چگونه یک برنامه NestJS را با استفاده از Nginx روی سرور اوبونتو مستقر کنیم

برنامه‌ها
Nginx
اوبونتو ۲۲.۰۴
اوبونتو
Next.js
نویسندگی برای DO
مقدمه
برنامه‌های مدرن وب به یک بک‌اند محکم و امن متکی هستند. بنابراین، ایجاد برنامه‌های بک‌اندی که مقیاس‌پذیر، ایمن و از نظر معماری پیشرفته باشند برای مدیریت توسط تیم‌های کوچک و/یا بزرگ توسعه‌دهندگان ضروری است.
توسعه‌دهندگان امروزی ترجیح می‌دهند از JavaScript هم در فرانت‌اند و هم در بک‌اند استفاده کنند. Express.js یک فریم‌ورک بک‌اند عالی برای JavaScript است که توسط بیشتر توسعه‌دهندگان استفاده می‌شود. اما معماری مینیمال آن باعث می‌شود برای مقیاس‌پذیری و نگه‌داری توسط تیم‌های بزرگ مناسب نباشد. اینجاست که Nest.js وارد می‌شود. Nest.js معماری داخلی دارد که آن را برای مقیاس‌پذیری و دیپلوی کردن بسیار مناسب می‌سازد. همچنین، پشتیبانی بومی آن از TypeScript باعث می‌شود برای توسعه‌دهندگان نسبت به جاوااسکریپت خام، پربازده‌تر باشد.
در این آموزش، یاد می‌گیرید که چگونه یک اپلیکیشن NestJS را با استفاده از وب‌سرور Nginx روی یک VPS دیپلوی کنید. یاد می‌گیرید که چگونه اپلیکیشن خود را همراه با امنیت لازم روی وب قرار دهید.
پیش‌نیازها
قبل از ادامه این آموزش، باید شرایط زیر را داشته باشید:
• یک VPS با اوبونتو 20.04 یا بالاتر یا یک سیستم فیزیکی با اوبونتو (ما در این آموزش از اوبونتو 22.04 روی VPS استفاده می‌کنیم)
• Node.js و مدیر بسته npm (یا yarn). می‌توانید برای نصب نسخه‌های جدید Node.js و npm از این آموزش با عنوان «نحوه نصب Node.js روی اوبونتو» استفاده کنید.
• وب‌سرور Nginx. برای نصب Nginx روی اوبونتوی خود از این راهنمای عالی با عنوان «نحوه نصب Nginx روی اوبونتو» استفاده کنید.
مرحله ۱ – آماده‌سازی و دیپلوی اپلیکیشن NestJS
در این بخش، CLI مربوط به NestJS را نصب کرده و یک اپلیکیشن پایه NestJS می‌سازید که در بخش‌های بعدی یاد می‌گیرید چگونه آن را با Nginx دیپلوی کنید.
نصب CLI نِست‌جی‌اس به‌صورت سراسری
برای نصب CLI نِست‌جی‌اس روی ماشین اوبونتوی خود، یک ترمینال باز کرده و دستور زیر را وارد کنید:
npm i -g @nestjs/cli
این دستور CLI نِست‌جی‌اس را روی سیستم شما نصب می‌کند. در ادامه یاد می‌گیرید که چگونه یک پروژه جدید NestJS بسازید.
ساخت یک پروژه جدید NestJS
NestJS دو روش برای شروع یک پروژه جدید ارائه می‌دهد. می‌توانید روشی را انتخاب کنید که برای شما مناسب‌تر است.
استفاده از CLI نِست‌جی‌اس
برای ساخت پروژه با CLI، دستور زیر را وارد کنید:
nest new <project-name>
خروجی
? Which package manager would you   to use? (Use arrow keys)
❯ npm 
  yarn 
  pnpm
پس از پایان فرآیند، خروجی‌ای مشابه زیر دریافت می‌کنید:
CREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)
این پروژه را در دایرکتوری فعلی ایجاد می‌کند. می‌توانید به‌جای <project-name> مسیر کامل دایرکتوری دلخواه را هم وارد کنید.
کلون کردن تمپلیت استارتر
NestJS یک روش جایگزین برای شروع پروژه ارائه می‌دهد. یک ریپازیتوری git که به‌عنوان قالب اولیه (boilerplate) عمل می‌کند. می‌توانید این ریپازیتوری را کلون کرده و پروژه را با دستورات زیر شروع کنید:
پس از اتمام کلون، وارد دایرکتوری پروژه شوید و برای نصب وابستگی‌های موجود در package.json، دستور زیر را بزنید:
cd <project-directory>
npm install
وقتی پروژه آماده شد، می‌توانید با دستور زیر سرور اپلیکیشن را اجرا کنید:
npm run start
این اپلیکیشن را روی http://localhost:3000 اجرا می‌کند. حالا شما یک اپلیکیشن پایه NestJS دارید که روی localhost آماده اجراست.
تست‌ کردن اپلیکیشن
وقتی اپلیکیشن خود را توسعه دادید، می‌توانید آن را تست کنید تا مطمئن شوید که مطابق انتظار اجرا می‌شود. NestJS به‌طور پیش‌فرض از Jest برای تست‌ها استفاده می‌کند. برای اجرای تست‌ها، دستور زیر را وارد کنید:
npm run test
خروجی نمونه:
> node_app@0.0.1 test
> jest
PASS  src/app.controller.spec.ts
  AppController
    root
      ✓ should return “Hello World!” (24 ms)
Test Suites: 1 passed, 1 total  
Tests:       1 passed, 1 total  
Snapshots:   0 total  
Time:        2.895 s  
Ran all test suites.
در بخش بعدی، یاد می‌گیرید که چگونه این اپلیکیشن NestJS را با استفاده از Nginx به‌عنوان reverse proxy روی سرور خود دیپلوی کنید.
مرحله ۲ – تنظیم Nginx برای سرو NestJS
اکنون می‌خواهیم وب‌سرور را برای میزبانی اپلیکیشن NestJS آماده کنیم. از روش reverse proxy استفاده می‌کنیم. در این روش، اپلیکیشن روی localhost روی یک پورت مشخص اجرا می‌شود و سرور Nginx درخواست‌ها به آدرس IP عمومی یا دامنه را به اپلیکیشن در localhost منتقل می‌کند.
استفاده از reverse proxy به دلایل زیر رایج است:
• امنیت بیشتر (جلوگیری از دسترسی مستقیم به اپلیکیشن بک‌اند)
• مدیریت بهتر بار سرور (مخصوصاً زمانی که چند اپلیکیشن روی سرور دارید)
نصب pm2 برای مدیریت پردازش NestJS
برای اجرای اپ و اطمینان از فعال بودن آن در پس‌زمینه، از pm2 استفاده می‌کنیم:
npm install -g pm2
تنظیمات Nginx برای اپلیکیشن NestJS
ابتدا مطمئن شوید که فایروال اجازه دسترسی به Nginx را دارد. اگر از ufw استفاده می‌کنید:
sudo ufw enable
sudo ufw allow ‘Nginx Full’
سپس یک فایل کانفیگ جدید برای دامنه/اپلیکیشن خود بسازید:
sudo nano /etc/nginx/sites-available/your_domain
محتوای فایل:
server {
  server_name your_domain www.your_domain;
  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection ‘upgrade’;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
در این فایل، your_domain را با نام دامنه یا آی‌پی سرور خود جایگزین کنید.
فعال‌سازی تنظیمات Nginx
برای فعال کردن کانفیگ ساخته شده:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
غیرفعال‌سازی کانفیگ پیش‌فرض Nginx:
sudo unlink /etc/nginx/sites-enabled/default
ری‌استارت کردن Nginx:
sudo systemctl restart nginx
اجرای اپلیکیشن NestJS با pm2
ابتدا وارد دایرکتوری پروژه NestJS شوید، سپس:
pm2 start npm –name “your_domain” start
(اگر خطای دستور داد، مطمئن شوید بین –name و start دو تا – هست)
برای اجرای pm2 بعد از هر ریبوت:
pm2 startup
و ذخیره فرآیندها:
pm2 save
تست اپلیکیشن از طریق ترمینال
برای بررسی اینکه اپلیکیشن به‌درستی بالا آمده:
خروجی:
Hello World!
اگر همه چیز درست باشد، با وارد کردن آی‌پی یا دامنه در مرورگر هم همین پیام را خواهید دید.
در بخش بعدی، یاد می‌گیرید که چگونه با اضافه‌کردن SSL، اپلیکیشن خود را از HTTP به HTTPS منتقل کنید.
مرحله ۳ – اضافه کردن SSL با استفاده از Let’s Encrypt (اختیاری)
تا اینجا، یاد گرفته‌اید که چگونه یک اپلیکیشن NestJS را با استفاده از Nginx دیپلوی کنید. با این حال، این پیاده‌سازی از پروتکل HTTP استفاده می‌کند که به دلیل آسیب‌پذیری‌هایی که دارد، در محیط‌های تولید توصیه نمی‌شود. بنابراین، باید به پروتکل HTTPS که نسخه رمزنگاری شده HTTP است، مهاجرت کنید. HTTPS از گواهی‌های SSL/TLS استفاده می‌کند که توسط یک مراجع صدور گواهی (CA) فراهم می‌شوند. این گواهی‌ها مختص یک وب‌سایت هستند و ارتباط بین مشتری و سرور را رمزنگاری می‌کنند.
در این بخش، یاد می‌گیرید که چگونه گواهی SSL/TLS از Let’s Encrypt برای سایت خود اضافه کنید.
نکته:
برای ادامه این بخش، شما باید یک گواهی A برای دامنه خود داشته باشید. در این مثال از your_domain استفاده شده است، اما شما باید گواهی‌های SSL را فقط بعد از اضافه کردن دامنه خود به وب‌سایت، اضافه کنید.
نصب Certbot برای Let’s Encrypt
Let’s Encrypt یک ابزار خط فرمان (CLI) برای مدیریت و اتوماسیون گواهی‌های SSL ارائه می‌دهد. برای نصب این ابزار، دستور زیر را وارد کنید:
sudo apt install certbot python3-certbot-nginx
این دستور ابزار certbot را بر روی VPS اوبونتوی شما نصب می‌کند.
دریافت گواهی‌های SSL/TLS برای دامنه شما
حال، می‌توانید گواهی‌های SSL را برای دامنه خود با دستور زیر دریافت کنید:
sudo certbot –nginx -d <your_domain> -d <www.your_domain>
در اینجا باید your_domain را با نام واقعی دامنه خود جایگزین کنید. اگر این اولین بار است که certbot را بر روی VPS خود اجرا می‌کنید، از شما خواسته می‌شود که ایمیل خود را وارد کرده و شرایط استفاده را بپذیرید. اطلاعات لازم را وارد کرده و ادامه دهید.
نکته: این دستور فقط در صورتی کار خواهد کرد که دامنه شما معتبر باشد و آن را به اپلیکیشن NestJS خود متصل کرده باشید.
پس از نصب گواهی‌ها، قادر خواهید بود تمامی درخواست‌ها را به HTTPS هدایت کنید. توصیه می‌شود که تمام درخواست‌ها را به HTTPS ارجاع دهید تا یکپارچگی سایت شما تضمین شود.
تمدید خودکار گواهی‌ها
گواهی‌هایی که توسط Certbot نصب می‌شوند، دارای دوره اعتبار ۹۰ روزه هستند. با این حال، Certbot به‌صورت خودکار فرآیند تمدید این گواهی‌ها را انجام می‌دهد، بنابراین نیازی به بررسی دوره‌ای تاریخ انقضای آن‌ها نخواهید داشت.
نتیجه‌گیری
در این آموزش، یاد گرفتید که چگونه اپلیکیشن NestJS خود را در محیط تولید بر روی یک VPS اوبونتو با استفاده از سرور وب Nginx دیپلوی کنید. همچنین نحوه راه‌اندازی یک پروژه NestJS و ایجاد reverse proxy برای اپلیکیشن خود با استفاده از Nginx را آموختید. در نهایت، یاد گرفتید که چگونه گواهی‌های SSL/TLS را برای دامنه سرور خود اضافه کنید تا ارتباطات بین مشتریان و سرور شما رمزنگاری شود.
شما می‌توانید این دانش را با ایجاد اپلیکیشن‌های پیچیده‌تر NestJS گسترش دهید، از جمله ادغام با دیتابیس‌ها، اعتبارسنجی ورودی‌ها و غیره.
برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *