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/



Source: https://habr.com/ru/post/J320096/


All Articles