用Laravel 5.1 做回风牌内容管理系统(02)

在前一篇中,主要介绍了准备工作,其中配置环境一块一般比较麻烦,我这里推荐直接用官方提供的box作为开发环境,至于运维环境,请自行补习,有空我再补充在我的博客里.

本篇,作为番外篇,补充下laravel/Homestead环境的安装

什么是laravel/Homestead

它是laravel官方推荐和提供的一种开发环境,实际上就是一个虚拟机,为了让团队开发环境更加一致,为了让洁癖玩家能更加愉快的玩耍,作者提供了一套完整的PHP运行环境.

它的box在: https://atlas.hashicorp.com/

它的GitHub请自行在GitHub网站上搜索吧.

Included Software

怎么安装

添加 laravel/homestead box到本机

安装的前提 是你的机器有虚拟机软件和vagrant软件,这里提示一点,vagrant 1.7.4版本无法upvirtualBox 5.0 的虚拟机,可以找virtualBox 4.3.28等版本

国内用户,你上的是局域网,所以如果用laravel官方网站推荐的方式基本安装会很费事.下面我提供我的方法和细节:

  1. 运行vagrant box add laravel/homestead,
    If this command fails, you may have an old version of Vagrant that require the full URL:

    vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead
  2. 一旦开始下载就按下Ctrl+C,将正在下载的地址拷贝下,用其他下载工具下载下来.地址应该是这样的:
    https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.2.7/providers/virtualbox.box

  3. 下载完毕了,将box添加到系统里:

    ## 执行add的目录下有我下载好的Homestead.box文件
    vagrant box add --name laravel/homestead Homestead.box

    成功提示:

    ==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!
  4. 检查box列表:
    vagrant box list后应该可以看到有一个box是laravel/homestead,说明box add 成功了.

部署Homestead环境

回到官方文档继续操作,先克隆一份box作者的git,比如,我想在我的用户根目录下添加一个Homestead目录用于这个项目,那么:

git clone https://github.com/laravel/homestead.git Homestead

只能上局域网的请试图用各类神奇和办法翻墙或改hosts文件,做到至少能访问github.

顺便推荐一个hosts更新网址,有了它你总可以上github了吧:老D博客,好人长命,如果你行,请给他点赞助.谢谢!!

如果你的Homestead文件夹已经有段时间没更新了,可以这么更新:git pull

上面的步骤都完了就可以进行下面的工作了.

  1. 运行bash init.sh来创建Homestead的配置文件Homestead.yaml,默认这个文件会被创建在~/.homestead目录下.

    选读内容:
    Homestead.yaml文件里有很多配置:
    provider表示你的虚拟主机是哪种,virtualbox, vmware_fusion, or vmware_workstation

  2. Setting Your SSH Key
    默认情况下,Homestead.yaml文件里配置的就是你生成钥匙对默认的位置和名称,所以,如果你确定你的有钥匙对(~/.ssh目录下,id_rsa是私钥, id_rsa.pub是公钥),可以略过下面这句了,如果你没有,windows用户,请选择PuTTYPuTTYgen,Linux和Mac可以用下面这句来生成密钥对:

    ## "you@homestead"填写你自己的邮箱或什么,随意~
    ssh-keygen -t rsa -C "you@homestead"
  3. Configuring Shared Folders
    Homestead.yaml配置文件里的folders属性列出了所有你想共享给虚拟机的文件夹,mapto分别对应的文件夹是同步的,你可以根据需哟配置更多的共享文件夹,map对应的是本机,to对应的是虚拟机里的文件夹,如果要支持 NFS,可以加一行type:"nfs"to那一行的后面:

    folders:
        - map: ~/Code
          to: /home/vagrant/Code
  4. Configuring Nginx Sites
    Not familiar with Nginx? No problem. sites属性可以让你方便的部署自己在虚拟机上的虚拟目录,Homestead.yaml文件里应该已经有一个配置了,可以做为样例来参考.

    sites:
        - map: homestead.app
          alias: square.app
          to: /home/vagrant/Code/Laravel/public

    意思是,如果有访问homestead.app这个域名的请求,虚拟机会直接将请求接引到/home/vagrant/Code/Laravel/public目录,而这个目录实际上和本地环境有映射,被映射到了~/Code/Laravel/public.
    默认是php-fpm来解析PHP,如果你喜欢,也可以选择用HHVM来解析,例如:

    sites:
        - map: homestead.app
          to: /home/vagrant/Code/Laravel/public
          hhvm: true

    默认情况下,本地HTTP的8000端口被映射到了虚拟机的80端口,HTTPS的44300端口被映射到了虚拟机的443端口.

  5. Configuring The Hosts File
    为了方便本地开发和测试,我们一般会修改我们的hosts文件,让相应的域名不出去,直接在本机上被解析指向指定的IP,如果这个被制定的IP是虚拟机的IP地址,那就实现了,浏览器访问homestead.app这个网站,实际上访问的是虚拟机上的该网站,这个结果正是我们需要的. 这么修改:

    • Linxu & Mac OS:sudo vim /etc/hosts
    • windows: notepad C:\Windows\System32\drivers\etc\hosts
    • 改为类似格式:192.168.10.10 homestead.app
    • 确定一下你的配置文件Homestead.yaml里的IP是否是hosts里陪的IP.如果以上都没有问题,虚拟机用vagrant启动起来后,此时应该可以访问这个你刚添加的网站了:http://homestead.app
  6. 配置完毕你的Homestead.yaml可以用vagrant启动它了. vagrant up,如果想要销毁这个虚拟机,可以运行vagrant destroy --force.--force的意思是销毁过程中不在征求确认了,也可以简写为-f

  7. Per Project Installation
    你所有的应用最后的配置和box不可能是一样的,每次可能会有些可以重复利用的部分,但你每次都要做,如果你想随同你的项目导出一份Vagrantfile,让其他人收益,少走弯路,你可以这么做:

    • 直接安装Homestead到你的项目下,然后用Composerrequire一下:

      composer require laravel/homestead --dev
    • 如果你的Homestead已经安装和部署了,可以在项目目录下,用make命令来生成:VagrantfileHomestead.yaml,生成文件一般在你项目根目录.make命令会自动将sitesfolders配置指令导入Homestead.yaml

      • Mac/Linux 执行:

        php vendor/bin/homestead make
      • Windows 执行:

        vendor\bin\homestead make

