راهاندازی و اجرای پروژههای MERN یا اپلیکیشنهای مبتنی بر BunJS مستلزم ترکیبی از دانش توسعه و پیکربندی سرور است. MERN که شامل تکنولوژیهای MongoDB ،Express ،React و Node.js میشود، یک پشتهٔ شناختهشده برای ساخت اپلیکیشنهای وب تکصفحهای و سرویسهای API است، در حالی که Bun بهعنوان یک runtime نوظهور برای جاوااسکریپت/تایپاسکریپت معرفی شده که پکیجمنیجر، باندلر و تسترانر توکار دارد و در مواردی بهخاطر زمان آغاز سریع و عملکرد بهتر توجه را جلب کرده است.
هدف این مطلب از وبسایت پیچم ارائهٔ راهنمای مرحلهبهمرحله و عملی برای اجرا و استقرار پروژههای MERN و اپلیکیشنهای BunJS است؛ از نصب و پیکربندی روی سرور لینوکس گرفته تا مدیریت فرآیند، پیکربندی وبسرور معکوس و نکات امنیتی پایه برای محیط پروداکشن. این راهنما برای کسانی تهیه شده که با مبانی توسعه وب آشنا هستند و به دنبال تبدیل پروژهٔ محلی خود به یک سرویس قابلاعتماد روی سرور میباشند.
نصب و پیکربندی Node.js روی سرور لینوکس
برای اجرای یک پروژه MERN، اولین گام اطمینان از نصب و پیکربندی صحیح Node.js روی سرور است. نسخهٔ Node.js باید با نیازهای پروژه همخوانی داشته باشد و در محیط پروداکشن بهصورت پایدار عمل کند. در ادامه بهصورت قدم به قدم این موضوع را پیش میبریم:
۱. بهروزرسانی بستههای سیستم
پیش از هر کاری، بهتر است بستههای سیستم را آپدیت کنید تا آخرین نسخهٔ ابزارها و وابستگیهای امنیتی نصب شود:
sudo apt update && sudo apt upgrade -y
۲. نصب Node.js با استفاده از NodeSource (روش پیشنهادی)
Node.js را میتوان از مخازن پیشفرض نصب کرد، اما با استفاده از NodeSource میتوانید دسترسی به نسخههای جدیدتر داشته باشید:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
پس از نصب با استفاده از دستور زیر از نصب شدن درست و تطابق با نسخه مورد نظر مطمئن شوید:
node -v
npm -v
۳. نصب وابستگیهای پروژه
پس از آپلود پروژه روی سرور، به مسیر آن بروید و بستههای موردنیاز را نصب کنید:
cd /path/to/project
npm install
۴. تست اجرای پروژه در حالت توسعه
برای اطمینان از اینکه همهچیز درست نصب شده:
npm run dev
اگر پروژه بدون خطا اجرا شد، میتوانید سراغ راهاندازی آن برای پروداکشن بروید.
نصب Bun روی سرور لینوکس
Bun یک JavaScript runtime سریع و چندکاره است که شامل پکیج منیجر (Package Manager)، باندلر (Bundler) و تسترانر (Test Runner) بهصورت داخلی میشود. این یعنی در بسیاری از پروژهها میتوان بدون نیاز به npm ،webpack یا Jest، تنها با Bun همهچیز را مدیریت کرد.
۱. دانلود و نصب Bun
سادهترین روش نصب، استفاده از اسکریپت رسمی Bun است:
curl -fsSL https://bun.sh/install | bash
پس از اتمام نصب، مسیر Bun معمولاً به ~/.bun/bin
اضافه میشود. برای اطمینان از دسترسی سراسری، متغیر PATH را بهروز کنید:
export PATH="$HOME/.bun/bin:$PATH"
برای دائمی کردن این تغییر، آن را به فایل ~/.bashrc
یا ~/.zshrc
اضافه کنید.
۲. بررسی نصب
bun --version
اگر نسخه نمایش داده شد، نصب موفق بوده است.
۳. اجرای یک پروژه Bun
فرض کنید پروژه شما یک فایل ورودی index.ts یا index.js دارد. برای اجرا کردن کافیست دستور زیر را وارد کنید:
bun run index.ts
یا اگر اسکریپتهای package.json دارید:
bun run start
۴. نصب وابستگیها با Bun
به جای npm یا yarn، میتوانید از نصب سریع Bun استفاده کنید:
bun install
این دستور بهطور چشمگیری سریعتر از npm/yarn کار میکند.
۵. نکات مهم هنگام اجرای Bun روی سرور
- Bun هنوز در حال توسعه است و ممکن است برخی پکیجها کاملاً با آن سازگار نباشند.
- برای پروژههای حیاتی در پروداکشن، پایداری نسخه را با قفل کردن آن (bun.lockb) تضمین کنید.
- در صورت نیاز به عملکرد پایدار طولانیمدت، حتماً اجرای Bun را با ابزارهایی مثل PM2 یا systemd مدیریت کنید (در بخش بعدی توضیح میدهیم).
مدیریت فرآیند با PM2
وقتی پروژه MERN یا BunJS را روی سرور اجرا میکنید، نباید به اجرای موقت در ترمینال اکتفا کرد. اگر ارتباط SSH قطع شود یا سرور ریاستارت گردد، پروژه متوقف خواهد شد. برای حل این مشکل، ابزاری مانند PM2 فرآیند را در پسزمینه اجرا کرده و حتی پس از ریاستارت سرور، آن را دوباره راهاندازی میکند.
۱. نصب PM2 بهصورت سراسری
sudo npm install -g pm2
حتی اگر پروژه BunJS باشد، چون PM2 خودش روی Node.js اجرا میشود، همچنان باید Node.js روی سرور نصب باشد.
۲. اجرای پروژه با PM2
برای پروژههای MERN از دستور زیر استفاده کنید:
pm2 start server.js --name my-mern-app
یا اگر از یک اسکریپت npm استفاده میکنید:
pm2 start "npm run start" --name my-mern-app
برای پروژههای BunJS از دستور زیر استفاده کنید:
pm2 start "bun run start" --name my-bun-app
یا مستقیم با فایل ورودی بهشکل زیر پیش بروید:
pm2 start "bun index.ts" --name my-bun-app
۳. مدیریت فرآیندها
مشاهده لیست اپلیکیشنها:
pm2 list
نمایش لاگها:
pm2 logs my-mern-app
توقف برنامه:
pm2 stop my-mern-app
حذف از PM2:
pm2 delete my-mern-app
۴. ماندگاری پس از ریاستارت سرور
برای اینکه برنامه پس از بوت سرور بهطور خودکار اجرا شود:
pm2 startup pm2 save
متغیرهای محیطی برای پروداکشن
در محیط پروداکشن، نباید مقادیر مهمی مثل کلیدهای API، رشته اتصال دیتابیس (Database Connection String)، رمزهای عبور یا پورت سرویس را بهطور مستقیم داخل کد قرار داد. به جای آن از متغیرهای محیطی (Environment Variables) استفاده میشود تا امنیت، انعطافپذیری و قابلیت نگهداری پروژه افزایش پیدا کند. برای این کار میتوانید به صورت قدم به قدم ادامه مطلب را دنبال کنید:
۱. ایجاد فایل .env
در پروژه
در پوشه اصلی پروژه یک فایل با نام .env
بسازید و مقادیر حساس را در آن قرار دهید:
PORT=3000 MONGO_URI=mongodb+srv://user:pass@cluster.mongodb.net/db JWT_SECRET=my-secret-key
این فایل نباید در مخزن Git قرار بگیرد. در نتیجه آن را به.gitignore
اضافه کنید.
۲. استفاده از dotenv در پروژه Node.js (MERN)
npm install dotenv
بعد از نصب، در ابتدای فایل ورودی پروژه قطعه زیر را اضافه کنید:
import dotenv from "dotenv"; dotenv.config(); const port = process.env.PORT || 3000;
۳. استفاده از متغیر محیطی در BunJS
برای تعریف متغیرهای محیطی در Bun، میتوان بهطور مستقیم از process.env استفاده کرد:
const port = process.env.PORT || 3000;
و برای بارگذاری خودکار از .env
، بسته dotenv همچنان قابل استفاده است:
bun add dotenv
۴. تنظیم متغیرها در محیط سرور (بدون فایل .env)
گاهی ترجیح داده میشود متغیرها مستقیم در سرور ذخیره شوند، مثلاً در PM2:
pm2 start server.js --name my-mern-app --env PORT=3000 --env NODE_ENV=production
یا با ویرایش فایل پروفایل کاربر (~/.bashrc
):
export PORT=3000 export NODE_ENV=production
۵. نکات امنیتی
- فایل .env هرگز نباید در GitHub یا فضای عمومی قرار گیرد.
- متغیرهای محیطی را با توجه به محیط (توسعه، تست، پروداکشن) جدا نگه دارید.
- در سرورهای اشتراکی یا CI/CD، از ابزارهای مدیریت امن متغیرها استفاده کنید (مثل GitHub Secrets یا Vault).
پیکربندی Nginx بهعنوان وبسرور معکوس (Reverse Proxy)
در محیط پروداکشن، اجرای مستقیم اپلیکیشن Node.js یا BunJS روی پورتهای عمومی (مثل 80 یا 443) پیشنهاد نمیشود. بهجای آن، از یک وبسرور معکوس (Reverse Proxy) مانند Nginx استفاده میکنیم تا درخواستها را به اپلیکیشن هدایت کند و مدیریت SSL، کش، و امنیت را بهبود دهد.
۱. نصب Nginx روی لینوکس
sudo apt update sudo apt install nginx -y
پس از نصب، سرویس Nginx معمولاً بهطور خودکار فعال و در حال اجراست:
sudo systemctl status nginx
۲. ساخت فایل پیکربندی جدید برای اپلیکیشن
برای مثال، یک فایل کانفیگ جدید ایجاد میکنیم:
sudo nano /etc/nginx/sites-available/myapp
نمونه پیکربندی:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000; # پورت اپلیکیشن Node.js یا BunJS
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
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo nginx -t # تست صحت پیکربندی sudo systemctl reload nginx
۴. اضافه کردن SSL (اختیاری اما ضروری در پروداکشن)
برای فعالسازی HTTPS رایگان، میتوان از Certbot استفاده کرد:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
Certbot بهطور خودکار گواهی SSL را نصب و پیکربندی خواهد کرد.
۵. نکات مهم
- با Nginx میتوان مسیرهای استاتیک (Static Files) را مستقیم سرو کرد تا بار از روی اپلیکیشن کم شود.
- میتوان چند اپلیکیشن را روی پورتهای مختلف اجرا و با Nginx مدیریت کرد.
- برای بهبود امنیت، هدرهای امنیتی مثل
X-Frame-Options
وContent-Security-Policy
را اضافه کنید.
نکات امنیتی برای استقرار پروژههای جاوااسکریپتی
اجرای موفق یک پروژه MERN یا BunJS تنها به راهاندازی و پیکربندی ختم نمیشود. امنیت سرور و اپلیکیشن نقش کلیدی در پایداری و جلوگیری از نفوذ دارد. در ادامه چند نکته عملی برای افزایش امنیت در محیط پروداکشن ارائه میشود.
۱. ایجاد کاربر جداگانه برای اجرای اپلیکیشن
هرگز اپلیکیشن را با کاربر root اجرا نکنید. یک کاربر جدید بسازید و به او فقط دسترسیهای ضروری را بدهید:
sudo adduser appuser sudo usermod -aG sudo appuser
۲. غیرفعال کردن دسترسی مستقیم Root از SSH
در فایل /etc/ssh/sshd_config
گزینه زیر را پیدا و ویرایش کنید:
PermitRootLogin no
سپس سرویس SSH را ریاستارت کنید:
sudo systemctl restart ssh
۳. محدود کردن پورتها با فایروال
فقط پورتهای ضروری مثل 80 (HTTP) و 443 (HTTPS) را باز بگذارید:
sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable
۴. بهروزرسانی منظم سیستم و پکیجها
بهصورت دورهای سیستم عامل و وابستگیها را آپدیت کنید:
sudo apt update && sudo apt upgrade -y
۵. مدیریت ایمن متغیرهای محیطی
هرگز اطلاعات حساس را در Git یا لاگها قرار ندهید.
برای CI/CD از ابزارهای امن مثل GitHub Secrets یا HashiCorp Vault استفاده کنید.
۶. فعالسازی HTTPS
همهٔ درخواستها را با Nginx به نسخه HTTPS هدایت کنید:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
۷. محدود کردن نرخ درخواستها (Rate Limiting)
برای جلوگیری از حملات Brute Force، در Nginx میتوان محدودیت نرخ را فعال کرد:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
limit_req zone=one burst=20;
}
در پایان
استقرار پروژههای MERN یا BunJS روی سرور، فرآیندی چندمرحلهای است که ترکیبی از مهارتهای توسعه، مدیریت سرور و امنیت را میطلبد. از نصب و پیکربندی Node.js یا BunJS گرفته تا مدیریت پایدار فرآیند با PM2، تنظیم متغیرهای محیطی، استفاده از Nginx بهعنوان وبسرور معکوس، و رعایت اصول امنیتی. هر بخش نقش مهمی در تضمین عملکرد صحیح و قابلاعتماد اپلیکیشن دارد.
MERN همچنان یکی از محبوبترین پشتهها برای توسعه اپلیکیشنهای وب است، در حالی که BunJS با سرعت بالا و ابزارهای توکار خود، جایگزینی نوظهور برای اجرای جاوااسکریپت و تایپاسکریپت محسوب میشود. انتخاب میان این دو بستگی به نیاز پروژه، میزان پایداری مورد انتظار و سطح سازگاری با کتابخانهها دارد.
با پیادهسازی مراحل ذکر شده، میتوان پروژه را از محیط توسعه محلی به یک سرویس پایدار و امن در محیط پروداکشن منتقل کرد، بدون نگرانی از توقف ناگهانی، مشکلات امنیتی یا افت کارایی. مهمتر از همه، حفظ بهروزرسانی منظم و پایش عملکرد سرور تضمین میکند که پروژه در طولانیمدت بهخوبی و بدون اختلال خدمترسانی کند.