Elixirアプリケーションをデプロイする

Exilirアプリケーションを展開する







この記事は、ロシア語を話すエリクサーのコミュニティである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 --env=prod
      
      





このコマンドは、コンパイルされたアプリケーションで_build/prod/rel/<name>/releases/<version>/<name>.tar.gz



を作成します。 さらに、このアーカイブは製品に配信する必要があります。 アプリケーションを解凍して実行する必要があるサーバー。 これは、単純なshell



スクリプトを使用して実行できますが、ダウンタイムが発生するため、これは最適なオプションではありません。







deploy.sh
 #!/bin/sh REMOTE_USER="www" REMOTE_HOST="host" APP_NAME="single" APP_FOLDER="/home/$REMOTE_USER/$APP_NAME" SERVER=$REMOTE_USER@$REMOTE_HOST echo "Enter the version of the application" read VERSION if !(ssh $SERVER "[ -d $APP_FOLDER/tmp/ ]") then echo "Preparing directory structure" ssh $SERVER "mkdir -p $APP_FOLDER/tmp/" fi echo "Copying release to server in $APP_FOLDER" scp _build/prod/rel/$APP_NAME/releases/$VERSION/$APP_NAME.tar.gz $SERVER:$APP_FOLDER/tmp/ echo "Stopping the old version" ssh $SERVER "cd $APP_FOLDER && bin/$APP_NAME stop" echo "Extracting archive with release" ssh $SERVER "cd $APP_FOLDER/tmp/ && tar -xzf $APP_NAME.tar.gz -C $APP_FOLDER" echo "Running the new version" ssh $SERVER "cd $APP_FOLDER && PORT=80 bin/$APP_NAME start"
      
      





プロポーザルの利用可能性を確認するだけです。







 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 --version=0.1.0
      
      





このコマンドは、アセンブルされたリリースのみをリモートサーバーにダウンロードしますが、アプリケーション自体は起動しません。

アプリケーションを起動するには、次のコマンドを使用します。







 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://github.com/HashNuke/heroku-buildpack-elixir
      
      





または、このビルドパックで新しいアプリケーションを作成します。







 heroku create --buildpack "https://github.com/HashNuke/heroku-buildpack-elixir.git"
      
      





このビルドパックは、 公式リポジトリの例を使用して設定できます







その後、すべてが以前と同じように行われます。







 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/








All Articles