Configura los permisos de tu proyecto Laravel para en Nginx y Apache
Ejecutar tu proyecto Laravel en un servidor de producción Nginx o Apache puede ser frustrante las primeras veces. He enfrentado muchos problemas relacionados con archivos y permisos en Laravel. Errores como “Laravel log could not be opened in append mode”, failed to open stream: Permission denied y cualquier otro problema relacionado con permisos. Aquí te muestro cómo resolver estos problemas de permisos de una vez por todas.
Es importante saber que básicamente hay dos formas de configurar la propiedad y los permisos de archivos y carpetas en tu servidor:
- Hacer que tu servidor web sea el propietario de los archivos.
- Hacerte a ti mismo el propietario de los archivos.
Hacer que tu servidor web sea el propietario de los archivos
Si tu servidor web eswww-data
, ejecuta este comando:
sudo chown -R www-data:www-data /var/www/<tu-proyecto>
Nota: Tu servidor web podría usar otro usuario diferente a
www-data
. Para identificar el usuario y grupo de tu servidor, usa:
# Para nginx
ps aux | grep nginx | grep -v grep
# Para apache
ps aux | egrep '(apache|httpd)'
Con esto, el servidor web será dueño de todos los archivos y también del grupo.
Solo el servidor podrá modificar los archivos en tu proyecto, evitando problemas de permisos
en logs
y bootstrap/cache
.
Pero tendrás dificultades para subir o editar archivos, ya que estás logueado como tu usuario
y no como el servidor web.
Puedes solucionarlo agregándote al grupo del servidor:
sudo usermod -a -G www-data ubuntu
Luego establece todos tus directorios a 755 y tus archivos a 644:
sudo find /var/www/<tu-proyecto> -type f -exec chmod 644 {} \;
sudo find /var/www/<tu-proyecto> -type d -exec chmod 755 {} \;
Tu cuenta de usuario como propietario
Personalmente, me asigno la propiedad de todos los directorios y archivos de mi proyecto. Así me resulta más fácil trabajar.sudo chown -R $USER:www-data /var/www/<tu-proyecto>
Luego vuelvo a establecer directorios en 755 y archivos en 644:
sudo find /var/www/<tu-proyecto> -type f -exec chmod 644 {} \;
sudo find /var/www/<tu-proyecto> -type d -exec chmod 755 {} \;
Luego doy permisos de lectura/escritura al servidor web en storage
y bootstrap/cache
:
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
Con esto tu sitio funcionará sin problemas de permisos y podrás trabajar con archivos sin inconvenientes.
Nota: Puedes reemplazar
/var/www/<tu-proyecto>
por
.
si ejecutas los comandos desde la raíz del proyecto.¡No dudes en mostrar tu apoyo aplaudiendo y siguiéndome en redes! ❤️