序章

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

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

このガイドでは、Ansibleを使用して、 Ubuntu 18.04 にLinux、Nginx、MySQL、およびPHP(LEMP)をインストールする方法に関するガイドに含まれる手順を自動化する方法について説明します。 LEMPソフトウェアスタックは、動的WebページおよびWebアプリケーションを提供するために使用できるソフトウェアのグループです。 これは、 L inuxオペレーティングシステムとNginx(「 E ngine-X」のように発音されます)Webサーバーを表す頭字語です。 バックエンドデータはM ySQLデータベースに保存され、動的処理は PHPによって処理されます。

前提条件

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

  • 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プレイブックは、 Ubuntu 18.04 にLinux、Nginx、MySQL、PHP(LEMPスタック)をインストールする方法に関するガイドで概説されている手順を手動で実行する代わりの方法を提供します。

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

  1. aptitudeをインストールします。これは、aptパッケージマネージャーの代わりにAnsibleで推奨されています。
  2. 必要なLEMPパッケージをインストールします。
  3. 提供されたテンプレートを使用してNginx構成ファイルをセットアップします。
  4. 新しいNginx構成を有効にし、デフォルトの構成を無効にします。
  5. MySQL rootユーザーのパスワードを設定します。
  6. 匿名のMySQLアカウントとテストデータベースを削除します。
  7. 構成されたポートでHTTPトラフィックを許可するようにUFWを設定します(デフォルトでは80)。
  8. 提供されたテンプレートを使用してPHPテストスクリプトを設定します。

プレイブックの実行が完了すると、構成変数内で定義したオプションに基づいて、Nginx上でWebPHP環境が実行されます。

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

最初に行う必要があるのは、 do-community /ansible-playbooksリポジトリからLEMPプレイブックとその依存関係を取得することです。 このリポジトリを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

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

lemp_ubuntu1804
├── files
│   ├── info.php.j2
│   └── nginx.conf.j2
├── vars
│   └── default.yml
├── playbook.yml
└── readme.md

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

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

プレイブックの変数ファイルを編集して、MySQLとNginxの両方の構成をカスタマイズします。 lemp_ubuntu1804ディレクトリにアクセスし、選択したコマンドラインエディタを使用してvars/default.ymlファイルを開きます。

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

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

vars / default.yml
---
mysql_root_password: "mysql_root_password"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"

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

  • mysql_root_password rootMySQLアカウントに必要なパスワード。
  • http_host:このWebサーバーのホスト名またはIPアドレス。
  • http_conf/etc/nginx/sites-available内に作成される構成ファイルの名前。通常、識別しやすいようにホスト名またはアプリケーション名に設定されます。
  • http_port:Nginxがこのサイトにサービスを提供するために使用するポート。 これはデフォルトではポート80ですが、サイトまたはアプリケーションを別のポートで提供する場合は、ここに入力してください。

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

これで、このプレイブックを1つ以上のサーバーで実行する準備が整いました。 ほとんどのプレイブックは、すべてのserver in your inventory, by default. We can use the -l flag to make sure that only a subset of servers, or a single server, is affected by the playbook. We can also use the -u`フラグで実行されるように構成されており、リモートホストでプレイブックコマンドを接続して実行するために使用しているリモートサーバー上のユーザーを指定します。

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

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

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

Output
PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install Prerequisites] *********************************************************************************************************** changed: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] TASK [Sets Up PHP Info Page] *********************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Nginx] ********************************************************************************************************* changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=12 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

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

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

http://server_host_or_IP/info.php

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

phpinfo page

このページにはPHP環境に関する機密情報が含まれているため、セットアップが完了したら、rm -f /var/www/info.phpコマンドを実行してサーバーから削除することをお勧めします。

プレイブックの内容

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

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

vars / default.yml

default.yml変数ファイルには、MySQL root アカウントのパスワードや、Nginx内で構成するドメイン名など、プレイブックタスク内で使用される値が含まれています。

vars / default.yml
---
mysql_root_password: "mysql_root_password"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"

files / nginx.conf.j2

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

files / nginx.conf.j2
server {
       listen {{ http_port }};
       root /var/www/html;
       index index.php index.html index.htm index.nginx-debian.html;
       server_name {{ http_host }};

       location / {
               try_files $uri $uri/ =404;
       }

       location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       }

       location ~ /\.ht {
               deny all;
       }
}

files / info.php.j2

info.php.j2ファイルは別のJinjaテンプレートであり、新しく構成されたLEMPサーバーのドキュメントルートにテストPHPスクリプトを設定するために使用されます。

files / info.php.j2
<?php
phpinfo();

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 LEMP Packages
     apt: name={{ item }} update_cache=yes state=latest
     loop: [ 'nginx', 'mysql-server', 'python3-pymysql', 'php-fpm', 'php-mysql' ]
  
# Nginx Configuration
  
   - name: Sets Nginx conf file
     template:
       src: "files/nginx.conf.j2"
       dest: "/etc/nginx/sites-available/{{ http_conf }}"

   - name: Enables new site
     file:
       src: "/etc/nginx/sites-available/{{ http_conf }}"
       dest: "/etc/nginx/sites-enabled/{{ http_conf }}"
       state: link
     notify: Reload Nginx
  
   - name: Removes "default" site
     file:
       path: "/etc/nginx/sites-enabled/default"
       state: absent
     notify: Reload Nginx

# MySQL Configuration

   - name: Sets the root password
     mysql_user:
       name: root
       password: "{{ mysql_root_password }}"
       login_unix_socket: /var/run/mysqld/mysqld.sock

   - name: Removes all anonymous user accounts
     mysql_user:
       name: ''
       host_all: yes
       state: absent
       login_user: root
       login_password: "{{ mysql_root_password }}"

   - name: Removes the MySQL test database
     mysql_db:
       name: test
       state: absent
       login_user: root
       login_password: "{{ mysql_root_password }}"

# UFW Configuration

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

# Sets Up PHP Info Page

   - name: Sets Up PHP Info Page
     template:
       src: "files/info.php.j2"
       dest: "/var/www/html/info.php"

# Handlers

 handlers:
   - name: Reload Nginx
     service:
       name: nginx
       state: reloaded

   - name: Restart Nginx
     service:
       name: nginx
       state: restarted

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

結論

このガイドでは、Ansibleを使用して、リモートサーバーにLEMP環境をインストールおよびセットアップするプロセスを自動化しました。 通常、MySQLデータベースとユーザーを操作する場合、個人ごとにニーズが異なるため、[X135X]