16.04前書きHashicorpによるhttps://www.packer.io/[Packer]は、複数のプラットフォームおよび環境に対して同一のマシンイメージを迅速に作成するためのコマンドラインツールです。Packerでは、_template_と呼ばれる構成ファイルを使用して、事前構成されたオペレーティングシステムとソフトウェアを含むマシンイメージを作成します。その後、このイメージを使用して新しいマシンを作成できます。単一のテンプレートを使用して、実稼働環境、ステージング環境、および開発環境の同時作成を調整することもできます。Webサーバーを構成します。次に、Packerを使用してこのDropletのスナップショットを作成し、DigitalOceanダッシュボードですぐに使用できるようにして、新しいDropletを作成できるようにします。前提条件Packerを起動して実行する前に、いくつかのものが必要です。rootユーザーとファイアウォール。v2の使用方法]を確認してください。ステップ1-Packerのダウンロードとインストールサーバーにログインした後、Packerバイナリパッケージをダウンロードし、現在のユーザー用にPackerをインストールし、インストールが成功したことを確認します。システムでPackerを実行する最も簡単な方法は、Hashicorpの公式リリースhttps://releases.hashicorp.com/packer/[website]から最新のバイナリパッケージをダウンロードすることです。執筆時点で、最新バージョンは0.12.2です。+」ユーティリティを使用します。+」ディレクトリに解凍し、すべてのユーザーがPackerを利用できるようにします。+」が利用できることを確認して、インストールが成功したことを確認します。packerインストールが成功すると、次の結果が出力されます。versionこれで、Packerがインストールされ、マシンで動作します。次の手順では、プロジェクトディレクトリを設定し、テンプレートを設定して基本的なUbuntuスナップショットを作成します。Builderの構成PackerでDropletを作成し、ソフトウェアと構成ファイルをインストールしてから、そのDropletを新しいマシンの作成に使用できるイメージに変換します。Packerは、_template_と呼ばれる構成ファイルを使用します。このファイルには、Packerにイメージの作成方法を指示するすべての詳細が含まれています。この構成は、構成ファイルの一般的な形式であるhttps://www.digitalocean.com/community/tutorials/an-introduction-to-json[JSON]を使用して作成します。Packer-speakでは、_builder_は、Packerで作成するイメージの設計図を含むJSONオブジェクトです。16.04ドロップレットを作成するよう指示します。このチュートリアルで作成するテンプレートおよび構成ファイルを保持する新しいディレクトリを作成して変更します。+`という新しいファイルを開きます。builders」セクションに移動する必要があります。+`ビルダーを含めます。Packerビルダーを定義します。Dropletsを作成します。Packerは、DigitalOceanのイメージを作成することを知っていますが、ビルドを完了するには、さらにいくつかのキーと値のペアが必要です。16.04ドロップレットからスナップショットを作成することにより、ドロップレットの構成を完了します。ファイルを次のように変更します。+`値を使用してDropletsに接続します。Packerが正常に機能するには、この値を「ルート」に設定する必要があります。+`を保存して、テキストエディターを終了します。Dropletを作成するために必要な最小限の構成が含まれていますが、次の表に示すように、追加の構成オプションを使用できます。information.これで有効なテンプレートが作成されましたが、APIトークンはテンプレートにハードコーディングされています。これは悪い習慣であり、潜在的なセキュリティリスクです。ステップ3-ユーザー変数の作成と保存Packerでは、変数の値を別のファイルに作成して保存できます。イメージを作成する準備ができたら、このファイルをコマンドライン経由でPackerに渡すことができます。変数を別のファイルに保存することは、機密情報や環境固有のデータをテンプレートから排除するための理想的な方法です。これは、チームメンバーと共有したり、GitHubなどの公開リポジトリに保存したりする場合に重要です。ローカルコピーのみを保存する場合でも、テンプレートの外部に変数を保存することはPackerのベストプラクティスです。APIトークンに設定します。+`を保存して、エディターを終了します。次に、変数を使用するようにテンプレートを構成しましょう。+`セクションで変数を定義することにより、まず変数が存在することをPackerに伝える必要があります。」セクションを追加します。+`変数を宣言し、デフォルト値を空の文字列に設定します。+`セクションで定義された変数はグローバルに利用可能です。+`の呼び出しに置き換えます。二重中括弧と同様に、引用符とバッククォートが必要です。ファイルを保存し、エディターを終了します。これで、基本的なスナップショットを作成する作業用テンプレートと、APIキーを保存するための個別の変数ファイルが作成されました。WebサーバーをインストールしてセットアップするようにPackerを構成します。+`セクションは、Packerが実行中のDropletにソフトウェアをインストールして構成してから、マシンイメージに変換する場所です。Builderと同様に、Dropletを構成するために使用できるさまざまなタイプのプロビジョニング機能があります。」プロビジョニングツールを使用してこれらのファイルを使用するインストールスクリプトを実行します。file`プロビジョニングツールを使用すると、イメージに変換される前に、実行中のマシンとの間でファイルやディレクトリを移動できます。shell`プロビジョニングツールを使用すると、そのマシンでシェルスクリプトをリモートで実行できます。プロビジョニングツールは、テンプレート内に表示されるのと同じ順序で実行されます。file`プロビジョニングツールを最初に置くことを意味します。+`セクションを追加し、使用する2つのプロビジョニングツールを設定します。Packerは、既存の宛先にのみファイルを移動できます。+`ディレクトリにアップロードします。file」プロビジョニングツールを設定します。`フォルダーを作成します。shell`プロビジョニングツールをセットアップして設定ファイルの編集を完了しましょう。script`キーを受け取ります。各スクリプトは、テンプレートで指定された順序でアップロードおよび実行されます。+`プロビジョニングツールを設定します。}]}スクリプトは個別にリストする必要があります。これにより、スクリプトの実行順序を制御できます。`セクションが完成しました。次に、Packerがイメージの作成に使用するシェルスクリプトと構成ファイルを作成します。適切な構成ファイルとデフォルトのWebページを備えた、完全に構成されたNginxインストールとともにイメージを出荷する必要があります。16.04でNginxサーバーブロック(仮想ホスト)をセットアップする方法]。Nginxの構成はこのチュートリアルの範囲外です。単一のインストールスクリプトで処理される3つの個別の構成ファイルを作成してアップロードすることにより、サーバーにNginxをプロビジョニングします。最初に、プロジェクトフォルダー内に新しいディレクトリを作成して、構成ファイルを保存します。+`に変更して、Nginx設定ファイルを作成します。~/packerProject/configs最初に、新しいドメインから提供するデフォルトのWebページが必要です。index.html.newこの新しいファイルに、次を挿入します。PAGE次に、ドメインのサーバーブロックを定義するNginx構成ファイルが必要です。このファイルは、ドメインのリッスンポートとWebページの場所を定義します。newDomain.confこのファイルに次の構成を配置します。+`からロードさせます。これは、メインのNginx設定ファイルを編集することを意味します。+」ユーザーとして実行されるようにします。このファイルに次の内容を入れます。}}ファイルを保存して終了します。設定ファイルを用意したら、Packerが必要なソフトウェアをインストールするために使用するスクリプトを定義しましょう。スクリプトを保存する新しいフォルダーを作成します。configureNginx.sh次のファイルをファイルに貼り付けます。作成した構成ファイルを使用して、Nginxをインストール、構成、および起動します。nginxテンプレートが完成し、スナップショットを検証して構築する準備ができました。+`サブコマンドを使用してテンプレートをテストします。テンプレートが正常に検証されると、Dropletを構築してスナップショットを作成します。プロジェクトのルートに変更します。+」の値を設定します。次の出力が表示されます。+`に問題がある場合、エラーメッセージが表示されます。このメッセージはエラーに応じて異なりますが、ほとんどの場合、構文をダブルチェックしてタイプミスを修正することで修正できます。+`セクションで定義したビルドを実行します。PackerにDropletを作成し、DigitalOceanダッシュボードでそのDropletのスナップショットを作成するように指示します。+`を呼び出してDropletをビルドし、スナップショットを作成します。+`サブコマンドの両方でまったく同じ方法で動作することに注意してください。正常なビルドの出力は次のようになります。'nyc1'ビルドが成功すると、DigitalOceanスナップショットリポジトリに新しいスナップショットが見つかります。出力でスナップショットの名前を見つけることができます。ここから、DigitalOceanダッシュボードにアクセスし、*画像*を選択すると、新しいスナップショットがリストに表示されます。[DigitalOceanダッシュボードのDockerスナップショット]これで、この新しいスナップショットを使用して新しいドロップレットを作成できます。*その他*を選択し、*ドロップレットの作成*を選択します。次に、フォームに入力して新しいマシンを作成します。マシンがオンラインになったら、ダッシュボードからそのIPアドレスを確認し、新しいマシンにログインします。protected]次に、Nginxサーバーの構成ファイルを編集します。+`をマシンのIPアドレスまたは使用するドメイン名に置き換えます。+`コマンドを使用してファイル内の値を置き換えることができます。[このチュートリアル]。次に、Nginxサーバーを再起動して、変更を適用します。nginxトラブルシューティングエラーメッセージで十分に説明されていない問題が発生する場合があります。これらのシナリオでは、デバッグモードを有効にするか、Packerログを検査するか、またはその両方によって、ビルドに関する詳細を抽出できます。デバッグモードは、リモートビルドの各ステップのビルダー固有のデバッグ情報を提供します。DigitalOceanビルドのデバッグモードを有効にすると、プロジェクトフォルダーに一時的なプライベートキーが生成され、スナップショットに変換される前に実行中のドロップレットに接続して検査できます。template.jsonデバッグモードで問題を診断できない場合は、Packerログを有効にしてみてください。これらのログは、主にローカルビルダーのデバッグに使用されますが、リモートビルドに関する有用な情報も提供する場合があります。+`環境変数を「0」または空の文字列を除く任意の値に設定します。+`環境変数も設定しない限り、ログはコンソールに出力されます。community]の誰かに連絡してみてください。結論Packerの基本に慣れたので、この基盤を構築することに興味があるかもしれません。テンプレートに2番目のビルダーを追加して、DigitalOceanスナップショットと一緒にローカルテスト環境を作成してみてください。[VirtualBox]のイメージを生成します。+」を定義し、DigitalOceanスナップショットをミラーリングするVagrant環境を作成できます。これにより、Webサイトの変更をライブドロップレットにプッシュする前にローカルでテストできます。documentation]をご覧ください。Webサーバーをデータベースに接続することもできます。only」キーを使用して、各ビルドに異なるプロビジョニングを適用します。構成管理ツールの使用に慣れている場合、Packerにはhttps://www.ansible.com/[Ansible]、https://puppet.com/[Puppet]、https:/のすぐに使えるサポートが付属しています。/www.chef.io/[Chef]など。これらのプロビジョニングツールのいずれかを使用して、ユースケースに合わせてドロップレットをさらに設定してみてください。Playbookを作成してUbuntuのシステム構成を自動化する方法]。