آموزش دیپلوی پروژه Node.js روی هاست ابری (گام‌به‌گام) | ابر برنت

پلتفرم
آموزش دیپلوی پروژه Node.js روی هاست ابری (گام‌به‌گام) | ابر برنت

دیپلوی پروژه Node.js روی هاست ابری، کمی سخت به نظر می‌رسد اما با اجرای مراحل به ترتیب، می‌توانید اپلیکیشن را بدون سردرگمی در دسترس کاربران قرار دهید. در این راهنما یک سرور Ubuntu و پروژه‌ای آماده اجرا در نظر گرفته‌ایم. اگر هنوز درباره سرویس مناسب مطمئن نیستید، ابتدا مطلب هاست ابری Node.js چیست را مطالعه کنید تا درک بهتری از این موضوع داشته باشید. همچنین توجه کنید که هدف فقط بالا آوردن موقت برنامه نیست. استقرار درست باید پس از بسته‌ شدن ترمینال یا ری استارت سرور فعال بماند، درخواست‌های دامنه را دریافت کند و HTTPS و امکان بررسی خطا داشته باشد. با ما همراه باشید تا به بررسی این پروسه بپردازیم.

 

پیش نیازها؛ قبل از شروع چه چیزهایی نیاز دارید؟

به سرور با کاربری دارای sudo، آدرس IP و در صورت نیاز Private Key احتیاج دارید. پروژه نیز باید package.json، اسکریپت معتبری مانند start و وابستگی‌های کامل داشته باشد. متغیرهای دیتابیس و API را آماده کنید و هرگز .env را در مخزن عمومی نگذارید.

برای دیپلوی پروژه Node.js روی هاست ابری رکورد A دامنه را به IPv4 سرور متصل کنید و در صورت استفاده از IPv6، رکورد AAAA را نیز بسازید. پورت نمونه 3000 و دامنه example.com است و شما می‌بایست آن‌ها را با اطلاعات واقعی جایگزین کنید. شایان ذکر است که اجرای محلی و Build پروژه را نیز پیش‌تر آزمایش کنید.

مرحله اول: اتصال SSH به سرور

ترمینال را در Linux یا macOS باز کنید. در Windows نیز می‌توانید از PowerShell یا Windows Terminal استفاده کنید. ساده‌ترین دستور برای ورود به سرور چنین است:

ssh deploy@203.0.113.10

اگر شرکت میزبان کلید اختصاصی در اختیارتان گذاشته است، مسیر کلید را مشخص کنید:

ssh -i ~/.ssh/my-server-key deploy@203.0.113.10

اثر انگشت سرور را فقط در صورت درست بودن IP تایید کنید. سپس بسته‌های پایه را نصب کنید:

sudo apt update
sudo apt install -y curl git nginx build-essential

پیش از فعال ‌کردن فایروال، دسترسی OpenSSH را مجاز کنید تا ارتباطتان قطع نشود. بعد پورت‌های وب را باز کنید:

sudo ufw allow OpenSSH
sudo ufw allow "Nginx Full"
sudo ufw enable
sudo ufw status

با پایان این بخش، اتصال SSH به سرور و بستر اولیه دیپلوی پروژه Node.js روی هاست ابری آماده است. کارهای روزمره را با کاربر غیر root انجام دهید.

مرحله دوم: نصب Node.js روی سرور و مدیریت نسخه با nvm

nvm انتخاب و ارتقای نسخه Node.js را بدون دستکاری بسته‌های سیستمی ممکن می‌کند. آن را نصب و Shell را تازه سازی کنید:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash
source ~/.bashrc
command -v nvm

اکنون نسخه LTS را نصب و به عنوان نسخه پیش فرض تعیین کنید:

nvm install --lts
nvm alias default 'lts/*'
node -v
npm -v

اگر مخزن فایل .nvmrc دارد، در پوشه پروژه nvm install و nvm use را اجرا کنید تا در دیپلوی پروژه Node.js روی هاست ابری ناسازگاری نسخه ایجاد نشود. نصب Node.js روی سرور با نمایش بدون خطای نسخه‌های Node و npm کامل می‌شود.

مرحله سوم: انتقال کد پروژه با Git یا FTP

برای استقرارهای قابل تکرار، Git مناسب‌تر است. پوشه برنامه‌ها را بسازید و مخزن را Clone کنید:

mkdir -p ~/apps
cd ~/apps
git clone https://github.com/USERNAME/REPOSITORY.git my-app
cd my-app

برای مخزن خصوصی از Deploy Key یا توکنی با حداقل دسترسی استفاده کنید. در انتشارهای بعدی معمولا این دستور کافی است:

cd ~/apps/my-app
git pull origin main

اگر پروژه در Git نیست، فایل‌ها را با SFTP منتقل کنید. node_modules را آپلود نکنید چون ممکن است با Linux سازگار نباشد. انتقال تمیز سورس، دیپلوی پروژه Node.js روی هاست ابری را قابل پیش بینی‌تر می‌کند.

مرحله چهارم: نصب پکیج‌ها و اجرای پروژه با PM2

در پوشه برنامه، وابستگی‌ها را براساس Lockfile نصب کنید. اگر پروژه مرحله Build دارد، آن را نیز اجرا کنید:

cd ~/apps/my-app
npm ci
npm run build

Build برای همه پروژه‌ها لازم نیست و تنها لازم است که اسکریپت‌ها را با npm run ببینید. .env را روی سرور بسازید و NODE_ENV=production، پورت و اطلاعات دیتابیس را وارد کنید. دسترسی فایل را محدود کنید:

