Phoenix × Elixir ×MariaDB × Dockerでjsonを返すAPIを開発する (4日目 : DB設定 & API作成編)
前回の記事(Phoenix × ElixirでAPIを開発する (3日目 : DB環境構築編) - はい!今やってます!)に引き続きDBの設定をして、いよいよAPIを作成します。
MariaDBの権限付与
hostname -i //On API Container grant all privileges on *.* to root@'172.%'; flush privileges; SET PASSWORD FOR 'root'@'172.%' = PASSWORD('password');
phoenixのDB定義を設定
cd ${App_Dir} vi config/dev.exs
設定例 DEV用) config :api, Api.Repo, adapter: Ecto.Adapters.MySQL, username: "${User_Name}", password: "${Password}", database: "api_dev", hostname: "mariadbmaster",
※テスト用も同様に書き換えてください。
DB設定
//APIサーバで cd ${App_Path} mix do deps.get, compile mix ecto.create env MIX_ENV=test mix ecto.create
jsonAPI作成
mix phoenix.gen.json Pool pools pool_name:string pool_url:string receiver_count:integer mayer_id:integer pool_rank:integer
ルーティング設定変更
vi web/router.ex
変更前) # Other scopes may use custom stacks. # scope "/api", Api do # pipe_through :api # end
変更後) # Other scopes may use custom stacks. scope "/api", Api do pipe_through :api resources "/pools", PoolController, except: [:new, :edit] end
migration実行
mix ecto.migrate
ルーティングを確認
mix phoenix.routes
サーバを起動
mix phoenix.server
Postでレコード作成
curl -H "Content-Type: application/json" -X POST -d '{"pool": {"pool_name": "Test Resource", "pool_url": "http://www.test.com", "receiver_count": "0", "mayer_id": "999999999", "pool_rank": "1"}}' http://192.168.59.103:8080/api/pools
レコード確認
http://192.168.59.103:8080/api/pools
githubで新規リポジトリを作成してコミット
GitHub · Where software is built -> Create Repo
cd ${App Dir} git init git remote add origin https://github.com/uedayuji/api.git git add . git commit -m "Initial Commit" git branch git push origin master git checkout -b release //Release Branch作成 git push origin release git checkout -b develop git push origin develop //Develop Branch作成
今回作成したコードはこちら(uedayuji/api · GitHub)で公開しています。 今後の実装はGithub上での開発となるので、このシリーズは完結です。
Phoenix × Elixir × MariaDB × Dockerでjsonを返すAPIを開発する (3日目 : DB環境構築編)
前回の記事 (Phoenix × Elixir × MariaDB × Dockerでjsonを返すAPIを開発する (2日目 : 開発環境構築編) - はい!今やってます!) に続いて、DB環境の構築を進めて行きます。PhoenixのデフォルトDBはPostgreDBですが、MariaDBで設定したいと思います。
Docker Image取得
git pull centos
Docker コンテナ作成
docker run --privileged -d -i -t --name=mariadbmaster -e "HOSTNAME=mariadbmaster" -e "TZ=Asia/Tokyo" -e "TERM=dumb" -v /Users/uedayuuji/work/docker_related/workspace:/workspace -p 3306:3306 ${Image_Id} /sbin/init
※systemctlからMariaDBを起動するために--privileged
オプションと/sbin/init
が必要
ログイン
docker exec -it mariadbmaster bash
mariadbのインストール
yum -y install mariadb-server
MariaDBの文字コード設定
vi /etc/my.cnf.d/server.conf > character-set-server=utf8
MariaDB起動
systemctl enable mariadb.service systemctl start mariadb.service mysql_secure_installation
MariaDBログイン
mysql -u root -p
イメージ作成
docker commit mariadbmaster uedayuji/mariadb
Docker Hubにプッシュ
docker login docker push uedayuji/mariadb
Docker Imageはこちらから落とせます(https://hub.docker.com/r/uedayuji/mariadb/)
次の記事(Phoenix × Elixir ×MariaDB × Dockerでjsonを返すAPIを開発する (4日目 : DB設定 & API作成編) - はい!今やってます!)に続きます。
Phoenix × Elixir × MariaDB × Dockerでjsonを返すAPIを開発する (2日目 : 開発環境構築編)
前回のDocker環境構築 ( Phoenix × ElixirでAPIを開発する (1日目 : Docker環境構築編) - はい!今やってます! ) に引き続いて、コンテナ内で開発環境を構築していきます。
Linuxの環境確認
uname -a
Localeの設定
localectl set-locale LANG=ja_JP.utf8 localectl status
wgetをインストール
yum install wget
Erlangを落とす
wget http://www.erlang.org/download/otp_src_18.2.tar.gz tar zxvf otp_src_18.2.tar.gz cd otp_src_18.2
※バージョンは適宜確認して最新のものを落とすようにして下さい。
依存関係ライブラリをインストール
yum install -y git gcc openssl openssl-devel ncurses ncurses-devel unixODBC unixODBC-devel gcc fop inotify-tools java-1.7.0-openjdk-devel gcc-c++
コンパイル&確認
./configure make make install erl
Elixirのインストール
cd /usr/local/lib git clone https://github.com/elixir-lang/elixir.git cd elixir make clean test vi ~/.bashrc > PATH="$PATH":/usr/local/lib/elixir/bin/ source ~/.bashrc iex
Hexインストール
mix local.hex
Node.jsをインストール
yum install epel-release yum install nodejs npm --enablerepo=epel npm install -g n n stable
Phoenixをインストール
git clone https://github.com/phoenixframework/phoenix.git && cd phoenix && git checkout v1.1.0 && mix do deps.get, compile
※バージョンは適宜最新のものを利用して下さい。
ライブラリローディングようのライブラリ(?)
yum install inotify-tools
テストアプリケーション作成
cd /usr/local/lib/elixir/phoenix/installer mix phoenix.new /var/www/${App_Name}
※MariaDBを使用したいので、実際はこのコマンドを実行しています。
mix phoenix.new /var/www/${App_Name} --database mysql
MariaDBインストール
yum -y install mariadb-server
サーバ起動
cd /var/www/${App_Name} vi config/dev.exs > (編集内容 : Portを80番を指定) mix phoenix.server
定義されているルーティングの確認
mix phoenix.routes
ブラウザからアクセス
http://${Docker_Ip}:8080/
Docker Image(api)をDocker Hubで公開
docker commit api uedayuji/phoenix docker images docker login docker push uedayuji/phoenix
こちら(Docker Hub)にDocker Imageは公開しています。
今日はここまで
こちらの記事(Phoenix × ElixirでAPIを開発する (3日目 : DB環境構築編) - はい!今やってます!)に続きます。