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権限
私たちが行うこと:
- AnsiblePlaybookプロジェクトのセットアップ
- AnsiblePlaybookロールのディレクトリ構造を生成する
- ホストとsite.ymlをセットアップする
- 「共通」の役割の設定-基本的な設定
- 「web」ロールのセットアップ-NginxおよびPHP-FPM構成
- 'db'ロールのセットアップ-MySQLデータベース構成
- テスト
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ロールには独自のディレクトリ構造があり、各ロールにはタスク、ハンドラー、変数などのディレクトリが含まれます。
このステップでは、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 .
結果は以下のように表示されます。
'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
保存して閉じます。
このステップでは、共通の役割を設定します。そのためには、実行するタスクのリストを作成する必要があります。
「一般的な」役割で実行するタスクのリストの下。
- リポジトリの変更
- リポジトリを更新
- パッケージを最新バージョンにアップグレードする
- サーバーのタイムゾーンを設定する
次に、「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
保存して閉じます。
最後に、「共通」の役割の構成が完了しました。
このステップでは、「web」ロールを設定します。 Nginx Webサーバーのインストール、いくつかの基本的な拡張機能を備えたPHP-FPM、Nginxを使用したPHP-FPMの構成などのタスクを実行します。
以下は、「Web」ロールで実行するタスクの詳細です。
- Nginxをインストールする
- PHP-FPMをインストールする
- php.iniを構成する
- 仮想ホストを作成する
- ファイル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ロールの構成が完了します。
このステップでは、MySQLデータベースのインストールと構成のために「db」ロールを構成します。
以下は、「db」ロールで実行するタスクの詳細です。
- mysqlをインストールする
- MySQLデータベースを作成する
- MySQLユーザーを作成する
- 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パスワードを生成できます。
Ansibleプロジェクトディレクトリに移動します。
cd project-lemp/
以下のansible-playbookコマンドを実行します。
ansible-playbook -i hosts site.yml
これで、ansibleはホストに割り当てたすべてのロールを実行します。完了すると、次のような結果が表示されます。
エラーが発生しないことを確認してください。
Webブラウザーを開き、アドレスバーhttp://hakase-labs.ioにドメイン名を入力します。
そして、以下のようにphpinfoのインデックスページが表示されます。
PHP-FPMとNginxが機能しています。
次に、サーバーターミナルに戻り、「mysql」ロール変数で作成したユーザーとパスワードを使用してMySQLサーバーにログインします。
mysql -u hakase -p
PASSWORD: hakasepass
ユーザーが所有するデータベースのリストを確認してください。
show databases;
そして、MySQLシェルにログインし、リストに「hakase-db」という名前のデータベースが表示されます。
最後に、LEMPStackのインストールと構成用のAnsiblePlaybookが作成され、正常にテストされました。