پروژه 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 کنید.