Laravel 开发环境-Homestead & 安装 Laravel 应用

本想使用 Laravel Valet,但本机上有较低版本的PHP,决定采用全平台支持的Homestead。

Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,官方为我们提供了一整套本地开发环境 —— Laravel Homestead

安装:

需要先安装Vagrant和VirtualBox,安装完之后,在ITerm中使用如下命令将 laravel/homesterad 添加到 Vagrant 中。

vagrant box add laravel/homestead

结果就尴尬了,下载到4%就断了,尝试了几次换迅雷离线下载,成功下载了

https://atlas.hashicorp.com/laravel/boxes/homestead/versions/2.1.0/providers/virtualbox.box

再次添加:

vagrant box add laravel/homestead ./virtualbox.box

安装 Homestead

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

再在Homestead目录中执行init

cd Homestead
bash init.sh

当前目录下的Homestead.yaml基本不用修改,需要注意的是sites段路径是否符合项目
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
启动 Vagrant Box:

vagrant up

并没有想像的那么顺利,提示找不到ssh key;生成

ssh-keygen -t rsa -C "austgl@qq.com"

再次执行vagrant up,发现还是会从外网下载,用list看了下盒子已经存在了的

vagrant box list
laravel/homestead (virtualbox, 0)
laravel/homestead (vmware_desktop, 0)

vagrant up的时候提示
Box 'laravel/homestead' could not be found. Attempting to find and install...

搜了下,可以通过json指定meta,再加到Vagrant中,在box文件所在的目录中创建metadata.json:

{
    "name": "laravel/homestead",
    "versions": [{
        "version": "2.1.0",
        "providers": [{
            "name": "virtualbox",
            "url": "file://virtualbox.box"
        }]
    }]
}
vagrant box add metadata.json
==> box: Loading metadata for box 'metadata.json'
    box: URL: file:///Users/ganl/dev/web/metadata.json
==> box: Adding box 'laravel/homestead' (v2.1.0) for provider: virtualbox


---
    box: Unpacking necessary files from: file://virtualbox.box
vagrant box list
laravel/homestead (virtualbox, 0)
laravel/homestead (virtualbox, 2.1.0)
laravel/homestead (vmware_desktop, 0)

再执行 vagrant up, 虚机正常起来了,中间有红色的报错信息,目录没挂上
folders:
- map: ~/Code
to: /home/vagrant/Code
本地没有~/Code目录,新建Code目录后,vagrant destroy Homestead-7, 再vagrant up创建虚机;在本地Code目录下新建index.html,
vagrant ssh,连上虚机后,查看/home/vagrant/Code/下同步出现了index.html,但index.html是访问不到的,默认Homestead.yaml中的sites root是指向/home/vagrant/Code/Laravel/public。
为了方便连虚机,设置命令alias:

alias vm="ssh vagrant@127.0.0.1 -p 2222"
➜  Homestead git:(master) vm
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-66-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

3 packages can be updated.
0 updates are security updates.


vagrant@homestead:~$

安装 Laravel
需要先安装composer,再全局安装Laravel 安装器,

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer global require "laravel/installer"

再将$HOME/.composer/vendor/bin 加到系统PATH,否则不能在任意路径调用 laravel 命令
vi ~/.bash_profile #增加一行
export PATH="$HOME/.composer/vendor/bin:$PATH"
:wq,再source一下
source ~/.bash_profile
进入尾声,laravel new 命令创建一个新的 Laravel 应用

