本想使用 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
|
|
再在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:
|
|
|
|
再执行 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:
|
|
安装 Laravel
需要先安装composer,再全局安装Laravel 安装器,
|
|
再将$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.
查看目录结构:
|
|
修改hosts,增加一条记录,ip和Homestead.yaml中的对应
|
|
访问 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试下效果: