Erlang Release #

一、Release概述 #

Release是将Erlang应用程序打包成可部署单元的方式。

1.1 特点 #

  • 包含所有依赖
  • 独立运行
  • 系统启动脚本
  • 支持热升级

二、使用Rebar3 #

2.1 创建项目 #

bash
rebar3 new release my_release

2.2 目录结构 #

text
my_release/
├── apps/
│   └── my_app/
├── config/
│   ├── sys.config
│   └── vm.args
├── rebar.config
└── rel/
    └── rebar.config

2.3 rebar.config #

erlang
{erl_opts, [debug_info]}.
{deps, []}.

{relx, [
    {release, {my_release, "1.0.0"}, [my_app, sasl]},
    {mode, dev}
]}.

三、发布配置 #

3.1 sys.config #

erlang
[
    {my_app, [
        {port, 8080},
        {host, "localhost"}
    ]},
    {sasl, [
        {sasl_error_logger, false}
    ]},
    {kernel, [
        {logger, [
            {handler, default, logger_std_h, #{
                level => info,
                config => #{type => file, file => "log/app.log"}
            }}
        ]}
    ]}
].

3.2 vm.args #

text
-name my_node@127.0.0.1
-setcookie my_cookie
-heart
+K true
+A 10

四、构建发布 #

4.1 构建命令 #

bash
rebar3 release

4.2 输出目录 #

text
_build/
└── default/
    └── rel/
        └── my_release/
            ├── bin/
            │   ├── my_release
            │   └── my_release.cmd
            ├── erts-14.0/
            ├── lib/
            └── releases/
                └── 1.0.0/

4.3 运行发布 #

bash
_build/default/rel/my_release/bin/my_release console

五、系统命令 #

5.1 启动模式 #

bash
./bin/my_release console
./bin/my_release foreground
./bin/my_release daemon

5.2 管理命令 #

bash
./bin/my_release stop
./bin/my_release restart
./bin/my_release ping
./bin/my_release attach
./bin/my_release remote_console

5.3 版本管理 #

bash
./bin/my_release versions
./bin/my_release upgrade 1.1.0
./bin/my_release downgrade 1.0.0

六、热升级 #

6.1 配置热升级 #

erlang
{relx, [
    {release, {my_release, "1.0.0"}, [my_app, sasl]},
    {mode, prod},
    {extended_start_script, true},
    {vm_args, "config/vm.args"},
    {sys_config, "config/sys.config"}
]}.

6.2 创建升级包 #

bash
rebar3 release
rebar3 tar

6.3 执行升级 #

bash
./bin/my_release upgrade 1.1.0

七、部署最佳实践 #

7.1 生产配置 #

erlang
{relx, [
    {release, {my_release, "1.0.0"}, [my_app, sasl, runtime_tools]},
    {mode, prod},
    {include_erts, true},
    {extended_start_script, true},
    {vm_args, "config/vm.args"},
    {sys_config, "config/sys.config"},
    {overlay, [
        {copy, "priv/", "priv/"}
    ]}
]}.

7.2 Docker部署 #

dockerfile
FROM erlang:26

WORKDIR /app
COPY . .

RUN rebar3 release

EXPOSE 8080
CMD ["_build/default/rel/my_release/bin/my_release", "foreground"]

7.3 Systemd服务 #

text
[Unit]
Description=My Erlang Application
After=network.target

[Service]
Type=forking
User=erlang
Group=erlang
ExecStart=/opt/my_release/bin/my_release start
ExecStop=/opt/my_release/bin/my_release stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

八、总结 #

本章学习了:

  • Release概述
  • 使用Rebar3
  • 发布配置
  • 构建发布
  • 系统命令
  • 热升级
  • 部署最佳实践

准备好学习高级特性了吗?让我们进入下一章。

最后更新:2026-03-27