Estoy usando Homestead + Vagrant + Virtualbox en una Mac .
Problema
Si bien encontré muchos hilos / respuestas sobre cómo solucionar tiempos de respuesta lentos (por ejemplo, TTFB) ninguno funcionó. Mis tiempos de respuesta varían entre 25 y 32 segundos, lo que obviamente no es aceptable para el desarrollo local.
Las soluciones sugeridas
He intentado muchas soluciones sugeridas desde aquí: https://github.com/laravel/homestead/issues/901
Y también he leído y probado muchas sugerencias de estos hilos:
- Respuestas muy lentas en Homestead
- Homestead vagabundo lento
- carga lenta de página vagabunda después de 60 segundos desde la última solicitud
- Acelere la latencia de sincronización entre el host y el invitado en Vagrant (carpetas de sincronización NFS)
Aunque hubo respuestas aceptadas, ninguna de ellas me ayudó.
Deshabilitar xdebug
Puedo decir que deshabilitar xdebug como se explica aquí me ayudó a ahorrar 5 segundos.
Cambiar el tamaño del disco
Si bien cambiar el tamaño del disco de la VM de dinámico a fijo como se sugirió aquí y se explicó aquí no ayudó en absoluto (el resultado fue aún peor).
Usar NFS (carpetas de sincronización) como se sugiere aquí
También establecer homestead / vagrant a NFS no ayudó en nada.
Probado (archivo vagabundo):
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options:['nolock,vers=3,udp,noatime,actimeo=1']
end
También intentado (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 estaba funcionando en ambos casos, pero no cambió nada con respecto a TTFB en la carga de la página.
Configuración de natdnshostresolver: desactivado
También intenté apagar natdnshostresolver como se sugiere aquí. No cambió nada.
Ajuste de la imagen de Virtualbox
Por supuesto, también traté de aumentar la RAM, las CPU, las cosas gráficas, etc., pero como puedes imaginar, no ayudó.
Cualquier otra sugerencia
A partir de ahora también estoy abierto a probar, por ejemplo, valet o cualquier otra recomendación / solución que pueda dar.
¡Muchas gracias por adelantado!
Actualización 1
Alterar el nginx.conf en mi VM (después de que @emotality sugiriera un ajuste) ayudó un poco. En aras de la exhaustividad y la posibilidad de que pueda modificarse incluso un poco más, aquí está toda la parte http del archivo 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/*;
}
Actualización 2
Contenido de 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
Contenido de 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
y mantener la asignación homestead.yaml
no en el archivo vagabundo. También sugiero destruir la VM y comenzar de nuevo.
==> 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
. Lamentablemente no resolvió el problema.