Ich verwende Homestead + Vagrant + Virtualbox auf einem Mac .
Problem
Obwohl ich viele Threads / Antworten gefunden habe, wie langsame Antwortzeiten (z. B. TTFB) behoben werden können, hat keiner von ihnen funktioniert. Meine Antwortzeiten variieren zwischen 25 und 32 Sekunden, was für die lokale Entwicklung offensichtlich nicht akzeptabel ist.
Lösungsvorschläge
Ich habe viele Lösungsvorschläge von hier aus versucht: https://github.com/laravel/homestead/issues/901
Und habe auch viele Vorschläge aus diesen Threads gelesen und ausprobiert:
- Sehr langsame Reaktionen auf Homestead
- Vagrant Homestead langsam
- Vagrant langsames Laden der Seite nach 60 Sekunden nach der letzten Anforderung
- Beschleunigen Sie die Synchronisierungslatenz zwischen Host und Gast in Vagrant (NFS-Synchronisierungsordner).
Obwohl es akzeptierte Antworten gab, half mir keine.
Xdebug deaktivieren
Ich kann sagen, dass das Deaktivieren von xdebug wie hier erklärt mir geholfen hat, 5 Sekunden zu sparen.
Disc-Größe ändern
Das Ändern der Festplattengröße der VM von dynamisch auf fest, wie hier vorgeschlagen und hier erklärt, hat überhaupt nicht geholfen (das Ergebnis war sogar noch schlechter).
Verwenden von NFS (Synchronisierungsordner) wie hier vorgeschlagen
Auch das Setzen von Homestead / Vagrant auf NFS half nichts.
Versucht (Vagabunddatei):
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options:['nolock,vers=3,udp,noatime,actimeo=1']
end
Auch ausprobiert (homestead.yaml)
folders:
-
map: '/Users/myuser/PhpstormProjects/example.com'
to: /home/vagrant/code
type: "nfs"
options:
mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']
NFS funktionierte in beiden Fällen, änderte jedoch nichts an TTFB beim Laden der Seite.
Natdnshostresolver einstellen: aus
Ich habe auch versucht, natdnshostresolver auszuschalten, wie hier vorgeschlagen. Es hat nichts geändert.
Anpassen des Virtualbox-Images
Natürlich habe ich auch versucht, RAM, CPUs, Grafik usw. zu vergrößern, aber wie Sie sich vorstellen können, hat es nicht geholfen.
Irgendwelche anderen Vorschläge
Ab sofort bin ich auch offen für zB Valet oder andere Empfehlungen / Lösungen, die Sie geben könnten.
Vielen Dank im Voraus!
Update 1
Das Ändern der Datei nginx.conf auf meiner VM (nachdem @emotality eine Optimierung vorgeschlagen hatte) hat ein wenig geholfen. Der Vollständigkeit halber und der Möglichkeit, dass noch ein bisschen mehr optimiert werden könnte, hier der gesamte http-Teil der Datei nginx.conf.
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
keepalive_disable none;
keepalive_requests 200;
keepalive_timeout 300s;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Update 2
Inhalt von homestead.yaml:
ip: 192.168.10.14
memory: 4096
cpus: 2
provider: virtualbox
natdnshostresolver: off
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: '/Users/myUser/PhpstormProjects/exampleproject.com'
to: /home/vagrant/code
type: "nfs"
options:
mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']
sites:
-
map: exampleproject.local
to: /home/vagrant/code
databases:
- homestead
features:
-
mariadb: false
-
ohmyzsh: false
-
webdriver: false
name: exampleproject
hostname: exampleproject
Inhalt von Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION ||= "2"
confDir = $confDir ||= File.expand_path("vendor/laravel/homestead", File.dirname(__FILE__))
homesteadYamlPath = File.expand_path("Homestead.yaml", File.dirname(__FILE__))
homesteadJsonPath = File.expand_path("Homestead.json", File.dirname(__FILE__))
afterScriptPath = "after.sh"
customizationScriptPath = "user-customizations.sh"
aliasesPath = "aliases"
require File.expand_path(confDir + '/scripts/homestead.rb')
Vagrant.require_version '>= 2.2.4'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exist? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "/tmp/bash_aliases"
config.vm.provision "shell" do |s|
s.inline = "awk '{ sub(\"\r$\", \"\"); print }' /tmp/bash_aliases > /home/vagrant/.bash_aliases"
end
end
if File.exist? homesteadYamlPath then
settings = YAML::load(File.read(homesteadYamlPath))
elsif File.exist? homesteadJsonPath then
settings = JSON::parse(File.read(homesteadJsonPath))
else
abort "Homestead settings file not found in " + File.dirname(__FILE__)
end
Homestead.configure(config, settings)
if File.exist? afterScriptPath then
config.vm.provision "shell", path: afterScriptPath, privileged: false, keep_color: true
end
if File.exist? customizationScriptPath then
config.vm.provision "shell", path: customizationScriptPath, privileged: false, keep_color: true
end
if Vagrant.has_plugin?('vagrant-hostsupdater')
config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
elsif Vagrant.has_plugin?('vagrant-hostmanager')
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
config.hostmanager.aliases = settings['sites'].map { |site| site['map'] }
end
end
vagrant plugin install vagrant-bindfs
und die Zuordnung homestead.yaml
nicht in der Vagrant-Datei zu belassen . Ich schlage auch vor, die VM zu zerstören und neu zu starten.
==> myproject: Bindfs seems to not be installed on the virtual machine, installing now myproject: Bindfs 1.13.7 is installed ==> myproject: Machine is ready to use bindfs! ==> myproject: Creating bind mounts after synced_folders... myproject: /home/vagrant/code => /home/vagrant/code
. Leider hat es das Problem nicht gelöst.