آنچه در این مقاله میخوانید
استقرار یک برنامه NestJS با Postgres در سرور مجازی اوبونتو
۱۲ اردیبهشت ۱۴۰۴
راهاندازی یک اپلیکیشن NestJS در سرور مجازی اوبونتو، با دیتابیس PostgreSQL یکی از رایجترین سناریوها در پروژههای بکاند میباشد. NestJS با ساختار ماژولار و پشتیبانی از TypeScript یک انتخاب مناسب و قدرتمند برای توسعهی APIها محسوب میشود. از طرف دیگر، Postgres نیز یکی از پراستفادهترین پایگاهدادهها است. در این مقاله، به شما آموزش میدهیم که چگونه یک REST API ساخته شده با NestJS را همراه با دیتابیس Postgres، در یک سرور VPS دیپلوی کنید. اگر قصد دارید پروژه خود را از حالت لوکال خارج کرده و روی سرور مجازی اوبونتو مستقر کنید، تا پایان این آموزش با ما همراه باشید.
پیشنیازها
قبل از اینکه وارد مراحل اصلی شوید، لازم است چند پیشنیاز را روی سرور خود داشته باشید تا بتوانید این آموزش را بطور کامل انجام دهید.
- یک سرور مجازی اوبونتو که دارای یک کاربر غیر root با دسترسی sudo باشد و firewall آن با ufw پیکربندی شده باشد. برای انجام این کار، میتوانید راهنمای تنظیم اولیه سرور در Ubuntu را مطالعه کنید.
- یک برنامه Node.js بههمراه npm یا yarn در سرور شما نصب شده باشد. اگر هنوز نصب نکردهاید، مقاله چطور یک برنامهی Node.js را برای محیط تولید روی سرور مجازی اوبونتو Ubuntu راهاندازی کنیم؟ را بخوانید.
- تنظیم رکوردهای DNS موردنیاز برای سرور. اگر از سامانه مدیریت دامنه لیارا، استفاده میکنید، لطفاً به مستندات DNS آن، مراجعه کنید تا جزئیات مربوط به نحوهی اضافه کردن رکوردها را ببینید.
در ادامه بخوانید:
- گام اول:نصب و پیکربندی PostgreSQL روی سرور
- گام دوم: نصب Node.js و npm روی سرور
- گام سوم: اتصال دامنه یا سابدامنه به پروژه NestJS
- جمعبندی
- سوالات متداول

