はじめに
はじめまして、naritomoと申します。
本職はインフラエンジニアを行っています。
個人的にいじっているElixir系についてなにか投稿しようと
思って作成してみました。
初めての投稿なのでいろいろアドバイスいただけると嬉しいです。
立ち上げ概要
windows11を使用してwsl2+Ubuntu+vscode環境を作り、
docker-composeを使用して立ち上げるものになります。
必要なソースは以下にまとめてあります。
なぜ、あえてDockerなのか?
インフラエンジニアとしてDockerから触れたほうが扱いやすく、
以下の利点を感じられたため、開発環境構築ではDockerを使用することを
推しています。
- OS問わず同じ開発環境での開発が可能
- インフラ/アプリエンジニアでのコラボがしやすい。
(具体的にはインフラ屋でOS/開発環境のベース環境を構築し、
アプリエンジニアで本来行うべき開発業務に集中できる。) - 本番Web環境で多く使用されているAWS/AzureなどのIaaSサービス
に対し、Docker資産を使用できる。
一応、本番環境展開にPaaSを使用する手はありますが、
AWS/Azureを絡めたほうが業務につながるとみています。
構築される環境
-
Phoenix1.5
- Erlang/OTP 23
- Elixir 1.11.3
- Phoenix 1.5.7
-
Phoenix1.6
- Erlang/OTP 24
- Elixir 1.13.4
- Phoenix 1.6.15
-
Phoenix1.7
- Erlang/OTP 25
- Elixir 1.14.3
- Phoenix 1.7.1
必要なソフトウェア
- Docker 20 以上
- Docker Compose 1.27 以上
動作確認済みのOS
- Windows11(wsl2上のUbuntuから稼働)
構築方法
windoows11上にwsl/Ubuntu22.04をインストールする。
作業実施後、以下のコマンドをwindowsコマンドプロンプトで実施する。
wsl --unregister Ubuntu
wsl --set-default Ubuntu-22.04
wsl --list --verbose
docker-desktopをインストールする。
従業員250人以上かつ年間売上高1000万ドル以上の企業利用の場合、
有料となるため注意
Docker Desktopを使用しない(できない)場合、以下のサイトを参照
DockerDesktopからWSL2上のみで動くDockerに移行する
vscodeのインストールを行い、wsl2内のUbuntuコンソールを開く
以下のサイトを参考に、vscodeのインストール/Ubuntuコンソールを開く。
参考>
WSL2 + Ubuntu + VSCodeでの開発環境構築
dockerコンテナクローン、デプロイ、立ち上げ
*Phoenix1.5利用
git clone https://github.com/naritomo08/elixir-docker-db.git elixir-docker-db
*Phoenix1.6利用
git clone -b phx1.6 https://github.com/naritomo08/elixir-docker-db.git elixir-docker-db
*Phoenix1.7利用
git clone -b phx1.7 https://github.com/naritomo08/elixir-docker-db.git elixir-docker-db
*上記について、それぞれ別名フォルダで立ち上げればそれぞれの
バージョン用として共存できます。
cd elixir-docker-db
sudo bin/setup.sh
sudo bin/start.sh
sudo bin/login.sh
→この時点でElixirプログラミング可能
後にファイル編集などをして、git通知が煩わしいときは
作成したフォルダで以下のコマンドを入れる。
rm -rf .git
Webサイト作成
mix phx.new testsite --database postgres
→yを選択する。
cd testsite
vi config/dev.exs
"hostname: "postgres","にする。
*Phoenix1.6/1.7の場合
"http: [ip: {0, 0, 0, 0}, port: 4000],"にする。
vi config/test.exs
"hostname: "postgres","にする。
DB作成
mix ecto.create
サイト立ち上げ
mix phx.server
サイト参照
ブラウザで以下のURLを参照してサイト参照できることを確認する。
DB管理ツール(adminer)にも参照できることを確認する。
-
ログイン情報(postgresql)
- データベース種類: Postgresql
- サーバ: postgres
- ユーザ名: postgres
- パスワード:postgres
-
ログイン情報(mariadb)
- データベース種類: mysql
- サーバ: mariadb
- ユーザ名: root
- パスワード:root
サイト停止
Ctrl+c を2回押すことで停止可能
コンテナ停止
*コンテナに入っている場合
exit
sudo bin/stop.sh
コンテナ起動
sudo bin/start.sh
Elixirコンテナログイン
sudo bin/login.sh
コンテナ削除
docker-compose down
作成したソースを流用したい場合
サイト作成したあと、以下のフォルダ内をgithubなどに保管すれば、
他の開発/本番環境へソースを持っていって利用できます。
apps/testsite
本docker環境に持っていきたい場合、
"dockerコンテナクローン、デプロイ、立ち上げ"したあと、
別ターミナルで上記フォルダ(別名でも可)へ使用したいソースを入れて、
もとのターミナルでソースを入れたフォルダに移動して
"サイト立ち上げ"を実施すればひとまず立ち上がるはずです。
他環境で本ソースを使用した立ち上げ方は、
ここでは割愛いたします。
おわりに
合わせてDBなし版のコンテナも作っていますので、
参照いていただいて指摘をいただけると嬉しいです。
Phoenix1.6/1.7を使用したい際は、phx1.6/phx1.7ブランチに切り替え
参照してください。
Phoenixサイト作成アラカルトについて、
以下の場所にもまとめていますので、
是非参照ください。
本記事以外にもruby/phpについても同様のものを上げていますので、
参照していただいてこちらにも挑戦していただければと思います。
NeosとElixir/Phoenix連携も行ってみました。