PHP アプリケーションを複数展開する際に Ansible を使用してデータベースを設定する方法について、完全かつ包括的に解説します。Ansible は自動化ツールであり、複雑なインフラ管理やアプリケーションのデプロイメントを効率的に行うために広く利用されています。この記事では、Ansible を使用して PHP アプリケーションに必要なデータベース環境をセットアップする手順を詳細に説明します。
1. Ansible の概要と準備
1.1 Ansible のインストール
まず、Ansible がインストールされていない場合は、インストールする必要があります。以下は、Ubuntu におけるインストール手順です。
bashsudo apt update sudo apt install ansible
インストール後、以下のコマンドでバージョンを確認します。
bashansible --version
1.2 インベントリファイルの作成
Ansible では、ターゲットサーバを管理するためにインベントリファイルを使用します。インベントリファイルは、管理対象のホストの情報を記述したファイルです。例えば、hosts
というファイルを作成し、以下のように設定します。
ini[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[databases]
db1 ansible_host=192.168.1.20
このファイルは、Webサーバとデータベースサーバをそれぞれ webservers
と databases
のグループに分けています。
1.3 SSH 鍵の設定
Ansible は SSH を使ってリモートサーバにアクセスします。サーバにログインできるように、SSH 鍵を設定しておきます。以下のコマンドで SSH 鍵を生成し、ターゲットサーバにコピーします。
bashssh-keygen -t rsa -b 2048 ssh-copy-id [email protected] ssh-copy-id [email protected] ssh-copy-id [email protected]
2. データベースの準備
PHP アプリケーションに必要なデータベースを設定します。ここでは、MySQL を使用した例を示します。
2.1 データベースサーバの設定
MySQL をインストールし、データベースを作成するための Ansible プレイブックを作成します。以下の手順を行います。
2.1.1 プレイブックの作成
まず、setup-database.yml
という名前でプレイブックを作成します。
yaml---
- name: Set up MySQL database for PHP applications
hosts: databases
become: yes
tasks:
- name: Install MySQL Server
apt:
name: mysql-server
state: present
- name: Start MySQL service
service:
name: mysql
state: started
enabled: yes
- name: Create a database
mysql_db:
name: my_php_app_db
state: present
- name: Create a user for the database
mysql_user:
name: php_user
password: 'password123'
priv: 'my_php_app_db.*:ALL'
state: present
- name: Grant privileges to the user
mysql_user:
name: php_user
host: "%"
password: 'password123'
priv: 'my_php_app_db.*:ALL'
state: present
このプレイブックは、以下の処理を行います:
- MySQL サーバをインストール
- MySQL サービスを起動
- データベース
my_php_app_db
を作成 - ユーザー
php_user
を作成し、データベースに対する全ての権限を付与
2.1.2 プレイブックの実行
次に、以下のコマンドを使用してプレイブックを実行し、データベースを設定します。
bashansible-playbook -i hosts setup-database.yml
これで、MySQL データベースとユーザーが作成され、必要な権限が付与されます。
2.2 データベースの確認
データベースが正しく作成され、ユーザーが権限を持っていることを確認するために、MySQL にログインします。
bashmysql -u root -p
その後、以下のコマンドで作成したデータベースとユーザーを確認します。
sqlSHOW DATABASES;
SHOW GRANTS FOR 'php_user'@'%';
3. PHP アプリケーションのデータベース接続設定
PHP アプリケーションが作成した MySQL データベースに接続するための設定を行います。以下のコードは、PHP で MySQL に接続するための基本的な設定です。
php
$servername = "db1"; // データベースサーバのホスト名
$username = "php_user";
$password = "password123";
$dbname = "my_php_app_db";
// MySQL に接続
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続確認
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
この設定を PHP アプリケーションの設定ファイルに追加することで、MySQL データベースへの接続が確立されます。
4. 複数の PHP アプリケーションにデータベースを統合
複数の PHP アプリケーションが同じデータベースを使用する場合、各アプリケーションの設定ファイルでデータベース接続情報を共有することができます。異なるアプリケーションが同じデータベースを参照できるようにするには、データベース接続設定を共通化します。
4.1 設定ファイルの統一
すべての PHP アプリケーションで、config.php
という共通設定ファイルを作成し、データベース接続情報を記述します。
php
$servername = "db1";
$username = "php_user";
$password = "password123";
$dbname = "my_php_app_db";
function getDbConnection() {
global $servername, $username, $password, $dbname;
return new mysqli($servername, $username, $password, $dbname);
}
?>
この設定ファイルを各アプリケーションでインクルードし、データベース接続を共通で管理します。
5. まとめ
Ansible を使用した PHP アプリケーションのデータベース設定は、効率的かつ再現性のある環境構築を実現します。今回の手順では、MySQL を使用してデータベースの作成、ユーザーの設定、PHP アプリケーションの接続設定を行いました。Ansible による自動化を活用することで、大規模なインフラでも簡単に管理でき、運用の手間を大幅に削減できます。
データベースの設定が完了した後は、PHP アプリケーションを適切にデプロイし、稼働させることができます。