DokkuはPlatform-as-a-Service(PaaS)実装であり、独自のハードウェアでセルフホストできます。 Dokkuは、git push
を実行すると、Dockerを使用してコードを自動的にデプロイします ターミナルから。
Dokkuサーバーをセットアップすると、使い慣れたGitワークフローを使用して新しいアプリケーションをすばやくデプロイできます。ホスティングコストは、商用のPaaSソリューションやマネージドKubernetes製品よりもはるかに低くなる可能性があります。 Dokkuサーバーが起動して実行されると、新しいアプリケーションの起動にはほんの数分しかかかりません。
Dokkuはいくつかのインストール方法をサポートしています。ベアメタルハードウェアにインストールする場合は、公式のブートストラップスクリプトを使用して最新バージョンをダウンロードしてください。
wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.shsudo DOKKU_TAG =v0.24.7 bash bootstrap.sh
ブートストラップスクリプトは、Linuxの新規インストールを機能するDokkuサーバーに変換します。 Dockerを含むソフトウェアの依存関係は、自動的にダウンロードおよびインストールされます。インターネット接続によっては、このプロセスに最大10分かかる場合があります。
DokkuをDockerコンテナとして実行できます。これは、Dockerがすでに利用可能な環境を使用している場合に理想的です。
docker run --env DOKKU_HOSTNAME =example.com --name doku -p 3022:22 -p 8080:80 -p 8443:443 -v / var / lib / dokku:/ mnt / dokku -v / var / run / docker.sock:/var/run/docker.sock dokku / dokku:0.24.7
example.com
を置き換えます サーバーへのアクセスに使用するホスト名を使用します。この例を使用すると、ポート80と443は、それぞれホストポート8080と8443にバインドされます。ホストのポート3022は、コンテナ内のポート22にマップされます。このポートはGit+SSH接続に使用されます。
ボリュームは/mnt/dokku
に作成されます 。 Dokkuアプリケーションデータはここに保存されます。ホストのDockerソケットもコンテナにマウントされているため、DokkuはDockerデーモンと対話して新しいコンテナを作成できます。
Dokkuの構成
インストールが完了したら、ブラウザでホストのIPアドレスにアクセスします。 Dokkuにホスト名を割り当てた場合は、ここでも使用できます。 Webインストーラーが表示され、残りのセットアップをガイドします。
SSHキーをコピーして「公開キー」フィールドに貼り付けます。 Dokkuは、このキーで行われたすべてのSSH接続を受け入れます。後でDokkuCLIを使用して他のキーを追加できます。
Dokkuインストールのホスト名が設定されていない場合は、それも設定する必要があります。マシンにドメインがマップされている場合は、ここに入力します。それ以外の場合は、localhost
を使用できます またはIPアドレス。
ホスト名が設定されると、Dokkuは個々のサブドメインを使用してアプリを自動的に提供できます。利用可能なドメインがない場合は、[仮想ホストの名前を使用する]チェックボックスをオフにします。 Dokkuは、代わりに専用ポートで各アプリを提供します。
Dockerを使用してDokkuをインストールした場合、Webセットアップはサポートされていません。 DOKKU_HOSTNAME
を設定することにより、コンテナの作成時にホスト名を追加できます。 環境変数。 SSHキーを追加するには、コンテナに接続してDokkuCLIを使用する必要があります。
docker exec -it dokku dokku ssh-keys add my-keyホスト名を設定してSSHキーを追加すると、Dokkuを使用できるようになります。 WebUIを使用してこれ以上管理することはできません。 GitコマンドとCLIを介してDokkuと対話します。
アプリケーションのデプロイ これで、最初のアプリを起動する準備が整いました。 Dokkuのデプロイは
git push
で始まります 。 Dokkuはビルドパック(Cloud NativeまたはHerokuish)を使用して、アプリのプログラミング言語を検出し、ビルドを自動的に作成します。Dokkuは
docker build
の実行もサポートしています プロジェクトにDockerfile
が含まれている場合は直接 。この機能は、ビルドパックベースのビルダーがプロジェクトで使用できない場合にのみ使用できます。 Dockerの直接ビルドの詳細については、Dokkuのドキュメントをご覧ください。ビルドパックを使用するということは、Dokkuがプロジェクトの作成方法にほとんど制限を課さないことを意味します。一般的な言語とフレームワークを使用している場合は、
git push
ができるはずです。 デプロイメントを作成します。基本的なReactアプリの例を次に示します。mkdir my-appcd my-appnpx create-react-app .git remote add dokku [email protected]:my-appgit push dokku master最後の2行が最も重要です。 DokkuサーバーはGitリモートとして追加されるため、コードをプッシュできます。
example.com
を置き換えます インストールのIPまたはホスト名を使用します。コロンの後の部分は、プッシュするDokkuプロジェクトを示しています。手動で作成する必要はありません。リモコンを設定したら、コードをリモコンにプッシュする準備が整います。サンプルコマンドは、
master
をプッシュします Dokkuに分岐します。 Dokkuはプロジェクトを取得し、適切なビルドパックを自動検出し、Dockerイメージを作成して、アプリをデプロイします。アプリドメインのアタッチ Dokkuは、ホスト名のサブドメインにアプリをデプロイします。 DokkuCLIを使用してカスタムドメインをアタッチできます。最初に適切なDNSレコードを設定していることを確認してください。
dokku domain:add my-app example.com
example.com
にアクセスする これで、my-app
が提供されます 展開。SSLの追加 Dokkuを使用すると、アプリでSSLを簡単に有効にできます。 DokkuとLet’sEncryptを統合するプラグインを追加できます。プラグインをインストールすると、1つのコマンドでSSL証明書を取得できます。
まず、プラグインをインストールします:
dokkuプラグイン:https://github.com/dokku/dokku-letsencrypt.gitをインストール次に、メールアドレスを使用してLet’sEncryptプラグインを構成します。 Let's Encryptはこのアドレスを使用して、証明書に関連するアラートを送信します。
dokku config:set --global no-restart DOKKU_LETSENCRYPT_EMAIL [email protected]Dokkuが証明書を自動的に更新できるようにするには、Let’sEncryptcronジョブを追加する必要があります。
dokkuletsencrypt:cron-job --add最後に、アプリケーションでLet’sEncryptを有効にします。
dokku Letsencrypt my-appLet’s Encryptプラグインは、アプリに接続されているドメインをカバーする証明書を取得します。証明書は、有効期限が切れる前に自動的に更新されます。
アプリの更新 DokkuはGitワークフローに基づいて構築されています。コードベースを変更し、Gitコミットを作成してから、ブランチをDokkuにプッシュすることで、アプリを更新できます。
Dokkuは新しいプッシュを受け取ると、ビルドパックを使用して更新されたDockerコンテナーを構築します。ビルドが完了すると、現在実行中のコンテナが新しいコンテナに置き換えられます。更新はダウンタイムがなく、完全に自動化されています。
ビルドプロセスの期間は、アプリのサイズと使用するテクノロジーによって異なります。 Dokkuは、ビルドが完了してからさらに10秒間待機してから、トラフィックが新しいコンテナに転送されます。これにより、ブートストラップスクリプトを完了する機会が与えられます。
Dokkuは、継続的インテグレーション(CI)システムに簡単に統合できます。 CIパイプラインの最終段階は、
git push dokku
である可能性があります。 ライブデプロイメントを更新します。ブランチの管理 Dokkuは通常、
master
に加えられた変更をデプロイします ブランチ。グローバル設定またはアプリごとの設定を使用して、別のブランチを使用することを選択できます。dokku git:set --global deploy-branch dokku-deploydokku git:set my-app deploy-branch productこの構成では、Dokkuはデフォルトで
dokku-deploy
からデプロイします。 ブランチ。my-app
のデプロイ アプリはproduction
から作成されます 代わりに。追加機能の追加 Dokkuには、ここで焦点を当てた基本的な展開よりもはるかに多くのものがあります。デフォルトの配布は意図的に合理化されています。公式プラグインとコミュニティプラグインを使用して、データベースや認証などのサービスを提供できます。これにより、静的フロントエンドだけでなく、ステートフルバックエンドにもDokkuを使用できます。
サービスの設定は通常、2段階のプロセスです。サービスのインスタンスを作成し、それをアプリにリンクします。各サービスインスタンスに複数のアプリを接続できます。
MySQLデータベースをアプリに追加する方法は次のとおりです。
dokkuプラグイン:インストールhttps://github.com/dokku/dokku-mysql.gitdokku mysql:create demo-dbdokku mysql:link demo-db my-appDokkuは
DATABASE_URL
を設定します アプリコンテナ内の環境変数。この変数にアクセスして、MySQL接続文字列を取得できます。データベースにDokkuプラグインを使用すると、別の外部データベースサーバーを管理する必要がなくなります。結論 Dockerは、独自のアプリケーションプラットフォームをホストできるPaaSソリューションです。 Dokkuが起動して実行されると、新しいアプリの起動は
git push
と同じくらい簡単です。 。Dokkuは、Heroku、Amazon Elastic Beanstalk、GoogleFirebaseなどのサービスと比べて遜色ありません。多数の開発テクノロジーをサポートしており、特定のクラウドプロバイダーに縛られていないことを意味します。 Dokkuは、安価なクラウドベースのVMで実行することも、独自の物理ハードウェアで保持することもできます。
Docker