2013-09-06 11 views
14

Ich habe http://www.puphpet.com erfolgreich verwendet, um vagrant + Marionettenumgebungen für eine Reihe von Projekten zu generieren. Dann wurde ich diese Woche beauftragt, einen Prototyp für ein Projekt mit Laravel 4 zu schreiben. Da ich nicht derjenige sein werde, der Vollzeit an dem Projekt arbeitet, dachte ich, dass es am besten wäre, eine VM-Umgebung dafür zu schaffen Person kann nur für den Repo klonen. Da ich nicht viel Erfahrung mit Laravel 4 habe, habe ich alles, was in der Entwicklungsumgebung läuft. Dann habe ich versucht, die erste Migration zu starten und hier beginnen die Probleme mit den Dateiberechtigungen app/storage.Laravel 4 Berechtigungen auf einer Vagrant Box mit Puppet

1. app/Lagerung durch den Web-Benutzer

Feine beschreibbar sein müssen, nahm ID: Vagabund aus dem Ordner Provisioning synchronisiert und stellen Sie den Eigentümer & Gruppe www-data in etwa so:

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

2. Artisan kann nur aus dem Inneren des vagabundierenden Box ausgeführt werden Zugriff auf die

Fein, DB haben vagrant ssh und führen Sie Handwerker aus dem www-Ordner.

3. app/Speicher & app/Datenbank durch den vagabundierenden Benutzer um beschreibbar sein zu verwenden Migrationen

Grrr, ok, addierte das folgende schreckliche Stück Code an die vagabundierenden Datei (beachten Sie, dies in Puppet versuchte zunächst zu tun, und es dauerte nicht):

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

4. app/Speicher & app/Datenbank, die von der Gruppe nicht beschreibbar ist

Argh !!! Ok, lasst uns diese Puppet-Direktive ausprobieren:

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

Nein, funktioniert nicht. Versucht, das gleiche mit der Puppet exec {} Direktive ohne Wirkung zu tun. Es scheint, dass die Berechtigungen für den synchronisierten Ordner vagrant vom Hostcomputer und nicht vom Gast festgelegt werden.

Schließlich endete die manuelle Änderung der Berechtigungen für den Ordner auf dem Host-Rechner. Gibt es einen einfacheren Weg dies zu tun? Ich möchte wirklich nur dem nächsten Entwickler eine sorgenfreie Umgebung geben können, die er aus dem Repo klonen kann, und nicht alles nach dem Klonen neu einrichten.

UPDATE

Wir haben herausgefunden, dass, wenn wir den Apache laufen Benutzer zu ändern, es vagrant außer Kraft setzen nicht auf reload. Wir haben das manuell erledigt und es funktioniert besser als die Berechtigungen des synchronisierten Ordners zu ändern. & Besitzer. Jetzt versuchen wir nur herauszufinden, wie wir diese Änderung in Puppet manuell vornehmen können.

+1

I‘ m im selben Boot wie du und RE: # 2. Konnten Sie Ihre Umgebung nicht mit einer xip.io-Adresse einrichten (also testing.10.10.10.10.xip.io) und dann Root (oder dem Benutzer, mit dem Ihre Laravel-Installation verbunden ist) Remote-Privilegien gewähren? Wenn Sie dann artisan db-Befehle auf dem Host ausführen, sollte es in der Lage sein, die mysql-Box zu finden und sich einzuloggen. HINWEIS: Ich hatte auch mysql entbinden: sudo nano /etc/mysql/my.cnf ; skip-external-locking ; bind-Adresse speichern und neu laden. hoffe das hilft! – dpluscc

+0

Yup, wir werden das ausprobieren und sehen, wie es geht. Danke für den Tipp. – Adrian

+0

Letztendlich ging es darum, Berechtigungen zu ändern. Ich kann jedoch immer noch Ihren Vorschlag verwenden, um einen Fernzugriff auf die Datenbank zu erhalten. – Adrian

Antwort

19

Nach einiger Diskussion auf Twitter, heraus folgendes:

Es gibt eine Einschränkung von VirtualBox auf vagabundierende, die Ihnen nicht erlauben, von innerhalb des Gast-OS-Berechtigungen für den synchronisierten Ordner einzustellen.See this issue on github.

Sie können den folgenden Code set the synced folder permissions aus der Vagabund Datei:

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

Oder Sie können change the Apache runtime user von der Puppe offenbar Vagrant etwa so:

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'], 
} 

oder eine beliebige Kombination der über

+0

hier hofft das funktioniert. –

+0

Hey @MattSetter, lass mich wissen, wie es geht. Ich hatte nicht viel Zeit, um dies zu benutzen und weiß nicht, ob Vagrant oder Marionette Dinge verändert haben. – Adrian

+1

Ich konnte es nicht verwenden. Nicht sicher, ob es an mangelnder Erfahrung oder an Zeit mangelte. Aber ich ging mit dem Setzen von Berechtigungen und Besitz in Marionetten Config.Yaml und Vagrantfile. Danke für die Info und für die Nachfrage. –

9

Ich benutze nicht pupphet in meinem Setup und ich kam mit 2 Lösungen:

(1) In meiner bootstrap.sh Datei:

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) Im mein 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"] 
+0

Vielen Dank für das Teilen, es ist gut zu sehen, wie es ohne Marionette gemacht werden kann. Sowie, wie man den Besitzer/die Gruppe des Ordners ändert. – Adrian

+0

Ich wünschte, ich wäre vor 3 Stunden darüber gestolpert. Vielen Dank!!!! – applecrusher