Elixir 部署系列
Erlang/Elixir: 用Distillery替換Exam打包器
Erlang/Elixir: Edeliver 持續部署 Checklist
Erlang/Elixir: 使用 Edeliver 進行持續部署
簡要
Distillery 是一個新的在未來用於替換Exrm的Elixir應用程式釋出工具. 它有比Exrm更快的構建速度, 完全用Elixir開發, 更靈活的配置, 目標是成為MIX本身的一部分, 作為Elixir的標準工具.
Distillery 還提供了一個外掛機制來管理整個部署過程中的各個階段
從Exrm切換到Distillery需要執行如下步驟:
-
刪除
mix.exs
檔案中的:exrm
依賴 -
新增
:distillery
依賴到mix.exs
defp deps do [ ... {:distillery, ">= 0.9.0", warn_missing: false}, {:edeliver, ">= 1.4.0"}, ] end
-
確保 Edeliver 版本
>= 1.4.0
-
執行
mix do deps.clean --unlock --unused, deps.get, deps.compile
-
執行
mix release.init
建立 Distillery 的配置檔案 -
按照 Distillery 文件編輯
rel/config.exs
配置檔案 -
從
.gitignore
中去掉rel
目錄, 並新增rel/<app name>
-
新增配置檔案和修改的
.gitignore
到Git倉庫 -
轉換現有的 exrm 外掛 到 distillery 外掛
對於傘型專案, 可能需要調整路徑, 因為現在釋出在專案的根目錄構建和生成, 另外, 預設所有的傘型釋出單獨構建, 也可以構建到單獨的釋出中.
參考 Issue #128
關於構建主機的環境問題
如果我們有很多依賴不同Erlang, Elixir 版本的專案, 為了能夠使用正確的環境, 通過SSH連線到構建主機之後, 可以通過在 .deliver/config
配置檔案中新增鉤子函式來切換環境
# 準備構建環境
post_git_push() {
status "Erlang/Elixir環境準備: 使用 Using OTP 19.0 和 Elixir 1.3.1"
__sync_remote "
source /home/ycc/.kerl/install/19.0_default/activate
source /home/ycc/.kiex/elixirs/elixir-1.3.1.env
"
}
# Phoenix 專案需要的設定, 用於把密碼配置匯入到釋出包中
pre_erlang_get_and_update_deps() {
local _prod_secret_path="/home/ycc/prod.secret.exs"
if [ "$TARGET_MIX_ENV" = "prod" ]; then
__sync_remote "
ln -sfn `$_prod_secret_path` `$BUILD_AT/config/prod.secret.exs`
"
fi
}
-
status
命令列輸出狀態行 -
__sync_remote
執行遠端Shell命令
系統啟動指令碼(Upstart)
deploy@host:~$ cat /etc/init/example_phoenix.conf
description "example_phoenix"
setuid deploy
setgid deploy
start on runlevel [2345]
stop on runlevel [016]
expect stop
respawn
env HOME=/home/deploy/example_phoenix
export HOME
pre-start exec /bin/sh /home/deploy/example_phoenix/bin/example_phoenix start
post-stop exec /bin/sh /home/deploy/example_phoenix/bin/example_phoenix stop