部署Elixir项目,确定其环境配置完成以后。
部署步骤:
数据库连接文件可以移植出项目代码中,保证项目根据安全性。
方法1:
例如,在“/var/config.prod.exs”。完成后,您必须从中导入它config/prod.exs。搜索该import_config行并将其替换为正确的路径
import_config “/var/config.prod.exs”
方法2:
通过环境变量替换数据库连接值(尚未研究过)
在妥善保护好秘密信息的后,获取依赖和编译环境。
$ mix deps.get --only prod
$ MIX_ENV=prod mix compile
只有在Phoenix应用程序中有静态资产(如图像,JavaScript,样式表等)时,才需要执行此步骤
brunch 需要安装一下才能用,如果你的nodejs的版本太低也是不支持的
$ brunch build --production
$ mix phx.digest
Check your digested files at "priv/static".
刚刚发想官网进行了更新,现在官网使用的是 webpack构建工具 , 对于brunch 这个是Phoenix Elixir 框架中默认构建工具。两者之间的区别: 由于brunch是PhoenixElixir框架中的默认构建工具,比较小众,功能方面也比较单一。而webpack虽然功能上比价强大但是配置上是比较繁琐的。使用PhoenixElixir框架的Elixir项目其实使用哪种都可以,因为这里不需要 太多其他功能,只需要构建资产就行,两个插件都能满足。
$ cd assets && webpack --mode production
$ mix phx.digest
Check your digested files at "priv/static".
就是这样!第一个命令构建资产,第二个命令生成摘要以及缓存清单文件,因此Phoenix可以快速为生产中的资产提供服务。
请记住,如果您忘记运行上述步骤,Phoenix将显示错误消息:
$ PORT=4001 MIX_ENV=prod mix phx.server
10:50:18.732 [info] Running MyApp.Endpoint with Cowboy on http://example.com
10:50:18.735 [error] Could not find static manifest at "my_app/_build/prod/lib/foo/priv/static/cache_manifest.json". Run "mix phx.digest" after building your static files or remove the configuration from "config/prod.exs".
错误信息非常明确:它说Phoenix无法找到静态清单。只需运行上面的命令来修复它,或者,如果您没有服务或根本不关心资产,您可以从中删除cache_static_manifest配置config/prod.exs。
在生产中启动服务器
要在生产中运行Phoenix,我们需要在调用时设置PORT和MIX_ENV环境变量mix phx.server:
$ PORT=4001 MIX_ENV=prod mix phx.server
10:59:19.136 [info] Running MyApp.Endpoint with Cowboy on http://example.com
如果您收到错误消息,请仔细阅读,如果仍然不清楚如何解决它,请打开错误报告。
您还可以在交互式shell中运行应用程序:
$ PORT=4001 MIX_ENV=prod iex -S mix phx.server
10:59:19.136 [info] Running MyApp.Endpoint with Cowboy on http://example.com
或者从iex控制台分离运行它。这有效地使进程守护进程,以便它可以在后台独立运行:
MIX_ENV=prod PORT=4001 elixir --detached -S mix do compile, phx.server
以分离模式运行应用程序允许我们在应用程序终止与服务器的shell连接后保持应用程序运行。
把它们放在一起
前面的部分概述了部署Phoenix应用程序所需的主要步骤。在实践中,您最终还会添加自己的步骤。例如,如果您使用的是数据库,则还需要mix ecto.migrate在启动服务器之前运行,以确保数据库是最新的。
总的来说,这是一个可以作为起点的脚本:
# Initial setup
$ mix deps.get --only prod
$ MIX_ENV=prod mix compile
# Compile assets
$ brunch build --production
$ mix phx.digest
# Custom tasks (like DB migrations)
$ MIX_ENV=prod mix ecto.migrate
# Finally run the server
$ PORT=4001 MIX_ENV=prod mix phx.server
在阿里服务器上部署项目时:要注意阿里服务器分着内网和公网,要想在公网访问自己部署的项目,需要在阿里控制台的内开放相应端口的权限。在安全组内设置一下。然后在试试公网能不能访问。