GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleガイド:LEMPスタック用のAnsibleプレイブックを作成する

Ansibleは、ソフトウェアアプリケーションの展開、クラウドプロビジョニング、および構成管理を自動化するシンプルな自動化ツールです。これは、「コントロールマシン」と呼ばれる単一の場所から多数のサーバーノードを管理および制御するのに役立つサーバーオーケストレーションツールです。 Ansibleは2012年にMichaelDeHaanによって作成され、PythonとPowershellで記述されています。

このチュートリアルでは、Ubuntu18.04サーバーでLEMPスタックをプロビジョニングするための基本的なAnsiblePlaybookを作成する方法を紹介します。 WordPress、Nextcloudなどの他のPHPプロジェクトアプリケーション用にスケーリングできる基本的なAnsiblePlaybookを作成する方法を学習します。

前提条件

  • 2UbuntuOS。
    • 10.5.5.20 ansible
    • 10.5.5.26プロビジョニング
  • 基本的な使用法に関する知識Ansible
  • root権限

私たちが行うこと:

  1. AnsiblePlaybookプロジェクトのセットアップ
  2. AnsiblePlaybookロールのディレクトリ構造を生成する
  3. ホストとsite.ymlをセットアップする
  4. 「共通」の役割の設定-基本的な設定
  5. 「web」ロールのセットアップ-NginxおよびPHP-FPM構成
  6. 'db'ロールのセットアップ-MySQLデータベース構成
  7. テスト
ステップ1-AnsiblePlaybookプロジェクトをセットアップする

Ansible Playbookは、単一またはグループのサーバーホストで実行するために送信する一連の命令です。これは、自動化がタスクとして定義され、パッケージのインストール、ファイルの編集などのすべてのジョブがansibleモジュールによって実行される、ansibleプロビジョニングを表します。

Ansible Playbookには、プロビジョニングサーバーのホストとユーザー情報、プロビジョニングサーバーに実装されるタスクリスト、テンプレートとカスタム構成、テンプレートとタスクの一部である変数のグループなど、いくつかの基本的な構成が含まれています。

まず、「ansible-control」マシンにマスタープロジェクトディレクトリを作成します。マスタープロジェクトディレクトリには、すべてのプレイブックディレクトリ、ファイル、および構成が保存されます。

'project-lemp'という名前のAnsibleプロジェクトディレクトリを作成し、そこに移動します。

mkdir project-lemp/
cd project-lemp

次に、新しい構成ファイル「hosts」と「site.yml」を作成してから、「roles」という名前の新しいディレクトリを作成します。

touch hosts site.yml
mkdir -p roles/

構成の詳細:

ホスト -これは、ansibleによる管理対象サーバーに関する情報を含むインベントリファイルです。これにより、インベントリファイル自体の管理とスケーリングをより簡単にするサーバーのグループを作成できます。インベントリファイルは、INI形式やYAML形式など、さまざまな形式で作成できます。

site.yml -使用可能な役割を使用して管理されるホストのグループを含むマスタープレイブックファイル。

役割 -サーバーのプロビジョニングに使用されるAnsibleプレイブックのグループです。 Ansibleロールには独自のディレクトリ構造があり、各ロールにはタスク、ハンドラー、変数などのディレクトリが含まれます。

ステップ2-ディレクトリ構造のAnsibleロールを生成する

このステップでは、ansible-galaxyコマンドを使用してansibleロールディレクトリを生成します。 「common」ロールと「web」ロールの2つのロールを生成します。

'project-lemp'ディレクトリ内で、ディレクトリ'roles'に移動します。

cd roles/

以下のansible-galaxyコマンドを実行して、「common」および「web」ロールのロール構造ディレクトリとファイルを生成します。

ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db

その後、次のコマンドを使用して、使用可能なすべてのansibleロールディレクトリ構造を確認します。

tree .

結果は以下のように表示されます。

ステップ3-ホストとsite.ymlをセットアップします

'hosts'ファイルには、Ansibleによって管理されるサーバーのリストとグループが含まれます。このガイドでは、「server01」という名前のメンバーと10.5.5.26というIPアドレスを持つ「lemp」というグループを作成します。

vimエディターを使用して「hosts」ファイルを編集します。

vim hosts

以下に構成を貼り付けます。

[lemp]
server01 ansible_host=10.5.5.26

保存して閉じます。

次に、site.yml構成ファイルを編集します。

vim site.yml

以下に構成を貼り付けます。

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

保存して閉じます。

ステップ3-共通の役割を設定する

このステップでは、共通の役割を設定します。そのためには、実行するタスクのリストを作成する必要があります。

