Homestead - 学习/实践

113 篇文章 4 订阅
64 篇文章 6 订阅

1.应用场景

主要用于搭建开发环境,很省事,尽管存在一些缺点。但是在适度之内即可,权衡问题。

2. 学习/实践

前言

整个过程参考  // 2019.1.9 周三 春风路3007号

Homestead |《Laravel 5.6 中文文档 5.6》| Laravel China 社区

重量级开发环境:Homestead | 快速入门 | Laravel 5.8 中文文档 // 重量级开发环境:Homestead

开发环境搭建 - Windows |《Laravel 开发环境部署 5.7》| Laravel China 社区

https://github.com/laravel/homestead // 源码

Laravel Homestead - Laravel - The PHP Framework For Web Artisans // 官网文档

1.环境

OS: windows 10  64位 企业版

Vagrant : 2.2.2  //最新版本

Virtualbox: 5.2.22  //最新版本

或者

Mac pro

2.建议

将vagrant 和 virtualbox升级到最新(稳定)版, 避免接下来出现的各种问题.

3.在开发机(个人电脑)上,干净的地方,新建一个文件夹,如:

D:\vagarant-lumen

4.将box放到D:\vagarant-lumen 目录下

Note

这里的homestead-virtualbox-3.0.0.box是Nick提供的,不过需要更改一个文件.

建议使用homestead-virtualbox-6.3.0.box 刚从社区下载,版本新.

同时也可以Vagrant by HashiCorp 寻找box.

具体操作,这里暂不详述. 应涉及到源码编译

或者[听说国外常这么干]

直接打开连接下载: https://app.vagrantup.com/laravel/boxes/homestead/versions/6.3.0/providers/virtualbox.box

上面的6.3.0是版本号,可以修改为指定的版本号.下载完之后,可能需要进行手动更名.

名字要和自己后续使用的名字保持一致,此处更名为: homestead-virtualbox-6.3.0.box

5.在D:\vagarant-lumen中新建metadata.json文件

metadata.json内容如下:

{

    "name": "laravel/homestead",

    "versions":

    [

        {

            "version": "3.0.0",

            "providers": [

                {

                  "name": "virtualbox",

                  "url": "homestead-virtualbox-3.0.0.box"

                }

            ]

        }

    ]

}

Note:

version, url对应的值, 要跟真实情况保持一致.

6. 安装 Homestead Vagrant Box

进入到D:\vagarant-lumen,打开cmd或者gitbash, 输入:

vagrant box add metadata.json

Note:

vagrant box add laravel/homestead 是用从线上[vagrant开源社区]下载最新版box. -------------TBD

简单补充:

vagrant init <box-name>     // 生成 Vagrantfile

vagrant up     //根据 Vagrantfile的配置 生成镜像, 如果本地没有对应的 <box-name> 对应的镜像,

则会去官网下载

vagrant box add ....  //指定 <box-name> 对应的镜像. 下载镜像的方式很灵活

添加box到本地仓库:

vagrant入门教程--添加box到本地仓库(4)_zsl10的专栏-CSDN博客_vagrant 添加本地box

7.查看是否添加成功

vagrant box list   // 因为vagrant 是全局安装,所以此命令不用进入到指定目录下,但是建议,统一进入到指定目录下,必然是没有问题的.又不是比赛.有时费时省力,未尝不可,而且未必以后一直是费时的[个人看法]

8.安装 Homestead

①通过克隆代码来安装 Homestead,可以使用http方式或者ssh方式

这里使用的是ssh方式,因为http方式一直有问题,原因暂时不清,也没有解决.

git clone git@github.com:laravel/homestead.git

②开始进入homestead目录下

因为 Homestead 的 master 分支并不是稳定分支,应该使用打过标签的稳定版本。

