zyzixun.net

Phoenix framework di dalam docker

Saya sedang tertarik dengan elixir dan phoenix framework, di sini saya sekedar ingin berbagi tentang bagaimana caranya men-setup phoenix framework di dalam docker. Saya berasumsi bahwa pembaca sudah mengetahui apa itu Docker dan saya akan menggunakan docker-compose agar lebih mudah untuk me-manage banyak container.

Ada banyak alasan kenapa sebaiknya kita menggunakan docker untuk menjalankan phoenix, namun bagi saya pribadi ada 2 alasan penting yaitu pertama, agar semua dependency dari pheonik dapat ter-enkapsulasi dengan baik sehingga tidak mengganggu environment / system di laptop saya. Kedua, agar mudah untuk di-deploy.

Ok, mari kita langsung masuk ke pembahasan. Pada dasarnya untuk menjalankan phoenix framework, kita membutuhkan beberapa dependency selain Erlang VM (BEAM) dan Elixir. Kita membutuhkan NodeJS untuk assets pipeline, karena phoenix secara default menggunakan Brunch sebagai assets management tools dan Postgresql sebagai database. Namun perlu kita ketahui, Nodejs dan brunch bukan lah hal yang wajib untuk phoenix, karena saya pernah mencoba menjalankan nya tanpa node dan phoenix masih bisa jalan, hanya saja assets pipeline dan fitur auto-reload nya jadi tidak ada. Kita perlu menggunakan 2 container yaitu container untuk phoenix dan container untuk database.

Pada skema diatas kita dapat melihat kedua container terhubung dengan link. Yang perlu dilakukan untuk pertama kali adalah membuat docker-compose.yml untuk mendefinisikan container-containernya. berikut adalah code yang bisa digunakan

Dari kode diatas, kita membangun 2 buah container yaitu serverphx dan db. Untuk container db, saya melakukan mounting dari direktori data ke postgres data yang ada di dalam container db, sehingga saya akan dapat mengakses data tersebut dari luar container.

Untuk container serverphx saya butuh beberapa setting-an lagi, agar lebih mudah dipahami saya menyimpan settingan tersebut di Dockerfile yang kemudian akan dibaca oleh docker-compose melalui kode ini. build: . yang artinya Dockerfile harus berada di direktori yang sama dengan docker-compose.yml. Berikut kode Dockerfile

Jika kita jabarkan, perintah diatas akan men-download image elixir dari dockerhub kemudian menambahkan volume yang di mount ke direktori /usr/src kemudian menginstall nodejs dan phoenix framework. Selanjutnya saya hanya perlu menjalankan perintah docker-compose

docker-compose up --build -d

Kedua container tersebut akan dijalankan lewat daemon / background process. Kita bisa melihat list container yang sudah dijalankan dengan

docker-compose ps

state up menandakan container sudah running.

Selanjutnya kita perlu sedikit bermain di dalam container serverphx. Mari kita masuk ke container tersebut

docker-compose exec serverphx bash

dan mulai membuat aplikasi phoenix, dalam hal ini saya akan membuat aplikasi dengan nama “discuss”.

$ mix phx.new discuss

Ikuti instruksi dari installasi tersebut.

install phoenix dependencies:

$ cd discuss && mix.deps.get

dan install assets pipeline

$ cd assets && npm install && node node_modules/brunch/bin/brunch build

Selanjutnya kita perlu merubah konfigurasi database di dalam phoenix. buka file discuss/config/dev.exs. rubah password menjadi testing dan hostname menjadi db sesuai konfigurasi di docker-compose.yml

# Configure your database
config :discuss, Discuss.Repo,
adapter: Ecto.Adapters.Postgres,
username: “postgres”,
password: “testing”,
database: “discuss_dev”,
hostname: “db”,
pool_size: 10

Hampir selesai, selanjutnya tinggal create database nya

$ mix ecto.create

setelah proses create database selesai, step terakhir adalah jalankan phoenix server

$ mix phx.server

buka http://localhost:4000 di browser dan welcome to phoenix.