この記事は、ロシア語を話すエリクサーのコミュニティであるWunsh.ruのコンテストに参加しています。 開業医とただの共感者- 参加してください!
この記事では、リモートサーバーでリリースするアプリケーションをセットアップするプロセスについて説明します。 Elixirの世界では、このようなEdeliver
に適したプロジェクトが2つあります。1つ目はアプリケーションがEdeliver
Distillery
で、2つ目はコードのホットスワップを可能にするEdeliver
です。 以下に、最も単純なElixirアプリケーションを例として使用して、これら2つのライブラリを使用するための基本的な手順を示します。 また、この記事では、 docker
コンテナを使用して展開を改善する方法についても説明します。
蒸溜所
Distillery
、Elixirプロジェクトリリースの生成を自動化するように設計されています! 彼は同じ著者のExrmの相続人です。 とても使いやすい。
最初のステップは、プロジェクトに応じてdistillery
を追加することです。 そして、 mix deps.get
を実行します。
def application do [ mod: {Single, []}, applications: [:logger, :cowboy, :plug] ] end defp deps do [{:cowboy, "~> 1.1.2"}, {:plug, "~> 1.3.0"}, {:distillery, "~> 1.0"}] end
distillery
構成ファイルを作成するには、プロジェクトディレクトリで次のコマンドを実行する必要があります。
mix release.init
このコマンドは、 config.exs
ファイルでrel
ディレクトリを作成します。 Distillery
は調整可能なパラメーターが多数あります 。 自動的に生成されたファイルがすぐに近づきました。
「戦闘」モードで展開するビルドアプリケーションを作成するには、次のコマンドを実行する必要があります。
MIX_ENV=prod mix release
このコマンドは、コンパイルされたアプリケーションで_build/prod/rel/<name>/releases/<version>/<name>.tar.gz
を作成します。 さらに、このアーカイブは製品に配信する必要があります。 アプリケーションを解凍して実行する必要があるサーバー。 これは、単純なshell
スクリプトを使用して実行できますが、ダウンタイムが発生するため、これは最適なオプションではありません。
deploy.sh #!/bin/sh REMOTE_USER= REMOTE_HOST= APP_NAME= APP_FOLDER= SERVER=$REMOTE_USER@$REMOTE_HOST echo read VERSION if !(ssh $SERVER ) then echo ssh $SERVER fi echo scp _build/prod/rel/$APP_NAME/releases/$VERSION/$APP_NAME.tar.gz $SERVER:$APP_FOLDER/tmp/ echo ssh $SERVER echo ssh $SERVER echo ssh $SERVER
プロポーザルの利用可能性を確認するだけです。
curl -i http://host HTTP/1.1 200 OK server: Cowboy date: Thu, 09 Feb 2017 11:28:08 GMT content-length: 9 cache-control: max-age=0, private, must-revalidate content-type: text/plain; charset=utf-8 Single v1
製品へのアプリケーションの配信を簡素化できます。 Edeliver
を使用するサーバー。
Edeliver
Edeliver
は基本的に、ElixirおよびErlangアプリケーションをビルドおよびデプロイし、ホットコード更新を実行できるbashスクリプトセット用のElixirで作成されたアドオンです。
最初のステップは、プロジェクトに応じてedeliver
を追加することedeliver
。 そして、 mix deps.get
を実行します。
def application do [ mod: {Single, []}, applications: [:logger, :cowboy, :plug, :edeliver] ] end defp deps do [{:cowboy, "~> 1.1.2"}, {:plug, "~> 1.3.0"}, {:distillery, "~> 1.0"}, {:edeliver, "~> 1.4.2"}] end
Edeliver
すべての設定は、 .deliver/config
ファイルに保存されます。 その中で、さまざまな種類の環境を指定できます。 たとえば、BUILD、STAGING、およびPRODUCTION。
APP="single" BUILD_HOST="host" BUILD_USER="www" BUILD_AT="/home/www/single/tmp" PRODUCTION_HOSTS="host" PRODUCTION_USER="www" DELIVER_TO="/home/www/single"
「戦闘」モードで展開するビルドアプリケーションを作成するには、次のコマンドを実行する必要があります。
env MIX_ENV=prod mix edeliver build release
次に、ビルドを目的の環境(この場合は実稼働環境)に配信するには、以下を行う必要があります。
mix edeliver deploy release to production
このコマンドは、アセンブルされたリリースのみをリモートサーバーにダウンロードしますが、アプリケーション自体は起動しません。
アプリケーションを起動するには、次のコマンドを使用します。
mix edeliver start production
実稼働環境とは異なる環境でビルドを行った場合、アプリケーションが破損する可能性があります。 これは、アプリケーションを構築するときに、NIF(ネイティブ実装機能)が使用されるという事実によるものです。NIFは、異なるマシンでは異なる場合があります。
プロポーザルの利用可能性を確認するだけです。
curl -i http://host HTTP/1.1 200 OK server: Cowboy date: Thu, 09 Feb 2017 11:28:08 GMT content-length: 9 cache-control: max-age=0, private, must-revalidate content-type: text/plain; charset=utf-8 Single v2
DockerとDistilleryについて少し
この記事のWunshの優れた翻訳は、 http: //teamon.eu/2017/deploying-phoenix-to-production-using-docker/で読んでください。
ヘロク
HerokuでのElixirアプリケーションのデプロイは非常に簡単です。必要なことは、既存のアプリケーションにビルドパックを追加することだけです
heroku buildpacks:set https:
または、このビルドパックで新しいアプリケーションを作成します。
heroku create
このビルドパックは、 公式リポジトリの例を使用して設定できます 。
その後、すべてが以前と同じように行われます。
git push heroku master
おわりに
関数型プログラミング言語Elixirに興味がある場合、または単に共感している場合は、Elixirに関するTelegramチャンネルhttps://telegram.me/proelixirに参加することをお勧めします。
国内のElixirコミュニティは、プロジェクトWunsh.ruに直面して単一のプラットフォームとして登場し始めています。 現在、プロジェクトにはテーマに関するニュースレターがあり、違法なものはありません。週に一度、ロシア語でエリキシルに関する記事の選択を含む手紙が届きます。
文学
http://bitwalker.org/posts/2016-07-21-distillery-vs-exrm-vs-relx/
https://shovik.com/blog/6-deploying-phoenix-apps-for-rails-developers
https://github.com/bitwalker/distillery
https://github.com/boldpoker/edeliver
https://github.com/HashNuke/heroku-buildpack-elixir
http://blog.plataformatec.com.br/2016/06/deploying-elixir-applications-with-edeliver/