Phoenix Frameworkの開発環境をVagrant上に構築したときのメモです。
参考:http://www.phoenixframework.org/docs/installation
Vagrantfile を作成
以下の内容でVagrantfileを作成しました。
Boxはubuntu/trusty64
を使いました。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 4000, host: 4000
config.vm.network "private_network", ip: "192.168.33.10"
end
Vagrantを起動してSSHに接続しましょう。
$ vagrant up
$ vagrant ssh
Elixirの導入
provisioningで設定するのが良いですが、とりあえず初めて構築するので手動で設定していきます。
http://elixir-lang.org/install.html#unix-and-unix-like を参考に構築しました。
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get install elixir
PostgreSQLの導入
こちらを参考にしました。
http://qiita.com/ibara1454/items/40ce2d82926f48cf02bc
vagrantというRoleを作成し、パスワードもvagrantにしました。
$ sudo apt-get install -y postgresql-9.3
$ sudo service postgresql start
$ sudo -i -u postgres
$ psql
postgres=# ALTER ROLE postgres LOGIN PASSWORD 'postgres';
Hex package manager の導入
はじめに、HexというElixirのパッケージマネージャーを導入する必要があります。
Hexを使う事で、Phoenixのアプリケーションで利用する依存パッケージを管理することができます。
$ mix local.hex
Phoenix の導入
Phoenixのパッケージはmix archiveとして提供されています。mix archive自体はzipファイルで、beamファイルにコンパイルされたライブラリのコードが含まれています。
$ mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v1.0.3/phoenix_new-1.0.3.ez
Node.jsの導入
PhoenixではJavaScriptやCSSなどのアセットコンパイルにbrunch.ioを使用しています。
そのため、Node.js 0.12.0以上の導入が必要です。
$ sudo apt-get install nodejs npm nodejs-legacy
inotify-tools の導入
Phoenixではライブコードリロードのために、Linuxではinotify-toolsが必要なようです。
$ sudo apt-get install inotify-tools
Phoenixプロジェクトを作成する
参考:http://www.phoenixframework.org/docs/up-and-running
$ cd /vagrant
$ mix phoenix.new hello_phoenix
新規プロジェクトがサブディレクトリにできてしまったので、、、
$ mv hello_phoenix/* ./
$ mv hello_phoenix/.gitignore ./
$ mix ecto.create
$ mix phoenix.server
http://localhost:4000/ にアクセスして、Welcome to Phoenix! と表示されたら正常にサーバが起動しています。
完成版Vagrantfile
11/28 追記
プロビジョニングも自動で行うVagrantfileが完成したので、以下に掲載しておきます。
$script = <<SCRIPT
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get -y update
sudo apt-get -y install elixir nodejs npm nodejs-legacy inotify-tools postgresql-9.3
# postgresユーザにパスワードpostgresをつける
sudo -u postgres sh -c "echo \\"ALTER ROLE postgres LOGIN PASSWORD 'postgres';\\" | psql"
# install Hex
yes | mix local.hex
# install Phoenix
yes | mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v1.0.3/phoenix_new-1.0.3.ez
SCRIPT
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 4000, host: 4000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision 'shell', inline: $script
end