Tôi đang sử dụng Homestead + Vagrant + Virtualbox trên máy Mac .
Vấn đề
Trong khi tôi tìm thấy rất nhiều chủ đề / câu trả lời làm thế nào để khắc phục thời gian phản hồi chậm (ví dụ TTFB) thì không có chủ đề nào hoạt động. Thời gian phản hồi của tôi thay đổi trong khoảng 25 - 32 giây, điều này rõ ràng là không thể chấp nhận được đối với sự phát triển địa phương.
Đề xuất các giải pháp
Tôi đã thử rất nhiều giải pháp được đề xuất từ đây: https://github.com/laravel/homestead/issues/901
Và cũng đã đọc và thử nhiều đề xuất từ các chủ đề này:
- Phản hồi rất chậm trên Homestead
- Vagead Homestead chậm
- tải trang chậm mơ hồ sau 60 giây từ yêu cầu cuối cùng
- Tăng tốc độ trễ đồng bộ hóa giữa máy chủ và khách trên Vagrant (thư mục đồng bộ hóa NFS)
Mặc dù đã có câu trả lời được chấp nhận, nhưng không ai trong số họ giúp tôi.
Vô hiệu hóa xdebug
Tôi có thể nói rằng Vô hiệu hóa xdebug như đã giải thích ở đây đã giúp tôi tiết kiệm 5 giây.
Thay đổi kích thước đĩa
Trong khi thay đổi kích thước đĩa của VM từ động sang cố định như được đề xuất ở đây và được giải thích ở đây không giúp ích gì cả (kết quả thậm chí còn tệ hơn).
Sử dụng NFS (thư mục đồng bộ hóa) theo đề xuất ở đây
Ngoài ra, việc đặt homestead / vagrant thành NFS cũng không giúp được gì.
Đã thử (tập tin mơ hồ):
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options:['nolock,vers=3,udp,noatime,actimeo=1']
end
Cũng đã thử (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 đã hoạt động trong cả hai trường hợp nhưng nó không thay đổi điều gì về TTFB khi tải trang.
Cài đặt natdnshostresolver: tắt
Tôi cũng đã cố gắng tắt natdnshostresolver như đề xuất ở đây Nó không thay đổi gì cả.
Điều chỉnh hình ảnh hộp ảo
Tất nhiên tôi cũng đã cố gắng tăng RAM, CPU, đồ họa, v.v. nhưng như bạn có thể thấy nó không giúp ích gì.
Bất cứ một đề nghị nào khác
Cho đến bây giờ tôi cũng sẵn sàng thử ví dụ như người phục vụ hoặc cho bất kỳ đề xuất / giải pháp nào khác mà bạn có thể đưa ra.
Cảm ơn rất nhiều trước!
Cập nhật 1
Việc thay đổi nginx.conf trên máy ảo của tôi (sau khi @emotality đề xuất một tinh chỉnh) đã giúp một chút. Để hoàn thiện và khả năng có thể được điều chỉnh thêm một chút nữa, đây là toàn bộ phần http của tệp 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/*;
}
Cập nhật 2
Nội dung của 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
Nội dung của 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
và giữ ánh xạ trong homestead.yaml
tệp không rõ ràng. Tôi cũng đề nghị phá hủy VM và bắt đầu mới.
==> 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
. Thật không may, nó đã không giải quyết được vấn đề.