需要准备好什么?

  • 一个能运行的 Phoenix 应用
  • 一个合适的开发环境
  • 一个合适的生产环境

我们需要确定生产环境和开发环境的系统架构一样,比如说开发环境是64位的 Linux ,
生产环境也得保持是64位的 Linux。

本文的目标

本文的目标是通过 Exrm(Elixir Release Manager)
生成一个 release 版本,并将 release 部署到服务器,使应用能通过公网访问。

分步进行

让我们把目标拆分成几个步骤来进行吧!

  • 添加 exrm 依赖
  • 生成 release 版本
  • 测试
  • 部署
  • 公众发布

添加 exrm 依赖

首先在 mix.exs 文件里面添加 {:exrm, “~> 1.0”} 依赖,比如这样:

1
2
3
4
5
6
7
8
9
defp deps do
[{:phoenix, "~> 1.2.0"},
{:phoenix_ecto, "~> 3.0"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.3"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:cowboy, "~> 1.0"},
{:exrm, "~> 1.0"}]
end

声明好依赖文件之后别忘了运行 mix deps.getmix deps.compile 来安装依赖。
安装完依赖可以运行 $ mix help 来查看 exrm 是否可用:

1
2
3
4
5
6
$ mix help
...
mix release # Build a release for the current mix application.
mix release.clean # Clean up any release-related files.
mix release.plugins # View information about active release plugins
...

配置我们的应用

添加完 exrm 之后,我们需要更新一下应用的生产环境配置项。
我们先从 mix.exs 开始:

1
2
3
4
5
def application do
[mod: {HelloPhoenix, []},
application: [:phoenix, :cowboy, :logger, :postgrex, :gettext,
:phoenix_ecto, :phoenix_html]]
end

通过这一步,我们能够帮助 Exrm 把依赖捆绑进 release 版本。
同样我们也需要在 config/prod.exs 里面更新一些配置选项,我们需要把服务选项开启,并添加上版本号:

1
2
3
4
5
6
7
8
# Configures the endpoint
config :hello_phoenix, HelloPhoenix.Endpoint,
http: [port: 8888],
url: [host: "example.com"],
root: ".",
cache_static_manifest: "priv/static/manifest.json",
server: true,
version: Mix.Project.config[:version]

生成 release 版本之前,我们还需要预先编译一下静态环境:

1
2
3
4
$ MIX_ENV=prod mix phoenix.digest
==> ranch (compile)
...
Check your digested files at 'priv/static'.

然后我们生成一个 release 版本:

1
2
3
$ MIX_ENV=prod mix release

...