Démarrer une application Elixir/Phoenix de zéro avec Docker

Posted by ZedTuX 0n R00t on December 5, 2017

Un petit article pour décrire succinctement comment démarrer un projet Elixir/Phoenix lorsque l’on travail avec Docker.

Pour résumer nous allons démarrer une image Elixir où nous pourrons ainsi créer notre application (sans installer Elixir sur l’OS de la machine), puis de là vous pourrez créer le Dockerfile traditionnel.

Le but étant donc de ne jamais installer, sur sa machine, autre chose que Docker, et donc garder une machine propre (Supprimez les images Docker et votre machine est comme neuve).

Les étapes

Ouvrir un terminal, et se rendre dans le dossier où vous regroupez vos projets:

1
cd ~/Developments

Démarrer une image Docker pour Elixir, en y montant le dossier courant:

1
docker run --rm -it -v "$PWD":/devs --workdir=/devs elixir:1.5.2-slim sh
  • --rm permet d’effacer le container lorsque vous l’arrêterez
  • -it permet d’avoir une console interactive
  • -v "$PWD":/devs va monter le dossier en cours dans le container à la position /devs
  • --workdir=/devs définir le chemin par defaut du container à /devs

Installer Phoenix

Maintenant que nous avons notre container qui tourne, et que nous avons une session sh, nous pouvons suivre la documentation de Phoenix afin de l’installer:

1
2
3
4
5
6
7
8
9
10
# mix local.hex
Are you sure you want to install "https://repo.hex.pm/installs/1.5.0/hex-0.17.1.ez"? [Yn]
* creating /root/.mix/archives/hex-0.17.1

# mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
Are you sure you want to install "https://github.com/phoenixframework/archives/raw/master/phx_new.ez"? [Yn]
* creating /root/.mix/archives/phx_new

# mix phoenix.new -v
Phoenix v1.3.0

Créer notre nouveau projet

Ultime étape, la création du project Phoenix:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# mix phx.new myapp
* creating myapp/config/config.exs
* creating myapp/config/dev.exs
* creating myapp/config/prod.exs
* creating myapp/config/prod.secret.exs
* creating myapp/config/test.exs
* creating myapp/lib/myapp/application.ex
* creating myapp/lib/myapp.ex
...

We are almost there! The following steps are missing:

    $ cd myapp
    $ mix deps.get
    $ cd assets && npm install && node node_modules/brunch/bin/brunch build

Then configure your database in config/dev.exs and run:

    $ mix ecto.create

Start your Phoenix app with:

    $ mix phx.server

You can also run your app inside IEx (Interactive Elixir) as:

    $ iex -S mix phx.server

Maintenant quittez le container (CRTL + D) et votre projet est prêt :)