Ich benutze Trellis für meine WordPress-Entwicklung. Es funktioniert hervorragend, außer dass es mir schwer fällt, die Datei- (oder Verzeichnis-) Berechtigung im synchronisierten Ordner zu ändern.
Im Allgemeinen bin ich mit dem Standard-Berechtigungs-Setup einverstanden. Manchmal muss ich jedoch einigen Unterverzeichnissen des synchronisierten Hauptverzeichnisses (NFS) Schreibberechtigung erteilen.
Dies ist die Vagrant-Datei , die Ansible Playbook für die Hauptkonfiguration der VM verwendet (ich verwende VirtualBox). Ich bin weder ein Ruby-Programmierer noch habe ich mit Ansible gearbeitet. Wie es aussieht, ist der folgende Teil der Bereiche, in Vagrantfile
denen Dateiberechtigungen festgelegt werden:
if Vagrant::Util::Platform.windows? and !Vagrant.has_plugin? 'vagrant-winnfsd'
wordpress_sites.each_pair do |name, site|
config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: ['dmode=776', 'fmode=775']
end
config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: ['dmode=755', 'fmode=644']
config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: ['dmode=755', 'fmode=755']
else
if !Vagrant.has_plugin? 'vagrant-bindfs'
fail_with_message "vagrant-bindfs missing, please install the plugin with this command:\nvagrant plugin install vagrant-bindfs"
else
wordpress_sites.each_pair do |name, site|
config.vm.synced_folder local_site_path(site), nfs_path(name), type: 'nfs'
config.bindfs.bind_folder nfs_path(name), remote_site_path(name, site), u: 'vagrant', g: 'www-data', o: 'nonempty'
end
config.vm.synced_folder ANSIBLE_PATH, '/ansible-nfs', type: 'nfs'
config.bindfs.bind_folder '/ansible-nfs', ANSIBLE_PATH_ON_VM, o: 'nonempty', p: '0644,a+D'
config.bindfs.bind_folder bin_path, bin_path, perms: '0755'
end
end
Wie kann ich Änderungen an dieser Datei vornehmen, damit ich die Berechtigung für bestimmte Dateien und Ordner bei Bedarf steuern kann? Da sich das Ändern der Berechtigung im vagrant-synchronisierten Ordner auf dem Host-Computer nicht auf die virtuelle Maschine auswirkt, muss ich dies zumindest durch Ändern der Vagrant-Datei und anschließende erneute Bereitstellung tun können.
Wie kann ich dies leicht erreichen, das bei einer zukünftigen erneuten Bereitstellung bestehen bleibt?
Antworten:
Es gibt zwei Teile dieser Vagrant-Datei: Der eine übernimmt das Mounten für Windows-Hosts (die erste Hälfte), der andere für UNIX-Hosts (die zweite Hälfte), aber im Wesentlichen das Gleiche - nur mit verschiedenen Plugins.
Sie können den Befehlen
config.vm.synced_folder
undconfig.bindfs.bind_folder
entnehmen, wo sie die entsprechenden Verzeichnisse mit den entsprechenden Berechtigungen einrichten.Um ein neues Verzeichnis mit unterschiedlichen Berechtigungen hinzuzufügen, fügen Sie diese einfach der Liste hinzu. Beachten Sie, dass
File.join('a','b')
der Pfad einfach in konvertiert wirda/b
, dies jedoch eine bessere Möglichkeit ist, da er plattformunabhängig ist (unter Windows können auch Stilpfade verarbeitet\
werden).Wenn Sie dem
/tmp/needswrite
Ordner beispielsweise mehr Berechtigungen erteilen möchten, können Sie einfach die folgenden zwei Zeilen an den entsprechenden Stellen hinzufügen:Windows-Konfiguration:
Unix-Konfiguration:
Dadurch wird beispielsweise die Berechtigung
777
anstelle der Standardeinstellung festgelegt755
Beachten Sie, dass Sie in der Windows-Konfiguration von
ANSIBLE_PATH
bisANSIBLE_PATH_ON_VM
zuordnen müssen, während in der Unix-Konfiguration bindfs eine erneute Bereitstellung durchführt, sodass Sie sie mit demselben Verzeichnisnamen abgleichen müssen.Sie können auch mit Benutzern und Gruppen spielen:
Windows-Konfiguration:
Unix-Konfiguration:
Hier setzen wir sie auf Benutzer
new-owner
und Gruppenew-group
quelle