部署Elixir项目

部署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

在阿里服务器上部署项目时:要注意阿里服务器分着内网和公网,要想在公网访问自己部署的项目,需要在阿里控制台的内开放相应端口的权限。在安全组内设置一下。然后在试试公网能不能访问。

猜你喜欢

转载自blog.csdn.net/liguangix/article/details/83862302
今日推荐