はじめに
RaspberryPi上で動くNerves+Phoenix環境の構築です。
参考
hexdocs.pm/phoenix
[github.com nerves-project #phoenix-web-interfaces]
(https://github.com/nerves-project/nerves/blob/master/docs/User%20Interfaces.md#phoenix-web-interfaces)
@nishiuchikazuma
nerves_pack(vintage_net含む)を使ってNervesのネットワーク設定をした〜SSHログインまで〜
環境
- IEx 1.9.1 (compiled with Erlang/OTP 22)
- nerves_bootstrap-1.7.1
目次
- 下準備
- プロジェクトの作成
- プロジェクトの依存関係を整理
- 実行
- まとめ
下準備
ディレクトリ構成は以下とします。
phoenix
├hoget
└my_app_ui
プロジェクトの構成は「poncho project structure」とします。
※umbrellaは書くところが多くなりそうなので。。
$ mix archive.install hex phx_new 1.4.15
#nervesを最新に(bootstrapのバージョンが古いと怒られる)
$ mix local.nerves
* creating **/.asdf/installs/elixir/1.9.1-otp-22/.mix/archives/nerves_bootstrap-1.7.1
# bootstrapのinstallが必要な場合は
mix archive.install hex nerves_bootstrap
プロジェクトの作成
$ cd phoenix
#nerves_packは使わなくてもOK。
$ mix nerves.new hoget --nerves-pack
$ mix phx.new my_app_ui --no-ecto --no-webpack
#とりあえずローカルで動くか確認
$ cd my_app_ui
$ mix phx.serve
ブラウザでlocalhost:4000にアクセス
プロジェクトの依存関係を整理
今回はUsing a poncho project structureとします。
# hoget/mix.exs
# ...
defp deps do
[
# Add
{:my_app_ui, path: "../my_app_ui"},
# ...
]
end
# ...
# Add 以下を追記
import_config "../../my_app_ui/config/config.exs"
import_config "../../my_app_ui/config/prod.exs"
config :my_app_ui, MyAppUiWeb.Endpoint,
# Nerves root filesystem is read-only, so disable the code reloader
code_reloader: false,
http: [port: 80],
# Use compile-time Mix config instead of runtime environment variables
load_from_system_env: false,
# Start the server since we're running in a release instead of through `mix`
server: true,
url: [host: "nerves.local", port: 80]
各々のプロジェクトでdeps.get
$ cd my_app_ui
$ mix deps.get
$ cd hoget
$ mix deps.get
** (RuntimeError) environment variable SECRET_KEY_BASE is missing.
You can generate one by calling: mix phx.gen.secret_key_base
#SECRET_KEY_BASEを作れと言われるので、
$ mix phx.gen.secret
"秘密鍵ができる"
#とりあえず環境変数へ
$ export SECRET_KEY_BASE=秘密鍵
$ mix deps.get
SECRET_KEY_BASEは、
my_app_ui/config/prod.secret.exs
で設定されてるようですが、ここでは深追いしません。
実行
$ export MIX_TARGET=rpi3
$ mix firmware
$ mix firmware.burn
ブラウザでnerves.localにアクセス
#まとめ
・Nerves上でPhoenixを動かした。
・プロジェクトの構成はponchoの方が独立性が高くなって、開発しやすいのでは。
・Phonenixの開発環境、SECRET_KEY_BASEの辺りは別記事で。