گام اول:نصب و پیکربندی PostgreSQL روی سرور
در گام اول دیتابیس Postgres را با دستور زیر نصب کنید:
sudo apt update
sudo apt install postgresql postgresql-contrib
حالا که دیتابیس Postgres روی سرور شما نصب شده، برای دسترسی به محیط PostgresSQL میتوانید به کاربر postgres
سوئیچ کنید. برای اینکار دستور زیر را وارد کنید:
sudo -i -u postgres
اکنون که با کاربر Postgres وارد شدید، خیلی راحت میتوانید با اجرای دستور زیر وارد شل (پوسته) Postgres شوید:
psql
در این محیط میتوانید دیتابیس بسازید، یوزر تعریف کنید و کارهای مدیریتی زیادی روی PostgreSQL انجام دهید:
root@testapi:~# su - postgres
postgres@testapi:~$ psql
psql (14.12 (Ubuntu 14.12-0ubuntu0.24.04.1))
Type "help" for help.
postgres=#
آموزش کامل نحوه بکاپگیری از دیتابیس PostgreSQL در سرور مجازی اوبونتو را میتوانید در مقاله زیر بخوانید.
آموزش بکاپ گیری از PostgreSQL در اوبونتو 24.04
ساخت یوزر جدید در Postgres
برای ساخت کاربر جدید، دستور زیر را وارد کنید. بهجای newuser
نام دلخواه خودتان را قرار دهید:
CREATE USER newuser WITH PASSWORD 'password';
همینطور باید پسورد دلخواه خود را وارد کنید.
البته بعد از وارد کردن دستور بالا، از شما سوال میشود که آیا میخواهید به کاربر، دسترسیهای Superuser دهید یا خیر:
postgres@testapi:~$ createuser --interactive --pwprompt
Enter name of role to add: admin
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
با فشردن کلید y
، یک کاربر با دسترسیهای Superuser ساخته میشود.
بعد از ایجاد یوزر، نوبت به ساخت یک دیتابیس و اختصاص دادن آن به یوزر میرسد. ابتدا وارد محیط psql
شوید و دستورات زیر را وارد کنید:
sudo -u postgres psql
حالا دیتابیس جدیدی بسازید:
CREATE DATABASE mydatabase;
جای mydatabase
اسم دیتابیس جدیدی است که میخواهید ایجاد کنید.
سپس یوزر خودتان را با دستور زیر به دیتابیس اختصاص دهید:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO admin;
در اینجا admin
نام یوزر شماست که به دیتابیس mydatabase
دسترسی داده میشود. برای اینکه مطمئن شوید همه چیز بهدرستی تنظیم شده است، دستور زیر را اجرا کنید:
\l
برای خروج از محیط psql
از دستور زیر استفاده کنید:
\q
در لیارا فقط با یک کلیک و در چند ثانیه، دیتابیس PostgreSQL تهیه کنید.
✅ شبکه خصوصی ✅ منابع اختصاصی ✅ مدیریت آسان
خرید هاست ابری PostgreSQL
دسترسی به PostgreSQL از خارج از سرور (اختیاری)
حالا اگر بخواهید از خارج سرور VPS به دیتابیستان دسترسی داشته باشید و از ابزارهایی مثل PG Admin یا هر ابزار دیگری استفاده کنید، میتوانید مراحل زیر را انجام کنید:
فایل پیکربندی postgresql.conf
را برای ویرایش باز کنید:
nano /etc/postgresql/12/main/postgresql.conf
در فایل بالا به دنبال listen_addresses = 'localhost'
بگردید، این خط را از حالت کامنت خارج کنید و به listen_addresses = '*'
تغییر دهید، سپس فایل را ذخیره کرده و خارج شوید. تغییرات به شکل زیر خواهد بود:
...
listen_addresses = '*' # what IP address(es) to listen on;
اکنون دوباره، فایل پیکربندی زیر را باز کنید:
nano /etc/postgresql/12/main/pg_hba.conf
در فایل pg_hba.con
f به بخش مربوط به IPv4 local connections بروید و در آن قسمت آیپی 127.0.0.1/32
را به 0.0.0.0/0
تغییر دهید. با اینکار از آیپیهای خارجی نیز به دیتابیس دسترسی خواهید داشت.
تغییرات بهشکل زیر خواهد بود:
...
# IPv4 local connections:
host all all 0.0.0.0/0 md5
...
بعد از اتمام مراحل بالا برای خروج از کاربر Postgres، دستور زیر را وارد کنید:
exit
در آخر برای اجازه دادن به اتصالات ورودی به پورت 5432
(پورت پیشفرض Postgres) دستور زیر را وارد کنید تا تنظیماتی که تا الان انجام دادهایم، اعمال شده و سرویس Postgres ریاستارت شود.
sudo ufw allow 5432/tcp
sudo systemctl restart postgresql
بعد از انجام تمام مراحل بالا، شما به پایگاه داده خود از خارج سرور دسترسی خواهید داشت.
هر آنچه باید درباره سرور مجازی، مزایا و کاربردهایش بدانید را میتوانید در مقاله زیر مطالعه کنید.
سرور مجازی یا VPS چیست؟
گام دوم: نصب Node.js و npm روی سرور
حالا که تنظیمات دیتابیس را انجام دادید، قدم بعدی، نصب و راهاندازی Node.js میباشد.
دستورات زیر Node.js، npm، pm2 و NestJS را نصب میکنند:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install pm2@latest -g
sudo npm i -g @nestjs/cli
توجه: یادتان باشد اگر هنوز از کاربر Postgres
خارج نشدید، با تایپ دستور exit
از کاربر Postgres
خارج شوید.
در این مرحله فرض کنید، یک اپلیکیشن NestJS دارید که از PostgreSQL استفاده میکند و فولدر پروژهی خود را Clone یا کپی کرده و در home دایرکتوری قرار دادهاید. حالا برای ادامه، وارد فولدر پروژه شوید و یک فایل .env
در root فولدر ایجاد کنید تا تمام اطلاعات مربوط به دیتابیس در آن ذخیره شود.
فایل .env
شامل اطلاعات مورد نیاز برای اتصال Nest JS به پایگاهداده خواهد بود. محتوای فایل .env
به این شکل خواهد بود که در آن host
به localhost
اشاره دارد.
توضیح بقیه موارد فایل .env
به صورت زیر است:
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USERNAME=admin
DB_PASSWORD=admin
DB_NAME=jugaad
برای نصب وابستگیهای پروژه و ساخت اپلیکیشن NestJS، دستورات زیر را وارد کنید:
npm i
nest build
نصب و راهاندازی PM2
برای اجرای اپلیکیشن NestJS با استفاده از PM2 در سرور VPS، دستور زیر را اجرا کنید:
pm2 start dist/main.js --name jugaadapi
دستور بالا، اپلیکیشن شما را اجرا میکند و پردازشی با نام jugaadapi
در PM2 ثبت میشود.
همچنین برای مشاهده لاگها و مطمئن شدن از اجرای درست اپلیکیشن، دستور زیر وارد کنید:
pm2 log jugaadapi
اگر موقع اجرای اپلیکیشن با PM2 هیچ خطایی دریافت نکردید، یعنی همه تنظیمات درست انجام شده و اپلیکیشن شما در حال حاضر روی سرور مجازی فعال اوبونتو فعال است.
اما برای اطمینان بیشتر، دستور زیر را وارد کنید:
pm2 startup
خروجی این دستور، شامل دستور دیگری است:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your-username --hp /home/your-username
خط آخر این خروجی را در خط فرمان اجرا کنید تا تنظیمات ذخیره شوند.
در نهایت با دستور زیر، وضعیت فعلی اپلیکیشنها را ذخیره کنید:
pm2 save
اگر تا اینجای آموزش را بهطور کامل انجام داده باشید، اپلیکیشن NestJS روی سرور مجازی اوبونتو اجرا شده و آمادهی استفاده میباشد.
تنها کاری که باقیمانده، اتصال دامنه یا سابدامین به سرور VPS است. در ادامه به شما خواهیم گفت که چگونه این اتصال را برقرار کنید.
گام سوم: اتصال دامنه یا سابدامین به پروژه NestJS
همانطور که در پیشنیازها گفتیم، باید تنظیمات فایروال را انجام داده باشید، اگر اینکار را انجام ندادید، دستورات زیر را وارد کنید:
sudo apt update
sudo apt install nginx -y
sudo ufw allow 'Nginx Full'
برای آموزش نصب کامل وبسرور Nginx در سرور مجازی اوبونتو Ubuntu به مقاله زیر مراجعه کنید.
نصب Nginx در سرور مجازی اوبونتو
توجه: کافیاست در تنظیمات DNS دامنهتان، یک رکورد A بسازید و آیپی سرور را بدهید.

