LaravelアプリケーションをPHP環境でデプロイするためには、Ansibleを使って自動化する方法が非常に便利です。Ansibleは、IT環境の構築や管理を自動化するためのオープンソースツールで、サーバー設定をコードとして記述できるため、効率的なデプロイが可能になります。このガイドでは、LaravelをPHPとNginxを使用してセットアップし、Ansibleを使って自動的にデプロイする方法について詳しく説明します。
1. 前提条件の準備
まずは以下の環境が整っていることを確認します。
- Ubuntuサーバー: 開発または本番サーバーとして使用するUbuntuが必要です。
- PHP 8.x以上: LaravelはPHPで動作するため、必要なPHPのバージョンをインストールします。
- Nginx: 高速なウェブサーバーとしてNginxを使用します。
- MySQL / PostgreSQL: Laravelはリレーショナルデータベースを使用するため、これらのいずれかをインストールします。
- Ansible: 自動化ツールであるAnsibleをインストールしておきます。
2. Ansibleのインストール
まず、Ansibleをインストールします。Ubuntuのターミナルで以下のコマンドを実行してインストールします。
bashsudo apt update sudo apt install ansible
Ansibleがインストールされていることを確認するため、以下のコマンドでバージョンを確認します。
bashansible --version
3. インベントリファイルの作成
Ansibleでは、インベントリファイルを使って管理対象のサーバーを指定します。以下のようなhosts
という名前のインベントリファイルを作成します。
ini[webservers]
server_ip ansible_user=ubuntu
server_ip
は、デプロイ先のサーバーのIPアドレスに置き換えます。
4. Ansibleプレイブックの作成
Ansibleのプレイブックは、サーバー設定を自動化するための一連のタスクを記述するYAML形式のファイルです。以下の手順でLaravelアプリケーションをNginxとPHPで設定するためのプレイブックを作成します。
4.1. 必要なパッケージのインストール
まずはPHP、Nginx、MySQL(またはPostgreSQL)をインストールします。この設定をlaravel_deploy.yml
というファイルに記述します。
yaml---
- name: Laravelをセットアップする
hosts: webservers
become: yes
tasks:
- name: PHPと関連パッケージのインストール
apt:
name:
- php
- php-fpm
- php-mbstring
- php-xml
- php-mysql
state: present
update_cache: yes
- name: Nginxのインストール
apt:
name: nginx
state: present
- name: MySQLのインストール
apt:
name: mysql-server
state: present
- name: Gitのインストール
apt:
name: git
state: present
- name: Composerのインストール
shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
args:
creates: /usr/local/bin/composer
4.2. Laravelのセットアップ
次に、Laravelのアプリケーションをサーバーにデプロイします。Gitでリポジトリをクローンし、Composerで依存関係をインストールします。
yaml - name: Laravelアプリケーションのクローン
git:
repo: 'https://github.com/your-repo/laravel-app.git'
dest: /var/www/laravel
version: master
- name: Composerで依存関係をインストール
shell: composer install --no-dev --optimize-autoloader
args:
chdir: /var/www/laravel
4.3. Nginxの設定
次に、Nginxの設定ファイルを作成します。Laravelアプリケーションが正しく動作するように、Nginxの設定を/etc/nginx/sites-available
に追加します。
yaml - name: Nginxの設定ファイルを作成
template:
src: nginx/laravel.conf.j2
dest: /etc/nginx/sites-available/laravel
owner: root
group: root
mode: '0644'
- name: シンボリックリンクを作成
file:
src: /etc/nginx/sites-available/laravel
dest: /etc/nginx/sites-enabled/laravel
state: link
- name: Nginxを再起動
service:
name: nginx
state: restarted
nginx/laravel.conf.j2
というテンプレートファイルを作成します。以下はその内容です。
nginxserver {
listen 80;
server_name your_domain_or_ip;
root /var/www/laravel/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4.4. Laravelの環境設定
Laravelの.env
ファイルを設定し、データベースやその他の設定を行います。
yaml - name: Laravelの.envファイルを設定
template:
src: .env.j2
dest: /var/www/laravel/.env
owner: www-data
group: www-data
mode: '0644'
.env.j2
ファイルをテンプレートとして作成します。
iniAPP_NAME=Laravel
APP_ENV=production
APP_KEY=base64:YOUR_APP_KEY
APP_DEBUG=false
APP_URL=http://your_domain_or_ip
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=cookie
5. デプロイの実行
以上の設定が完了したら、以下のコマンドでAnsibleプレイブックを実行して、Laravelアプリケーションをサーバーにデプロイします。
bashansible-playbook -i hosts laravel_deploy.yml
これで、指定したサーバーにLaravelアプリケーションがデプロイされ、Nginxで動作する準備が整います。
6. まとめ
Ansibleを使ったLaravelのデプロイ方法について説明しました。自動化ツールを使うことで、手動で設定する手間を省き、繰り返し行うタスクを効率化できます。特に複数のサーバーにデプロイする場合にAnsibleは非常に有効です。Nginxの設定やLaravelの環境設定などを自動化することで、開発者は本来の開発業務に集中することができるようになります。