概述

Elixir 的 Phoenix 框架对于开发 Web 应用非常方便,不仅有 RoR 的便利,还有 Erlang 的性能和高并发优势。 但是应用的发布涉及到 Erlang 和 Elixir 环境,部署不是那么方便,特别是很多 package 需要访问国外的服务器。

因此,如果能像 golang 那样,把整个应用打包成一个可执行的二进制,部署时会方便很多。 打包后不仅包含应用引用的 packages,也包含 erlang 的运行环境。

使用 distillery 就可以完成需求。 这里打包的是 API 服务,也就是不包含前端的部分。

distillery 打包

distillery 提供丰富了 API,除了打包,还有升级/降级,代码热替换等功能,这里我们只介绍打包的功能。

创建示例工程

$ mix phx.new hello --no-brunch --no-ecto

只是实验 phoenix 工程的打包功能,所以这里不安装前端的依赖,也不安装数据库相关依赖。

创建一个简单的 api lib/hello_web/router.ex

scope "/api", HelloWeb do
pipe_through(:api) get("/", PageController, :api)
end

lib/hello_web/controllers/page_controller.ex

def api(conn, _params) do
json(conn, %{result: "success"})
end

安装 distillery

mix.exs 中的 deps 中添加:

defp deps do
[
...
{:distillery, "~> 1.5", runtime: false}
]
end

然后在 hello 工程目录下执行:

mix deps.get

执行成功的话,在命令行界面上可以看到安装了 distillery 依赖。

配置 distillery 相关

首先,生成配置文件

mix release.init

这个命令生成的 rel/config.exs 没有什么要修改的。

修改 config/prod.exs

config :hello, HelloWeb.Endpoint,
server: true,
http: [port: 4001],
url: [host: "localhost", port: 4001]

这里写死了 port,也可以改成从环境变量中读取。

发布工程

MIX_ENV=prod mix release

编译成功后,在 _build/prod/rel/hello/releases/ 文件夹下生成一个 hello.tar.gz 包,这个包就可以直接部署在其他机器上。 如果默认配置,version 就是 0.0.1

部署运行

将生成的 hello.tar.gz 放到其他机器也可以直接运行,不用安装 erlang 和 elixir 环境。

cd /home
mkdir hello
tar zxvf hello.tar.gz -C hello
cd hello
./bin/hello foreground

总结

distillery 的功能远不止此,更多的功能可以参考:https://hexdocs.pm/distillery/getting-started.html

phoenix API服务发布的更多相关文章

  1. arcgis api for js 之网络分析服务发布

    1.引言 百度地图上有这样的功能:点击两个点,地图上会显示对两个点的路径规划.这个功能能否利用 arcgis api 实现呢?答案是肯定的.不过在实现之前,我们需要将数据发布为网络分析服务,接下来我将 ...

  2. motan源码分析一:服务发布及注册

    motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析 ...

  3. 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

    原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只 ...

  4. SOFA 源码分析 —— 服务发布过程

    前言 SOFA 包含了 RPC 框架,底层通信框架是 bolt ,基于 Netty 4,今天将通过 SOFA-RPC 源码中的例子,看看他是如何发布一个服务的. 示例代码 下面的代码在 com.ali ...

  5. dubbo源码之服务发布与注册

    服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置 ...

  6. .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

    前言 上篇<.net core实践系列之短信服务-架构设计>介绍了我对短信服务的架构设计,同时针对场景解析了我的设计理念.本篇继续讲解Api服务的实现过程. 源码地址:https://gi ...

  7. 深入学习Motan系列(二)——服务发布

    闯关经验: 袋鼠走过了第一关,顺利搭建出了Demo,信心爆棚.不过之后,心想怎么去研究这个框架呢.查了一下,官方文档,好像没什么东西可以研究啊.后来,又搜了搜博客,因为这是微博的框架嘛,所以搜索时用百 ...

  8. SpringCloud之Eureka:服务发布与调用例子

    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. SpringCloud将它集成在其子 ...

  9. Dubbo 系列(05-1)服务发布

    目录 Dubbo 系列(05-1)服务发布 Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 1.1 服务暴露整体机制 2. 源码分析 2.1 前置工作 2.2 ...

随机推荐

  1. 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection

    Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...

  2. .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

    写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...

  3. php 定时任务

    crontab第一次使用真是个坑 第一次使用crontab 时,会出现no crontab for root - using an empty one“Select a editor ......”下 ...

  4. java基础4:深入理解final关键字

    本文主要介绍了final关键字的使用方法及原理 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl. ...

  5. 看板中的WIP限制

    WIP限制并不是真的要限制你的进度,事实上正相反. 什么是WIP限制? 在敏捷开发中,WIP限制决定了每种情况下的工作流中可以存续的最大工作量.限制进行中的工作数量可以更容易辨识团队工作流中的无效工作 ...

  6. 补习系列(4)-springboot 参数校验详解

    目录 目标 一.PathVariable 校验 二.方法参数校验 三.表单对象校验 四.RequestBody 校验 五.自定义校验规则 六.异常拦截器 参考文档 目标 对于几种常见的入参方式,了解如 ...

  7. [十三]基础数据类型之AbstractStringBuilder

      String内部是一个private final char value[]; 也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然.... 所以,对于可变字符序列的需求是很明确 ...

  8. 使用开源项目Alipay.AopSdk.Core完成支付宝网页登录

    核心方法: public IActionResult UserInfoCallBackAli() { var alipayClient = new DefaultAopClient(ConfigAli ...

  9. LeetCode数组解题模板

    一.模板以及题目分类 1.头尾指针向中间逼近 ; ; while (pos1<pos2) { //判断条件 //pos更改条件 if (nums[pos1]<nums[pos2]) pos ...

  10. 第58章 Profile Service - Identity Server 4 中文文档(v1.0.0)

    IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据 ...