PHP アプリケーションを複数台の Ubuntu サーバーに Ansible を使用してデプロイする方法について、完全かつ包括的に説明します。この記事では、PHP アプリケーションの展開を自動化するための Ansible のセットアップから、実際のデプロイ手順までをステップバイステップで解説します。
1. はじめに
Ansible は、インフラストラクチャの自動化を行うための強力なツールです。PHP アプリケーションを複数の Ubuntu サーバーにデプロイする際、Ansible を使用することで、手作業を減らし、一貫性のあるデプロイを実現できます。このガイドでは、複数の PHP アプリケーションを管理し、デプロイするための基本的な流れと設定を紹介します。
2. 必要な環境
まず最初に、以下の環境を整えます。
- Ansible がインストールされたマシン(制御ノード)
- Ubuntu サーバー(ターゲットノード)に PHP を実行できるように設定されている
- SSH アクセスが設定されている
- ターゲットサーバーに対して適切な権限(sudo)が与えられている
3. Ansible のインストール
最初に、制御ノード(Ansible をインストールするマシン)に Ansible をインストールします。以下のコマンドでインストールができます。
bashsudo apt update sudo apt install ansible
インストール後、Ansible が正しくインストールされたかを確認します。
bashansible --version
4. インベントリファイルの設定
次に、ターゲットノード(PHP アプリケーションをデプロイするサーバー)の情報を記載したインベントリファイルを作成します。インベントリファイルは、デプロイ対象のサーバーやグループを指定するために使用されます。
例えば、inventory.ini
という名前で以下のようなインベントリファイルを作成します。
ini[php_servers]
192.168.1.10
192.168.1.11
この例では、2 台のサーバーに PHP アプリケーションをデプロイする設定です。
5. PHP のインストール
ターゲットサーバーに PHP をインストールするために、Ansible プレイブックを作成します。プレイブックは、タスクを順番に実行する YAML ファイルです。
例えば、install_php.yml
という名前で以下のようなプレイブックを作成します。
yaml---
- name: Install PHP on Ubuntu servers
hosts: php_servers
become: yes
tasks:
- name: Update apt package list
apt:
update_cache: yes
- name: Install PHP and dependencies
apt:
name:
- php
- php-cli
- php-fpm
- php-mysql
- php-xml
state: present
このプレイブックは、ターゲットサーバーに PHP とその依存関係をインストールします。以下のコマンドでプレイブックを実行します。
bashansible-playbook -i inventory.ini install_php.yml
6. PHP アプリケーションの配置
次に、PHP アプリケーションをサーバーに配置します。これには、アプリケーションファイルをリモートサーバーにコピーするために copy
モジュールや git
モジュールを使用します。
例えば、Git リポジトリからアプリケーションをクローンする場合は、以下のようなプレイブックを作成します。
yaml---
- name: Deploy PHP application from Git
hosts: php_servers
become: yes
tasks:
- name: Clone the PHP application repository
git:
repo: 'https://github.com/example/php-app.git'
dest: /var/www/html/php-app
version: master
このプレイブックを実行すると、指定した Git リポジトリからアプリケーションがターゲットサーバーにクローンされます。
7. PHP-FPM と Nginx の設定
PHP アプリケーションを正しく動作させるためには、PHP-FPM と Nginx を設定する必要があります。まず、php-fpm
サービスを起動し、その後に Nginx サーバーを設定します。
yaml---
- name: Configure PHP-FPM and Nginx for PHP application
hosts: php_servers
become: yes
tasks:
- name: Start and enable PHP-FPM
service:
name: php7.4-fpm
state: started
enabled: yes
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start and enable Nginx
service:
name: nginx
state: started
enabled: yes
- name: Configure Nginx for PHP app
template:
src: nginx_php_app.conf.j2
dest: /etc/nginx/sites-available/php-app
notify:
- Reload Nginx
handlers:
- name: Reload Nginx
service:
name: nginx
state: reloaded
上記のプレイブックでは、Nginx をインストールし、PHP アプリケーション用の設定ファイルを適用します。この設定ファイル(nginx_php_app.conf.j2
)は Jinja2 テンプレートとして管理し、実際の設定を行います。
8. Nginx の設定ファイル(テンプレート)
nginx_php_app.conf.j2
ファイルは、Nginx の仮想ホスト設定ファイルとして以下のようになります。
nginxserver {
listen 80;
server_name example.com;
root /var/www/html/php-app;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
この設定ファイルは、PHP アプリケーションのルートディレクトリと PHP-FPM のソケットを設定します。
9. アプリケーションのデプロイとサービスの起動
最後に、プレイブックを実行して、PHP アプリケーションのデプロイを完了させます。
bashansible-playbook -i inventory.ini deploy_php_app.yml
これで、PHP アプリケーションがターゲットサーバーにデプロイされ、Nginx サーバーが再起動して新しい設定が適用されます。
10. まとめ
このガイドでは、Ansible を使用して複数の Ubuntu サーバーに PHP アプリケーションを自動的にデプロイする方法を紹介しました。Ansible を活用することで、手動での作業を減らし、安定した運用が可能となります。デプロイメントの設定をプレイブックとして保存し、今後の運用に活用できるようにすることが重要です。