نحوه نصب لاراول با Nginx در اوبونتو #
لاراول یک چارچوب محبوب PHP برای ساخت برنامههای وب مدرن است که از سینتکس پویا و ویژگیهای قوی مانند مسیریابی، احراز هویت و مدیریت پایگاه داده پشتیبانی میکند. لاراول با نسخههای مختلف PHP کار میکند و از ادغام با سایر برنامههای backend مانند سرورهای پایگاه داده پشتیبانی میکند. استقرار لاراول با Nginx به شما امکان میدهد برنامههای با کارایی بالا و مقیاسپذیر را در محیطهای تولید ارائه دهید و به شما امکان ساخت برنامههای وب مدرن را میدهد.
این مقاله نحوه استقرار لاراول با Nginx در اوبونتو ۲۴.۰۴ را توضیح میدهد. شما لاراول را نصب خواهید کرد و یک پروژه جدید برای استقرار با Nginx با استفاده از یک دامنه سفارشی مانند app.example.com. ایجاد خواهید کرد.
پیش نیازها #
قبل از شروع، شما نیاز دارید:
- یک سرور مجازی با سیستم عامل ubuntu و دسترسی root
- نصب وب سرور ngnix
- MySQL را برای استفاده به عنوان پایگاه داده backend نصب کنید.
- یک رکورد دامنه A ایجاد کنید که به آدرس IP سرور نمونه اشاره میکند، مانند
app.example.com.
ایجاد پایگاه داده MySQL برای لاراول #
لاراول از یک پایگاه داده رابطهای برای ذخیره دادههای برنامه استفاده میکند. مراحل زیر را برای راهاندازی یک پایگاه داده MySQL جدید، اضافه کردن دادههای نمونه برنامه برای آزمایش و ایجاد یک کاربر پایگاه داده اختصاصی برای لاراول دنبال کنید.
- به عنوان کاربر پایگاه داده وارد کنسول MySQL شوید
root.کنسول$ sudo mysql- دستور زیر را برای بهروزرسانی فهرست بسته APT اجرا کنید، در صورت عدم نصب MySQL، آن را نصب کنید و وارد کنسول پایگاه داده شوید.کنسول
$ sudo apt update && sudo apt install mysql-server -y && sudo mysql
- دستور زیر را برای بهروزرسانی فهرست بسته APT اجرا کنید، در صورت عدم نصب MySQL، آن را نصب کنید و وارد کنسول پایگاه داده شوید.
- یک پایگاه داده جدید
negarnovin_demoبرای استفاده با لاراول ایجاد کنید.اس کیو الmysql> CREATE DATABASE negarnovin_demo;
negarnovin_userیک کاربر MySQL جدید با یک رمز عبور قوی ایجاد کنید .secure_passwordرمز عبور دلخواه خود را جایگزین کنید.اس کیو الmysql> CREATE USER 'negarnovin_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secure_password';
negarnovin_userبه کاربر دسترسی کامل به پایگاه داده را اعطا کنیدnegarnovin_demo.اس کیو الmysql> GRANT ALL ON negarnovin_demo.* TO 'negarnovin_user'@'localhost';
- برای اعمال تغییرات کاربر پایگاه داده، جدول امتیازات MySQL را پاک کنید.sql
mysql> FLUSH PRIVILEGES;
- از کنسول MySQL خارج شوید.اس کیو ال
mysql> EXIT;
- به عنوان کاربر MySQL وارد شوید
negarnovin_userو در صورت درخواست، رمز عبور کاربر را وارد کنید.کنسول$ mysql -u negarnovin_user -p - تمام پایگاههای داده را فهرست کنید و تأیید کنید که
negarnovin_demoپایگاه داده در دسترس است.اس کیو الmysql> SHOW DATABASES;
خروجی :
+--------------------+ | Database | +--------------------+ | information_schema | | performance_schema | | negarnovin_demo | +--------------------+ ۳ rows in set (0.00 sec) - از پایگاه داده استفاده کنید
negarnovin_demo.اس کیو الmysql> USE negarnovin_demo;
server_statsبرای ردیابی معیارهای سرور، یک ستون با ستونهای فعال ایجاد کنید .اس کیو الmysql> CREATE TABLE server_stats ( id INT AUTO_INCREMENT, server_name VARCHAR(۲۵۵), region VARCHAR(۲۵۵), cpu_usage DECIMAL(۵,۲), memory_usage DECIMAL(۵,۲), status ENUM('active', 'maintenance', 'offline'), last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id) );
- دادههای آزمایشی را در
server_statsجدول وارد کنید.اس کیو الmysql> INSERT INTO server_stats ( server_name, region, cpu_usage, memory_usage, status ) VALUES ('negarnovin-APP-01', 'New York', ۲۴.۵۰, ۴۵.۳۰, 'active'), ('negarnovin-DB-01', 'London', ۱۲.۷۵, ۷۸.۲۰, 'active'), ('negarnovin-WEB-01', 'Tokyo', ۶۵.۸۰, ۸۹.۵۰, 'active');
- از کنسول MySQL خارج شوید.اس کیو ال
mysql> EXIT;
نصب کامپوزر و افزونههای PHP #
لاراول برای اجرا روی سرور به Composer و افزونههای خاص PHP نیاز دارد. برای نصب PHP، Composer و تمام افزونههای PHP مورد نیاز برای لاراول، مراحل زیر را دنبال کنید.
- فهرست بسته APT را بهروزرسانی کنید.کنسول
$ sudo apt update - کامپوزر و افزونههای PHP مورد نیاز برای لاراول را نصب کنید.کنسول
$ sudo apt install composer php php-curl php-fpm php-bcmath php-json php-mysql php-mbstring php-xml php-tokenizer php-zip -yدستور بالا Composer، PHP و افزونههای لازم برای Laravel را نصب میکند. بستههای نصب شده عبارتند از:
composer: یک مدیر وابستگی برای PHP.php-fpm: مدیر فرآیند PHP FastCGI که PHP را قادر میسازد به عنوان یک سرویس اجرا شود و اتصالات را از سرورهای وب مانند Nginx بپذیرد.php-mysql: PHP را به پایگاه داده MySQL متصل میکند.php-mbstringپشتیبانی از رشتههای چندبایتی مورد نیاز لاراول را فعال میکند.php-curlPHP را قادر میسازد تا درخواستهای HTTP را به URL های خارجی ارسال کند.php-bcmathتوابع ریاضی با دقت دلخواه را در برنامههای PHP فعال میکند.php-json: دادههای JSON لازم برای APIها، جاوا اسکریپت و دادههای ساختاریافته را رمزگذاری و رمزگشایی میکند.php-xml: امکان ارسال و تولید اسناد XML را در برنامهها فراهم میکند.php-tokenizerشامل ابزارهایی برای توکنسازی کد PHP است.php-zipلاراول را قادر میسازد تا آرشیوهای فشرده را بخواند و بنویسد.zip.
- نسخه Composer نصب شده را تأیید کنید.کنسول
$ composer --versionخروجی:
Composer version 2.7.1 2024-02-09 15:26:28 ................. - نسخه PHP نصب شده را تأیید کنید.کنسول
$ php --versionخروجی :
PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS) Copyright (c) The PHP Group ... - بسته به نسخه نصب شده مانند PHP-FPM، آن را مجدداً راه اندازی کنید
php8.3-fpm.کنسول$ sudo systemctl restart php8.3-fpm
آموزش نصب لاراول Laravel در سی پنل cPanel #
ایجاد یک برنامه لاراول #
برای ایجاد یک برنامه Laravel و پیکربندی آن برای استفاده از پایگاه داده MySQL که قبلاً ایجاد کردهاید، مراحل زیر را دنبال کنید.
- به دایرکتوری خانگی کاربر خود بروید.کنسول
$ cd ~
- یک پروژه جدید لاراول مانند
negarnovin-demo. ایجاد کنید.کنسول$ composer create-project --prefer-dist laravel/laravel negarnovin-demoدستور بالا لاراول را به همراه تمام وابستگیهایش دانلود میکند و یک
negarnovin-demoدایرکتوری پروژه ایجاد میکند. - به
negarnovin-demoدایرکتوری پروژه بروید.کنسول$ cd negarnovin-demo
- یک کلید برنامه منحصر به فرد مورد نیاز برای رمزگذاری ایمن ایجاد کنید.کنسول
$ php artisan key:generateخروجی:
INFO Application key set successfully. .envفایل را با استفاده از یک ویرایشگر متن مانند ویرایشگری کهnanoاطلاعات اتصال پایگاه داده لاراول و درایور جلسه را تنظیم میکند، باز کنید .کنسول$ nano .env- بخش اول را بهروزرسانی کنید تا نام پروژه شما مانند [نام پروژه] را شامل شود
negarnovin-demo، محیط را از [نام پروژه] تغییر دهیدlocalوdevelopmentآدرس اینترنتی برنامه را ازhttp://localhost[نام دامنه] به آدرس اینترنتی دامنه خود تغییر دهید. آن را با دامنه واقعی خود جایگزین کنیدapp.example.com.iniAPP_NAME=negarnovin-demo APP_ENV=development APP_KEY=base64:APPLICATION_UNIQUE_KEY APP_DEBUG=true APP_URL=http://app.example.com
- بخش اتصال پایگاه داده را بهروزرسانی کنید تا اطلاعات پایگاه داده شما را شامل شود.
sqliteمقدار پیشفرض اتصال را به تغییر دهیدmysql، فیلدهای میزبان، پورت، پایگاه داده و کاربر را از حالت کامنت خارج کنید و اطلاعات پیشفرض را با جزئیات واقعی پایگاه داده MySQL خود که برای استفاده با لاراول استفاده میشود، جایگزین کنید.اینیDB_CONNECTION=mysql DB_HOST=۱۲۷.۰.۰.۱ DB_PORT=۳۳۰۶ DB_DATABASE=negarnovin_demo DB_USERNAME=negarnovin_user DB_PASSWORD=secure_password SESSION_DRIVER=file
فایل را ذخیره کنید و ببندید.
- بخش اول را بهروزرسانی کنید تا نام پروژه شما مانند [نام پروژه] را شامل شود
- دایرکتوری پروژه خود را
negarnovin-demoبه یک مسیر ریشه وب استاندارد مانند/var/www. (مانند .net) منتقل کنید.کنسول$ sudo mv ~/negarnovin-demo /var/www/negarnovin-demo www-dataامتیازات مالکیت کاربر و گروه Nginx را به/var/www/negarnovin-demoدایرکتوری پروژه Laravel اعطا کنید .کنسول$ sudo chown -R www-data:www-data /var/www/negarnovin-demo/var/www/negarnovin-demoحالت مجوزها را به تغییر دهید تا به کاربر امتیازات کامل برای دسترسی به دایرکتوری۷۵۵اعطا شود .www-dataکنسول$ sudo chmod -R ۷۵۵ /var/www/negarnovin-demo/storage
/var/www/negarnovin-demo/bootstrap/cacheحالت مجوزها را به تغییر دهید تا به کاربر امتیازات کامل برای ایجاد فایلهای کش۷۵۵اعطا شود .www-dataکنسول$ sudo chmod -R ۷۵۵ /var/www/negarnovin-demo/bootstrap/cache
- به
/var/www/negarnovin-demoدایرکتوری پروژه بروید.کنسول$ cd /var/www/negarnovin-demo
- برای آزمایش اتصال، دادههای لاراول را به پایگاه داده خود منتقل کنید.کنسول
$ php artisan migrateخروجی شما در صورت موفقیت باید مشابه تصویر زیر باشد.
................. INFO Running migrations. 0001_01_01_000000_create_users_table .......... 15ms DONE 0001_01_01_000001_create_cache_table ........... 5ms DONE .................
پیکربندی لاراول با Nginx #
Nginx از پیکربندیهای بلوک سرور برای ارائه فایلهای Laravel از دایرکتوری پروژه شما استفاده میکند. برای پیکربندی Laravel با Nginx با استفاده از پیکربندی میزبان مجازی جدید با بلوک سرور مورد نیاز و جزئیات اتصال PHP، مراحل زیر را دنبال کنید.
- وضعیت سرویس Nginx را مشاهده کنید و تأیید کنید که در حال اجرا است.کنسول
$ sudo systemctl status nginxخروجی:
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2025-04-21 13:08:27 UTC; 18s ago Docs: man:nginx(8) Process: 19294 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 19296 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) ...- دستور زیر را اجرا کنید تا Nginx نصب نشود، اگر فعال است آپاچی را متوقف کنید و سرویس Nginx را شروع کنید.کنسول
$ sudo apt install nginx -y && sudo systemctl stop apache2 && sudo systemctl start nginx
- دستور زیر را اجرا کنید تا Nginx نصب نشود، اگر فعال است آپاچی را متوقف کنید و سرویس Nginx را شروع کنید.
- یک فایل پیکربندی Nginx جدید
negarnovin-demo.confدر/etc/nginx/sites-availableدایرکتوری ایجاد کنید.کنسول$ sudo nano /etc/nginx/sites-available/negarnovin-demo.conf - پیکربندیهای زیر را به
negarnovin-demo.confفایل اضافه کنید.app.example.comدامنه واقعی خود را جایگزین کنید.اینیserver { listen 80; server_name app.example.com; root /var/www/negarnovin-demo/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
فایل را ذخیره کنید و ببندید.
پیکربندی فوق، Nginx را قادر میسازد تا فایلهای برنامه Laravel را با استفاده از دامنه
۸۰شما، روی پورت HTTP ارائه دهد. این بلوک، تمام درخواستهای PHP را به سوکت PHP-FPM ارسال میکند و Nginx را قادر میسازد تا به تمام فایلهای برنامه Laravel ارائه دهد.app.example.comlocation ~ \.php - برای فعال کردن پیکربندی،
negarnovin-demo.confفایل را به دایرکتوری پیوند دهید ./etc/nginx/sites-enabledکنسول$ sudo ln -s /etc/nginx/sites-available/negarnovin-demo.conf /etc/nginx/sites-enabled/ - پیکربندی Nginx را برای خطاها آزمایش کنید.کنسول
$ sudo nginx -tخروجی:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful - برای اعمال تغییرات پیکربندی، Nginx را مجدداً راهاندازی کنید.کنسول
$ sudo systemctl restart nginx - پورت HTTP را
۸۰از طریق فایروال مجاز کنید.کنسول$ sudo ufw allow ۸۰/tcp
- برای اعمال تغییرات فایروال، UFW را مجدداً بارگذاری کنید.کنسول
$ sudo ufw reload app.example.comبا استفاده از یک مرورگر وب مانند کروم به دامنه خود دسترسی پیدا کنید و نمایش پیشفرض صفحات لاراول را بررسی کنید.http://app.example.com
آموزش نصب لاراول
ایمنسازی لاراول با گواهیهای SSL رمزگذاریشدهی معتبر Let’s Encrypt #
Nginx تمام فایلهای برنامه Laravel را با استفاده از HTTP که به طور پیشفرض ناامن است، ارائه میدهد. تولید گواهینامههای SSL، اتصالات HTTPS را فعال کرده و اتصال به سرور وب شما را رمزگذاری میکند. مراحل زیر را برای تولید گواهینامههای SSL قابل اعتماد Let’s Encrypt و ایمنسازی Laravel دنبال کنید.
- کلاینت Certbot Let’s Encrypt و افزونه آن را برای Nginx نصب کنید.کنسول
$ sudo apt install certbot python3-certbot-nginx -y - با استفاده از افزونه Nginx و دامنه میزبان مجازی خود، یک گواهی SSL جدید ایجاد کنید.
app.example.comدامنه واقعی وadmin@app.example.comآدرس ایمیل فعال خود را جایگزین کنید.کنسول$ sudo certbot --nginx --redirect -d app.example.com -m admin@app.example.com --agree-tosوقتی درخواست گواهی SSL با موفقیت انجام شود، خروجی شما باید مشابه تصویر زیر باشد.
Requesting a certificate for app.example.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/app.example.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/app.example.com/privkey.pem This certificate expires on 2025-07-06. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for app.example.com to /etc/nginx/sites-enabled/negarnovin-demo.conf Congratulations! You have successfully enabled HTTPS on https://app.example.com ... - تأیید کنید که Certbot قبل از انقضا، گواهی SSL را بهطور خودکار تمدید میکند.کنسول
$ sudo certbot renew --dry-run - برای اعمال تغییرات پیکربندی SSL، Nginx را مجدداً راهاندازی کنید.کنسول
$ sudo systemctl restart nginx - پورت HTTPS را
۴۴۳از طریق فایروال مجاز کنید.کنسول$ sudo ufw allow ۴۴۳/tcp
- برای اعمال تغییرات فایروال، UFW را مجدداً بارگذاری کنید.کنسول
$ sudo ufw reload
ساخت یک اپلیکیشن آزمایشی لاراول #
لاراول شامل یک برنامه آزمایشی با Let's get startedصفحهای است که میتوانید آن را با کد سفارشی خود جایگزین کنید. مراحل زیر را برای جایگزینی فایلهای پیشفرض پروژه دنبال کنید و یک برنامه آزمایشی لاراول با یک داشبورد کاربردی برای نمایش معیارهای سرور از پایگاه داده MySQL خود بسازید.
- فایل مسیر لاراول را باز کرده و تغییر دهید.
- از فایل پیشفرض
web.phpدر دایرکتوری پروژه لاراول خود نسخه پشتیبان تهیه کنید.کنسول$ sudo mv /var/www/negarnovin-demo/routes/web.php /var/www/negarnovin-demo/routes/web.php.ORIG web.phpدوباره فایل را ایجاد کنید .کنسول$ sudo nano /var/www/negarnovin-demo/routes/web.php- پیکربندی مسیر پیشفرض زیر را به
web.phpفایل اضافه کنید تا دادههای معیارهای سرور را در پایگاه داده MySQL خود جستجو کنید.php<?php use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Route; Route::get('/', function () { $servers = DB::table('server_stats') ->orderBy('status') ->orderBy('cpu_usage', 'desc') ->get(); return view('dashboard', ['servers' => $servers]); });
فایل را ذخیره کنید و ببندید.
کد برنامه فوق از سازنده پرس و جو لاراول برای واکشی تمام رکوردها از
server_statsجدول موجود در پایگاه داده MySQL استفاده میکند. سپس، سرورها را بر اساس وضعیت و میزان استفاده از CPU مرتب میکند و نتایج را به یک نمای داشبورد ارسال میکند. - یک قالب Blade جدید
dashboard.blade.phpبرای استفاده با نمای داشبورد ایجاد کنید.کنسول$ sudo nano /var/www/negarnovin-demo/resources/views/dashboard.blade.php - کد برنامه HTML زیر را
dashboard.blade.phpبرای نمایش معیارهای سرور به فایل اضافه کنید.html<!DOCTYPE html> <html> <head> <title>Server Dashboard | negarnovin Demo</title> <style> body { font-family: 'Segoe UI', sans-serif; margin: ۲rem; } .server-card { padding: ۱rem; margin-bottom: ۱rem; border-radius: ۸px; box-shadow: ۰ ۲px ۴px rgba(۰,۰,۰,۰.۱); } .active { border-left: ۴px solid #10B981; background: #F0FDF4; } .maintenance { border-left: ۴px solid #F59E0B; background: #FFFBEB; } .offline { border-left: ۴px solid #EF4444; background: #FEF2F2; } .metric { font-weight: ۶۰۰; color: #1F2937; } </style> </head> <body> <h1>Server Status Dashboard</h1> <p>Real-time metrics from your infrastructure</p> @foreach($servers as $server) <div class="server-card {{ $server->status }}"> <h3>{{ $server->server_name }} <small>({{ $server->region }})</small></h3> <p class="metric">Status: {{ ucfirst($server->status) }}</p> @if($server->status != 'offline') <p class="metric">CPU: {{ $server->cpu_usage }}%</p> <p class="metric">Memory: {{ $server->memory_usage }}%</p> @endif <p>Last updated: {{ $server->last_updated }}</p> </div> @endforeach </body> </html>
فایل را ذخیره کنید و ببندید.
کد برنامه فوق، معیارهای سرور دریافت شده از
web.phpفایل را در یک صفحه وب واحد نمایش میدهد. - برای اعمال تغییرات، Nginx را مجدداً راهاندازی کنید.کنسول
$ sudo systemctl restart nginx - با استفاده از HTTPS در یک پنجره مرورگر وب جدید به دامنه خود دسترسی پیدا کنید و تأیید کنید که برنامه Laravel با دادههای پایگاه داده MySQL به درستی نمایش داده میشود.
https://app.example.com
نتیجه گیری #
شما لاراول را به همراه Nginx روی اوبونتو ۲۴.۰۴ مستقر کردهاید و یک برنامه نمونه ایجاد کردهاید که از پایگاه داده MySQL برای نمایش دادههای زنده پرسوجو میکند. میتوانید پروژه لاراول خود را با مدلها، نماها و کنترلکنندههای جدید تغییر دهید تا برنامههای خود را با Nginx ارائه دهید. برای اطلاعات بیشتر و گزینههای پیکربندی، به مستندات رسمی لاراول مراجعه کنید .

