Deploy Laravel روی Ubuntu — راهنمای گام‌به‌گام استقرار

آموزش کامل و قدم‌به‌قدم استقرار پروژه Laravel روی سرور Ubuntu 22.04. از اتصال SSH تا تنظیم Nginx، PHP-FPM، MySQL، Redis، Supervisor و SSL با Certbot.

نویسنده

تیم فنی زیر ساخت افرادین

دسته‌بندی

Laravel

زمان مطالعه

02 Mins read

تاریخ انتشار

28 Jul, 2026

Deploy Laravel روی Ubuntu — راهنمای گام‌به‌گام استقرار

پروژه Laravel شما روی لوکال کار می‌کند، تمام تست‌ها پاس می‌شوند، و حالا نوبت به هیجان‌انگیزترین بخش رسیده: Deploy روی سرور واقعی. اما اگر اولین بار است که یک پروژه Laravel را روی Ubuntu دیپلوی می‌کنید، ممکن است با انبوهی از تنظیمات—از Nginx و PHP-FPM گرفته تا Supervisor و SSL—روبه‌رو شوید.

در این راهنما، تمام مراحل را قدم‌به‌قدم و به زبان ساده توضیح می‌دهیم. فرض می‌کنیم شما یک VPS با Ubuntu 22.04 LTS دارید و دسترسی root یا کاربر sudo به آن دارید.

پیش‌نیازها

قبل از شروع، مطمئن شوید که موارد زیر را دارید:

  • یک VPS لینوکسی با Ubuntu 22.04 LTS (حداقل ۲ گیگ RAM، توصیه ۴ گیگ)
  • دسترسی SSH به سرور با کلید یا رمز عبور
  • دامنه متصل به سرور (A Record تنظیم شده باشد)
  • پروژه Laravel آماده روی GitHub / GitLab

گام اول — اتصال به سرور و بروزرسانی

اولین قدم، اتصال به VPS از طریق SSH است:

ssh root@your-server-ip

پس از ورود، همیشه اول سیستم را بروزرسانی کنید:

sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common curl wget unzip git

یک کاربر غیر-root برای امنیت بیشتر بسازید:

adduser deployer
usermod -aG sudo deployer

حالا با کاربر جدید ادامه می‌دهیم:

su - deployer

گام دوم — نصب PHP 8.3 و افزونه‌های لازم

Laravel 11 به PHP 8.2 یا بالاتر نیاز دارد. ما PHP 8.3 را از مخزن Ondřej Surý نصب می‌کنیم:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.3 php8.3-fpm php8.3-cli \
  php8.3-mbstring php8.3-xml php8.3-curl \
  php8.3-mysql php8.3-sqlite3 php8.3-redis \
  php8.3-gd php8.3-zip php8.3-bcmath php8.3-intl

نکته: افزونه php8.3-redis را فقط اگر از Redis استفاده می‌کنید نصب کنید. برای پروژه‌های ساده، php8.3-sqlite3 هم کافی است.

سرویس PHP-FPM را اجرا و فعال کنید:

sudo systemctl enable php8.3-fpm
sudo systemctl start php8.3-fpm

تأیید کنید که PHP-FPM در حال اجراست:

sudo systemctl status php8.3-fpm

گام سوم — نصب Composer

Composer مدیر بسته‌های PHP است و برای Laravel ضروری:

cd ~
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version

باید خروجی مشابه Composer version 2.7.x ببینید.

گام چهارم — نصب Nginx

Nginx به عنوان وب‌سرور اصلی و Reverse Proxy عمل می‌کند:

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

حالا باید در مرورگر IP سرور خود را ببینید—صفحه پیش‌فرض Nginx.

تنظیم فایل Nginx برای Laravel

یک فایل کانفیگ جدید بسازید:

sudo nano /etc/nginx/sites-available/your-domain.com

محتوای زیر را قرار دهید (دامنه و مسیر را جایگزین کنید):

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    root /var/www/your-project/public;

    add_header X-Frame-Options "SAMEORIGIN";
    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; }

    error_page 404 /index.php;

    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;
    }
}

فعال‌سازی کانفیگ:

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

گام پنجم — نصب MySQL (یا MariaDB)

sudo apt install -y mysql-server
sudo mysql_secure_installation

در mysql_secure_installation رمز root را تنظیم کنید و به تمام سوالات Yes بگویید.

ساخت دیتابیس و کاربر:

sudo mysql -u root -p
CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'strong-password-here';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

گام ششم — نصب Node.js (برای کامپایل Assets)

پروژه‌های Laravel معمولاً از Vite برای مدیریت assets استفاده می‌کنند:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node --version  # باید v20.x.x باشد
npm --version

گام هفتم — کلون و دیپلوی پروژه

cd /var/www
sudo git clone https://github.com/your-username/your-repo.git your-project
sudo chown -R deployer:www-data your-project
cd your-project

نصب dependencies:

composer install --no-dev --optimize-autoloader
npm install
npm run build

تنظیم فایل .env:

cp .env.example .env
nano .env

مقادیر زیر را متناسب با پروژه خود تنظیم کنید:

APP_NAME="پروژه شما"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=strong-password-here

تولید Application Key و اجرای migration:

php artisan key:generate
php artisan storage:link
php artisan migrate --force
php artisan optimize

گام هشتم — تنظیم Supervisor برای Queue Worker

اگر پروژه شما از Queue استفاده می‌کند، باید یک worker دائمی اجرا کنید:

sudo apt install -y supervisor

فایل کانفیگ Supervisor بسازید:

sudo nano /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/your-project/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=deployer
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/your-project/storage/logs/worker.log
stopwaitsecs=3600

فعال‌سازی worker:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

وضعیت worker را چک کنید:

sudo supervisorctl status

گام نهم — تنظیم SSL با Certbot

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

Certbot به صورت خودکار SSL را در Nginx تنظیم می‌کند و تمدید خودکار را فعال می‌کند.

تست تمدید خودکار:

sudo certbot renew --dry-run

گام دهم — تنظیم Cron برای Scheduler

Laravel Scheduler وظایف زمان‌بندی شده را مدیریت می‌کند:

crontab -e

این خط را اضافه کنید:

* * * * * php /var/www/your-project/artisan schedule:run >> /dev/null 2>&1

چک‌لیست نهایی

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

  • APP_DEBUG=false در فایل .env
  • SSL فعال و معتبر است
  • فایروال فقط پورت‌های 22، 80 و 443 را باز دارد: sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw enable
  • Supervisor worker فعال و running است
  • composer install با فلگ --no-dev اجرا شده
  • cron job برای Scheduler تنظیم شده
  • بک‌آپ خودکار دیتابیس تنظیم شده

تبریک! 🎉 پروژه Laravel شما روی Ubuntu 22.04 در حال اجراست. برای پروژه‌های بزرگ‌تر که نیاز به مقیاس‌پذیری دارند، می‌توانید از Docker + Docker Compose یا Kubernetes استفاده کنید که در مقاله بعدی به آن می‌پردازیم.


نکته تیم افرادین: اگر زمان کافی برای طی این مراحل را ندارید، سرورهای ابری افرادین با Laravel Stack از پیش نصب شده (PHP 8.3، MySQL، Redis، Nginx، Supervisor و Certbot) در کمتر از ۵ دقیقه آماده تحویل هستند. کافیست پروژه خود را push کنید.