Linux系统下从零安装Elixir运行环境的详细步骤指南
时间:2026-06-22 11:03
Linux安装Elixir需先通过ErlangSolutions官方源安装匹配的Erlang OTP,再解压Elixir预编译包并创建软链。需确认版本:Elixir1 17以上要求OTP≥25 3。移除系统自带Erlang避免冲突。初始化hex和rebar后测试项目。注意编译时OTP版本必须不低于运行时版本。
# Linux下怎么安装Elixir运行环境

直接装`elixir`包?这事儿,基本行不通。系统包管理器里自带的`erlang`版本往往跟不上,或者干脆跟Elixir要求的版本不匹配,结果就是——`iex`启动失败、`mix`报莫名其妙的错、编译阶段直接崩溃。所以,正确姿势是:先把Erlang/OTP装到位,再配Elixir,顺序不能乱。
先确认下手里用的Elixir版本——Elixir 1.17以上的,需要Erlang/OTP不低于25.3;如果是1.16系列,OTP至少得是24开头。低于OTP 22的那些旧版本,基本跟现代Elixir工程无缘了。
**重中之重:别信包管理器默认的那个erlang。** CentOS上`yum install erlang`、Ubuntu上`apt install erlang`,很大概率给你装个OTP 20或21——然后`mix compile`直接报`** (ArgumentError) argument error`,或者干脆静默退出,查都无从查。
怎么确认当前版本?跑`erl -version`或者`erl -s erlang halt`,看输出首行。这里注意,别只看`erlang --version`,那个输出有时不准。
如果版本不够,就得先把系统的erlang卸干净:Ubuntu用`sudo apt remove erlang*`,CentOS用`sudo yum remove erlang*`。不清干净的话,新旧版本冲突会干扰PATH查找,后患无穷。
官方推荐的源是Erlang Solutions(不是EPEL也不是Debian默认源),它同步更新主线版本的预编译包,比源码编译稳得多。
## 用官方源装Erlang
源码编译Emake?对于生产环境或者CI,能省就省——编译容易因为缺`ja va-devel`、`wxWidgets`、`odbc-devel`这些依赖中途挂掉。官方预编译包把这些坑都填平了,装完直接用。
Ubuntu/Debian上,先下载并安装源配置deb包:
```
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && sudo dpkg -i erlang-solutions_2.0_all.deb
```
然后更新源并安装:
```
sudo apt update && sudo apt install esl-erlang
```
CentOS/RHEL则是加rpm源:
```
sudo rpm -Uvh https://packages.erlang-solutions.com/erlang-solutions_2.0-1.noarch.rpm
sudo yum install erlang
```
装完之后,用下面这个命令精准确认OTP版本——它会输出类似`"27"`这样的结果:
```
erl -eval 'io:format("~p~n", [erlang:system_info(otp_release)]).' -noshell -s init stop
```
## 安装Elixir
除非你要改Elixir编译器本身的源代码,否则官方预编译包够用了——无依赖、启动快、路径干净。源码`make`一遍完全是浪费时间。
下载对应平台的最新稳定版zip(以1.17.2为例,实际使用时替换为当前latest release的版本号):
```
wget https://www.php.cn/link/392ede8a57f26b1ddfccd8a0356577aa/download/v1.17.2/Precompiled.zip
```
解压到`/opt/elixir`,再软链到`/usr/local/bin`——这样路径干净,不会污染`~/.local/bin`或用户级PATH:
```
sudo unzip Precompiled.zip -d /opt/elixir
sudo ln -sf /opt/elixir/bin/elixir /usr/local/bin/elixir
sudo ln -sf /opt/elixir/bin/iex /usr/local/bin/iex
```
验证一下:`elixir --version`应该输出类似`Elixir 1.17.2 (compiled with Erlang/OTP 27)`。注意括号里写的是“compiled with”,这是编译时用的OTP版本;运行时真正用的是哪个版本,由`erl`决定,别弄混了。
## 验证mix和hex
`mix`是Elixir的构建工具,但它默认不带Hex包管理器。首次运行`mix hex.info`会提示安装,不过在国内企业网络或者老旧OpenSSL环境下,这一步可能卡在SSL证书上。
稳妥的做法是手动初始化:
```
mix local.hex --force && mix local.rebar --force
```
如果遇到SSL错误(最常见于企业袋里或老旧系统),临时加点环境变量可以绕过去:
```
export HEX_HTTP_CONCURRENCY=1
export MIX_ENV=prod
```
然后重试刚才的命令。
再测试下新建项目能不能正常运行:
```
mix new hello && cd hello && mix test
```
如果报`** (RuntimeError) could not find the "test" environment`,那就是`MIX_ENV`没生效。可以检查一下`config/config.exs`里有没有多余的`use Mix.Config`——新版Elixir已经弃用这个了,把它删掉就行。
## 版本耦合问题:最容易翻车的地方
很多人觉得“Erlang和Elixir版本差不多能跑就行”,但实际上有个很坑的规则:**编译时OTP版本必须 ≥ 运行时OTP版本。**
听起来绕?举个例子:你用OTP 27编译出来的Elixir二进制,不能降级到OTP 25的环境下跑。即便`erl`自己能在shell里正常进,`iex`也可能在加载Kernel模块时静默退出,完全没任何错误信息。这个问题一旦碰上,排查起来相当耗时。
所以说到底,安装Elixir之前,先把Erlang/OTP版本精确确认好——这才是整个流程的关键一环。