開発運用

AnsibleでLaravelをデプロイ

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のターミナルで以下のコマンドを実行してインストールします。

bash
sudo apt update sudo apt install ansible

Ansibleがインストールされていることを確認するため、以下のコマンドでバージョンを確認します。

bash
ansible --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というテンプレートファイルを作成します。以下はその内容です。

nginx
server { 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ファイルをテンプレートとして作成します。

ini
APP_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アプリケーションをサーバーにデプロイします。

bash
ansible-playbook -i hosts laravel_deploy.yml

これで、指定したサーバーにLaravelアプリケーションがデプロイされ、Nginxで動作する準備が整います。

6. まとめ

Ansibleを使ったLaravelのデプロイ方法について説明しました。自動化ツールを使うことで、手動で設定する手間を省き、繰り返し行うタスクを効率化できます。特に複数のサーバーにデプロイする場合にAnsibleは非常に有効です。Nginxの設定やLaravelの環境設定などを自動化することで、開発者は本来の開発業務に集中することができるようになります。

Back to top button