利用 Laravel 處理所有開發流程

環境建置

前後端開發

測試

部署

從起始到上線

環境建置

建置開發環境的痛處

Homestead

  • Ubuntu 14.04
  • Git
  • PHP 5.6 / 7.0
  • Xdebug
  • HHVM
  • Nginx
  • MySQL
  • Sqlite3
  • Postgres
  • Composer
  • Node (With PM2, Bower, Grunt, and Gulp)
  • Redis
  • Memcached (PHP 5.x Only)
  • Beanstalkd
  • Laravel Envoy
  • Blackfire Profiler

Homestead 包涵的軟體

安裝 Homestead

  • 首先,要先安裝 Vagrant 及 virtualbox 或是 VMware
     
  • 再來,安裝 Homestead Vagrant Box

     
  • Cloning Homestead Repository

     
  • 在 ~/.homestead 底下執行下列指令,建立 Homestead.yaml 設定檔
  $ vagrant box add laravel/homestead
  $ git clone https://github.com/laravel/homestead.git Homestead
 $ bash init.sh

設定 Homestead.yaml

 ---
 ip: "192.168.10.10"
 memory: 2048
 cpus: 1
 hostname: demo
 name: demo
 provider: virtualbox

設定虛擬主機

設定 Homestead.yaml

 $ ssh-keygen -t rsa -C "you@homestead"
  • 建立 ssh key 來設定 vagrant 的連線

     
  • 更新 authroize 及 key 的參數
 authorize: ~/.ssh/id_rsa.pub

 keys:
     - ~/.ssh/id_rsa

設定 Homestead.yaml

 folders:
     - map: "/Users/Jerry/Projects/demo"
       to: "/home/vagrant/demo"
  • 設定分享資料夾


     
  • 設定 Nginx 及資料庫



     
  • 進到 /etc/hosts 新增 vagrant host 的名稱
 sites:
     - map: demo.app
       to: "/home/vagrant/demo/public"

 databases:
     - demo
 192.168.10.10  demo.app

執行 Homestead

  • 啟動一個 homestead

     
  • 關閉 homestead

     
  • 使用 ssh 連至 homestead
     
 $ vagrant up
 $ vagrant destroy --force
 $ ssh vagrant@127.0.0.1 -p 2222

其它功能

  • 可利用資料庫管理工具連線至 Homestead 的 Database

     
  • 設定 Cron job

     
  • 其它連線使用的 port
 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
 $ schedule:run
 username: homestead
 password: secret

根據專案分別安裝

  • 利用 Composer 安裝至你的專案中 

     
  • 使用 make 指令產生 Vagrant File 及 Homestead.yaml

     
  • 接下來其它開發者只要 clone 下來,直接執行 composer,建立自己的 Homestead.yaml 就能開發啦!
 $ php vendor/bin/homestead make
 $ composer require laravel/homestead

前後端開發

後端開發的痛處

  • Composer 在 create-project 的時候很久…

     
  • 幾乎每次都要整合社群服務…

     
  • 三不五時就要接金流…

     
  • 有時只是想接 API…

Laravel & Composer

  • 可以幫你先做好的,Laravel 都寫成 Package 了
    • laravel/installer
       
    • laravel/socialite
       
    • laravel/casher
       
    • laravel/lumen

前端開發的痛處

  • 總之先來個 Bootstrap、Font awesome、jQuery
     
  • CSS 寫多了就想寫 SASS、LESS
     
  • JS 寫多了就想寫 CoffeeScript、TypeScript
     
  • 檔案大了、多了就想壓縮一下
     
  • Else...

Laravel & Elixir

 var elixir = require('laravel-elixir');

 elixir(function(mix) {
     mix.sass('app.scss');
 });
 {
   "private": true,
   "devDependencies": {
     "gulp": "^3.8.8"
   },
   "dependencies": {
     "laravel-elixir": "^4.0.0",
     "bootstrap-sass": "^3.0.0"
   }
 }

Elixir

Laravel & Elixir

  • 壓縮檔案




     
  • Browser 同步化
 var elixir = require('laravel-elixir');

 elixir(function(mix) {
     mix.sass('app.scss');
 });
  $ gulp watch
 var elixir = require('laravel-elixir');

 elixir(function(mix) {
     mix.browserSync({
         proxy: 'demo.app'
     });
 });

測試

自動化測試

  • Composer 已經幫你裝好 phpunit 以及 phpspec 了



     
  • 執行自動化測試
 "require-dev": {
     "fzaninotto/faker": "~1.4",
     "mockery/mockery": "0.9.*",
     "phpunit/phpunit": "~4.0",
     "phpspec/phpspec": "~2.1"
 },
 elixir(function(mix) {
     mix.phpUnit();
 });
 $ gulp tdd

部署

一直部署感到累

  • 隨著開發的進行到後期,部署的週期愈來愈短。

     
  • 雖然用了 git、composer、gulp 等工具,還是得登入到遠端的 host 下指令。

Laravel & envoy

 $ envoy run deploy
 @servers(['web' => '192.168.10.10'])

 @task('deploy', ['on' => 'web'])
     cd site
     git pull
     composer dump-autoload
     php artisan migrate
 @endtask

一條龍的開發流程

環境建置

 $ gulp tdd
 $ envoy run deploy

前端開發

後端開發

自動化測試

自動化部署

你需要的都有了

參考資料

Q & A

利用 Laravel 處理所有開發流程

By logic_solutions_jerry

利用 Laravel 處理所有開發流程

  • 1,577