در ادامه ما فرض میکنیم، Nginx را نصب کردهاید. وقت آن است که یک Server Block بسازیم تا بتوانیم از طریق دامنه یا سابدامین به API دسترسی داشته باشیم. برای اینکار بک فایل کانفیگ جدید در دایرکتوری /etc/nginx/sites-available
میسازیم و بهطور مثال نام آن را api-project
میگذاریم.
sudo nano /etc/nginx/sites-available/api-project
محتوای فایل شبیه زیر میباشد:
server {
listen 80;
server_name api.example.com;
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;
}
}
سپس، با دستور زیر فایل را به دایرکتوری sites-enabled
لینک میدهیم:
sudo ln -s /etc/nginx/sites-available/api-project /etc/nginx/sites-enabled/
در آخر، با اجرای دستور زیر مطمئن میشویم، تنظیمات مشکلی ندارد و Nginx را ریاستارت میکنیم:
sudo nginx -t
sudo systemctl restart nginx
به اینصورت، درخواستهایی که به api.example.com
میرسند، به اپلیکیشن NestJS شما روی پورت 3000 فوروارد میشوند.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی اوبونتو
جمعبندی
در این آموزش از لیارا نحوه استقرار یک اپلیکیشن NestJS را بادیتابیس PostgreSQL روی سرور مجازی اوبونتو آموزش دادیم. از نصب پکیجها و ساخت یوزر دیتابیس گرفته تا راهاندازی PM2 برای مدیریت پروسهها و در آخر با پابلیش کردن API روی دامنه با Nginx.
✅ نصب و پیکربندی PostgreSQL
✅ ساخت یوزر و دیتابیس امن با دستورات تعاملی
✅ نصب NodeJS، Nest CLI و PM2
✅ ساخت فایل .env
و بیلد کردن اپ
✅ راهاندازی اپ با PM2 و تنظیم اتوماتیک اجرا بعد از ریبوت
✅ نصب و پیکربندی Nginx برای دامنه
✅ تست کانفیگ و بالا آوردن نهایی API روی وب
سوالات متداول
چطور میتوانم مطمئن شوم که PostgreSQL از بیرون سرور قابل دسترس است؟
کافیه از یه ابزار مثل telnet
یا nc
روی پورت 5432 تست اتصال بزنی. مثلاً:
telnet your-server-ip 5432
اگه اتصال برقرار شد یعنی تنظیمات listen_addresses
و pg_hba.conf
درسته و فایروال هم راه رو باز گذاشته.
ساخت یوزر با createuser
بهتر است یا با SQL؟
اگر تازهکار هستید، createuser
مناسبتر است، چون تعاملی و راحتتر است. ولی در غیر اینصورت، با دستور SQL مثل CREATE USER
هم میتوانید یوزر بسازید.
اگه بخواهم پورت پیشفرض PostgreSQL را عوض کنم چکار کنم؟
میتوانید فایل تنظیمات PostgreSQL را ویرایش کنید و عدد پورت را تغییر دهید. بعد از آن حتماً سرویس را ریاستارت کنید تا تغییرات اعمال شود.