「一般的な」役割で実行するタスクのリストの下。

  1. リポジトリの変更
  2. リポジトリを更新
  3. パッケージを最新バージョンにアップグレードする
  4. サーバーのタイムゾーンを設定する

次に、「common」ディレクトリに移動し、「tasks/main.yml」構成を編集します。

cd common/
vim tasks/main.yml

リポジトリを変更するためのタスクを作成します。「ファイル」ディレクトリのベース「sources.list」をリモートホスト「/etc/apt/」にコピーする「copy」モジュールを使用します。

- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
  copy:
    src: sources.list
    dest: /etc/apt/
    backup: yes

リポジトリを更新するタスクを作成し、「apt」モジュールを使用してすべてのパッケージを最新バージョンにアップグレードします。

- name: Update repository and Upgrade packages
  apt:
    upgrade: dist
    update_cache: yes

次に、ansibleタイムゾーンモジュールを使用してシステムタイムゾーンを構成するためのタスクを作成します。

- name: Setup timezone to Asia/Jakarta
  timezone:
    name: Asia/Jakarta
    state: latest

保存して閉じます。

その後、「files」ディレクトリ内に新しいリポジトリ設定「sources.list」を作成します。

vim files/sources.list

サーバーの場所に最も近いリポジトリを選択してください。以下は私のものです。

deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

保存して閉じます。

最後に、「共通」の役割の構成が完了しました。

ステップ4-「web」ロールを設定する

このステップでは、「web」ロールを設定します。 Nginx Webサーバーのインストール、いくつかの基本的な拡張機能を備えたPHP-FPM、Nginxを使用したPHP-FPMの構成などのタスクを実行します。

以下は、「Web」ロールで実行するタスクの詳細です。

  1. Nginxをインストールする
  2. PHP-FPMをインストールする
  3. php.iniを構成する
  4. 仮想ホストを作成する
  5. ファイルphpinfoを追加

'web'ディレクトリに移動し、'tasks/main.yml'ファイルを編集します。

cd web/
vim tasks/main.yml

aptモジュールを使用してnginxインストールの最初のタスクを作成します。

- name: Install Nginx
  apt:
    name: nginx
    state: latest

次に、いくつかの基本的な拡張機能を使用してPHP-FPMをインストールするためのタスクを作成します。また、複数のパッケージをインストールする場合は、以下のようなpythonの「リスト」形式を使用できます。

- name: Instal PHP-FPM
  apt:
    name: ['php','php-fpm','php-common','php-cli','php-curl']
    state: latest

次に、「blockinfile」モジュールを使用してphp.ini構成に新しい行を追加します。そして最後に、php.iniファイルを構成した後にphp-fpmサービスを再起動するようにansibleに通知します。

- name: Configure php.ini
  blockinfile:
    dest: /etc/php/{{ php_version }}/fpm/php.ini
    block: |
      date.time = Asia/Jakarta
      cgi-fix_pathinfo = 0
    backup: yes
  notify: restart php-fpm

次に、「template」モジュールを使用してnginx仮想ホスト構成をコピーします。テンプレートモジュールは、構成を「templates」ディレクトリからリモートサーバーにコピーします。 jinja2仮想ホストテンプレート「vhost.j2」を「/etc/ nginx / sites-enabled /」ディレクトリにコピーし、最後にnginxサービスを再起動するようにansibleに通知します。

- name: Create Nginx virtual host
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
  notify: restart nginx

その後、「file」モジュールを使用してweb-rootディレクトリを作成するための新しいタスクを作成し、index.phpテンプレートをその中にコピーします。

- name: Create web-root directory
  file:
    path: /var/www/{{ domain_name }}
    state: directory

- name: Upload index.html and info.php files
  template:
    src: index.php.j2
    dest: /var/www/{{ domain_name }}/index.php
>

保存して閉じます。

次に、nginxおよびphp-fpmサービスを再起動するためのハンドラーを構成します。 vimエディターを使用して「handlers/main.yml」構成を編集します。

vimハンドラー/main.yml

以下に構成を貼り付けます。

- name: restart nginx
  service:
    name: nginx
    state: restarted
    enabled: yes

- name: restart php-fpm
  service:
    name: php{{ php_version }}-fpm
    state: restarted
    enabled: yes

保存して閉じます。

次に、「vars/main.yml」構成を編集します。構成の上部に、変数構成'{{php_version}}'および'{{domain_name}}'があります。これらの変数は、使用されるphpバージョンとドメイン名の環境設定を表します。基本構成を編集するのではなく、変数構成'vars / main.yml'を編集するだけでよいため、変数はansibleをより再利用可能にします。

