Upgrade to Pro — share decks privately, control downloads, hide ads and more …

elixir_releases.pdf

 elixir_releases.pdf

Avatar for Ander Konzen

Ander Konzen

October 17, 2019

Other Decks in Programming

Transcript

  1. Sem entrar em muitos detalhes*, basicamente podemos executar uma aplicação

    Elixir com: $> mix run --no-halt $> mix phx.sever Mix
  2. Sem entrar em muitos detalhes*, basicamente podemos executar uma aplicação

    Elixir com: $> _build/prod/rel/app/bin/app start Distillery
  3. Mix Na documentação do mix encontramos: "Mix is a build

    tool that provides tasks for creating, compiling, and testing Elixir projects, managing its dependencies, and more.” https://hexdocs.pm/mix/Mix.html https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html
  4. Mix De maneira simplificada, `mix run` compila o código, etc.,

    e inicia as aplicações com :application (erlang) http://erlang.org/doc/man/application.html
  5. Distillery Na documentação do distillery encontramos: "Distillery is a tool

    for packaging Elixir applications for deployment using OTP releases. In a nutshell, Distillery produces an artifact, a tarball, which contains your application and everything needed to run it.” https://hexdocs.pm/distillery/home.html
  6. Distillery $> mix do deps.get, compile defp deps do [

    {:distillery, " ~> 2.0"} ] end $> mix distillery.init $> ./_build/prod/rel/app/bin/app start $> MIX_ENV=prod mix distillery.release
  7. Releases (mix release) Na documentação do mix encontramos: "Assembles a

    self-contained release for the current project. Once a release is assembled, it can be packaged and deployed to a target, as long as the target runs on the same operating system (OS) distribution and version as the machine running the mix release command.
  8. De maneira simplificada, é o distillery que foi integrado à

    ferramenta oficial `mix`. Releases (mix release) $> mix release.init $> MIX_ENV=prod mix release
  9. De maneira simplificada, é o distillery que foi integrado à

    ferramenta oficial `mix`. Releases (mix release)
  10. De maneira simplificada, é o distillery que foi integrado à

    ferramenta oficial `mix`. Releases (mix release) Com a diferença de ser mais fácil de usar. Por exemplo: config/prod.exs => compile time evaluation config/releases.exs => run time evaluation
  11. De maneira simplificada, é o distillery que foi integrado à

    ferramenta oficial `mix`. Releases (mix release)
  12. Ao usar o mix ou releases, devemos tomar os seguintes

    cuidados: Importante Mix Compilação e runtime dependem da máquina onde irá ser executado o `mix`, ie, erlang/elixir devem estar instalados. Releases Compilação depende da máquina onde será compilado, e runtime apenas precisa que o OS seja o mesmo da compilação.
  13. Deployment Funciona através de buildpacks, e atualmente os buildpacks oficiais

    para o Elixir rodam `mix run` Heroku Também funciona através de buildpacks, mas disponibiliza um buildpack que identifica releases Gigalixir
  14. Deployment Podemos usar um servidor "bare bones” (AWS, DigitalOcean, etc)

    e ter nosso próprio fluxo de deploy (ansible, scripts, etc) Server Ao construir uma imagem docker, ficamos livres para fazer o deploy em qualquer ambiente que suporte containers Docker
  15. Partindo de uma aplicação Phoenix, quais os passos? Construindo uma

    imagem docker 1. Lembrando que o OS onde é feito o build deve ser o mesmo para runtime 2. Seguindo boas práticas, queremos uma imagem docker pequena
  16. Dockerfile A imagem base é a mesma tanto para o

    build quando para o release: alpine