在預生產環境跑了一年多,在此記錄並分享一下。
當我們需要在多台伺服器部署多個不同的專案時,我們需要一個集中的設定資訊管理和同步的工具。考慮過的方案有:
用rsync同步.env
檔案:多個專案的設定略繁瑣,要ssh到伺服器修改再同步
用Docker:叢集部署比較方便,可以用圖形介面修改環境變量,但更新環境變數要重啟容器,大部分專案沒移轉到Docker
下面來看看Consul Consul Template的方案。
Consul和Consul Template都提供了預先編譯的可執行文件,下載解壓縮即可。
啟動Consul:
consul agent -server -bootstrap -ui -bind <ip>
其他服務節點可以透過consul agent -join <ip></ip>
加入到叢集。
啟動之後透過consul指令、RESTful API、Web UI管理Consul。
Consul提供了一個分佈式的鍵值對存儲,可以用來存儲應用的動態配置信息,基本操作:
# put 设置一个KV对 consul kv put APP_DEBUG false # get 获取 consul kv get APP_DEBUG # exprot 导出JSON consul kv export > data.json # import 导入JSON consul kv import @data.json # delete 删除 consul kv delete APP_DEBUG
Consul KV支援目錄,可以透過/
分隔key來實現,例如我們使用configs/<app_name>/</app_name>
這樣的目錄來存放一個專案的所有配置。
配置集中管理了,要如何傳給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多個參數,可以為一台伺服器上多個項目生成設定檔。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
Laravel微信小程式取得使用者詳細資料及帶參數小程式碼擴充的分析
#以上是使用Consul管理Laravel專案的配置介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!