Laravel Web Installer : 让 Laravel 应用像 WordPress 一样通过浏览器进行安装升级


1、概述

你是否想让自己开发的 Laravel 应用可以像 WordPress、Discuz 或者其他 CMS 一样通过浏览器进行安装?Laravel Web Installer 这个第三方扩展包我们带来了福音,通过该扩展包,不再需要使用 Composer、SSH 这些命令行工具,你完全可以在浏览器中按照向导一步步实现应用的安装和升级工作。

注:需要指出的是这里安装指的不是 Laravel 的安装,即通过 laravel new project 或者 composer create-project 这些命令实现的操作,而是基于 Laravel 开发的电商、博客、CMS 这些具体应用的安装和升级操作。

该扩展包我们提供了以下功能:

  • 检查服务器是否满足要求
  • 检查项目文件权限
  • 设置数据库信息
  • 更新已存在的应用
  • 迁移数据库
  • 填充数据表

2、安装

在 Laravel 项目根目录下,使用 Composer 安装依赖包:

composer require rachidlaasri/laravel-installer ~1.3

安装完成后,需要在 config/app.php 中如下注册服务提供者:

RachidLaasri\LaravelInstaller\Providers\LaravelInstallerServiceProvider::class,

3、使用

在使用该扩展包之前还需要运行如下 Artisan 命令发布配置文件及前端资源:

php artisan vendor:publish

该命令执行后项目中新增一些文件及文件件:

  • config/installer.php – 该文件即为本扩展包的配置文件,用于配置数据库迁移及填充文件、项目需要的 PHP 扩展以及目录权限的配置。
  • public/installer/css/main.css – 该文件定义了安装界面默认的 CSS 样式
  • resources/views/vendor/installer – 该目录下包含了安装界面所需的视图文件
  • resources/lang/en/messages.php – 该文件定义了安装页面的提示文字,如果需要的话可以定义本地化消息,比如对应的中文翻译版本。

应用安装

下面我们在浏览器中访问 http://dev.laravel.app/install,页面显示如下:

Laravel Web Installer 安装应用界面

然后我们既可以按照向导一步步执行下去,直到安装完成,安装成功后会在 storage 目录下生成 installed 文件,下次再访问http://dev.laravel.app/install,Laravel Web Installer会根据中间件 canInstall 判断是否该目录下是否包含 installed,如果包含会认为已经安装,页面直接重定向到 http://dev.laravel.app,不再执行安装操作。

应用升级

要升级应用,需要修改 config/installer.php 文件中 last_version 配置值,将其修改为大于之前的版本号即可,比如之前为 1.0,现在改成 1.1,然后在浏览器中访问 http://dev.laravel.app/upgrade,页面显示如下:

2015-12-01_112352

同样按照升级向导一步步操作,直到升级成功,升级成功后会更新 storage/installed 文件中的版本号,这样,如果不修改 config/installer.php 文件中的 last_version 配置值,或者修改后的值小于之前版本的话,都不会执行升级操作。

小问题

当前版本 Laravel Web Installer 似乎有点小问题,按照其数据库迁移实现逻辑一次只能执行一个迁移,如果想要执行所有迁移需要对源码做改动。

将配置文件 config/installer.php 中的 migrates 设置为 true(或者其他任意字符串,不要为空即可):

'migrations' => 'true'

然后修改扩展包源码 vendor/rachidlaasri/laravel-installer/src/Helpers/UpgradeManager.php 的第29行代码如下:

Artisan::call('migrate');

这样在安装/升级的时候才能一次运行所有未执行的迁移。