序章

最新のアプリケーション環境は使い捨てであるため、サーバーの自動化はシステム管理において重要な役割を果たしています。 構成管理ツール( Ansible など)は通常、新しいサーバーの標準手順を確立することでサーバーセットアップを自動化するプロセスを合理化すると同時に、手動セットアップに関連する人的エラーを減らします。

Ansibleは、ノードに特別なソフトウェアをインストールする必要のないシンプルなアーキテクチャを提供します。 また、自動化スクリプトの作成を容易にする堅牢な機能セットと組み込みモジュールも提供します。

このガイドでは、Ansibleを使用して、 Ubuntu18.04にApacheWebサーバーをインストールする方法に関するガイドに含まれている手順を自動化する方法について説明します。 Apache HTTPサーバーは、世界で最も広く使用されているWebサーバーです。 動的にロード可能なモジュール、堅牢なメディアサポート、他の一般的なソフトウェアとの広範な統合など、多くの強力な機能を提供します。

前提条件

このガイドで説明しているプレイブックが提供する自動セットアップを実行するには、次のものが必要です。

  • 1つのAnsibleコントロールノード:SSHキーを使用してAnsibleホストに接続するようにAnsibleがインストールおよび構成されたUbuntu18.04マシン。 サーバーの初期設定ガイドで説明されているように、コントロールノードにsudo権限とファイアウォールが有効になっている通常のユーザーがいることを確認してください。 Ansibleをセットアップするには、 Ubuntu18.04にAnsibleをインストールして構成する方法に関するガイドに従ってください。
  • 1つ以上のAnsibleホストUbuntu18.04でAnsibleを使用して初期サーバーセットアップを自動化する方法のガイドに従って以前にセットアップされた1つ以上のリモートUbuntu18.04サーバー。

先に進む前に、まず、AnsibleコントロールノードがAnsibleホストに接続してコマンドを実行できることを確認する必要があります。 接続テストについては、 Ubuntu18.04にAnsibleをインストールして構成する方法のステップ3を確認してください。

このハンドブックは何をしますか?

このAnsibleプレイブックは、 Ubuntu18.04にApacheWebサーバーをインストールする方法に関するガイドで概説されている手順を手動で実行する代わりの方法を提供します。

このプレイブックを実行すると、Ansibleホストで次のアクションが実行されます。

  1. aptitudeをインストールします。これは、aptパッケージマネージャーの代わりにAnsibleで推奨されています。
  2. Apacheをインストールします。
  3. 新しいApacheVirtualHostのカスタムドキュメントルートフォルダを作成し、テストページを設定します。
  4. 新しいApacheVirtualHostを有効にします。
  5. 変数disable_defaulttrueに設定されている場合は、デフォルトのApacheWebサイトを無効にします。
  6. 構成されたポートでHTTPトラフィックを許可するようにUFWを設定します(デフォルトでは80)。

プレイブックの実行が完了すると、構成変数内で定義したオプションに基づいて、ターゲットノードでWebサーバーが実行されます。

このハンドブックの使い方

最初に行う必要があるのは、 do-community /ansible-playbooksリポジトリからApacheプレイブックとその依存関係を取得することです。 このリポジトリをAnsibleコントロールノード内のローカルフォルダーに複製する必要があります。

別のガイドに従って以前にこのリポジトリのクローンを作成したことがある場合は、既存のansible-playbooksコピーにアクセスし、git pullコマンドを実行して、内容が更新されていることを確認してください。

  1. cd ~/ansible-playbooks
  2. git pull

do-community/ansible-playbooksリポジトリを初めて使用する場合は、次のコマンドを使用してリポジトリをホームフォルダに複製することから始める必要があります。

  1. cd ~
  2. git clone https://github.com/do-community/ansible-playbooks.git
  3. cd ansible-playbooks

関心のあるファイルは、apache_ubuntu1804フォルダー内にあります。このフォルダーの構造は次のとおりです。

apache_ubuntu1804
├── files
│   ├── apache.conf.j2
│   └── index.html.j2
├── vars
│   └── default.yml
├── playbook.yml
└── readme.md

これらの各ファイルは次のとおりです。

  • files/apache.conf.j2:Apache仮想ホストを設定するためのテンプレートファイル。
  • files/index.html.j2:Webサーバーのルートディレクトリにテストページを設定するためのテンプレートファイル。
  • vars/default.yml:プレイブックの設定をカスタマイズするための可変ファイル。
  • playbook.yml:リモートサーバーで実行されるタスクを含むプレイブックファイル。
  • readme.md:このハンドブックに関する情報を含むテキストファイル。

プレイブックの変数ファイルを編集して、いくつかのオプションをカスタマイズします。 apache_ubuntu1804ディレクトリにアクセスし、選択したコマンドラインエディタを使用してvars/default.ymlファイルを開きます。

  1. cd apache_ubuntu1804
  2. nano vars/default.yml

このファイルには、注意が必要ないくつかの変数が含まれています。

vars / default.yml
---
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true

次のリストには、これらの各変数の簡単な説明と、それらを変更する方法が含まれています。

  • app_user:アプリケーションファイルの所有者として設定されるAnsibleホスト上のroot以外のリモートユーザー。
  • http_host:ドメイン名。
  • http_conf:Apache内で作成される構成ファイルの名前。
  • http_port:この仮想ホストのHTTPポート。80がデフォルトです。
  • disable_default:Apacheに付属するデフォルトのWebサイトを無効にするかどうか。

