在預生產環境跑了一年多,在此記錄和分享一下。
問題 & 其他方案
當我們需要在多台伺服器部署多個不同的項目時,我們需要一個集中的配置資訊管理和同步的工具。考慮過的方案有:
用rsync同步.env
檔案:多重專案的配置略繁瑣,要ssh到伺服器修改再同步
用Docker:叢集部署比較方便,可以用圖形介面修改環境變數,但是更新環境變數要重啟容器,大部分項目沒遷移到Docker
下面看一下Consul + Consul Template的方案。
安裝
Consul和Consul Template都提供了先行編譯的可執行檔,下載解壓即可。
啟動Consul:
consul agent -server -bootstrap -ui -bind <ip>
其他服務節點可以通過consul agent -join <ip>
加入到叢集。
啟動之後通過consul命令、RESTful API、Web UI管理Consul。
Consul KV
Consul提供了一個分布式的索引值對儲存,可以用來儲存應用的動態配置資訊,基本操作:
# put 設定一個KV對consul kv put APP_DEBUG false# get 擷取consul kv get APP_DEBUG# exprot 匯出JSONconsul kv export > data.json# import 匯入JSONconsul kv import @data.json# delete 刪除consul kv delete APP_DEBUG
Consul KV支援目錄,可以通過/
分隔key實現,例如我們使用configs/<app_name>/
這樣的目錄來存放一個項目的所有配置。
Consul Template
配置集中管理了,怎樣傳給Laravel呢?一個方法是在Laravel裡用Consul的API擷取配置資訊,第二個發放是在外部監聽KV變化然後寫入到.env
檔案,Consul Template就是這樣的一個外部工具。
我們用的配置模板(.env.tpl
):
{{ range ls "configs/crm" }}{{ .Key }}={{ .Value }}{{ end }}
意思是遍曆config/crm
這個KV目錄,產生key=value
格式。
運行:
## 格式: 模板檔案:目標檔案:更新後執行的命令consul-template --template \ /path/to/.env.tpl:/path/to/.env:'php /path/to/artisan config:cache'
就可以產生.env檔案,並且持續監聽變化,一個consul-template執行個體可以有多個--template多個參數,可以為一台伺服器上多重專案組建組態檔案。
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!