cd ~/Code
laravel new blog
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 59 installs, 0 updates, 0 removals
- Installing doctrine/inflector (v1.1.0): Downloading (100%)
- Installing erusev/parsedown (1.6.2): Downloading (100%)
- Installing jakub-onderka/php-console-color (0.1): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.3.0): Loading from cache
- Installing symfony/var-dumper (v3.2.7): Downloading (100%)
- Installing psr/log (1.0.2): Loading from cache
- Installing symfony/debug (v3.2.7): Loading from cache
- Installing symfony/console (v3.2.7): Loading from cache
- Installing nikic/php-parser (v3.0.5): Downloading (100%)
- Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%)
- Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)
- Installing psy/psysh (v0.8.3): Downloading (100%)
- Installing vlucas/phpdotenv (v2.4.0): Downloading (100%)
- Installing symfony/css-selector (v3.2.7): Downloading (100%)
- Installing tijsverkoyen/css-to-inline-styles (2.2.0): Downloading (100%)
- Installing symfony/routing (v3.2.7): Downloading (100%)
- Installing symfony/process (v3.2.7): Loading from cache
- Installing symfony/http-foundation (v3.2.7): Downloading (100%)
- Installing symfony/event-dispatcher (v3.2.7): Downloading (100%)
- Installing symfony/http-kernel (v3.2.7): Downloading (100%)
- Installing symfony/finder (v3.2.7): Downloading (100%)
- Installing swiftmailer/swiftmailer (v5.4.7): Downloading (100%)
- Installing paragonie/random_compat (v2.0.10): Downloading (100%)
- Installing ramsey/uuid (3.6.1): Downloading (100%)
- Installing symfony/translation (v3.2.7): Downloading (100%)
- Installing nesbot/carbon (1.22.1): Downloading (100%)
- Installing mtdowling/cron-expression (v1.2.0): Downloading (100%)
- Installing monolog/monolog (1.22.1): Downloading (100%)
- Installing league/flysystem (1.0.40): Downloading (100%)
- Installing laravel/framework (v5.4.21): Downloading (100%)
- Installing laravel/tinker (v1.0.0): Downloading (100%)
- Installing fzaninotto/faker (v1.6.0): Downloading (100%)
- Installing hamcrest/hamcrest-php (v1.2.2): Downloading (100%)
- Installing mockery/mockery (0.9.9): Downloading (100%)
- Installing webmozart/assert (1.2.0): Downloading (100%)
- Installing phpdocumentor/reflection-common (1.0): Downloading (100%)
- Installing phpdocumentor/type-resolver (0.2.1): Downloading (100%)
- Installing phpdocumentor/reflection-docblock (3.1.1): Downloading (100%)
- Installing phpunit/php-token-stream (1.4.11): Downloading (100%)
- Installing symfony/yaml (v3.2.7): Downloading (100%)
- Installing sebastian/version (2.0.1): Downloading (100%)
- Installing sebastian/resource-operations (1.0.0): Downloading (100%)
- Installing sebastian/recursion-context (2.0.0): Downloading (100%)
- Installing sebastian/object-enumerator (2.0.1): Downloading (100%)
- Installing sebastian/global-state (1.1.1): Downloading (100%)
- Installing sebastian/exporter (2.0.0): Downloading (100%)
- Installing sebastian/environment (2.0.0): Downloading (100%)
- Installing sebastian/diff (1.4.1): Downloading (100%)
- Installing sebastian/comparator (1.2.4): Downloading (100%)
- Installing phpunit/php-text-template (1.2.1): Downloading (100%)
- Installing doctrine/instantiator (1.0.5): Downloading (100%)
- Installing phpunit/phpunit-mock-objects (3.4.3): Downloading (100%)
- Installing phpunit/php-timer (1.0.9): Downloading (100%)
- Installing phpunit/php-file-iterator (1.4.2): Downloading (100%)
- Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)
- Installing phpunit/php-code-coverage (4.0.8): Downloading (100%)
- Installing phpspec/prophecy (v1.7.0): Downloading (100%)
- Installing myclabs/deep-copy (1.6.1): Downloading (100%)
- Installing phpunit/phpunit (5.7.19): Downloading (100%)
symfony/var-dumper suggests installing ext-symfony_debug ()
symfony/console suggests installing symfony/filesystem ()
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/http-kernel suggests installing symfony/browser-kit ()
symfony/http-kernel suggests installing symfony/class-loader ()
symfony/http-kernel suggests installing symfony/config ()
symfony/http-kernel suggests installing symfony/dependency-injection ()
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
symfony/translation suggests installing symfony/config ()
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-copy (Allows you to use Copy.com storage)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.5).)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)
laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (~1.0).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~2.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (~3.2).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (0.2.*).)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Generating optimized autoload files
> php -r "file_exists('.env') || copy('.env.example', '.env');"
> Illuminate\Foundation\ComposerScripts::postInstall
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
> php artisan key:generate
Application key [base64:uCYzsyvVZfZ0GKg8+gzdr/shq27UNlbYTeLiley8SX4=] set successfully.
Application ready! Build something amazing.

查看目录结构:

Code ll
total 8
drwxr-xr-x  24 ganl  staff   816B  5  1 17:20 blog
-rw-r--r--   1 ganl  staff     6B  5  1 16:52 index.html
➜  Code ls blog/
app            composer.json  database       public         server.php     vendor
artisan        composer.lock  package.json   resources      storage        webpack.mix.js
bootstrap      config         phpunit.xml    routes         tests          yarn.lock

修改hosts,增加一条记录,ip和Homestead.yaml中的对应

sudo vi /private/etc/hosts
#homestead
192.168.10.10 homestead.app

访问 homestead.app 提示 No such files 之类的错误,查看日志/var/log/nginx/homestead.app-error.log:都是找不到/home/vagrant/Code/laravel/public,
生成的Laravel应用目录为blog,修改Homestead.yaml中的sites to /home/vagrant/Code/blog/public。
vagrant reload 修改后的配置未能生效,只好暴力点vagrant destroy homestead-7,再vagrant up;
再次访问ok了,修改welcome.blade.php试下效果:

未经允许不得转载:ganlei的个人博客 » Laravel 开发环境-Homestead & 安装 Laravel 应用

赞 (2)
分享到:更多 ()