دواپس و لینوکس

استقرار لاراول و Vue روی اوبونتو

نویسنده: Hadi ZareZadeh۲۷ اردیبهشت ۱۴۰۵۵۸۹۲ بازدید
استقرار لاراول و Vue روی اوبونتو

اولین باری که یک اپ لاراول و Vue (با Inertia) را روی یک VPS لخت اوبونتو مستقر کردم، سه آموزش مختلف را دنبال کردم و باز هم به یک صفحه سفید، خطاهای 502 و یک worker صف رسیدم که بی‌صدا مرده بود. یک آخر هفته طول کشید تا درست شود. این همان راهنمایی است که آرزو می‌کردم داشتم — کامل، مرتب و صادق درباره بخش‌هایی که آدم‌ها را زمین می‌زنند.

چه چیزی را مستقر می‌کنیم

پشته:

  • Ubuntu 22.04 LTS روی یک VPS (هتزنر، دیجیتال‌اوشن، هر چه)
  • Nginx به‌عنوان reverse proxy و سرور فایل ایستا
  • PHP 8.3 + PHP-FPM برای لاراول
  • Node.js برای ساخت دارایی‌های فرانت‌اند (Vite)
  • PostgreSQL (یا MySQL) برای پایگاه داده
  • Redis برای کش و صف‌ها
  • Supervisor برای workerهای صف و زمان‌بند
استقرار یک قدم نیست — یک توالی است. از یک قدم بپرید و نیمه‌شب دیباگش می‌کنید.

قدم ۱: خط پایه سرور

قبل از هر چیز، سرور را سخت‌سازی کنید. یک کاربر غیر-root بسازید، ورود SSH با رمز را غیرفعال کنید، UFW را فعال کنید:

adduser deploy
usermod -aG sudo deploy
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable

ضروریات را نصب کنید: git curl unzip. منطقه زمانی را تنظیم کنید. به‌روزرسانی‌های امنیتی خودکار را فعال کنید. این را در پست راه‌اندازی اوبونتو با جزئیات بیشتر پوشش دادم، اما از آن نپرید — یک پورت باز یک دعوت‌نامه است.

قدم ۲: نصب پشته رانتایم

# PHP 8.3 و افزونه‌ها
sudo apt install php8.3-fpm php8.3-cli php8.3-pgsql php8.3-redis \
  php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd

# Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install nodejs

# PostgreSQL و Redis
sudo apt install postgresql redis-server

قدم ۳: کلون و پیکربندی اپ

cd /var/www
sudo git clone git@github.com:you/your-app.git
sudo chown -R deploy:www-data your-app
cd your-app

cp .env.example .env
php artisan key:generate

.env را برای تولید ویرایش کنید: APP_ENV=production، APP_DEBUG=false، اعتبارنامه‌های پایگاه داده، Redis، ایمیل و APP_URL واقعی‌تان را تنظیم کنید.

قدم ۴: ساخت و بهینه‌سازی

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

php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

قدم npm run build دارایی‌های Vue/Inertia شما را از طریق Vite به public/build/ کامپایل می‌کند. اگر از این بپرید، اپ شما بدون CSS و بدون جاوااسکریپت بارگذاری می‌شود — همان صفحه سفید کلاسیک.

قدم ۵: پیکربندی Nginx

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/your-app/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    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 ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
        expires 30d;
        access_log off;
    }
}

سایت را فعال کنید، کانفیگ را تست و Nginx را ری‌لود کنید. مجوزهای درست را روی storage/ و bootstrap/cache/ بگذارید — لاراول باید آنجا بنویسد.

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

قدم ۶: SSL با Let's Encrypt

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

Certbot کانفیگ Nginx شما را تغییر می‌دهد و تمدید خودکار را راه‌اندازی می‌کند. با sudo certbot renew --dry-run تأیید کنید.

قدم ۷: workerهای صف با Supervisor

صف‌های لاراول خودشان اجرا نمی‌شوند. Supervisor workerها را زنده نگه می‌دارد:

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

قدم ۸: زمان‌بند

یک ورودی cron برای زمان‌بند لاراول اضافه کنید:

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

اسکریپت استقرار برای به‌روزرسانی‌ها

استقرارهای تکراری را اتومات کنید:

#!/bin/bash
set -e
cd /var/www/your-app
git pull origin main
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo supervisorctl restart laravel-worker:*
php artisan queue:restart

اشتباهات رایج

  • فراموش کردن npm run build. علت شماره یک صفحات خالی در تولید.
  • APP_DEBUG=true در تولید. ردپای خطا را به دنیا نشان می‌دهد. هرگز.
  • مجوزهای فایل اشتباه. خطای 500 روی هر عملیات نوشتن اگر storage قابل‌نوشتن نباشد.
  • نبود worker صف. jobها بی‌صدا تلنبار می‌شوند؛ ایمیل‌ها هرگز فرستاده نمی‌شوند.
  • کش نکردن کانفیگ/مسیرها. هر درخواست فایل‌های کانفیگ را بی‌جهت از دیسک تجزیه می‌کند.

بهترین شیوه‌ها

  • از یک اسکریپت استقرار یا خط لوله CI استفاده کنید — استقرارهای دستی قدم‌ها را فراموش می‌کنند.
  • .env را بیرون از گیت نگه دارید؛ رازها را روی سرور یا از طریق یک vault مدیریت کنید.
  • فضای دیسک را مانیتور کنید — لاگ‌ها و jobهای شکست‌خورده بی‌صدا دیسک را پر می‌کنند.
  • اسکریپت استقرار را قبل از اجرا در تولید، روی staging تست کنید.

جمع‌بندی

استقرار لاراول و Vue روی اوبونتو وقتی توالی را بدانید سرراست است: سرور را سخت‌سازی کنید، پشته را نصب، اپ را پیکربندی، دارایی‌ها را بسازید، Nginx را تنظیم، SSL اضافه و workerها را با Supervisor زنده نگه دارید. هر قدمی را از قلم بیندازید و زیر فشار دیباگش می‌کنید. این راهنما را نشانه بگذارید، به‌ترتیب دنبال کنید و استقرار بعدی‌تان کسل‌کننده می‌شود — که دقیقاً همان چیزی است که می‌خواهید.