注:このガイドが作成されてから、Dokkuプロジェクトは大幅に変更されました。 以下の手順は、Dokkuプロジェクトの現在の状態を反映していない場合があります。

序章


Dokkuは、本番環境でコードを簡単に起動するために使用できるアプリケーションデプロイメントソリューションです。 その結果、アプリケーション環境が自動的に構成され、必要なソフトウェアがインストールおよび実装されます。

Dokkuは、アプリケーションリソースは実際のアプリケーションとは別のコンポーネントとして処理する必要があるという哲学に準拠しています。 これにより、追加の構成をあまり行わなくても、リソースまたはメインアプリケーションコードを簡単に交換できる柔軟な関係が構築されます。 Dokkuは、プラグインシステムを介して外部リソースを処理します。

このガイドでは、Dokkuのプラグインシステムを利用してプロジェクトの機能を拡張し、アプリケーションを必要なバックエンドにリンクする方法について説明します。 また、アプリケーションの監視と管理に役立つ他のプラグインについても検討します。

前提条件


この記事は、Dokkuワンクリックインストールを使用してDokkuの作業構成がインストールされていることを前提としています。 Dokku構成を完了するには、少なくともこのチュートリアルのステップ2まで完了する必要があります。

どのような種類のプラグインが利用できますか?


Dokkuは簡単に拡張できるように構築されており、簡単に接続できるプラグインシステムを備えています。 実際、コア機能と見なされる操作の多くは、Dokkuのプラグインによって処理されます。 これにより、メインアプリケーションをスリムでモジュール式に保つことができます。

ほとんどの人がプラグインシステムに求めている主なものは、データベースへのアクセスです。 Dokkuは、コミュニティプラグインを通じて、 MariaDB PostgreSQL MongoDB Redisなどの多くの一般的なデータベースシステムへのアクセスを提供します。 データベースプラグインの完全なリストを見つけることができます。

データベースアクセス以外にも、複数のプロセスマネージャー用のプラグインがあります。 Dokkuは、実行する必要のあるプロセスタイプと、それらを実行するために必要なコマンドをリストした「Procfile」を介してプロセスを実行します。 デフォルトでは、Dokkuは「Web」プロセスのみを実行します。

他のタイプのプロセス(ワーカーなど)を実行するには、Procfileを実行して他のタイプのプロセスを実行するプロセスマネージャーを使用できます。 選択できるものは複数ありますが、基本的にはすべて同じことを行います。 現在の選択には、サーカスショアマン、および監視対象が含まれます。 追加のプロセスタイプを開始することに加えて、これらの一部には、クラッシュしたアプリケーションを再起動する機能もあります。

一般的なプラグインの説明


ほとんどのプラグインは、次の一般的な形式を使用してインストールおよび構成されます。 1つの簡単なコマンドでダウンロードしてインストールできます。

dokku plugin:install git_repository

これにより、必要なすべての依存関係が取得され、環境が構成されます。

次のように入力すると、Dokkuのヘルプシステムにアクセスできます。

dokku help

Dokkuのヘルプシステムは、プラグインとともにパッケージ化されたヘルプファイルを含むように動的に生成されます。 その結果、たとえばPostgreSQLプラグインをインストールすると、その使用法を説明する新しいエントリが取得されます。

. . .
postgres:create <app>     Create a PostgreSQL container
postgres:delete <app>     Delete specified PostgreSQL container
postgres:info <app>       Display database informations
postgres:link <app> <db>  Link an app to a PostgreSQL database
postgres:logs <app>       Display last logs from PostgreSQL container
. . .

これは、インストールするプラグインの数に関係なく、ドキュメントはすべて1か所にあることを意味します。 新しいプラグインをインストールした後、dokku helpを実行することをお勧めします。

プラグインワークフローの例


デプロイメントの状況でこれらのプラグインの1つをどのように使用するかについての良いアイデアを提供するために、手順の例を見ていきます。 アプリケーションがPostgreSQLデータベースを使用していると想定します。

ワンタイムセットアップ


PostgreSQLプラグインを初めて使用する前に、GitHubから適切なファイルをダウンロードし、プラグインコンポーネントとその依存関係をインストールする必要があります。

