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
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
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
- APP_DEBUG=false
- backup DB
- امنیت و performance
- تست در CI سبز
اشتباهات
- permission 777 روی storage
- فراموش config:cache بعد از تغییر .env
- queue بدون supervisor
جمعبندی
این مسیر backbone استقرار Laravel در ایران. CI بعدی: GitHub Actions deploy. Cache: بهینهسازی.