Pregunta PHP-FPM + Laravel + Nginx + permiso de Ubuntu


Traté de buscar sobre esta pregunta antes, pero parece que no hay ningún lugar donde se explique a fondo, la mayoría de las veces son solo problemas, como app/storage no se ha establecido el permiso para que el servidor web pueda escribir el archivo, pero mi problema parece más grande y más fundamental, espero que alguien pueda explicar detalladamente cómo se debe configurar, preferiblemente sin tener que configurar el permiso para 777.

Entonces mi pila es Ubuntu 14.04, PHP 5.6 con PHP-FPM porque yo uso nginx 1.4.6 y yo uso Laravel 4.2 como framework, ow y uno más que uso Git como mi herramienta de control de versiones. Entonces, ¿cuál es el paso a paso necesario para permitir lo siguiente?

  1. Configurando el proyecto inicial, Git y Nginx:

    Por lo que sé, Nginx está configurado para usar un nombre de usuario www-data como predeterminado ¿no? ¿Significa que tengo que asignar mi usuario, p. kevin al grupo www-data? Cuando estoy inicializando git, creo el proyecto usando el compositor, configuro la clave pública / privada SSH, ¿tengo que pertenecer al grupo? www-data o tengo que ser sudo ¿o que? En mi servidor de producción, intenté usar sudo para configurar todo de alguna manera hace que sea más fácil hacer todo lo anterior, pero ¿es la mejor práctica?

  2. Fabricación app/storage escribible para el servidor web:

    Creo que este es el segundo y más vital para Laravel, porque a menos que esto funcione, Laravel no se ejecutará, mi conocimiento es que esta carpeta debe ser editable por el servidor web (nginx), así que tengo que configurar esto para sudo chown -R www-data:www-data app/storage y sudo chmod -R 664 app/storage ¿derecho? Pero de alguna manera esto no parece funcionar todo el tiempo porque durante mi desarrollo a veces dirá que no se puede escribir un caché de una vista en el app/storage carpeta, así que al final tengo que configurarlo para 777 o 775 si tengo suerte.

  3. Carpeta pública o lugar de mis activos

    Aquí también tengo alguna incoherencia, la configuré al final para 777 para asegurar que todos mis archivos puedan ser accedidos por nginx. A veces nginx me dirá que alguna imagen en mi carpeta de activos parece estar prohibida y solo devolverá HTTP 200 si configuro 777 o cambia el grupo a www-data:www-data, ¿tengo que cambiar el permiso o el grupo para cada imagen que creé de Gimp, Photoshop o cuando descargué de Dropbox o de mi correo electrónico cuando mi diseñador gráfico diseñó nuevos íconos?

  4. Subir archivo

    Por lo tanto, en algún momento, la gente podrá cargar, por ejemplo, su foto de perfil, o cuando publique un blog, puedo cargar una imagen, esto significa que en algún momento el archivo de carga moverá el archivo desde el /tmp carpeta a mi public carpeta, puede necesitar escribir solo en un subdirectorio en public o tal vez a veces necesita crear una carpeta basada en un cierto id y muevo el archivo al directorio, la mayoría de las veces obtendré un error de que el directorio parece no ser de escritura o algún error de permiso como tal durante la ejecución del script. ¿Esto significa que el Proceso PHP tiene que ser ejecutado con cierto permiso también? ¿O significa que el directorio debe tener un cierto permiso? ¿Este problema se relaciona con el Servicio Nginx o se relaciona con el Proceso PHP?

    Tengo la experiencia para usar paquetes como roumen/sitemap o jlapp/swaggervel, parece que usan la misma fachada File, pero de alguna manera no tienen ningún problema con el permiso, trato de replicar el comportamiento del código, pero llegué al problema anterior.

  5. Queue, Artisan, otro script ejecutado basado en la línea de comandos

    Por último, ¿el script ejecutado basado en la línea de comandos se comporta de la misma manera que el script que se ejecutó desde la interacción con el servidor web, como la carga del archivo anterior, o necesito prepararme para otras inconsistencias?

Gracias, si alguien me puede explicar esto. Creo que si lo resuelvo, crearé una publicación en el blog o algo así, ¡lo aprecian chicos! :RE


5
2018-02-08 08:32


origen


Respuestas:


  1. Lo que normalmente hago es cambiar todos los archivos / carpetas del grupo a www-data con sudo chgrp -R www-data laravel-folder. De esta manera sigo siendo propietario y el servidor web tiene permisos de grupo.

  2. Cuando www-data tiene propiedad del grupo, sudo chmod -R g+w app/storage permite al servidor web escribir en una subcarpeta de almacenamiento. O alternativamente puedes hacer sudo chmod -R 775 app/storage. No use 777, no es necesario permitir que todos escriban en sus carpetas.

  3. Para todos los activos nuevos siempre cambio colectivamente la propiedad del grupo. O, si hay nuevos archivos en muchos lugares, simplemente hazlo sudo chgrp -R www-data laravel-folder. Un comando y todo tiene propiedad propia del grupo. No hay necesidad de cambiar los permisos predeterminados de public carpeta (755). Nginx no guardará archivos allí.

  4. Todos los archivos enviados por los usuarios deben ubicarse en storage. Puede hacer una subcarpeta para avatares, otra para otros archivos de usuario. Esta es la razón por la cual se llama esta carpeta storage (Autoexplicativo). Es escribible por el servidor web para que nginx pueda crear archivos / carpetas allí.

  5. Cuando ajusta permisos / propiedad de grupo como describí anteriormente, no debería haber ningún problema con los comandos artesanales o CLI.

Te sugiero que leas esto Cómo instalar Laravel con un servidor web Nginx en Ubuntu 14.04 artículo.


9
2018-02-09 17:50