استقرار Next.js روی سرور مجازی؛ بدون وابستگی به پلتفرمهای خارجی
پلتفرمهایی مثل Vercel استقرار Next.js را بسیار ساده کردهاند، اما برای بسیاری از پروژههای ایرانی، محدودیتهای تحریم، هزینهی ارزی و نیاز به دسترسی کامل به سرور، استفاده از یک سرور مجازی (VPS) را منطقیتر میکند. در این راهنما یک اپلیکیشن Next.js را روی Ubuntu مستقر میکنیم، با PM2 همیشه روشن نگهش میداریم و با Nginx و گواهی SSL رایگان آن را روی دامنه منتشر میکنیم.

۱. آمادهسازی سرور
پس از ورود با SSH، ابتدا سیستم را بهروز کنید، یک کاربر غیر root بسازید و Node.js نسخهی LTS را نصب کنید:
sudo apt update && sudo apt upgrade -y
sudo adduser deploy
sudo usermod -aG sudo deploy
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs nginx
sudo npm install -g pm2فعال کردن فایروال هم نباید فراموش شود. فقط پورتهای SSH و وب را باز بگذارید:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable۲. بیلد و اجرای پروژه با PM2
کد را از مخزن Git دریافت کنید، فایل .env را بسازید و پروژه را بیلد کنید. سپس بهجای اجرای مستقیم npm start، مدیریت پروسس را به PM2 بسپارید تا در صورت کرش یا ریاستارت سرور، برنامه خودکار دوباره اجرا شود:
git clone git@github.com:username/my-site.git && cd my-site
npm ci
npx prisma migrate deploy
npm run build
pm2 start npm --name my-site -- start
pm2 save
pm2 startup
۳. پیکربندی Nginx بهعنوان Reverse Proxy
Next.js روی پورت ۳۰۰۰ اجرا میشود؛ Nginx درخواستهای پورت ۸۰ و ۴۴۳ را دریافت و به آن پاس میدهد. علاوه بر این، فشردهسازی، کش فایلهای استاتیک و مدیریت SSL را هم بر عهده میگیرد:
server {
server_name example.com www.example.com;
client_max_body_size 10M;
location /_next/static/ {
proxy_pass http://127.0.0.1:3000;
add_header Cache-Control "public, max-age=31536000, immutable";
}
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;
}
}فایل را در /etc/nginx/sites-available/ ذخیره کنید، با یک لینک در sites-enabled فعالش کنید و با sudo nginx -t از درستی تنظیمات مطمئن شوید.
۴. گواهی SSL رایگان با Let's Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.comCertbot بهصورت خودکار تنظیمات Nginx را برای HTTPS بهروز میکند و یک تایمر برای تمدید گواهی میسازد.

۵. نظارت و نگهداری
استقرار پایان کار نیست. چند عادت ساده جلوی بسیاری از مشکلات را میگیرد:
- لاگها: با
pm2 logs my-siteخطاهای زمان اجرا را ببینید و باpm2-logrotateحجم لاگها را کنترل کنید. - مانیتورینگ منابع: دستور
pm2 monitمصرف CPU و حافظه را بهصورت زنده نشان میدهد. - پشتیبانگیری: از پایگاه داده و پوشهی آپلودها بهصورت روزانه نسخهی پشتیبان تهیه کنید.
- استقرار بدون قطعی: با
pm2 reloadبهجایrestart، نسخهی جدید بدون قطع شدن سایت جایگزین میشود.

یک اسکریپت استقرار ساده
برای اینکه هر بار دستورها را دستی تکرار نکنید، آنها را در یک اسکریپت قرار دهید:
#!/usr/bin/env bash
set -e
cd ~/my-site
git pull origin main
npm ci
npx prisma migrate deploy
npm run build
pm2 reload my-site
echo "Deployed ✔"
جمعبندی
با یک سرور مجازی ارزان، Nginx، PM2 و Certbot میتوانید یک اپلیکیشن Next.js را با کنترل کامل، سرعت مناسب و هزینهی ریالی منتشر کنید. همین سایت هم با رویکردی مشابه روی سرور اجرا میشود. وقتی این مراحل را یک بار انجام دهید، استقرارهای بعدی تنها چند دقیقه زمان خواهند برد.

دیدگاهها
هنوز دیدگاهی ثبت نشده است. اولین نفر باشید!