# 多網域切換操作手冊
### 套件資訊 : [gecche/laravel-multidomain](https://github.com/gecche/laravel-multidomain)
### 佈署指令
- 安裝套件。
`composer install`
- 發布設定檔(/config/domain.php)。
`php artisan vendor:publish --provider="Gecche\\Multidomain\\Foundation\\Providers\\DomainConsoleServiceProvider"`
- 在.env檔案新增多網域開關參數 MULTIPLE_DOMAIN (true:開啟/false:關閉),此設定預設為關閉。
- APP_PUBLIC_STORAGE(站台網域名稱,圖片url路徑使用,當網域為report-api2.test,此參數內容請打report-api2_test)。
### 常用指令(下列指令執行前請確認.env檔案中MULTIPLE_DOMAIN參數有開啟,所有指令都支援domain參數來針對指定站台執行,除了storage:link外)
* 增加站台網域
```
php artisan domain:add {domainHost}
```
假設我們輸入的網域為report-api2.test,指令輸入後會進行以下動作:
1. 在config/domain.php檔案內增添新網域資訊,若無此檔案請確認佈署步驟執行是否有遺漏。

2. 複製.env檔案內容為新網域的環境設定檔(注意:記得修改資料庫連線資訊)。

3. 新增該網域專屬的storage目錄,若站台新增失敗請檢查storage是否有與此次新增網域相同的目錄存在,若有請刪除後再次執行新增網域即可(圖片若須對外開方存取,記得開軟連結。oauth公私鑰也需自行再複製一份)。

* 移除站台
```
php artisan domain:remove {domainHost}
```
假設我們輸入的網域為report-api2.test,會將config/domanin.php內該站台資訊移除,並刪除該站台專用環境變數檔案(.env.report-api.test),但storage目錄內容則會保留不作任何更動。
* 更新參數
```
php artisan domain:update_env --domain_values='{"TOM_DRIVER":"TOMMY"}'
```
可針對特定站台或所有站台.env檔案中的參數內容進行更新,上方指令會更新所有站台TOM_DRIVER參數內容為TOMMY。
* 站台列表
```
php artisan domain:list
```
顯示config/domain.php檔案中網域相關.env檔案資訊與storage目錄資訊。
* 開放圖片可公開存取
請使用指令進行設定,如下方範例。
```
ln -s storage/report-api2_test/app/public public/storage/report-api2_test
```
### Q&A
- Q1: 多站台啟用後在各站台.env檔案中的APP_PUBLIC_STORAGE參數有何功用?
A1: APP_PUBLIC_STORAGE參數(圖1)用於程式在生成圖片url時,讓程式知道目前圖片是放置在哪個站台底下的目錄中。假設目前有一站台名稱為demo365.cc,圖片url在參數新增前後的變化可參考下圖2。

(圖1.環境變數APP_PUBLIC_STORAGE)

(圖2.圖片url於參數變更前後變化)
- Q2: 多站台啟用前上傳的維修圖片,在切換後都消失了,該如何讓圖片顯示正常?
A2: 假設切換多站台後舊圖想在新站demo365.cc上正常顯示,因切換多站台前維修相關的圖片是放置在storage/app/public/repair_fies目錄下,啟用多站台後會發生切換前新增的資料圖片遺失問題,可將維修相關圖片從storage/app/public/repair_fies搬到storage/app/demo_365/public/repair_files下(搬移後要注意檔案擁有者與擁有群組不可為root,可用chown指令變更)。