vimエディターを使用して変数構成'vars/main.yml'を編集します。

vim vars/main.yml

以下に構成を貼り付けます。

php_version: 7.2
domain_name: hakase-labs.io

保存して閉じます。

次に、「templates/」ディレクトリに「jinja2テンプレート構成」「index.php.j2」と「vhost.j2」を作成します。

vim templates/index.php.j2

以下に構成を貼り付けます。

<html>
<body>

<h1><center>index.html for domain {{ domain_name }}</center></h1>

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

保存して閉じます。

その後、nginx仮想ホスト構成'vhost.j2'のテンプレートを作成します。

vim templates/vhost.j2

以下に構成を貼り付けます。

server {
    listen 80;
    listen [::]:80;

    root /var/www/{{ domain_name }};
    index index.php index.html index.htm index.nginx-debian.html;

    server_name {{ domain_name }};

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

    # pass PHP scripts to FastCGI server
    #
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

}

構成を保存して閉じると、Webロールの構成が完了します。

ステップ5-「db」の役割を設定する

このステップでは、MySQLデータベースのインストールと構成のために「db」ロールを構成します。

以下は、「db」ロールで実行するタスクの詳細です。

  1. mysqlをインストールする
  2. MySQLデータベースを作成する
  3. MySQLユーザーを作成する
  4. mysqlを再起動します

'db'ディレクトリに移動し、'tasks/main.yml'構成を編集します。

cd db/
vim tasks/main.yml

次に、複数のパッケージをインストールするために、「apt」モジュールとpython「list」形式を使用してMySQLパッケージをインストールします。

- name: Install MySQL
  apt:
    name: ['mysql-server','mysql-client','python-mysqldb']
    state: latest
  notify: restart mysql

次に、MySQLデータベースとユーザーを作成するための新しいタスクを作成し、ユーザーのすべての権限をデータベースに付与します。

- name: Create database
  mysql_db:
    name: '{{ db_name }}'
    state: present

- name: Create user for the database
  mysql_user:
    name: '{{ db_user }}'
    password: '{{ db_pass }}'
    encrypted: yes
    priv: '{{ db_name }}.*:ALL'
    state: present

保存して閉じます。

次に、「handlers/main.yml」構成を編集します。

vim handlers/main.yml

MySQLサービスを再起動するためのタスクの構成を貼り付けます。

- name: restart mysql
  service:
    name: mysql
    state: restarted
    enabled: yes

保存して閉じます。

その後、vars変数構成'vars/main.yml'を編集します。

vim vars/main.yml

これらの変数をMySQLデータベースとユーザー構成用に以下に貼り付けます。

db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

保存して閉じます。

'db_pass'変数にはMySQL暗号化パスワードがあり、オンラインツールを使用して暗号化されたMySQLパスワードを生成できます。

ステップ6-AnsiblePlaybookを実行する

Ansibleプロジェクトディレクトリに移動します。

cd project-lemp/

以下のansible-playbookコマンドを実行します。

ansible-playbook -i hosts site.yml

これで、ansibleはホストに割り当てたすべてのロールを実行します。完了すると、次のような結果が表示されます。

エラーが発生しないことを確認してください。

ステップ7-テスト

Webブラウザーを開き、アドレスバーhttp://hakase-labs.ioにドメイン名を入力します。

そして、以下のようにphpinfoのインデックスページが表示されます。

PHP-FPMとNginxが機能しています。

次に、サーバーターミナルに戻り、「mysql」ロール変数で作成したユーザーとパスワードを使用してMySQLサーバーにログインします。

mysql -u hakase -p
PASSWORD: hakasepass

ユーザーが所有するデータベースのリストを確認してください。

show databases;

そして、MySQLシェルにログインし、リストに「hakase-db」という名前のデータベースが表示されます。

最後に、LEMPStackのインストールと構成用のAnsiblePlaybookが作成され、正常にテストされました。


Linux
  1. Ansibleプレイブックの脱構築

  2. AnsibleのYAMLを理解する

  3. AnsiblePlaybookの作成方法

  1. Linuxシステム管理のためのAnsibleの役割の簡単な紹介

  2. AnsiblePlaybookの6つのトラブルシューティングスキル

  3. RHCE Ansibleシリーズ#9:Ansibleの役割

  1. Ansible Playbook:Playbookを作成および構成する方法

  2. Ansible Playbookでタグを使用する方法(例)

  3. リモートホストの OS バージョンを取得するために Ansible プレイブックを作成する方法