1. 程式人生 > >使用distillery&&docker 部署phoenix 應用

使用distillery&&docker 部署phoenix 應用

distillery 釋出了2.0 了,有好多的新的功能

  • config prodiver 進行環境變數的配置
  • appup tansforms 外掛系統,方便在release 構建的時候進行修改
  • mix release.gen.appup 新的mix task
  • pid 檔案

demo 是一個簡單的phoenix 同時使用docker 進行構建

專案準備

  • 專案結構
├── Dockerfile
├── README.md
├── _build
├── assets
├── config
├── deps
├── docker-compose.yaml
├── lib
├── mix.exs
├── mix.lock
├── priv
├── rel
└── test
  • 專案建立
mix phx.new --no-ecto phoenix_distillery
  • 新增distillery 支援
mix.exs
defp deps do
    [ ...,
      {:plug_cowboy, "~> 1.0"}, // 需要新增,不然構建會有問題
      {:distillery, "~> 2.0"}
       ]
end
  • 配置phoenix endpoint 資訊
config/prod.exs
config :phoenix_distillery, PhoenixDistilleryWeb.Endpoint,
  http: [port: {:system, "PORT"}],
  url: [host: "localhost", port: {:system, "PORT"}], # This is critical for ensuring web-sockets properly authorize.
  cache_static_manifest: "priv/static/cache_manifest.json",
  server: true,
  root: ".",
  version: Application.spec(:phoenix_distillery, :vsn)
  • 構建
mix deps.get --only prod
MIX_ENV=prod mix compile
cd assets
yarn build build --production
cd ..
mix phx.digest
  • distillery release
進行release 初始化配置
mix release.init
MIX_ENV=prod mix release
  • 執行
PORT=4001 _build/prod/rel/phoenix_distillery/bin/phoenix_distillery foreground

docker 構建支援

  • dockerfile

    使用mutil stage 構建

# The version of Alpine to use for the final image
# This should match the version of Alpine that the `elixir:1.7.2-alpine` image uses
ARG ALPINE_VERSION=3.8

FROM elixir:1.7.2-alpine AS builder

# The following are build arguments used to change variable parts of the image.
# The name of your application/release (required)
ARG APP_NAME=phoenix_distillery
# The version of the application we are building (required)
ARG APP_VSN=0.0.1
# The environment to build with
ARG MIX_ENV=prod
# Set this to true if this release is not a Phoenix app
ARG SKIP_PHOENIX=false
# If you are using an umbrella project, you can change this
# argument to the directory the Phoenix app is in so that the assets
# can be built
ARG PHOENIX_SUBDIR=.

ENV SKIP_PHOENIX=${SKIP_PHOENIX} \
    APP_NAME=${APP_NAME} \
    APP_VSN=${APP_VSN} \
    MIX_ENV=${MIX_ENV}

# By convention, /opt is typically used for applications
WORKDIR /opt/app

# This step installs all the build tools we'll need
RUN apk update && \
  apk upgrade --no-cache && \
  apk add --no-cache \
    nodejs \
    yarn \
    git \
    build-base && \
  mix local.rebar --force && \
  mix local.hex --force

# This copies our app source code into the build container
COPY . .

RUN mix do deps.get, deps.compile, compile

# This step builds assets for the Phoenix app (if there is one)
# If you aren't building a Phoenix app, pass `--build-arg SKIP_PHOENIX=true`
# This is mostly here for demonstration purposes
RUN if [ ! "$SKIP_PHOENIX" = "true" ]; then \
  cd ${PHOENIX_SUBDIR}/assets && \
  yarn install && \
  yarn deploy && \
  cd .. && \
  mix phx.digest; \
fi

RUN \
  mkdir -p /opt/built && \
  mix release --verbose && \
  cp _build/${MIX_ENV}/rel/${APP_NAME}/releases/${APP_VSN}/${APP_NAME}.tar.gz /opt/built && \
  cd /opt/built && \
  tar -xzf ${APP_NAME}.tar.gz && \
  rm ${APP_NAME}.tar.gz

# From this line onwards, we're in a new image, which will be the image used in production
FROM alpine:${ALPINE_VERSION}

# The name of your application/release (required)
ARG APP_NAME=phoenix_distillery

RUN apk update && \
    apk add --no-cache \
      bash \
      openssl-dev

ENV REPLACE_OS_VARS=true \
    APP_NAME=${APP_NAME}

WORKDIR /opt/app

COPY --from=builder /opt/built .

CMD trap 'exit' INT; /opt/app/bin/${APP_NAME} foreground
  • docker-compose
version: '3.5'
services:
  web:
    build: ./
    ports:
      - "4000:4000"
    env_file:
      - config/docker.env
  • docker 執行環境變數配置
config/docker.env

SECRET_KEY_BASE="u1QXlca4XEZKb1o3HL/aUlznI1qstCNAQ6yme/lFbFIs0Iqiq/annZ+Ty8JyUCDc"
PORT=4000
LANG=en_US.UTF-8
REPLACE_OS_VARS=true
ERLANG_COOKIE=myapp
  • 構建&&執行
docker-compose build && docker-compose up -d
  • 效果

說明

2.0 有好多新特性的新增,後邊會有簡單的使用demo,功能很強大

參考資料

相關推薦

使用distillery&&docker 部署phoenix 應用

distillery 釋出了2.0 了,有好多的新的功能 config prodiver 進行環境變數的配置 appup tansforms 外掛系統,方便在release 構建的時候進行修改 mix release.gen.appup 新的mix task pid 檔案 demo 是一

