www proyecto permisos duplicar carpetas laravel laravel-4 file-permissions vagrant puppet

proyecto - Laravel 4 Permisos en una caja Vagrant con Puppet



permisos carpetas laravel (3)

He estado utilizando http://www.puphpet.com con éxito para generar entornos vagabundos + marionetas para una serie de proyectos. Esta semana me encargaron escribir un prototipo para un proyecto con Laravel 4. Ya que no voy a ser el que trabaje en el proyecto a tiempo completo, pensé que sería mejor crear un entorno de VM para él que el siguiente la persona puede simplemente clonar para el repositorio. Como no tengo mucha experiencia con Laravel 4, tengo todo para ejecutar en el entorno de desarrollo. Luego traté de ejecutar la primera migración y aquí los problemas comienzan con los permisos de la app/storage archivo de app/storage .

1. la aplicación / almacenamiento debe ser escribible por el usuario de la web

Bien, eliminó la identificación: vagabundo del aprovisionamiento de carpetas sincronizadas y configuró el propietario y el grupo en www-data de la siguiente manera:

config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"

2. Artisan solo puede ejecutarse desde el interior del vagabundo para acceder al DB

Fine, vagrant ssh y corre artesano desde la carpeta www.

3. la aplicación / almacenamiento y la aplicación / base de datos tienen que ser escribibles por el usuario vagabundo para usar migraciones

Grrr, vale, agregó la siguiente horrible pieza de código al archivo vagabundo (nota, primero traté de hacer esto en Puppet y no fue así):

config.vm.provision :shell, :inline => "usermod -a -G www-data vagrant"

4. app / storage & app / database no son grabables por el grupo

Argh !!! Ok, probemos esta directiva de Marionetas:

file { "/var/www/app/storage": source => "/var/www/app/storage/", mode => 0775, ensure => ''directory'', owner => ''www-data'', group => ''www-data'', recurse => true }

No, no funciona. Intenté hacer lo mismo con la directiva Puppet exec {} sin ningún efecto. Parece que los permisos para la carpeta sincronizada vagabundo los establece el equipo host, no el invitado.

Finalmente terminó cambiando manualmente los permisos para la carpeta en la máquina host. ¿Hay alguna manera más simple de hacer esto? Realmente me gustaría poder darle al próximo desarrollador un entorno libre de preocupaciones que pueda clonar del repositorio, no tener que volver a configurar todo después de la clonación.

ACTUALIZAR

Hemos descubierto que si cambiamos el usuario de ejecución de Apache, vagabundo no lo anula al volver a cargar. Así que lo hemos hecho manualmente y funciona mejor que cambiar los permisos y el propietario de la carpeta sincronizada. Ahora solo estamos tratando de descubrir cómo hacer ese cambio manualmente en Puppet.


No estoy usando pupphet en mi configuración y se me ocurrió 2 soluciones:

(1) En mi archivo bootstrap.sh:

sudo sed -i ''s/APACHE_RUN_USER=.*/APACHE_RUN_USER=vagrant/g'' /etc/apache2/envvars sudo sed -i ''s/APACHE_RUN_GROUP=.*/APACHE_RUN_GROUP=www-data/g'' /etc/apache2/envvars

(2) Soy mi VagrantFile:

config.vm.synced_folder "./", "/vagrant", id: "vagrant-root" , :owner => "vagrant", :group => "www-data" config.vm.synced_folder "./app/storage", "/vagrant/app/storage", id: "vagrant-storage", :owner => "vagrant", :group => "www-data", :mount_options => ["dmode=775","fmode=664"] config.vm.synced_folder "./public", "/vagrant/public", id: "vagrant-public", :owner => "vagrant", :group => "www-data", :mount_options => ["dmode=775","fmode=664"]



Después de un debate en Twitter, descubrió lo siguiente:

Hay una restricción de VirtualBox en vagabundo que no le permite establecer permisos para la carpeta sincronizada desde el sistema operativo invitado. Vea este problema en github.

Puede utilizar el siguiente código para configurar los permisos de la carpeta sincronizada desde el archivo vagabundo:

config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"]

O puede cambiar el usuario de tiempo de ejecución de Apache a vagabundo desde el manifiesto de marionetas de la siguiente manera:

exec { "change_httpd_user": command => "sed -i ''s/www-data/vagrant/g'' /etc/apache2/envvars", onlyif => "/bin/grep -q ''www-data'' ''/etc/apache2/envvars''", notify => Service[''apache2''], require => Package[''apache2''], } file { "/var/lock/apache2": ensure => "directory", owner => "vagrant", group => "vagrant", require => Exec[''change_httpd_user''], }

O cualquier combinación de los anteriores