如何将 elixir 应用程序从 Windows 开发机器部署到 Ubuntu 服务器

Posted

技术标签:

【中文标题】如何将 elixir 应用程序从 Windows 开发机器部署到 Ubuntu 服务器【英文标题】:How to deploy elixir app from Windows dev machine to Ubuntu server 【发布时间】:2019-01-23 11:02:27 【问题描述】:

我在 Windows 机器上开发了一个应用程序,我需要将它部署到 Ubuntu 18.04 服务器。我想使用的工具是 distillery 和 edeliver。

那么我可以在我的 Windows 机器上用 distillery 构建 release 还是应该在具有相同 的机器上构建它>CPU 架构和 Ubuntu 18.04 作为未来的生产机器,例如创建 Virtualbox Ubuntu guest 机器,在 Windows 主机和 Windows 主机之间共享我的应用程序的项目文件夹来宾机器并在 Ubuntu 来宾机器上构建版本?

如果有人在 Windows 上开发 elixir 应用,您能否分享一下您的部署过程步骤?

【问题讨论】:

【参考方案1】:

通常,酿酒厂会打包运行应用所需的一切,并且取决于平台。我们在 docker 中使用与生产服务器架构精确匹配的映像进行构建,但也可以使用一些专用的构建服务器。

但是,如果您的应用程序不使用任何依赖于二进制文件的奇怪库,我认为(但我不确定)您可能只需根据需要在服务器上设置运行时并移动已编译的 erlang 字节码即可在 Windows 上。但是你为什么要这样做呢?

【讨论】:

谢谢,Ivan,我在我的项目中使用了至少一个 c 库(comeonin bcrypt),我认为应该在 Ubuntu 机器上编译它才能正常工作。而且我不想在生产服务器上安装构建环境。 那么 Docker 就是你的选择。你甚至不必在本地做,我认为 github 现在有用于在容器中构建的工具,或者 AWS CodeBuild 可以。 抱歉 newbee 问题(我从未使用过 Docker)。在我的 Windows 机器上安装 Docker 没问题。下一步是什么?我想继续在 Windows 上开发应用程序,似乎 edeliver 命令在 Windows 上不起作用(根据github.com/edeliver/edeliver/issues/120 问题) 是的,您将能够像往常一样进行开发,您只需从 docker 中运行所有与发布相关的例程并将结果从容器中提取出来。这相对简单,您只需要安装 Docker 并为您的项目创建一个 Dockerfile,在其中描述您将使用的镜像(dockerhub 上有很多社区镜像)以及该镜像中应该包含哪些本地文件(复制它在,或绑定为一个卷)。 查看 Distillery 的这部分文档:hexdocs.pm/distillery/guides/building_in_docker.html【参考方案2】:

我过去曾尝试帮助 @PaulSchoenfelder 部署基于 Windows 构建的 Elixir 应用程序。我不相信我在校外说我们从来没有在这方面取得过巨大的成功。我们可以让它工作,但它总是有一些粗糙的边缘。因此,我对您的回答是在您的 Ubuntu 目标上构建它(并针对它运行 Distillery)。


编辑:我忘记了,如果您使用的是 Windows 10,那么 WSL 也可能是您的选择。

【讨论】:

【参考方案3】:

一般来说,部署 Erlang 或 Elixir 的最佳方式是使用发布版。一个版本将包括 Erlang Runtime 以及你所有的配置、Beam 文件等。

理论上,您可以交叉编译一个版本,但它可能比它的价值更麻烦。我通常只是通过 Vagrant 使用虚拟机

我在这里有一个关于它的电子邮件课程https://elixirtraining.us7.list-manage.com/subscribe?u=150de5dbc56d446a48f7fc3fd&id=03791ac7a9

【讨论】:

以上是关于如何将 elixir 应用程序从 Windows 开发机器部署到 Ubuntu 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Windows 上的“无法编译依赖项:bcrypt_elixir”错误?

如何在 Windows 中拥有最新版本的 Elixir

如何在 Windows 8.1 上运行 Elixir 脚本

在 elixir 应用程序中访问项目版本

如何将 Elixir 的伞式应用程序名称放入记录器元数据中?

如何读取 elixir mix 项目的配置文件