dokku plugin:install https://github.com/dokku/dokku-postgres.git

アプリケーション固有の手順


プラグインをインストールすると、デプロイするすべてのアプリケーションでプラグインを使用できます。 プロセスは、アプリケーションを既にデプロイしているかどうか、および特定のプラグインの推奨手順に大きく依存します。

たとえば、PostgreSQLプラグインを使用すると、デプロイ前にデータベースインスタンスを作成できます。 ただし、MongoDBプラグインでは、アプリケーションをデプロイし、データベースを作成してから、アプリケーションを再プッシュする必要があります。

PostgreSQLプラグインはかなり柔軟性があります。 どちらの状況にも対応できますが、最初にデータベースを作成する場合は、手順が1つ少なくなります。

最初にデータベースを作成する

最初にデータベースを作成し、デプロイメント時にアプリケーションに自動的にリンクする場合は、アプリケーションで使用する予定のデータベースと同じ名前を選択する必要があります。 PostgreSQLの一般的な構文は次のとおりです。

dokku postgres:create app_name

Dokkuは、app_nameという名前でプッシュされたアプリケーションをデータベースインスタンスにリンクします。

データベースを作成すると、通常、接続パラメーターに関する情報を受け取ります。 この例では、接続パラメーターは次のようになります。

-----> Starting container
       Waiting for container to be ready
       Creating container database
=====> Postgres container created: app_name
       DSN: postgres://postgres:[email protected]:5432/app_name

アプリで接続パラメーターをハードコーディングする必要がある場合(めったに推奨されません)、この情報を使用できます。 この情報を使用して、通常のデータベースインターフェイス(この場合はpsql)を介してローカルマシン上のデータベースに接続し、データを事前入力することもできます。

ほとんどの場合、この情報を使用する必要はありません。これは、Dokkuが展開時に、適切なパラメーターを持つ接続文字列を含むDATABASE_URLという環境変数を設定するためです。 この変数にアクセスし、プログラムで使用して柔軟性を維持できます。

この情報にdoアクセスする必要がある場合は、次のように入力することでいつでも呼び出すことができます。

dokku postgres:info app_name

アプリケーション用にデータベースが作成されたので、通常どおりgitを使用してアプリケーションをDokkuにプッシュします。 次の出力では、最後に、アプリケーションがデータベースに正しくリンクされていることがわかります。

remote: -----> App app_name linked to postgresql/app_name database
remote:        DATABASE_URL=postgres://postgres:[email protected]:5432/app_name

ご覧のとおり、DATABASE_URL変数は、前に説明したデータベース情報を使用して設定されています。

データベースの問題が発生している場合、ほとんどのプラグインは独自のログを保持しています。

dokku postgres:logs app_name

アプリを最初にデプロイする

アプリケーションとは異なる名前のデータベースを使用してアプリケーションをデプロイする場合、またはアプリケーションをデプロイする前にデータベースをデプロイするのを忘れた場合は、後でいつでもデータベースをリンクできます。

この場合、次の2つのいずれかを実行できます。 データベースの作成を単に忘れた場合は、matchingという名前で通常のcreatedatabaseコマンドを発行するだけです。

dokku postgres:create app_name

その後、アプリケーションのデプロイ中にDATABASE_URL変数が作成されるため、アプリケーションを再プッシュできます。

ただし、リンクすることもできます。 これは、データベースに別の名前を使用する場合にも必要です。データベースを作成してからリンクすることができます。

dokku postgres:create database_name

(この時点で、アプリケーションをデプロイする必要があります)

dokku postgres:link app_name database_name

これにより、データベースがアプリケーションにリンクされ、プログラムが正しく機能するようになります。

結論


Dokkuは、モジュラー機能を利用するように設計されています。 これは、主要な開発作業に焦点を合わせ続けるのに役立ち、コアモデルを拡張する簡単な方法を提供します。 プラグインを活用する方法を学ぶことは、ソフトウェアからほとんどの機能を引き出すために不可欠です。

Dokkuに必要な機能が不足していることに気付いた場合は、自分でプラグインを作成することを検討してください。 Dokkuのプラグインを作成する場合は、Dokkuプラグインページを編集してプラグインを紹介できます。

ジャスティン・エリングウッド