مقاله

استقرار گام‌به‌گام: clone، migrate، optimize، queue worker و cron — سرور VPS واقعی.

Deploy Laravel روی Ubuntu — Nginx، Supervisor و checklist production

Deploy Laravel روی Ubuntu — Nginx، Supervisor و checklist production

Deploy یعنی کد Laravel روی سرور Linux در دسترس کاربر واقعی — نه فقط artisan serve. این راهنما مسیر رایج Ubuntu + Nginx + php-fpm + MySQL را قدم‌به‌قدم می‌رود. Docker مسیر جایگزین — Docker.

پیش‌نیاز سرور

sudo apt update
sudo apt install nginx mysql-server php8.3-fpm php8.3-mysql \
  php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd \
  git unzip supervisor

کاربر deploy

sudo adduser deploy
sudo usermod -aG www-data deploy
sudo mkdir -p /var/www/portfolio
sudo chown deploy:www-data /var/www/portfolio

clone و composer

cd /var/www/portfolio
git clone https://github.com/you/repo.git .
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate

.env production — APP_ENV=production، APP_DEBUG=false، DB واقعی.

دسترسی storage

php artisan storage:link
chmod -R ug+rwx storage bootstrap/cache

migrate و optimize

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

بعد از هر deploy — Artisan.

Nginx

سایت در /etc/nginx/sites-available/portfolio — جزئیات پیکربندی Nginx.

sudo ln -s /etc/nginx/sites-available/portfolio /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

SSL

sudo certbot --nginx -d yourdomain.com

Let us Encrypt.

Supervisor — Queue

[program:portfolio-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/portfolio/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=deploy
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/portfolio/storage/logs/worker.log
sudo supervisorctl reread && sudo supervisorctl update

Redis Queue — Horizon جایگزین.

Cron — Scheduler

* * * * * deploy cd /var/www/portfolio && php artisan schedule:run >> /dev/null 2>&1

Scheduled tasks.

Deploy بعدی (git pull)

git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize
sudo supervisorctl restart portfolio-worker:*

برای zero downtime — Deployer یا Envoy — مقاله بعدی CI.

checklist قبل از live

اشتباهات

  • permission 777 روی storage
  • فراموش config:cache بعد از تغییر .env
  • queue بدون supervisor

جمع‌بندی

این مسیر backbone استقرار Laravel در ایران. CI بعدی: GitHub Actions deploy. Cache: بهینه‌سازی.

Deploy پروژه روی سرور