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