使用distillery 構建專業的 phoenix 專案軟體包

weixin_33981932發表於2018-04-19

備註:

    首先需要安裝 elixir 環境
 
1. 基本專案說明
參考專案:
https://github.com/rongfengliang/phoenix-rest-demo
2. 專案說明
備註: 主要是外掛的配置

 mix.exs 

  defp deps do
    [
      {:phoenix, "~> 1.3.2"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:postgrex, ">= 0.0.0"},
      {:mariaex, "~> 0.8.4"},
      {:phoenix_html, "~> 2.10"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:distillery, "~> 1.5", runtime: false}  # 需要新增的構建包
    ]
  end
 
3. 使用
a. 初始化

首次使用需要進行環境的初始化

mix release.init

修改config/prod.exs

config :hello, Hello.Endpoint,
  # http: [:inet6, port: {:system, "PORT"}],
  http: [port: 4000],
  cache_static_manifest: "priv/static/cache_manifest.json",
  server: true  # 比較重要的引數,啟動的時候需要
  
b. 構建打包


mix  release  or MIX_ENV=prod mix release (生產環境建議)

備註: 可以指定環境 dev、 prod (預設為dev),實際中我們需要新增 MIX_ENV=prod mix release

c. 使用生成的軟體包

  Interactive: _build/prod/rel/hello/bin/hello console
  Foreground: _build/prod/rel/hello/bin/hello foreground
  Daemon: _build/prod/rel/hello/bin/hello start
4. 生成專案結構
生成的專案在 _build/prod/rel/hello ,實際使用docker 或者類似的工具進行執行

備註:預設prod 版本,執行時環境也會為我們打包,執行是比較簡單的,可以參考3.c


.
├── bin  # 應用啟動目錄
├── erts-9.3  # 執行是環境
│   ├── bin
│   ├── include
│   │   └── internal
│   │       ├── gcc
│   │       ├── i386
│   │       ├── libatomic_ops
│   │       ├── ppc32
│   │       ├── pthread
│   │       ├── sparc32
│   │       ├── sparc64
│   │       ├── tile
│   │       ├── win
│   │       └── x86_64
│   ├── lib
│   │   └── internal
│   └── src
├── lib  # 依賴的包
│   ├── asn1-5.0.5
│   │   ├── ebin
│   │   └── priv
│   │       └── lib
│   ├── compiler-7.1.5
│   │   └── ebin
│   ├── connection-1.0.4
│   │   └── ebin
│   ├── cowboy-1.1.2
│   │   └── ebin
│   ├── cowlib-1.0.2
│   │   ├── ebin
│   │   └── include
│   ├── crypto-4.2.1
│   │   ├── ebin
│   │   └── priv
│   │       ├── lib
│   │       └── obj
│   ├── db_connection-1.1.3
│   │   └── ebin
│   ├── decimal-1.5.0
│   │   └── ebin
│   ├── ecto-2.2.10
│   │   └── ebin
│   ├── eex-1.6.4
│   │   └── ebin
│   ├── elixir-1.6.4
│   │   └── ebin
│   ├── gettext-0.15.0
│   │   └── ebin
│   ├── hello-0.0.1
│   │   ├── consolidated
│   │   ├── ebin
│   │   └── priv
│   │       ├── gettext
│   │       │   └── en
│   │       │       └── LC_MESSAGES
│   │       ├── repo
│   │       │   └── migrations
│   │       └── static
│   │           ├── css
│   │           ├── images
│   │           └── js
│   ├── iex-1.6.4
│   │   └── ebin
│   ├── kernel-5.4.3
│   │   ├── ebin
│   │   └── include
│   ├── logger-1.6.4
│   │   └── ebin
│   ├── mariaex-0.8.4
│   │   └── ebin
│   ├── mime-1.2.0
│   │   └── ebin
│   ├── phoenix-1.3.2
│   │   ├── ebin
│   │   └── priv
│   │       ├── static
│   │       └── templates
│   │           ├── phoenix.gen.channel
│   │           ├── phoenix.gen.html
│   │           ├── phoenix.gen.json
│   │           ├── phoenix.gen.model
│   │           ├── phx.gen.channel
│   │           ├── phx.gen.context
│   │           ├── phx.gen.embedded
│   │           ├── phx.gen.html
│   │           ├── phx.gen.json
│   │           ├── phx.gen.presence
│   │           └── phx.gen.schema
│   ├── phoenix_ecto-3.3.0
│   │   └── ebin
│   ├── phoenix_html-2.11.2
│   │   ├── ebin
│   │   └── priv
│   │       └── static
│   ├── phoenix_pubsub-1.0.2
│   │   └── ebin
│   ├── plug-1.5.0
│   │   └── ebin
│   ├── poison-3.1.0
│   │   └── ebin
│   ├── poolboy-1.5.1
│   │   └── ebin
│   ├── postgrex-0.13.5
│   │   └── ebin
│   ├── public_key-1.5.2
│   │   ├── ebin
│   │   └── include
│   ├── ranch-1.3.2
│   │   └── ebin
│   ├── runtime_tools-1.12.5
│   │   ├── ebin
│   │   ├── include
│   │   └── priv
│   │       └── lib
│   ├── sasl-3.1.1
│   │   └── ebin
│   ├── ssl-8.2.5
│   │   └── ebin
│   └── stdlib-3.4.5
│       ├── ebin
│       └── include
└── releases  # release 版本
    └── 0.0.1
        ├── commands
        ├── hooks
        │   ├── post_configure.d
        │   ├── post_start.d
        │   ├── post_stop.d
        │   ├── post_upgrade.d
        │   ├── pre_configure.d
        │   ├── pre_start.d
        │   ├── pre_stop.d
        │   └── pre_upgrade.d
        └── libexec
            └── commands
            
同時在  releases/0.0.1  會有一個tar.gz 的包,這個是直接可以拷貝執行的軟體包
 
5. 總結
總的來說,還是比較簡單的,實際使用中我們可以整合docker,很方便
6 . 執行截圖
 
7 . 參考資料
https://github.com/bitwalker/distillery
https://hexdocs.pm/phoenix/deployment.html
https://github.com/rongfengliang/phoenix-rest-demo
 
 
 
 

相關文章