升级powershell
依次单击“开始”、“所有程序”、“附件”和“Windows PowerShell”,然后单击“Windows PowerShell”。
在 Windows PowerShell 控制台中的命令提示符下键入以下命令,然后按 ENTER:
Get-Host | Select-Object Version
如果 Windows PowerShell 3.0 已安装,您将看到如下所示输出:
如果是2.0则需要下载并安装(Windows6.1-KB2506143-x64.msu)
安装后重启计算机即可。
参考:https://www.cnblogs.com/leon-2016/p/9198632.html
离线安装Homestead Vagrant 盒子
安装好VirtualBox及vagrant后,下面添加laravel/homesterad
到 Vagrant 中。
在PowerShell中输入如下命令:
vagrant box add laravel/homestead
如图所示:
如果网速快也可以在线安装,如果慢可以把其中的下载地址拷贝下来,然后使用第三方工具下载。
下载成功后,运行以下命令添加(G:/soft/virtualbox.box是我的下载路径):
vagrant box add laravel/homestead G:/soft/virtualbox.box
安装 Homestead
到github下载最新的稳定版:https://github.com/laravel/homestead/releases
我下载的是10.0.1
然后解压到G:\soft\homestead
命令行进入G:\soft\homestead
,运行以下命令:
init.bat
配置 Homestead
设置 Provider
Homestead.yaml 文件中的 provider 键表示使用哪个 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation、parallels 或 hyperv,你可以将其设置为自己选择的提供者,当然对大部分人来说也没得选:
provider: virtualbox
配置共享文件夹
Homestead.yaml 文件中的 folders 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹:
folders:
- map: ~/code/project1
to: /home/vagrant/project1
注:map
表示宿主机Web项目根目录,to
表示映射到的虚拟机Web项目根目录,Windows 下需要将 ~
替换成完整的目录路径,比如 F:\wamp\www\project1
。
你需要将每个项目映射自己的对应目录而不是映射整个 ~/code 目录:
folders:
- map: ~/code/project1
to: /home/vagrant/project1
- map: ~/code/project2
to: /home/vagrant/project2
当你映射目录时,虚拟机会跟踪该目录下每个文件的所有磁盘 IO,随着站点数量的增加,可能会遇到性能问题,尤其是在包含大量文件的低端机器或项目中,性能问题可能会非常明显,这是因为这个原因,所以不推荐映射整个 ~/code 目录。
注:在使用 Homestead 的时候,永远不要挂载当前目录(.),这会导致 Vagrant 不映射当前目录到 /vagrant 并且在 provision 过程中断可选功能,造成异常结果。
配置 Nginx 站点
对 Nginx 不熟?没关系!通过 sites 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:
sites:
- map: homestead.test
to: /home/vagrant/project1/public
如果你是在 Homestead 盒子启动之后进行了上述修改,需要运行 vagrant reload --provision
更新虚拟机上的 Nginx 配置。
注:Homestead 脚本被设计为尽可能保证操作的幂等,不过,如果你在 provison 过程中还是出现问题,则需要通过 vagrant destroy && vagrant up
命令来销毁并重构虚拟机。
主机名解析
自动主机名在每个项目独立安装的 Homestead 中工作最好,如果你在一个 Homestead 实例上托管了多个站点,可以在宿主机上将站点「域名」添加到 hosts 文件中做域名映射,hosts 文件会将针对 Homestead 站点的请求重定向到 Homestead 虚拟机。在 Mac 和 Linux 系统中,该文件位于 /etc/hosts,在 Windows 系统中,该文件位于 C:\Windows\System32\drivers\etc\hosts
。我们以 homestead.test 域名映射为例,添加到 hosts 文件的记录如下所示:
192.168.10.10 homestead.test
确保 IP 地址和你的 Homestead.yaml 文件中的 ip 配置项一致,一旦你将域名添加到 hosts 文件,就可以在浏览器中通过该域名访问站点了:
http://homestead.test
在真正可以访问站点之前,还需要通过 Vagrant 启动 Homestead 虚拟机,下面我们就来启动这个盒子。
启动 Vagrant 盒子
配置好 Homestead.yaml 文件后,在 Homestead 目录下运行 vagrant up
命令,如果你是通过先下载 Homestead Vagrant 盒子再手动添加的方式安装的话,此时先不要执行这个命令,而是需要进入 ~/.vagrant.d/boxes/laravel-VAGRANTSLASH-homestead 目录(以 MacOS 为例,Windows 对应的路径应该是 C:/Users/User/.vagrant.d/boxes/laravel-VAGRANTSLASH-homestead
,其中 User 对应你的用户名),添加一个 metadata_url 文件,并初始化文件内容如下(如果已有则忽略):
https://vagrantcloud.com/laravel/homestead
接下来,将该目录下手动添加到 Vagrant 盒子目录 0
重命名此次安装盒子版本号 10.0.1
,再回到 Homestead 目录运行 vagrant up
命令。Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点,初次启动需要花费一点时间进行初始化:
启动成功之后,就可以在浏览器中通过 http://homestead.test 访问前面 F:\wamp\www\project1
目录里的应用了。
登录vagrant ssh
要登录到该虚拟机,使用 vagrant ssh
命令:
查看虚拟机中的php版本:
关闭虚拟机
关闭该虚拟机,可以使用命令:
vagrant halt
重启虚拟机
重启该虚拟机,可以使用命令:
vagrant reload --provision
销毁虚拟机
销毁该虚拟机,可以使用命令:
vagrant destroy --force
连接到数据库
Homestead 默认已经在虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,这些配置值与 Laravel 的 .env 中默认提供的配置一致。
想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1,对于 MySQL 而言,端口号是 33060,对 Postgres 而言,端口号是 54320,用户名/密码是 homestead/secret:
注:只有从本地连接 Homestead 的数据库时才能使用这些非标准的端口,在 Homestead 虚拟机中还是应该使用默认的 3306 和 5432 端口进行数据库连接配置。
添加更多站点
Homestead 虚拟机在运行时,可能需要添加多个web应用到 Nginx 站点。如果是在单个 Homestead 环境中运行多个web应用,添加站点很简单,只需将站点添加到 Homestead.yaml
文件:
sites:
- map: homestead.test
to: /home/vagrant/project1/public
- map: another.test
to: /home/vagrant/project2/public
如果 Vagrant 不是自动管理「hosts」文件,需要添加站点域名到本地 hosts 文件:
192.168.10.10 homestead.test
192.168.10.10 another.test
添加完站点后,在 Homestead 目录下运行 vagrant reload --provision
命令重启虚拟机。
端口转发配置
默认情况下,Homestead 端口转发配置如下:
– SSH: 2222 → 转发到 22
– ngrok UI: 4040 → 转发到 4040
– HTTP: 8000 → 转发到 80
– HTTPS: 44300 → 转发到 443
– MySQL: 33060 → 转发到 3306
– Postgres: 54320 → 转发到 5432
– MongoDB: 27017 → 转发到 27017
– Mailhog: 8025 → 转发到 8025
– Minio: 9600 → 转发到 9600
其中前面表示宿主机端口,后面表示虚拟机端口。
转发更多端口
如果你想要为 Vagrant 盒子添加更多端口转发,做如下转发协议设置即可:
ports:
- send: 50000
to: 5000
- send: 7777
to: 777
protocol: udp
多个 PHP 版本
Homestead 引入了在单个虚拟机中支持多个 PHP 版本的功能,你可以在 Homestead.yaml 文件中为特定站点指定 PHP 版本,目前支持的 PHP 版本包括 5.6、7.0、7.1、7.2 、7.3、7.4(默认版本):
sites:
- map: homestead.test
to: /home/vagrant/project1/public
php: "7.1"
此外,你可以在 CLI 中使用任意版本的 PHP:
php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list
php7.3 artisan list
Web 服务器
Homestead 使用 Nginx
作为默认 Web 服务器。不过,如果指定 apache
作为站点类型,也会安装 Apache
。两个 Web 服务器可以同时安装,但是不能同时运行。Shell 命令 flip
可用于简化在不同 Web 服务器之间的切换处理,其工作原理是先自动判断哪个 Web 服务器正在运行,然后将其关闭,接着启动另一个服务器。要使用这个命令,需要通过 SSH 登录到 Homestead 虚拟机并在终端中运行:
flip
默认账号密码
ssh
用户名:vagrant
密码:vagrant
mysql
用户名:homestead
密码:secret
使用root账户登录
默认root的账号无法登录,需要通过以下步骤来设置:
重置root密码
先用vagrant账号登录后,输入以下命令进行重置root密码
sudo passwd root
修改/etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config
找到并用#注释掉这行:PermitRootLogin prohibit-password
新建一行 添加:PermitRootLogin yes
重启服务
sudo service ssh restart
解读一下这两句话吧!
PermitRootLogin yes # 允许root登录,设为yes。
PermitRootLogin prohibit-password # 允许root登录,但是禁止root用密码登录
设置区分大小写
目前是不区分文件名及文件夹大小写的。如果需要区分大小写
首先安装一个插件: 运行
vagrant plugin install vagrant-winnfsd
然后修改Homestead.yaml
,在folders
中增加type: "nfs"
:
folders:
- map: F:/wamp/www/project1
to: /home/vagrant/code
type: "nfs"
PHP安装路径与重启php-fpm
PHP的安装路径为:/usr/lib/php
重启php-fpm
php.ini配置文件所在目录(以PHP7.3版本为例):/etc/php/7.3/fpm/php.ini
修改了php.ini配置文件后,还需要重启php-fpm服务
service php7.3-fpm restart
查看当前php的cli版本
php -v
查看当前php版本的扩展安装目录
php-config --extension-dir
查看当前php版本已安装的扩展
php -m
切换php cli版本
cd /etc/alternatives
sudo mv php php.bak
sudo ln -s /usr/bin/php7.3 php
其他命令
重启nginx服务
sudo service nginx restart
重启apache服务
sudo service apache2 restart
开机启动homestead
在 “运行” 程序中输入 shell:startup
进入开机启动文件夹,在文件夹中新建 homestead.bat
文件,内容如下:
// 第一行为空白
@echo off
cd G:\soft\homestead
G:
vagrant up
安装xdebug扩展
首先切换php版本,可以使用php-v查看版本。
设置DNS
sudo vi /etc/resolv.conf
添加:
#阿里云的DNS服务器
nameserver 223.5.5.5
nameserver 223.6.6.6
更新apt源
apt-get update
安装php7.3-dev
apt install php7.3-dev
安装后,phpize的文件路径在/usr/bin/phpize7.3
php-config的文件路径在/usr/bin/php-config7.3
修改phpize软连接
cd /usr/bin/
mv phpize phpize.bak
mv php-config php-config.bak
ln -s /usr/bin/phpize7.3 phpize
ln -s /usr/bin/php-config7.3 php-config
下载xdebug
cd /home
wget http://xdebug.org/files/xdebug-2.9.0.tgz
tar -xvzf xdebug-2.9.0.tgz
cd xdebug-2.9.0
安装xdebug
phpize
或
/usr/bin/phpize7.3
./configure
或
./configure --with-php-config=/usr/bin/php-config7.3
make
cp modules/xdebug.so /usr/lib/php/20180731
配置php.ini
vi /etc/php/7.3/fpm/php.ini
在文件末尾添加:
zend_extension = /usr/lib/php/20180731/xdebug.so
重启服务器
参考:https://learnku.com/laravel/wikis/25528
https://xueyuanjun.com/post/19915.html