尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

快速上手:erlang.mk 部署指南——用 relx 打包 OTP Release 与 sfx 自解压可执行文件

快速上手:erlang.mk 部署指南——用 relx 打包 OTP Release 与 sfx 自解压可执行文件 快速上手erlang.mk 部署指南——用 relx 打包 OTP Release 与 sfx 自解压可执行文件【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mkerlang.mk 是一款Erlang 构建工具build tool that just works它内置对 Relx 的深度集成可以一条命令生成标准的OTP release发布包还能进一步打包成sfx 自解压可执行文件单个 .run 文件是 Erlang 项目从开发走向生产环境的利器。本文将带你用最少步骤完成部署配置。为什么选择 OTP Release 部署很多新手会把编译出的.beam文件直接拷到服务器运行结果发现服务器缺少 Erlang/OTP 环境、依赖路径混乱。OTP release 把运行时代码、依赖、Erlang/OTP 运行时erts和启动脚本打成一个自包含的目录拷到任何服务器解压即用——这是 Erlang 社区公认的生产部署方式。erlang.mk 把这套流程完全自动化只要项目里存在relx.config配置文件执行make就会自动构建 release。relx 部署最快配置方法3 步第 1 步把 relx 加入依赖在项目的Makefile中把 relx 加入REL_DEPS构建 release 时才会自动拉取不污染日常依赖REL_DEPS relx第 2 步创建 relx.config 配置文件erlang.mk 自带一份可直接套用的模板 templates/relx.config核心内容就几项{release, {project_name_release, 1}, [project_name, sasl, runtime_tools]}. {dev_mode, false}. {include_erts, true}. {extended_start_script, true}. {sys_config, config/sys.config}. {vm_args, config/vm.args}.两个值得注意的选项include_erts设为 true 时会把 Erlang 运行时打进发布包服务器无需单独安装 OTPsys_config / vm_args分别指定系统配置与 VM 参数项目中也提供了现成模板 templates/sys.config 和 templates/vm.args。第 3 步一条命令生成发布包$ make rel执行完成后你会得到产物位置用途release 目录_rel/名称/直接部署、本地调试tarball 压缩包_rel/名称/名称-版本.tar.gz上传服务器解压即用erlang.mk总是同时生成 tarball省去了手动压缩的步骤这正是它开箱即用的体现。一键运行发布包make run想在本地验证 release 能否正常启动只需$ make run该命令会自动完成编译、构建 release然后以console 模式启动发布包——你还会得到一个可直接交互的 Erlang shell方便现场排查问题。相关逻辑在 plugins/relx.mk 中实现它还支持在 WindowsMSYS2下自动识别.cmd启动脚本。不停机升级make relup 的秘密生产环境最怕重启即中断。Erlang 的 release 升级机制允许在运行中的系统上热更新代码升级代码后更新应用和 release 的版本号并为每个要更新的应用编写appup文件执行make relup生成升级包_rel/名称/名称-新版本.tar.gz将升级包放入运行目录的releases/新版本/下执行$ bin/release名称 upgrade 新版本/release名称整个过程无需重启虚拟机连接不断、状态不丢。这套流程的完整说明见官方文档 doc/src/guide/releases.asciidoc。单文件部署神器sfx 自解压可执行文件如果你希望交付物只有一个文件erlang.mk 还提供了实验性的 sfxself-extracting功能实现代码位于 plugins/sfx.mk$ make SFX1生成结果_rel/release名称.run它的原理非常巧妙一个小的 shell 引导脚本 追加在文件末尾的 release tarball。执行时自动把包解压到临时目录、以 console 模式启动、退出后自动清理。效果如下$ ./_rel/hello_world.run Erlang/OTP 19 [erts-8.1] [64-bit] [smp:4:4] Eshell V8.1 (abort with ^G) (hello_worldlocalhost)1适合快速分发演示环境或内部工具。注意sfx 目前仅支持 console 模式启动。生产环境实战技巧开发/生产双配置为不同环境维护独立的 relx 配置通过环境变量切换ifdef PROD RELX_CONFIG $(CURDIR)/relx.prod.config else RELX_CONFIG $(CURDIR)/relx.dev.config endif开发环境可开启dev_mode代码不复制到 release 中改完即生效生产环境务必关闭。自定义输出目录部署流水线想控制产物位置用RELX_OUTPUT_DIR覆盖默认的_rel即可RELX_OUTPUT_DIR /path/to/staging/directory版本自动化relx 支持从 Git 历史自动生成语义化版本号semver。配合 overlay 模板make rel后可从_rel/名称/version文件直接读取最终版本号方便 CI 打标签、写发布说明。常见问题速查FAQmake没有生成 release检查是否存在relx.config或relx.config.scripterlang.mk 检测到它才会触发 release 构建。如何只重新构建 release用make rel无需全量编译。distclean 会删什么执行make distclean会清掉整个_rel输出目录重新构建即可。延伸阅读release 完整文档doc/src/guide/releases.asciidocsfx 自解压文档doc/src/guide/sfx.asciidocrelx 插件源码plugins/relx.mksfx 插件源码plugins/sfx.mkrelx 配置模板templates/relx.config从make rel到make SFX1erlang.mk 用两个命令就把 Erlang 项目送上了生产环境——这就是构建工具just works的魅力。【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表