可以在GitHub发行页[https://github.com/laravel/homestead/releases]上找到最新的稳定版本,这里推荐使用v7.19.2

③git checkout v7.19.2

④$ bash init.sh

Homestead initialized!

⑤此时homestead目录下,会生成几个文件,只需要关注Homestead.yaml即可

打开Homestead.yaml 熟悉里面的配置项

---

ip: "192.168.10.10"

memory: 2048

cpus: 1

provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:

    - ~/.ssh/id_rsa

folders:

    - map: ~/Code

      to: /home/vagrant/Code

sites:

    - map: homestead.app

      to: /home/vagrant/Code/Laravel/public

databases:

    - homestead

# blackfire:

#     - id: foo

#       token: bar

#       client-id: foo

#       client-token: bar

# ports:

#     - send: 50000

#       to: 5000

#     - send: 7777

#       to: 777

#       protocol: udp

详情参见: Homestead |《Laravel 5.6 中文文档 5.6》| Laravel China 社区

⑥修改windows host 文件 C:/Windows/System32/Drivers/etc/hosts

192.168.10.10  homestead.app

Note:

如果修改不了,请把hosts文件拖到桌面,修改保存,再拖回原来的目录下.

⑦在homestead目录下,执行

vagrant up

Note :

homestead虚拟机的配置都在 :D:\vagarant-lumen\homestead\scripts\homestead.rb文件中,详细参见文件

9.看Homestead.yaml 我们发现只需将Laravel或者lumen的代码放到homestead同级目录的code文件夹即可

Note:

在windows下,并不是这样的,因为

folders:

    - map: ~/code

      to: /home/vagrant/code

~/code 表示的是 C:\Users\william_ning\code

所以需要在C:\Users\william_ning目录下新建文件夹code.

或者

将- map: ~/code修改为/d/vagarant-lumen/homestead/code  ---------------TBD

10.进入到code目录下[这里是C:\Users\william_ning\code],

新建public目录,并在内新建index.php

index.php内容如下:

<?php

phpinfo();

11.测试环境是否ok

浏览器中输入:

localhost:8000

如下:

表示环境已经成功.

填坑

在之前遇到各种问题之后,将vagrant和virtualbox升级到最新版,会避免大多数问题,但是可能还是会有问题.

备注:

ssh 连接虚拟机

vagrant ssh //连接进入虚拟机[Ubuntu]

user: vagrant password: vagrant

user: root password:vagrant

可直接通过sudo su命令进行身份切换 //从普通用户切换到root用户

ctrl+d  //从root用户切换到普通用户

①vagrant up之后提示信息: ” can't read /etc/php/7.2/fpm/pool.d/www.conf: No such file or directory

The SSH command responded with a non-zero exit status.”

解决思路参考:

a.vagrant reload  //重启虚拟机,查看是否仍有上述问题.

b.参考 https://github.com/hashicorp/vagrant/issues/1659

②有时目录挂载不成功

解决思路:

正确的挂载路径:

~code =====> /home/vagrant/code  // ~ 即C:\Users\william_ning\

D:\vagarant-lumen\homestead =====> /vagrant

进入到虚拟机中,查看 上面两者是否挂载正确,同时在C:\Users\william_ning\code下新建文件夹public

查看是/home/vagrant/code中是否立刻有public目录生成,可以成为热挂载[即 目录即时分享]

如果有问题,重启虚拟机,查看结果.

③输入localhost:8000

Web服务器无响应, 需要进入虚拟机中启动或者重启nginx

命令:

vagrant ssh

sudo service nginx start / restart

④浏览器中输入:

192.168.10.10

或者

homestead.test

均没有响应, 原因是公司代理的问题,导致不能使用虚拟主机设置.对于开发不是必须.所以可以选择跳过

但是首先,要确定能访问到虚拟机:

保证能访问到,之后

解决办法:

设置代理

a.添加192.168.*.* 和homestead.test

Firefox

代理设置如下:

访问结果如下:

Chrome[使用代理插件swichyOmega]

代理设置如下:

keyon

vpn

访问结果如下:

IE

代理设置如下:

访问结果如下:

Homestead.test 有些问题,应该跟ie浏览器本身的设置和实现有关,具体不再研究.

---------------------------------------------------------------分割线------------------------------------------------------------------------

进入code目录下,clone code

git clone git@github.com:laravel/lumen.git

12.运行lumen / laravel framework  // TBD

①将lumen/laravel framework的code放到code目录下.

git clone

② TBD

----------------------------------------------------------------分割线--------------------------------------------------------------------

----------------------------------------------------------------分割线--------------------------------------------------------------------

----------------------------------------------------------------分割线--------------------------------------------------------------------

----------------------------------------------------------------分割线--------------------------------------------------------------------

Centos nginx重启

重启Nginx

service nginx restart

/etc/init.d/nginx stop

/etc/init.d/nginx start

Ubuntu Nginx

$sudo service nginx start

$sudo service nginx stop

win7启动

解压至c:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹C:\nginx\logs

常用配置 C:\nginx\conf\nginx.conf, 使用自己定义的conf文件如 my.conf,命令为nginx -c conf\my.conf

            

方便有用的linux命令

cd .. // 返回上级目录

cd – // 返回上一次目录

3.问题/补充

 1. 尽管虚拟机中,显示PHP版本为8.0,但是具体的项目使用的还是指定的版本

2. homestead虚拟机中vagrant用户密码,以及如何使用root权限

Laravel Homestead:root 的密码是什么? | Laravel China 社区

3. 访问web页面出现502 Bad Gateway

查看Nginx错误日志,出现如下报错部分内容 

... connect() to unix:/var/run/php/php7.2-fpm.sock failed ...

原因和解决办法:

php - NGINX: connect() to unix:/var/run/php7.2-fpm.sock failed (2: No such file or directory) - Stack Overflow

原因:

homestead中Homestead.yaml文件中PHP的版本似乎是只能同时使用一种版本,与nginx配合工作。

解决办法:

you dont have the sock! the sock (php7.2-fpm----) is made when you start php.

1. check the location to make the sock.
go to /etc/php/7.2/fpm/pool.d/ -> www.conf
you can see the listen = "something something" <-- this is the location address. // cat www.conf|grep "listen = "  if it is not /var/run/php/php7.2-fpm.sock, replace it.

 2. run php (sudo service php7.2-fpm restart)
 3. check the folder you download sock (var/run/php)


 4. if you get the sock, restart your nginx (sudo service nginx restart)

 完成第4步,基本上website已经可用了


5. if you get error, that means your nginx setting (to find the sock) is wrong.
6. go to etc -> nginx -> sites-enabled and open default

7. if fastcgi_pass unix:/run/php/php7.2-fpm.sock; is not, replace them.
8. save and run it.

finish.

4. 关于homestead的各种操作命令

1. 启动虚拟机: vagrant up

2. 重新启动加载站点配置:vagrant reload --provision
配置 Nginx 站点
对 Nginx 不熟?没关系!通过 sites 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。
和共享文件夹一样,你可以配置多个站点:
sites:
    map: homestead.test
    to: /home/vagrant/code/my-project/public
如果你是在 Homestead 盒子启动之后进行了上述修改,需要运行 vagrant reload --provision 更新虚拟机上的 Nginx 配置。

3. 登录到该虚拟机: vagrant ssh

4. 关闭该虚拟机: vagrant halt

5. 销毁该虚拟机: agrant destroy
   强制销毁该虚拟机: agrant destroy --force

6. 配置通过 SSH 连接到 Homestead服务器,初始默认账号密码为: vagrant/vagrant

7. 暂时获取超管权限[不会要求输入密码]: sudo su

8. 命令行切换版本
update-alternatives --display php 查看所有 php 版本和当前版本
update-alternatives --config php 执行后,会列出当前 php 所有版本和编号,输入编号,切换到执行的版本
例如:

输入4,即php7.2版本

5. 账号密码 -- 20211108

ssh
用户名:vagrant
密码:vagrant

mysql
用户名:homestead
密码:secret

启动

vagrant up

进入虚拟机中

vagrant ssh

切换到root

sudo su

...

4.参考

Vagrant by HashiCorp

Discover Vagrant Boxes - Vagrant Cloud // 寻找box

https://app.vagrantup.com/laravel/boxes/homestead/versions/6.3.0/providers/virtualbox.box // 直接下载box,可以将版本号做调整

Laravel Homestead 离线安装 - Zero.zf - 博客园 // 安装教程

vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源 - cxgphper的个人空间 - OSCHINA - 中文开源技术交流社区

Homestead安装大法和总结一些坑_min903245074的博客-CSDN博客_homestead安装

百度网盘 请输入提取码

开发环境部署之 Homestead 大坑,我是这样爬出来的 | Laravel China 社区

https://laravel-china.org/topics/4796/ssh-auth-method-private-key-solution-summary-when-homestead-startshttp://

Homestead |《Laravel 5.6 中文文档 5.6》| Laravel China 社区

https://github.com/laravel/homestead

《Lumen 中文文档 5.6》 | Laravel China 社区

安装 |《Lumen 中文文档 5.6 5.6》| Laravel China 社区

https://github.com/search?q=lumen

https://github.com/laravel/lumen

https://github.com/laravel

https://github.com/ningxiaofa/homestead

Laravel Homestead - Laravel - The PHP Framework For Web Artisans

https://blog.csdn.net/min903245074/article/details/77954857  // Homestead安装大法和总结一些坑
https://laravel-china.org/articles/7369/im-climbing-out-of-the-homestead-pit-for-the-development-of-the-environment  // 开发环境部署之 Homestead 大坑,我是这样爬出来的
https://laravel-china.org/topics/4796/ssh-auth-method-private-key-solution-summary-when-homestead-startshttp://  // Homestead 安装问题汇总
https://laravel-china.org/articles/4668/why-do-you-have-to-use-homestead-to-develop-laravel-applications  //为什么必须使用 Homestead 来开发 Laravel 应用?

Homestead安装大法和总结一些坑_min903245074的博客-CSDN博客_homestead安装  // Homestead安装大法和总结一些坑

https://github.com/laravel/homestead // 源码

Laravel Homestead - Laravel - The PHP Framework For Web Artisans // 官网文档

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值