主题
Laravel Homestead
简介
WARNING
Laravel Homestead 是一个遗留包,已不再积极维护。Laravel Sail 可以作为更现代的替代方案。
Laravel 致力于让整个 PHP 开发体验都足够愉悦,这也包括你的本地开发环境。Laravel Homestead 是一个官方预打包的 Vagrant box,它可以为你提供出色的开发环境,而无需你在本地机器上安装 PHP、Web 服务器或任何其他服务器软件。
Vagrant 提供了一种简单优雅的方式来管理和配置虚拟机。Vagrant box 是完全可丢弃的。如果出了问题,你可以在几分钟内销毁并重新创建这个 box。
Homestead 可运行在任何 Windows、macOS 或 Linux 系统上,并内置 Nginx、PHP、MySQL、PostgreSQL、Redis、Memcached、Node 以及开发优秀 Laravel 应用所需的其他全部软件。
WARNING
如果你使用的是 Windows,可能需要启用硬件虚拟化(VT-x)。通常可以在 BIOS 中启用它。如果你在 UEFI 系统上使用 Hyper-V,可能还需要额外禁用 Hyper-V 才能访问 VT-x。
内置软件
- Ubuntu 22.04
- Git
- PHP 8.3
- PHP 8.2
- PHP 8.1
- PHP 8.0
- PHP 7.4
- PHP 7.3
- PHP 7.2
- PHP 7.1
- PHP 7.0
- PHP 5.6
- Nginx
- MySQL 8.0
- lmm
- Sqlite3
- PostgreSQL 15
- Composer
- Docker
- Node(包含 Yarn、Bower、Grunt 和 Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailpit
- avahi
- ngrok
- Xdebug
- XHProf / Tideways / XHGui
- wp-cli
可选软件
- Apache
- Blackfire
- Cassandra
- Chronograf
- CouchDB
- Crystal & Lucky Framework
- Elasticsearch
- EventStoreDB
- Flyway
- Gearman
- Go
- Grafana
- InfluxDB
- Logstash
- MariaDB
- Meilisearch
- MinIO
- MongoDB
- Neo4j
- Oh My Zsh
- Open Resty
- PM2
- Python
- R
- RabbitMQ
- Rust
- RVM (Ruby Version Manager)
- Solr
- TimescaleDB
- Trader (PHP extension)
- Webdriver & Laravel Dusk Utilities
安装与设置
开始之前
在启动 Homestead 环境之前,你必须先安装 Vagrant 以及下列任一受支持的 provider:
这些软件包都为主流操作系统提供了易于使用的图形安装器。
如果你要使用 Parallels provider,还需要安装 Parallels Vagrant plug-in。它是免费的。
安装 Homestead
你可以通过将 Homestead 仓库克隆到宿主机来安装 Homestead。建议将该仓库克隆到你的“主目录”下的 Homestead 文件夹中,因为 Homestead 虚拟机会作为你所有 Laravel 应用的宿主环境。在本文档中,我们会将这个目录称为你的“Homestead 目录”:
shell
git clone https://github.com/laravel/homestead.git ~/Homestead克隆 Laravel Homestead 仓库后,你应切换到 release 分支。这个分支始终包含 Homestead 的最新稳定版本:
shell
cd ~/Homestead
git checkout release接着,在 Homestead 目录中执行 bash init.sh 命令,以创建 Homestead.yaml 配置文件。Homestead.yaml 文件用于配置 Homestead 安装的所有设置。该文件会被放在 Homestead 目录中:
shell
# macOS / Linux...
bash init.sh
# Windows...
init.bat配置 Homestead
设置 Provider
Homestead.yaml 文件中的 provider 键用于指定应使用哪种 Vagrant provider:virtualbox 或 parallels:
provider: virtualbox
WARNING
如果你使用的是 Apple Silicon,则必须使用 Parallels provider。
配置共享文件夹
Homestead.yaml 文件中的 folders 属性列出了你希望与 Homestead 环境共享的所有文件夹。当这些文件夹中的文件发生变化时,它们会在本地机器和 Homestead 虚拟环境之间保持同步。你可以按需配置任意数量的共享文件夹:
yaml
folders:
- map: ~/code/project1
to: /home/vagrant/project1WARNING
Windows 用户不应使用 ~/ 路径语法,而应使用项目的完整路径,例如 C:\Users\user\Code\project1。
你应始终将单个应用映射到各自独立的文件夹映射中,而不是把包含所有应用的大目录统一映射。映射一个文件夹时,虚拟机必须追踪该文件夹中每个文件的所有磁盘 IO。如果文件夹中文件数量过多,性能可能会下降:
yaml
folders:
- map: ~/code/project1
to: /home/vagrant/project1
- map: ~/code/project2
to: /home/vagrant/project2WARNING
使用 Homestead 时,绝不要挂载 .(当前目录)。这样会导致 Vagrant 无法将当前文件夹映射到 /vagrant,并会破坏可选功能,且在 provision 时产生意外结果。
若要启用 NFS,你可以在文件夹映射中添加 type 选项:
yaml
folders:
- map: ~/code/project1
to: /home/vagrant/project1
type: "nfs"WARNING
在 Windows 上使用 NFS 时,你应考虑安装 vagrant-winnfsd plug-in。这个 plug-in 会维护 Homestead 虚拟机中文件和目录的正确用户 / 组权限。
你还可以通过 options 键传递 Vagrant Synced Folders 支持的任意选项:
yaml
folders:
- map: ~/code/project1
to: /home/vagrant/project1
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]配置 Nginx 站点
不熟悉 Nginx?没关系。Homestead.yaml 文件的 sites 属性可以让你轻松地将一个“域名”映射到 Homestead 环境中的某个文件夹。Homestead.yaml 文件中已经附带了一个示例站点配置。同样地,你可以按需向 Homestead 环境中添加任意数量的站点。对于你正在开发的每个 Laravel 应用,Homestead 都可以充当一个方便的虚拟化环境:
yaml
sites:
- map: homestead.test
to: /home/vagrant/project1/public如果你在 Homestead 虚拟机 provision 完成后修改了 sites 属性,则应在终端中执行 vagrant reload --provision 命令,以更新虚拟机中的 Nginx 配置。
WARNING
Homestead 脚本尽可能被设计为幂等的。不过,如果你在 provision 过程中遇到问题,应该通过执行 vagrant destroy && vagrant up 来销毁并重建虚拟机。
主机名解析
Homestead 使用 mDNS 发布主机名,以实现自动主机解析。如果你在 Homestead.yaml 文件中设置了 hostname: homestead,那么该主机将可通过 homestead.local 访问。macOS、iOS 和 Linux 桌面发行版默认都支持 mDNS。如果你使用的是 Windows,则必须安装 Bonjour Print Services for Windows。
自动主机名最适合用于 Homestead 的按项目安装。如果你在同一个 Homestead 实例上托管多个站点,则可以将这些站点的“域名”添加到本机的 hosts 文件中。hosts 文件会把针对 Homestead 站点的请求重定向到 Homestead 虚拟机。在 macOS 和 Linux 上,该文件位于 /etc/hosts。在 Windows 上,它位于 C:\Windows\System32\drivers\etc\hosts。你需要添加的内容类似如下:
text
192.168.56.56 homestead.test请确保这里列出的 IP 地址与你 Homestead.yaml 文件中设置的一致。将域名加入 hosts 文件并启动 Vagrant box 后,你就可以通过浏览器访问该站点:
shell
http://homestead.test配置服务
默认情况下,Homestead 会启动多个服务;不过,你也可以自定义在 provision 期间启用或禁用哪些服务。例如,你可以通过修改 Homestead.yaml 文件中的 services 选项来启用 PostgreSQL 并禁用 MySQL:
yaml
services:
- enabled:
- "postgresql"
- disabled:
- "mysql"指定的服务会按照 enabled 和 disabled 指令中的顺序进行启动或停止。
启动 Vagrant Box
当你按自己的需求编辑好 Homestead.yaml 后,在 Homestead 目录中运行 vagrant up 命令。Vagrant 会启动虚拟机,并自动配置共享文件夹和 Nginx 站点。
如果你想销毁虚拟机,可以使用 vagrant destroy 命令。
按项目安装
你也可以不全局安装 Homestead、也不让所有项目共享同一个 Homestead 虚拟机,而是为每个你管理的项目分别配置一个 Homestead 实例。按项目安装 Homestead 的好处之一是你可以将 Vagrantfile 随项目一起分发,这样其他协作者在克隆项目仓库后即可立即执行 vagrant up。
你可以使用 Composer 包管理器将 Homestead 安装到项目中:
shell
composer require laravel/homestead --dev安装完成后,调用 Homestead 的 make 命令,为项目生成 Vagrantfile 和 Homestead.yaml 文件。这些文件会被放在项目根目录中。make 命令还会自动配置 Homestead.yaml 文件中的 sites 和 folders 指令:
shell
# macOS / Linux...
php vendor/bin/homestead make
# Windows...
vendor\\bin\\homestead make接着,在终端中运行 vagrant up 命令,并通过浏览器访问 http://homestead.test。请记住,如果你没有使用自动主机名解析,仍然需要为 homestead.test 或你选择的域名添加 /etc/hosts 记录。
安装可选功能
可选软件通过 Homestead.yaml 文件中的 features 选项安装。大多数 feature 可以通过布尔值启用或禁用,而有些 feature 则允许提供多个配置选项:
yaml
features:
- blackfire:
server_id: "server_id"
server_token: "server_value"
client_id: "client_id"
client_token: "client_value"
- cassandra: true
- chronograf: true
- couchdb: true
- crystal: true
- dragonflydb: true
- elasticsearch:
version: 7.9.0
- eventstore: true
version: 21.2.0
- flyway: true
- gearman: true
- golang: true
- grafana: true
- influxdb: true
- logstash: true
- mariadb: true
- meilisearch: true
- minio: true
- mongodb: true
- neo4j: true
- ohmyzsh: true
- openresty: true
- pm2: true
- python: true
- r-base: true
- rabbitmq: true
- rustc: true
- rvm: true
- solr: true
- timescaledb: true
- trader: true
- webdriver: trueElasticsearch
你可以指定一个受支持的 Elasticsearch 版本,且必须是精确版本号(major.minor.patch)。默认安装会创建一个名为 homestead 的集群。你永远不应该为 Elasticsearch 分配超过操作系统一半的内存,因此请确保 Homestead 虚拟机的总内存至少是 Elasticsearch 分配量的两倍。
NOTE
查看 Elasticsearch 文档 以了解如何自定义配置。
MariaDB
启用 MariaDB 会移除 MySQL 并安装 MariaDB。MariaDB 通常可以直接替代 MySQL,因此在应用的数据库配置中你仍应使用 mysql 数据库驱动。
MongoDB
默认的 MongoDB 安装会将数据库用户名设置为 homestead,对应密码为 secret。
Neo4j
默认的 Neo4j 安装会将数据库用户名设置为 homestead,对应密码为 secret。要访问 Neo4j 浏览器,请通过浏览器访问 http://homestead.test:7474。端口 7687(Bolt)、7474(HTTP)和 7473(HTTPS)都已准备好为 Neo4j 客户端提供服务。
别名
你可以通过修改 Homestead 目录中的 aliases 文件,为 Homestead 虚拟机添加 Bash 别名:
shell
alias c='clear'
alias ..='cd ..'更新 aliases 文件后,你应使用 vagrant reload --provision 命令重新 provision Homestead 虚拟机。这样可确保新别名在虚拟机中可用。
更新 Homestead
在开始更新 Homestead 之前,请先确保在 Homestead 目录中运行以下命令移除当前虚拟机:
shell
vagrant destroy接下来,你需要更新 Homestead 源码。如果你是通过克隆仓库安装的,可以在最初克隆仓库的位置执行以下命令:
shell
git fetch
git pull origin release这些命令会从 GitHub 仓库拉取最新的 Homestead 代码、获取最新的 tag,并切换到最新的已标记版本。你可以在 Homestead 的 GitHub releases 页面查看最新稳定版本号。
如果你是通过项目的 composer.json 文件安装 Homestead,则应确保 composer.json 中包含 "laravel/homestead": "^12",然后更新依赖:
shell
composer update接着,你应使用 vagrant box update 命令更新 Vagrant box:
shell
vagrant box update更新 Vagrant box 后,你应在 Homestead 目录中运行 bash init.sh 命令,以更新 Homestead 的附加配置文件。系统会询问你是否要覆盖现有的 Homestead.yaml、after.sh 和 aliases 文件:
shell
# macOS / Linux...
bash init.sh
# Windows...
init.bat最后,你需要重新生成 Homestead 虚拟机,以使用最新的 Vagrant 安装:
shell
vagrant up日常使用
通过 SSH 连接
你可以在 Homestead 目录中执行 vagrant ssh 终端命令,通过 SSH 连接到虚拟机。
添加额外站点
当 Homestead 环境已 provision 并运行后,你可能想为其他 Laravel 项目再添加更多 Nginx 站点。你可以在同一个 Homestead 环境中运行任意数量的 Laravel 项目。要添加额外站点,只需将站点加入 Homestead.yaml 文件。
yaml
sites:
- map: homestead.test
to: /home/vagrant/project1/public
- map: another.test
to: /home/vagrant/project2/publicWARNING
在添加站点前,你应确保已经为该项目目录配置好了文件夹映射。
如果 Vagrant 没有自动管理你的 hosts 文件,你可能还需要将新站点加入该文件。在 macOS 和 Linux 上,该文件位于 /etc/hosts。在 Windows 上,它位于 C:\Windows\System32\drivers\etc\hosts:
text
192.168.56.56 homestead.test
192.168.56.56 another.test添加站点后,请在 Homestead 目录中执行 vagrant reload --provision 终端命令。
站点类型
Homestead 支持多种“站点类型”,这使你可以轻松运行非 Laravel 项目。例如,我们可以使用 statamic 站点类型,轻松将一个 Statamic 应用添加到 Homestead:
yaml
sites:
- map: statamic.test
to: /home/vagrant/my-symfony-project/web
type: "statamic"可用的站点类型包括:apache、apache-proxy、apigility、expressive、laravel(默认)、proxy(用于 nginx)、silverstripe、statamic、symfony2、symfony4 和 zf。
站点参数
你可以通过 params 站点指令,为站点添加额外的 Nginx fastcgi_param 值:
yaml
sites:
- map: homestead.test
to: /home/vagrant/project1/public
params:
- key: FOO
value: BAR环境变量
你可以通过将变量加入 Homestead.yaml 文件来定义全局环境变量:
yaml
variables:
- key: APP_ENV
value: local
- key: FOO
value: bar更新 Homestead.yaml 文件后,请务必执行 vagrant reload --provision 重新 provision 虚拟机。这将更新所有已安装 PHP 版本的 PHP-FPM 配置,并更新 vagrant 用户的环境。
端口
默认情况下,下列端口会被转发到你的 Homestead 环境:
- HTTP: 8000 → 转发到 80
- HTTPS: 44300 → 转发到 443
转发更多端口
如果你愿意,可以通过在 Homestead.yaml 文件中定义 ports 配置项,将更多端口转发到 Vagrant box。更新 Homestead.yaml 文件后,请务必执行 vagrant reload --provision 重新 provision 虚拟机:
yaml
ports:
- send: 50000
to: 5000
- send: 7777
to: 777
protocol: udp下面是你可能希望从宿主机映射到 Vagrant box 的其他 Homestead 服务端口列表:
- SSH: 2222 → 到 22
- ngrok UI: 4040 → 到 4040
- MySQL: 33060 → 到 3306
- PostgreSQL: 54320 → 到 5432
- MongoDB: 27017 → 到 27017
- Mailpit: 8025 → 到 8025
- Minio: 9600 → 到 9600
PHP 版本
Homestead 支持在同一台虚拟机上运行多个 PHP 版本。你可以在 Homestead.yaml 文件中为某个站点指定应使用的 PHP 版本。可用的 PHP 版本包括:"5.6"、"7.0"、"7.1"、"7.2"、"7.3"、"7.4"、"8.0"、"8.1"、"8.2" 和 "8.3"(默认):
yaml
sites:
- map: homestead.test
to: /home/vagrant/project1/public
php: "7.1"在 Homestead 虚拟机内部,你可以通过 CLI 使用任一受支持的 PHP 版本:
shell
php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list
php7.3 artisan list
php7.4 artisan list
php8.0 artisan list
php8.1 artisan list
php8.2 artisan list
php8.3 artisan list你可以通过在 Homestead 虚拟机内部执行以下命令,修改 CLI 默认使用的 PHP 版本:
shell
php56
php70
php71
php72
php73
php74
php80
php81
php82
php83连接数据库
Homestead 默认同时为 MySQL 和 PostgreSQL 配置了一个 homestead 数据库。若要从宿主机的数据库客户端连接 MySQL 或 PostgreSQL 数据库,请分别连接到 127.0.0.1 的 33060(MySQL)或 54320(PostgreSQL)端口。这两个数据库的用户名和密码都是 homestead / secret。
WARNING
只有当你从宿主机连接数据库时,才应使用这些非常规端口。由于 Laravel 是运行在虚拟机内部,因此在 Laravel 应用的 database 配置文件中,你应使用默认的 3306 和 5432 端口。
数据库备份
当 Homestead 虚拟机被销毁时,Homestead 可以自动备份数据库。要使用此功能,你必须使用 Vagrant 2.1.0 或更高版本。如果你使用的是更早版本,则必须安装 vagrant-triggers plug-in。要启用数据库自动备份,请在 Homestead.yaml 文件中添加以下内容:
yaml
backup: true配置完成后,当执行 vagrant destroy 命令时,Homestead 会将数据库导出到 .backup/mysql_backup 和 .backup/postgres_backup 目录中。如果你使用的是按项目安装方式,这些目录会位于你安装 Homestead 的目录,或项目根目录中。
配置 Cron 调度
Laravel 提供了一种方便的方式来调度 cron 任务:只需安排每分钟运行一次 schedule:run Artisan 命令。schedule:run 命令会检查你在 routes/console.php 文件中定义的任务调度,从而决定应运行哪些计划任务。
如果你希望为某个 Homestead 站点运行 schedule:run 命令,可以在定义站点时将 schedule 选项设为 true:
yaml
sites:
- map: homestead.test
to: /home/vagrant/project1/public
schedule: true该站点对应的 cron 任务会被定义在 Homestead 虚拟机的 /etc/cron.d 目录中。
配置 Mailpit
Mailpit 可以拦截你的外发邮件,让你在不实际发送给收件人的情况下检查邮件内容。开始之前,请更新应用的 .env 文件,使用以下邮件设置:
ini
MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=nullMailpit 配置完成后,你可以通过 http://localhost:8025 访问 Mailpit 仪表板。
配置 Minio
Minio 是一个开源对象存储服务器,兼容 Amazon S3 API。要安装 Minio,请在 Homestead.yaml 文件的 features 部分添加以下配置项:
minio: true
默认情况下,Minio 运行在 9600 端口。你可以访问 http://localhost:9600 打开 Minio 控制面板。默认访问 key 为 homestead,默认 secret key 为 secretkey。访问 Minio 时,你应始终使用区域 us-east-1。
为了使用 Minio,请确保你的 .env 文件包含以下选项:
ini
AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://localhost:9600
AWS_ACCESS_KEY_ID=homestead
AWS_SECRET_ACCESS_KEY=secretkey
AWS_DEFAULT_REGION=us-east-1如果你想 provision 由 Minio 提供支持的 “S3” bucket,请在 Homestead.yaml 文件中添加 buckets 指令。定义 bucket 后,应在终端中执行 vagrant reload --provision 命令:
yaml
buckets:
- name: your-bucket
policy: public
- name: your-private-bucket
policy: none支持的 policy 值包括:none、download、upload 和 public。
Laravel Dusk
如果你想在 Homestead 中运行 Laravel Dusk 测试,应在 Homestead 配置中启用 webdriver feature:
yaml
features:
- webdriver: true启用 webdriver feature 后,你应在终端中执行 vagrant reload --provision 命令。
共享你的环境
有时你可能希望与同事或客户共享你当前正在开发的内容。Vagrant 内置了 vagrant share 命令来支持这一点;不过,如果你的 Homestead.yaml 文件中配置了多个站点,它将无法正常工作。
为了解决这个问题,Homestead 自带了自己的 share 命令。首先,请通过 vagrant ssh SSH 进入 Homestead 虚拟机,然后执行 share homestead.test 命令。这个命令会共享 Homestead.yaml 配置文件中的 homestead.test 站点。你也可以将 homestead.test 替换成任何其他已配置的站点:
shell
share homestead.test命令运行后,你会看到一个 Ngrok 界面,其中包含活动日志以及共享站点可公开访问的 URL。如果你想指定自定义区域、子域名或其他 Ngrok 运行时选项,可以将它们附加到 share 命令中:
shell
share homestead.test -region=eu -subdomain=laravel如果你需要通过 HTTPS 而非 HTTP 共享内容,则可以使用 sshare 命令代替 share。
WARNING
请记住,Vagrant 天生是不安全的,运行 share 命令时你实际上是在将虚拟机暴露到互联网。
调试与性能分析
使用 Xdebug 调试 Web 请求
Homestead 内置了对 Xdebug 单步调试的支持。例如,你可以在浏览器中访问一个页面,此时 PHP 会连接到 IDE,以便检查和修改正在运行的代码。
默认情况下,Xdebug 已经处于运行状态并随时可以接受连接。如果你需要在 CLI 中启用 Xdebug,请在 Homestead 虚拟机中执行 sudo phpenmod xdebug 命令。然后,按照你所用 IDE 的说明启用调试。最后,通过浏览器扩展或 bookmarklet 配置浏览器触发 Xdebug。
WARNING
Xdebug 会显著降低 PHP 运行速度。若要禁用 Xdebug,请在 Homestead 虚拟机中运行 sudo phpdismod xdebug 并重启 FPM 服务。
自动启动 Xdebug
当你调试会向 Web 服务器发出请求的功能测试时,相比修改测试并传递自定义 header 或 cookie 来触发调试,自动启动调试会更简单。要强制 Xdebug 自动启动,请修改 Homestead 虚拟机中的 /etc/php/7.x/fpm/conf.d/20-xdebug.ini 文件,并添加以下配置:
ini
; If Homestead.yaml contains a different subnet for the IP address, this address may be different...
xdebug.client_host = 192.168.10.1
xdebug.mode = debug
xdebug.start_with_request = yes调试 CLI 应用
要调试 PHP CLI 应用,请在 Homestead 虚拟机中使用 xphp shell 别名:
shell
xphp /path/to/script使用 Blackfire 进行性能分析
Blackfire 是一个用于分析 Web 请求和 CLI 应用性能的服务。它提供交互式 UI,用于以调用图和时间线的形式展示性能分析数据。它适用于开发、预发布和生产环境,并且不会给终端用户带来开销。此外,Blackfire 还能针对代码和 php.ini 配置提供性能、质量与安全检查。
Blackfire Player 是一个开源的 Web Crawling、Web Testing 和 Web Scraping 应用,它可与 Blackfire 协同工作,以编写性能分析场景脚本。
要启用 Blackfire,请在 Homestead 配置文件中使用 features 设置:
yaml
features:
- blackfire:
server_id: "server_id"
server_token: "server_value"
client_id: "client_id"
client_token: "client_value"Blackfire 服务端凭证和客户端凭证都需要一个 Blackfire 账号。Blackfire 提供了多种分析应用的方式,包括 CLI 工具和浏览器扩展。请查阅 Blackfire 文档了解更多细节。
网络接口
Homestead.yaml 文件中的 networks 属性用于配置 Homestead 虚拟机的网络接口。你可以按需配置任意数量的接口:
yaml
networks:
- type: "private_network"
ip: "192.168.10.20"若要启用 bridged 接口,请为该网络配置一个 bridge 设置,并将网络类型改为 public_network:
yaml
networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"若要启用 DHCP,只需从配置中移除 ip 选项:
yaml
networks:
- type: "public_network"
bridge: "en1: Wi-Fi (AirPort)"若要更新网络使用的设备,你可以在网络配置中添加 dev 选项。默认的 dev 值为 eth0:
yaml
networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"
dev: "enp2s0"扩展 Homestead
你可以通过 Homestead 目录根部的 after.sh 脚本来扩展 Homestead。在这个文件中,你可以添加正确配置并自定义虚拟机所需的任意 shell 命令。
在自定义 Homestead 时,Ubuntu 可能会询问你是保留软件包的原始配置,还是使用新的配置文件覆盖它。为了避免这种情况,你在安装软件包时应使用以下命令,以避免覆盖 Homestead 之前写入的任何配置:
shell
sudo apt-get -y \
-o Dpkg::Options::="--force-confdef" \
-o Dpkg::Options::="--force-confold" \
install package-name用户自定义
当你与团队一起使用 Homestead 时,可能希望按个人开发风格稍微调整 Homestead。为此,你可以在 Homestead 目录根部(即包含 Homestead.yaml 文件的同一目录)创建一个 user-customizations.sh 文件。在该文件中,你可以进行任意自定义;不过,user-customizations.sh 不应被纳入版本控制。
Provider 专属设置
VirtualBox
natdnshostresolver
默认情况下,Homestead 会将 natdnshostresolver 设置为 on。这使 Homestead 可以使用宿主操作系统的 DNS 设置。如果你想覆盖此行为,请在 Homestead.yaml 文件中添加以下配置选项:
yaml
provider: virtualbox
natdnshostresolver: 'off'