使用distillery&&docker 部署phoenix 應用

  distillery 釋出了2.0 了,有好多的新的功能 config prodiver 進行環境變數的配置 appup tansforms 外掛系統,方便在release 構建的時候進行修改 mix release.gen.appup 新的mix task pid

關於docker部署javaweb應用的問題

ava target docker部署 問題 是什麽 link javaweb 什麽 docker 我做了兩個鏡像,一個mysql,一個tomcat。建完mysql容器之後,在建tomcat的時候用--link把他們鏈接起來了進tomcat的容器裏面 /etc/hosts

使用Docker部署javaWeb應用

分享 search zhang 部署 bubuko docke 技術分享 target 查看 1. 安裝Dcoker http://www.cnblogs.com/zhangqian27/p/9089815.html 2. 查看鏡像 $ docker ima

centos7.5 下docker部署springboot應用

本篇dock部署springboot應用的前提:準備好docker環境和要部署的springboot應用的jar包 一、docker環境準備          在虛擬機器centos上安裝docker或者其他可以使用的centos都可以,本篇

使用 Docker 部署 Springboot 應用

介紹一種新的部署方式,讓應用部署更加簡單高效。 對於微服務架構來說,服務拆分的越多,運維的成本也就越高,以前的一個系統只需要部署一次就可以了,但拆分成多個服務後,就需要多次部署了,為了簡化部署流程,容器化成了該問題的最佳解決方案。 這裡假定大家對 Springboot 應用的搭建及 Dock

springboot(9)--docker部署springboot應用

docker:應用容器引擎,使用者在客戶端可以將應用和應用的執行環境、依賴包等打包成映象,上傳到映象倉庫,然後在伺服器拉取映象並執行。不同映象之間的依賴互不影響,且映象的執行效率很高。 0.拉取jdk8映象 這個待會用作基映象。 docker pull open

Docker部署Web應用(Django)

之前部署Web應用,沒用docker,直接在伺服器上部署,使用了fabric+nginx+supervisor+gunicorn部署,可檢視我寫過的一片部落格:部署Web應用。但後來瞭解了docker,為其“Build,Ship and Run Any App,

docker 部署springboot應用

第一步:搭建springboot的web應用,可在CMD命令列中通過mvn install命令將應用打成jar包:如demo-0.0.1-SNAPSHOT.jar 第二步:將jar包copy到centos檔案系統中,指定目錄示例為:/usr/local/demo-0.0.1-SNAPSHOT.jar 第三

docker部署web應用

1.安裝mysql容器    docker run --name mysqlname -v /home/ubuntu/*/data0:/var/lib/mysql -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root -t index.csphe

手把手docker部署java應用(初級篇)

本篇原創釋出於 Flex 的個人部落格:點選跳轉 前言   在沒有 docker 前,專案轉測試是比較麻煩的一件事。首先會化較長的時間搭建測試環境,然後在測試過程中又經常出現測試說是 bug,開發說無法復現的情況,導致撕逼。   本篇記錄瞭如何將一個 java 應用部署到 docker 中。主要講述了以下幾個

利用Docker部署SpringBoot應用程式

我們已經安裝完成了Java環境,那麼本篇就開始怎麼部署一個SpringBoot專案到Docker中,Docker實現Spri

docker 實戰之 tomcat 部署 web 應用

tput 實戰 容器 鏡像 準備 什麽 web 應用 logs 進程 1. 拉取tomcat docker pull tomcat 2. 啟動 tomcat 服務器 (這裏拉取tomcat鏡像, 鏡像裏面是包括jdk的) docker run -d --name m

使用Docker部署ASP.NET Core應用程序實踐

4.0 cor run .com cnblogs pda word 本地配置 問題 前言 最近把很火的Docker給看了,於是就磨拳擦掌要去實踐一下。於是就拿之前一個aps.net core的項目(已被停止)去練手。該項目之前在ubuntu14.04上確保可以正常運行,所以

離線服務器下docker部署應用

download 初學 image PE world 簡單 得到 windows 並不是 一分鐘內形成docker的模糊概念 網上很多文章避免將docker與虛擬機混為一談,但對於初學者來說,完全可以將docker當做一種虛擬機技術,只需要牢牢記住一點最重要的區別:dock

docker 部署應用

包括 ima image 解壓 容器 -perm 添加主機 tcp linu Docker 部署應用 所需環境   Linux系統:centos7 (推薦7.4)   Docker環境:V1.13.1   鏡像:應用鏡像包 部署過程:   1、 docker環境搭建  

docker安裝步驟及基於docker容器部署web應用LNMP服務器環境

docker-ce fastcgi nal attach 應用 forward centos7 dir epel docker的介紹 docker的定義: 1.docker的三個概念:Docker是一個開源的引擎,可以輕松的為任何應用創建一個輕量級的、可移植的、自給自足的容

使用docker-composer部署nodejs應用

新建Dockerfile 在應用目錄下新建Dockerfile FROM node:8 WORKDIR /usr/src/app ADD . /usr/src/app RUN npm install --registry=ht

docker部署應用訪問不了

部署了應用,但是訪問不了             解決思路:                &nbs

Docker部署Tomcat及Web應用

一、線上下載docker yum install -y epel-release yum install docker-io   # 安裝docker chkconfig docker on     # 加入開機啟動 service docker start     #