Nesta página

Elixir

A Guara Cloud suporta totalmente aplicacoes Elixir, incluindo frameworks como Phoenix, Ecto e qualquer outro projeto baseado em Elixir. O runtime BEAM do Elixir oferece aplicacoes tolerantes a falhas e altamente concorrentes, ideais para cargas de trabalho em tempo real.

Versoes suportadas

As seguintes versoes do Elixir sao detectadas automaticamente pelo Buildpack:

  • Elixir 1.15
  • Elixir 1.16
  • Elixir 1.17

A versao e determinada pelo campo elixir no seu arquivo mix.exs. Se nenhuma versao for especificada, a ultima versao estavel sera usada.

# mix.exs
defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "0.1.0",
      elixir: "~> 1.17"
    ]
  end
end

Deploy com Dockerfile

Um build multi-stage e a abordagem recomendada para aplicacoes Elixir. Ele compila seu release em um ambiente Elixir completo e depois copia apenas o release para uma imagem de runtime minima.

FROM elixir:1.17 AS builder

ENV MIX_ENV=prod

WORKDIR /app

RUN mix local.hex --force && mix local.rebar --force

COPY mix.exs mix.lock ./
RUN mix deps.get --only prod
RUN mix deps.compile

COPY . .
RUN mix assets.deploy 2>/dev/null || true
RUN mix release

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y libstdc++6 openssl libncurses5 locales \
    && rm -rf /var/lib/apt/lists/*

RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
ENV LANG=en_US.UTF-8

WORKDIR /app
COPY --from=builder /app/_build/prod/rel/my_app ./

EXPOSE 4000

CMD ["bin/my_app", "start"]

Deploy com Buildpack

Se o seu repositorio nao contiver um Dockerfile, a Guara Cloud detecta automaticamente seu projeto Elixir pela presenca de um arquivo mix.exs no diretorio raiz.

O Buildpack vai:

  1. Detectar a versao do Elixir e do OTP pelo mix.exs
  2. Instalar dependencias com mix deps.get
  3. Compilar assets se um projeto Phoenix com assets for detectado
  4. Gerar um Mix release com mix release
  5. Iniciar o binario do release

Configuracao de porta

Sua aplicacao deve escutar na porta configurada nas configuracoes do servico. Para aplicacoes Phoenix, o padrao e 4000, mas voce pode altera-lo a qualquer momento nas configuracoes do servico.

# config/runtime.exs
config :my_app, MyAppWeb.Endpoint,
  http: [port: String.to_integer(System.get_env("PORT") || "4000")],
  server: true

Estrutura de projeto exemplo

my-elixir-app/
  mix.exs
  mix.lock
  config/
    config.exs
    runtime.exs
  lib/
    my_app/
    my_app_web/
  priv/
  Dockerfile          # opcional — omita para usar Buildpack

Variaveis de ambiente

Estas variaveis de ambiente sao comumente usadas em deploys Elixir:

VariavelValor recomendadoDescricao
PORTDefinido pela plataformaA porta na qual sua aplicacao deve escutar
MIX_ENVprodGarante que a aplicacao compile em modo de producao
SECRET_KEY_BASE64+ caracteres aleatoriosSegredo usado para assinar sessoes e tokens no Phoenix
DATABASE_URLString de conexaoURL de conexao PostgreSQL para o Ecto
PHX_HOSTSeu dominioO hostname usado para geracao de URLs no Phoenix

Erros comuns