اجرای لاراول روی سرور Nginx میتونه برای اولین بار کمی آزاردهنده باشه. من با مشکلات زیادی در مورد فایلها و مجوزات لاراول مواجه شدم.
مثل این خطاها:laravel log could not be opened in append mode یا failed to open stream: Permission denied و سایر مشکلات مرتبط با مجوزات.
در این راهنما یاد میگیرید که چطور یکبار برای همیشه این مشکلات مربوط به مجوزات رو حل کنید.
اساسا دو روش برای تنظیم مالکیت و مجوزات فایلها و پوشهها روی سرور وجود داره:
- اینکه وبسرور شما صاحب فایلها باشه.
- اینکه خودتون صاحب فایلها باشید.
مالکیت با وب سرور
اگر وبسرور شما www-data هست، این دستور رو اجرا کنید:
sudo chown -R www-data:www-data /var/www/<پروژه شما>توجه داشته باشید که ممکنه وبسرور شما با www-data فرق داشته باشه. برای اینکه بفهمید کاربر و گروه وبسرور شما چیه، از این دستورات استفاده کنید:
- برای Nginx:
ps aux|grep nginx|grep -v grep- برای آپاچی:
ps aux | egrep '(apache|httpd)'
با این کار، وبسرور مالک تمام فایلهای پروژه شما و همچنین گروه میشه. این یعنی فقط وبسرور میتونه فایلهای پروژه رو تغییر بده و شما با مشکلات مجوزات مربوط به logs و bootstrap/cache روبرو نخواهید شد.
همچنین وقتی بخواهید فایلها رو آپلود کنید یا باهاشون کار کنید، مشکلاتی پیش میاد چون شما با حساب کاربری خودتون لاگین کردین، نه با وبسرور. با این حال، میتونید خودتون رو به گروه کاربری وبسرور اضافه کنید:
sudo usermod -a -G www-data ubuntuبعد از اون، تمام دایرکتوریها رو روی 755 و فایلها رو روی 644 تنظیم کنید:
sudo find /var/www/<پروژه شما> -type f -exec chmod 644 {} \;
sudo find /var/www/<پروژه شما> -type d -exec chmod 755 {} \; مالکیت با حساب کاربری شما
من شخصا مالکیت تمام دایرکتوریها و فایلهای پروژه رو به خودم میدم. این کار باعث میشه راحتتر بتونم باهاشون کار کنم.
sudo chown -R $USER:www-data /var/www/<پروژه شما>بعد از اون، تمام دایرکتوریها رو روی 755 و فایلها رو روی 644 تنظیم کنید:
sudo find /var/www/<پروژه شما> -type f -exec chmod 644 {} \;
sudo find /var/www/<پروژه شما> -type d -exec chmod 755 {} \; بعد از اون، به وبسرور مجوز خواندن و نوشتن به پوشههای storage و bootstrap/cache رو میدم که لاراول بهشون نیاز داره.
در root پروژه:
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cacheبا این کار، امنیت برقرار میشه و وبسایت شما بدون هیچ مشکلی در مورد مجوزات کار میکنه. همینطور کار کردن با فایلها هم هیچ مشکلی ایجاد نمیکنه.
توجه: میتونید /var/www/<پروژه شما> رو با . جایگزین کنید اگه دستورات رو از root پروژهتون اجرا میکنید. البته اجرای دستورات به همون صورتی که گفته شد هم نباید مشکلی ایجاد کنه.
