مقدمه
برنامه های کاربردی وب مدرن متکی به پشتیبان محکم و ایمن هستند. بنابراین، ایجاد برنامههای کاربردی که مقیاسپذیر، ایمن و از نظر معماری پیچیده باشند، ضروری است تا توسط تیمهای کوچک و/یا بزرگ توسعهدهندگان مدیریت شوند.
توسعه دهندگان مدرن ترجیح می دهند از جاوا اسکریپت در قسمت جلویی و پشتی استفاده کنند. Express.js یک چارچوب عالی جاوا اسکریپت است که توسط اکثر توسعه دهندگان استفاده می شود. با این حال، حداقل معماری آن، آن را برای مقیاس پذیری و نگهداری توسط تیم های بزرگ نامناسب می کند. اینجاست که Nest.js وارد عمل می شود. Nest.js دارای معماری داخلی است که آن را برای مقیاس پذیری و استقرار بسیار مناسب می کند. همچنین، پشتیبانی بومی آن از TypeScript آن را برای توسعه دهندگان سازنده تر از وانیلی جاوا اسکریپت می کند.
در این آموزش، نحوه استقرار یک برنامه NestJS با استفاده از وب سرور Nginx، روی VPS را خواهید آموخت. شما یاد خواهید گرفت که چگونه می توانید برنامه خود را با امنیت لازم در وب قرار دهید.
پیش نیازها
- یک Ubuntu 20.04+ VPS یا یک ماشین فیزیکی اوبونتو
- Node.js و مدیر بسته npm (یا yarn).
- وب سرور Nginx
مرحله 1 – آماده سازی و استقرار یک برنامه NestJS
در این بخش، NestJS CLI را نصب میکنید و یک برنامه اولیه NestJS ایجاد میکنید که در بخشهای بعدی نحوه استقرار آن را با استفاده از Nginx خواهید آموخت.
نصب NestJS CLI به صورت جهانی
برای نصب NestJS CLI در دستگاه اوبونتو، یک ترمینال را باز کنید و دستور زیر را تایپ کنید.
npm i -g @nestjs/cli
با این کار رابط خط فرمان NestJS روی دستگاه شما نصب می شود. بعد، شما یاد خواهید گرفت که یک پروژه جدید NestJS ایجاد کنید.
ایجاد یک پروژه جدید NestJS
اکنون NestJS دو راه برای شروع یک پروژه جدید ارائه می دهد. شما می توانید بهترین روش را انتخاب کنید که برای شما مناسب است.
برای ایجاد یک پروژه NestJS با CLI، دستور زیر را تایپ کنید.
nest new <project-name>
Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpm
پس از اتمام، خروجی ای مانند دنبال کردن دریافت خواهید کرد.
OutputCREATE 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 است که به عنوان الگوی دیگ بخار عمل می کند. می توانید آن مخزن را کلون کرده و با دستورات زیر پروژه را شروع کنید.
git clone https://github.com/nestjs/typescript-starter.git <project-directory >
پس از اینکه کلونینگ کامل شد، باید cd را به فهرست پروژه وارد کنید و سپس npm install را اجرا کنید تا وابستگی ها را از package.json نصب کنید.
cd <project-directory>
npm install
پس از آماده شدن پروژه، می توانید سرور برنامه را با استفاده از دستور زیر راه اندازی کنید:
npm run start
این برنامه را در http://localhost:3000 اجرا می کند. اکنون، شما یک برنامه اساسی NestJS آماده اجرا در لوکال هاست دارید.
تست اپلیکیشن
هنگامی که برنامه خود را توسعه دادید، می توانید تست هایی را روی آن اجرا کنید تا بررسی کنید که آیا برنامه مطابق انتظار اجرا می شود یا خیر. NestJS تستهای Jest پیشفرض را ارائه میکند که آزمایشهایی را روی برنامه شما اجرا میکنند. با استفاده از دستور زیر می توانید تست را شروع کنید:
npm run test
این برنامه شما را آزمایش می کند و نتایج مشابه زیر را نشان می دهد:
Output> [email protected] 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 به عنوان یک پروکسی معکوس بر روی وب سرور خود خواهید آموخت.
مرحله 2 – تنظیم Nginx برای خدمت به برنامه NestJS
اکنون، می توانیم با راه اندازی وب سرور برای میزبانی این برنامه NestJS پیش برویم. ما از رویکرد پراکسی معکوس استفاده خواهیم کرد. در این رویکرد، ما برنامه خود را بر روی لوکال هاست در یک پورت خاص اجرا می کنیم و سپس از سرور Nginx برای پراکسی کردن هرگونه درخواست به آدرس IP عمومی VPS یا دامنه به برنامه در لوکال هاست استفاده می کنیم. استفاده از سرورهای پروکسی معکوس یک روش صنعتی است زیرا با ایجاد مانعی بین درخواست های دریافتی و خود برنامه باطن، امنیت وب سرور را افزایش می دهد. همچنین، پراکسیهای معکوس امکان مدیریت بار بهتر روی سرور را فراهم میکنند، مخصوصاً زمانی که از سرور برای میزبانی چندین برنامه وب استفاده میشود.
ما با نصب پکیج منیجر pm2
شروع می کنیم که برنامه را در زمان اجرا مدیریت می کند.
نصب pm2 Process Manager
با استفاده از دستور زیر می توانید مدیر فرآیند pm2
را نصب کنید.
npm install -g pm2
با این کار pm2
به صورت سراسری روی دستگاه شما نصب می شود.
ایجاد پیکربندی Nginx برای برنامه NestJS
اکنون، Nginx را برای اجرای برنامه پیکربندی کنید. همانطور که در آموزش پیش نیاز ذکر شد، مطمئن شوید که برنامه Nginx را برای HTTP و HTTPS در فایروال خود مجاز کرده اید. اگر از فایروال ufw استفاده می کنید، می توانید با دنبال کردن دستورات این کار را انجام دهید.
ufw enable
ufw allow ‘Nginx Full‘
اکنون، یک بلوک پیکربندی برای برنامه NestJS ما ایجاد خواهید کرد. توصیه می شود به جای ویرایش تنظیمات پیش فرض، بلوک های پیکربندی جدید برای برنامه های جدید ایجاد کنید. برای ایجاد بلوک، کد زیر را در ترمینال خود تایپ کنید.
sudo nano /etc/nginx/sites-available/your_domain
در اینجا، ما از 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;
}
}
اکنون، یک سیم پیوند ایجاد میکنید که به Nginx میگوید برنامههای وب موجود را در پوشه sites-available جستجو کند:
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 با استفاده از Nginx
اکنون، مدیریت بسته pm2 را برای مدیریت اجرای برنامه NestJS خود راه اندازی خواهید کرد. دایرکتوری کاری را به دایرکتوری برنامه Nestjs خود تغییر دهید و دستور زیر را تایپ کنید.
pm2 start npm --name "your_domain" – start
می توانید دستور زیر را برای پیکربندی pm2 برای اجرا در راه اندازی مجدد سرور اجرا کنید.
pm2 startup
پس از اتمام تنظیم برنامه در pm2، ادامه دهید و لیست فرآیند pm2 را با موارد زیر ذخیره کنید:
pm2 save
اکنون، ما برنامه وب را برای اجرا در هنگام راه اندازی تنظیم کرده ایم و Nginx را برای معکوس کردن پروکسی به برنامه ما که در لوکال هاست اجرا می شود، پیکربندی کرده ایم.
تست وب اپلیکیشن
با تایپ دستور زیر می توانید برنامه وب را از کنسول خود تست کنید.
curl http://localhost
از آنجایی که ما پروکسی معکوس را روی خود آدرس IP سرور تنظیم کردهایم، هر درخواستی برای آدرس IP عمومی سرور، دامنه، یا درخواست روی میزبان محلی از سرور، به برنامه NestsJS your_domain
هدایت میشود.
OutputHello World!
در بخش بعدی یاد می گیرید که SSL را به برنامه خود اضافه کنید که به شما امکان می دهد از پروتکل HTTPS برای درخواست های خود استفاده کنید.
مرحله 3 – افزودن SSL با استفاده از Let’s Encrypt (اختیاری)
تاکنون، نحوه استقرار یک برنامه NestJS کاملاً کارآمد را با سرور Nginx یاد گرفتهاید. با این حال، این استقرار از پروتکل HTTP استفاده می کند که به دلیل آسیب پذیری بهره برداری در تولید توصیه نمی شود. بنابراین، شما می خواهید به پروتکل HTTPS که نسخه رمزگذاری شده HTTP است، بروید. HTTPS از گواهینامه های SSL/TLS ارائه شده توسط یک مرجع صدور گواهی استفاده می کند. این گواهی ها مختص یک وب سایت هستند و ارتباط بین مشتری و سرور را رمزگذاری می کنند.
نصب Certbot CLI 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 خود اجرا می کنید، از شما خواسته می شود ایمیل خود را وارد کنید و با شرایط کاربر موافقت کنید. اطلاعات لازم را ارائه دهید و ادامه دهید.
پس از نصب گواهیها، میتوانید تمام درخواستها را به HTTPS هدایت کنید. توصیه می شود برای اطمینان از یکپارچگی وب سایت خود، تمام درخواست ها را تغییر مسیر دهید.
نتیجه
در این آموزش، شما یاد گرفتید که چگونه یک برنامه NestJS را با استفاده از وب سرور Nginx در یک VPS اوبونتو در تولید استقرار دهید. همچنین یاد گرفتید که چگونه یک پروژه NestJS و یک پروکسی معکوس برای برنامه خود با استفاده از Nginx راه اندازی کنید. در نهایت، یاد گرفتید که چگونه گواهیهای SSL/TLS را برای دامنه سرور خود اضافه کنید و از یکپارچگی ارتباطات بین مشتریان و سرور خود اطمینان حاصل کنید.