最后一句懒得翻了:

Next, run the vagrant up command in your terminal and access your project at http://homestead.app in your browser. Remember, you will still need to add an /etc/hosts file entry for homestead.app or the domain of your choice.

日常使用 Daily Usage

  1. 通过SSH连接虚拟机(Connecting Via SSH):
    你可以选择每次都进入Homestead的根目录运行vagrant ssh,也可以选择加个自定义命令到环境变量,让你下次只需要输入vm即可进入虚拟主机:
    alias vm="ssh vagrant@127.0.0.1 -p 2222"

建议: 把这里的127.0.0.1换成你分配给Homestead的专有IP,否则可能你有别的vagrant主机时会因为SSH不符合,还得到Homestead目录下去ssh登录

  1. 连接数据库(Connecting To Databases):
    Homestead 自带两种数据库:MySQLPostgres,你可以选择本地客户端的方式连接,比如利用Navicat或Sequel Pro,连接地址是127.0.0.1,连接端口是 33060 (MySQL) 或 54320 (Postgres).帐号是homestead/secret
    注意: 你只能在你的本机上访问数据库,并且虚拟机确实已经用vagrant启动成功

  2. 添加其他网站(Adding Additional Sites):
    添加sites配置到你的Homestead.yaml,然后在Homestead目录下运行vagrant provision.
    强调一遍, 一定要vagrant provision才能让新加的虚拟目录生效~~

  3. 端口(Ports)
    以下端口映射为Homestead 默认配置:

    • SSH: 2222 → Forwards To 22
    • HTTP: 8000 → Forwards To 80
    • HTTPS: 44300 → Forwards To 443
    • MySQL: 33060 → Forwards To 3306
    • Postgres: 54320 → Forwards To 5432
      如果你想转发其他端口并指定协议,可以配置Homestead.yaml文件:
      ports:
      - send: 93000
      to: 9300
      - send: 7777
      to: 777
      protocol: udp

Blackfire Profiler(Blackfire分析器)

Blackfire Profiler是一款自动收集你代码的执行数据(RAM, CPU, diskI/O)的工具,Homestead可以让你很轻松的将其应用在你自己的应用里.
所有依赖包都已经安装好了,你只需要在Homestead.yaml中配好Blackfire的服务ID和token即可,例如:

blackfire:
- id: your-server-id
token: your-server-token
client-id: your-client-id
client-token: your-client-token

如果你配置了Blackfire,重新在Homestead目录下运行vagrant provision进行重新配置即可.想要了解更多就去官方网站看看官方文档