vars/default.yml内の変数の更新が完了したら、このファイルを保存して閉じます。 nanoを使用した場合は、CTRL + XYENTERの順に押してください。

これで、このプレイブックを1つ以上のサーバーで実行する準備が整いました。 ほとんどのプレイブックは、デフォルトでインベントリ内のすべてのサーバーで実行されるように構成されています。 -lフラグを使用して、サーバーのサブセットまたは単一のサーバーのみがプレイブックの影響を受けるようにすることができます。 -uフラグを使用して、リモートホストでPlaybookコマンドに接続して実行するために使用しているリモートサーバー上のユーザーを指定することもできます。

server1でのみプレイブックを実行し、sammyとして接続するには、次のコマンドを使用できます。

  1. ansible-playbook playbook.yml -l server1 -u sammy

次のような出力が得られます。

Output
PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install prerequisites] *********************************************************************************************************** ok: [server1] => (item=aptitude) TASK [Install Apache] ****************************************************************************************************************** changed: [server1] TASK [Create document root] ************************************************************************************************************ changed: [server1] TASK [Copy index test page] ************************************************************************************************************ changed: [server1] TASK [Set up Apache virtualhost] ******************************************************************************************************* changed: [server1] TASK [Enable new site] ***************************************************************************************************************** changed: [server1] TASK [Disable default Apache site] ***************************************************************************************************** changed: [server1] TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Apache] ******************************************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=10 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

:Ansibleプレイブックの実行方法の詳細については、Ansibleチートシートガイドを確認してください。

プレイブックの実行が終了したら、Webブラウザーに移動し、プレイブック変数で構成されているサーバーのホストまたはIPアドレスにアクセスします。

http://server_host_or_IP

次のようなページが表示されます。

it works page

これは、自動化がサーバー上で完全に実行され、Apacheが、プレイブック構成変数内に設定したドキュメントルートディレクトリに配置された静的HTMLページとアセットを提供する準備ができたことを意味します。

プレイブックの内容

このチュートリアルで取り上げられているApacheサーバーのセットアップは、 DigitalOcean CommunityPlaybooksリポジトリ内のapache_ubuntu1804フォルダーにあります。 スクリプトの内容を直接コピーまたはダウンロードするには、各スクリプトの上部にあるRawボタンをクリックします。

プレイブックの全内容とそれに関連するファイルも、便宜上ここに含まれています。

vars / default.yml

default.yml変数ファイルには、Apache VirtualHost内で構成するHTTPポートやドメイン名など、プレイブックタスク内で使用される値が含まれています。

vars / default.yml
---
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true

files / apache.conf.j2

apache.conf.j2ファイルは、新しいApacheVirtualHostを構成するJinja2テンプレートファイルです。 このテンプレート内で使用される変数は、vars/default.yml変数ファイルで定義されています。

files / apache.conf.j2
<VirtualHost *:{{ http_port }}>
   ServerAdmin webmaster@localhost
   ServerName {{ http_host }}
   ServerAlias www.{{ http_host }}
   DocumentRoot /var/www/{{ http_host }}
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

files / index.html.j2

index.html.j2ファイルは別のJinjaテンプレートであり、新しく構成されたApacheサーバーのドキュメントルートにテストHTMLページを設定するために使用されます。

files / index.html.j2
<html>
   <head>
       <title>Welcome to {{ http_host }} !</title>
   </head>
   <body>
       <h1>Success! The {{ http_host }} virtual host is working!</h1>
   </body>
</html>

playbook.yml

playbook.ymlファイルは、このセットアップのすべてのタスクが定義されている場所です。 まず、このセットアップのターゲットとなるサーバーのグループ(all)を定義し、その後、become: trueを使用して、特権昇格( [ X197X])デフォルトで。 次に、構成オプションをロードするためのvars/default.yml変数ファイルが含まれています。

playbook.yml
---
- hosts: all
  become: true
  vars_files:
    - vars/default.yml

  tasks:
    - name: Install prerequisites
      apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
      loop: [ 'aptitude' ]

    - name: Install Apache
      apt: name=apache2 update_cache=yes state=latest

    - name: Create document root
      file:
        path: "/var/www/{{ http_host }}"
        state: directory
        owner: "{{ app_user }}"
        mode: '0755'

    - name: Copy index test page
      template:
        src: "files/index.html.j2"
        dest: "/var/www/{{ http_host }}/index.html"

    - name: Set up Apache virtuahHost
      template:
        src: "files/apache.conf.j2"
        dest: "/etc/apache2/sites-available/{{ http_conf }}"

    - name: Enable new site
      shell: /usr/sbin/a2ensite {{ http_conf }}
      notify: Reload Apache

    - name: Disable default Apache site
      shell: /usr/sbin/a2dissite 000-default.conf
      when: disable_default
      notify: Reload Apache

    - name: "UFW - Allow HTTP on port {{ http_port }}"
      ufw:
        rule: allow
        port: "{{ http_port }}"
        proto: tcp

  handlers:
    - name: Reload Apache
      service:
        name: apache2
        state: reloaded

    - name: Restart Apache
      service:
        name: apache2
        state: restarted

独自のワークフロー内の個々のニーズに最も合うように、これらのファイルを自由に変更してください。

結論

このガイドでは、Ansibleを使用して、Ubuntu18.04にApacheをインストールして構成するプロセスを自動化しました。

サーバー設定をさらにカスタマイズするためにこのプレイブックに他のタスクを含めたい場合は、Ansibleの紹介ガイド構成管理101:Ansibleプレイブックの作成を参照してください。