現代開發環境不得不說,只需要下幾行指令之後,開發環境就隨之建立,Windows 自從 Windows 10 推出之後,利用WSL 子系統模式來執行 Linux , 近年來流行的 Docker 也快速的發展,利用系統層虛擬化,讓開發環境與正式環境相當的貼近。
在開發專案的時候相當推薦採用 統一的 Docker 環境來處理這些環境架設的問題,減少各個系統的問題處理,統一函示庫元件之類的套件載入方法,推薦使用 Docker 。
今天要介紹的就是利用 Laravel 官方推出的 Laravel Sail ,配合我最近整合的 LINEBOT套件,快速的建立起開發環境。
首先需要作業系統為 Windows 10 1909 以上,並安裝 WSL2 ,Windows 作業系統的部分我就不再贅述
透過官方的教學文件 Getting Started On Windows,你還需要安裝 Docker Desktop,萬事都備妥了之後,你需要打開命令提示字元,按下 WIN+R 輸入 CMD,或是直接執行命令提示字元
輸入
wsl
接著會跳入 wsl 子系統
進入你想要的目錄,輸入
cd ~
會進入 home 目錄中,如果會一點 linux command 指令可以建立自己的資料夾位置放置,接著輸入
curl -s https://laravel.build/linebot-app | bash

其中 linebot-app 這字串是你自己可以自由跟動的專案名稱,輸入完畢之後,整個 laravel 9 的專案就開始建立了。
接著專案自己會開始下載整包新的 laravel,等系統 pull 完畢就可以了

等下載

過程中可以看到 用指令文字組成的 LARAVEL 字樣
下載完畢之後,依據你的專案名稱,進入該目錄,接著啟用 DOCKER 映像檔打包成容器
cd linebot-app

輸入 Laravel sail 指令,這段其實等同 docker-compose up -d ,只是 sail 專案包覆了指令
./vendor/bin/sail up -d
sail 會是之後調用環境需要啟用的指令,如果需要常輸入可以利用 alias 的方式輸入
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
編輯 ~/.bashrc
,如此一來就會常駐在系統中,後面範例都將會省去 sail 位置指令
接著安裝 mesak/laravel-linebot 套件,輸入
sail composer require mesak/laravel-linebot
安裝完畢之後依序輸入
sail artisan vendor:publish --tag=mesak-linebot.config
sail artisan vendor:publish --tag=mesak-linebot.listener
兩個檔案的輸出,分別是 config 設定檔,以及 listener 事件處理。

listener 會將檔案輸出到 app\Listeners 下,產生 LineBotListener.php 檔案,因此需要直接進入 config/linebot.php 去修改 listener 位置,如圖,將 listener 修改或是註解,改為新的位置 ‘App\Listeners\LineBotListener’

app\Listeners\LineBotListener.php 這支檔案,就在這邊定義 LINEBOT 接收到的訊息,如果需要回傳文字,就直接 return 就可以處理了,如果你會 Flex Messages ,只需要把回覆內容利用 Array 方式回傳,如產生中的 raw 指令一樣。
申請 LINEBOT
首先進入 LINE 的 開發者網站,點選 Message API,登入個人帳號之後就可以申請 LINEBOT

接著在你申請的機器人頁面中,找到 Channel ID,以及 Channel secret 兩個設定值,記住不要外洩出去,這兩個數值就可以產生 TOKEN 來與機器人互動,開啟根目錄下的 .env ,在最末段加入你的 ID 跟 SECRET
LINE_CLIENT_ID=xxxxxxxx
LINE_CLIENT_SECRET=xxxxxxxx

接著最後一段就是在路由開啟機器人的對接,根目錄的 routes/api.php 裡面追加一段
use Illuminate\Http\Request;
Route::post('/line', function (Request $request) {
return \Facades\Mesak\LineBot\Contracts\Bot::handle($request);
});
基礎設定就大功告成,接著要讓 LINE 連線到你的機器來作動
接著必須要下載 ngrok 沒用過的朋友可能要去看一下教學,這邊就不贅述

ngrok 要架設在 wsl 或是 windows 裡面都可以,我個人是架設在 windows 裡面,所以指定位置之後 輸入
ngrok http 80

當你 ngrok 都設定好的時候,就會跳出對外網址,Forwarding,理論上滑鼠可以點,點開他用瀏覽器查看,順便複製網址準備填入 LINE

由於我們是放在 api 路由上,把網址尾段加上 api/line,接著進入 LINE > messaging-api 分頁,把 Webhook URL 這邊填入 ngrok網址/api/line
加入機器人,看機器人有沒有回應你,輸入預設三個指令測試 hi、hello、raw ,都有出現東西的話機器人就連接完畢了。
整理一下步驟
安裝 WSL
安裝 DOCKER DESKTOP
指令輸入 wsl
選擇一個位置 例如 cd ~
curl -s https://laravel.build/linebot-app | bash
cd linebot-app
./vendor/bin/sail up -d
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
sail composer require mesak/laravel-linebot
sail artisan vendor:publish --tag=mesak-linebot.config
sail artisan vendor:publish --tag=mesak-linebot.listener
申請 LINEBOT 機器人取得 Channel ID,以及 Channel secret
修改 .env
修改路由,增加 function
use Illuminate\Http\Request;
Route::post('/line', function (Request $request) {
return \Facades\Mesak\LineBot\Contracts\Bot::handle($request);
});
安裝 ngrok
LINE 網頁中填入 Webhook URL 網址:{url}api/line
加入機器人測試
套件目前可以正常對應運作,但是未正式發布,因為對應的動作太少,等到 1.0.0 發布之後可能要移除套件之後再安裝,避免版本鎖定
以上步驟可以簡單快速建立一個 PHP 的開發環境,注意是開發喔,正式機環境可能還要學習一下部屬專案的流程,另外 LINEBOT 回應皆採用 Queued Event Listeners,如果未來 env 的 QUEUE_CONNECTION 參數 從 sync 改為 database,就會需要 woker 來處理,後續有套件上的問題,歡迎發 PR 給我或是提 issue