chmod 600 .env

npm start با بستن ترمینال متوقف می‌شود. برای اجرای پروژه با PM2، مدیر فرایند را نصب و اسکریپت start را نامگذاری کنید:

npm install pm2@latest -g
pm2 start npm --name "my-app" -- start
pm2 status
pm2 logs my-app --lines 100

برای اینکه برنامه پس از ری استارت سرور دوباره اجرا شود، ابتدا pm2 startup را بزنید و دستور تولید شده در خروجی را عینا اجرا کنید و سپس فهرست فرایندها را ذخیره کنید:

pm2 startup
pm2 save

اکنون PM2 برنامه را پایدار نگه می‌دارد. در دیپلوی پروژه Node.js روی هاست ابری، پس از به روزرسانی Build را تکرار و برنامه را با pm2 restart my-app --update-env راه اندازی مجدد کنید.

مرحله پنجم: تنظیم دامنه و SSL برای پروژه

Nginx در نقش Reverse Proxy درخواست‌های دامنه را از پورت‌های 80 و 443 به پورت داخلی برنامه می‌فرستد. فایل تنظیمات را بسازید:

sudo nano /etc/nginx/sites-available/example.com

محتوای زیر را با دامنه و پورت خود هماهنگ کنید:

server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

سپس فایل را فعال، صحت پیکربندی را بررسی و Nginx را Reload کنید:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t
sudo systemctl reload nginx

پیش از صدور گواهی، باید دامنه از طریق HTTP در دسترس باشد. سپس Certbot را نصب و HTTPS را فعال کنید:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

با این تنظیم دامنه و SSL، ترافیک به برنامه می‌رسد، بدون آنکه پورت 3000 عمومی شود. حالا دیپلوی پروژه Node.js روی هاست ابری از طریق HTTPS قابل آزمایش است.

بیشتر بخوانید: خرید هاست Node.js ارزان و پرسرعت

خطاهای رایج در دیپلوی Node.js و راه حل آن‌ها

خطاهای نخستین دیپلوی پروژه Node.js روی هاست ابری معمولا به پورت، محیط یا مسیر اجرا مربوط هستند. عیب یابی را از وضعیت فرایند و لاگ‌ها شروع کنید.

خطای 502 Bad Gateway

این خطا یعنی Nginx به برنامه دسترسی ندارد. وضعیت و لاگ PM2 را ببینید و پاسخ پورت را آزمایش کنید:

curl -I http://127.0.0.1:3000

اگر پاسخی دریافت نشد، پورت موجود در .env، تنظیم proxy_pass و آدرس Listen برنامه را تطبیق دهید.

خطای EADDRINUSE

پورت اشغال است. فرایند مالک را پیدا کنید و نمونه تکراری را متوقف سازید یا پورت را تغییر دهید:

sudo ss -ltnp | grep :3000
pm2 list

خطای MODULE_NOT_FOUND یا شکست Build

پوشه جاری، وجود package.json و هماهنگی Node با .nvmrc را بررسی کنید. وابستگی‌ها را با npm ci نصب کنید. توجه داشته باشید که پکیج‌های Native نیز به build-essential نیاز دارند.

اعمال نشدن متغیرهای محیطی

پس از ویرایش .env، فرایند قدیمی همچنان مقادیر قبلی را نگه می‌دارد. دستور زیر محیط تازه را به برنامه می‌دهد:

pm2 restart my-app --update-env

صادر نشدن گواهی SSL

DNS باید به IP سرور اشاره کند و پورت 80 باز باشد. ابتدا http://example.com، سپس Nginx و فایروال را بررسی کنید. در نتیجه، عیب یابی دیپلوی پروژه Node.js روی هاست ابری مرحله‌ای خواهد بود.

 

چک لیست نهایی استقرار

پیش از اعلام پایان دیپلوی پروژه Node.js روی هاست ابری، موارد زیر را یک به یک کنترل کنید:

  • نسخه Node.js با نیاز پروژه و فایل .nvmrc هماهنگ است.
  • npm ci و در صورت نیاز npm run build بدون خطا تمام می‌شوند.
  • فایل .env روی سرور وجود دارد، مجوز دسترسی آن محدود است و داخل Git قرار نگرفته است.
  • وضعیت برنامه در pm2 status برابر Online است و لاگ خطای تکرار شونده ندارد.
  • دستورهای pm2 startup و pm2 save اجرا شده‌اند.
  • آزمون curl روی پورت داخلی پاسخ معتبر برمی‌گرداند.
  • آزمون nginx -t موفق است و دامنه به IP درست اشاره می‌کند.
  • سایت با HTTPS باز می‌شود و آزمون تمدید Certbot بدون خطا انجام شده است.
  • پس از یک ری استارت برنامه، سرویس دوباره در دسترس قرار می‌گیرد.

کلام پایانی

همانگونه که دیدید در این مقاله به طور کامل به بررسی راهنمای دیپلوی پروژه Node.js روی هاست ابری پرداختیم. دانستیم که این پروسه زمانی موفق است که برنامه در برابر قطع نشست، ری استارت سرور و تغییرات بعدی مدیریت پذیر بماند. nvm، Git، PM2، Nginx و Certbot این زنجیره را کامل می‌کنند. برای حذف تنظیمات دستی، هاست ابری Node.js ابر برنت را انتخاب کنید و دیپلوی پروژه Node.js روی هاست ابری را سریع‌تر و متمرکز بر توسعه انجام دهید. از همراهی شما متشکریم.

مقالات مرتبط

مشاهده همه