PHP,Nginx,Dockerの3ステップ完全ガイド!

PHP, Nginx, Dockerのロゴが並んだイメージ PHP
この記事は約8分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHP, Nginx, Docker。これらは現代のWeb開発において欠かせない3つの要素です。

それぞれが持つ機能と特性を理解し、適切に組み合わせることで、効率的で強力な開発環境を構築することが可能になります。

この記事を読むことで、これらのツールを一から設定し、統合する方法を学ぶことができます。

●PHP, Nginx, Dockerとは

○PHPとは

PHPは、Web開発に広く使用されるサーバーサイドのスクリプト言語です。

HTMLを動的に生成する能力や、データベースとの連携が容易であるため、多くのWebサイトやアプリケーションで採用されています。

○Nginxとは

Nginxは、高性能なWebサーバーであり、ロードバランサーやリバースプロキシとしても機能します。

その高い柔軟性とスケーラビリティにより、小規模なプロジェクトから大規模なエンタープライズ環境まで幅広く対応しています。

○Dockerとは

Dockerは、アプリケーションとその依存関係をパッケージ化し、ソフトウェアコンテナという形で配布・実行するためのプラットフォームです。

Dockerを使用することで、開発環境を一貫性のある状態で保つことが可能になり、”私のマシンでは動作する”という問題を解消します。

●PHP, Nginx, Dockerのインストール

○PHPのインストール

PHPのインストールは、各OSのパッケージマネージャを使用して行うことが一般的です。

例えばUbuntuでは、下記のコマンドを実行します。

sudo apt-get update
sudo apt-get install php

○Nginxのインストール

Nginxもまた、パッケージマネージャを使用してインストールします。

Ubuntuでは下記のコマンドを実行します。

sudo apt-get update
sudo apt-get install nginx

○Dockerのインストール

Dockerのインストールは、公式ウェブサイトからダウンロードするか、パッケージマネージャを使用します。

Ubuntuでは下記のコマンドを実行します。

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

これらのコマンドは、それぞれのソフトウェアをインストールする基本の手順を示しています。

具体的なインストール方法は、使用しているOSや環境により異なるため、公式ドキュメンテーションを参照してください。

●PHP, Nginx, Dockerの設定

○PHPの設定

PHPを設定するためには、php.iniという設定ファイルを編集します。

このファイルは、PHPの動作を制御するための多くの設定項目を含んでいます。

例えば、エラーレポーティングのレベルを設定したり、ファイルアップロードの最大サイズを定義したりすることができます。

○Nginxの設定

Nginxの設定は、nginx.confというファイルで行います。

このファイルでは、サーバーの基本的な動作や、ホストするウェブサイトの設定を定義します。

また、サイトごとに個別の設定ファイルを作成し、それをnginx.confから読み込むことも可能です。

○Dockerの設定

Dockerの設定は、Dockerfileというファイルで行います。

このファイルには、コンテナの基本イメージ、実行するコマンド、作成するディレクトリなど、コンテナの設定を記述します。

Dockerfileを元にDockerイメージをビルドし、そのイメージからコンテナを作成します。

●PHP, Nginx, Dockerの統合

○Dockerコンテナの作成

PHPとNginxを統合するためには、それぞれをDockerコンテナとして作成し、それらを連携させる必要があります。

PHPとNginxを含むDockerコンテナを作成するためのDockerfileの例を紹介します。

# PHPのコンテナ
FROM php:7.4-fpm
WORKDIR /var/www/html
COPY . /var/www/html

# Nginxのコンテナ
FROM nginx:1.19.6
COPY nginx.conf /etc/nginx/nginx.conf

このDockerfileでは、まずPHPのコンテナを作成し、作業ディレクトリを/var/www/htmlに設定しています。

次に、現在のディレクトリの内容を/var/www/htmlにコピーします。

その後、Nginxのコンテナを作成し、nginx.confを/etc/nginx/nginx.confにコピーします。

○NginxとPHPの連携

NginxとPHPを連携させるためには、Nginxの設定ファイルを編集し、PHPのFastCGIプロセスマネージャにリクエストを転送するように設定します。

そのためのNginxの設定ファイルの一部を紹介します。

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

この設定では、.phpで終わるリクエストが来た場合に、それをFastCGIプロセスマネージャに転送します。

ここで、fastcgi_passのパラメータはPHPのFastCGIプロセスマネージャのソケットファイルのパスになります。

●サンプルコードとその解説

○サンプルコード1:PHPとNginxの連携

PHPとNginxを連携させるための基本的な設定を紹介します。

この例では、Nginxの設定ファイルにPHPのFastCGIプロセスマネージャへのパスを設定しています。

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

○サンプルコード2:Dockerコンテナの作成と運用

Dockerコンテナを作成し、それを運用するための基本的な手順を紹介します。

この例では、Dockerfileを作成し、それを元にDockerイメージをビルドし、そのイメージからコンテナを作成しています。

# Dockerfileを作成
echo -e "FROM php:7.4-fpm\nWORKDIR /var/www/html\nCOPY . /var/www/html" > Dockerfile

# Dockerイメージをビルド
docker build -t my-php-app .

# Dockerコンテナを作成
docker run -d --name my-running-app my-php-app

●応用例とその解説

○応用例1:複数のDockerコンテナの運用

Dockerでは、複数のコンテナを一度に管理するためのツールとしてDocker Composeを提供しています。

Docker Composeを使用してPHPとNginxのコンテナを同時に運用する例を紹介します。

version: '3'
services:
  php:
    image: php:7.4-fpm
    volumes:
      - .:/var/www/html
  nginx:
    image: nginx:1.19.6
    volumes:
      - .:/var/www/html
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 8080:80

○応用例2:Nginxを使ったロードバランシング

Nginxはロードバランサーとしても機能します。

Nginxを使用して複数のPHPアプリケーションサーバー間で負荷を分散する設定を紹介します。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

この設定では、backendという名前のアップストリームを定義し、その中に複数のバックエンドサーバーをリストしています。

そして、リクエストが来たら、そのリクエストをアップストリームに定義されたバックエンドサーバーに均等に分散します。

●注意点と対処法

PHP, Nginx, Dockerを使用する際には、それぞれの特性と設定方法を理解することが重要です。

また、それぞれが互いに正しく連携できるように、設定ファイルやDockerfileを慎重に作成する必要があります。

特に、Nginxの設定やDockerのネットワーキングには注意が必要です。

●カスタマイズ方法

PHP, Nginx, Dockerの設定は、それぞれの設定ファイルやDockerfileを通じて、自由にカスタマイズすることが可能です。

例えば、PHPの設定では、エラーレポーティングのレベルやタイムゾーン、メモリの上限などを設定することができます。

Nginxでは、リバースプロキシの設定やSSLの設定、ロードバランシングの設定などを行うことができます。

Dockerでは、コンテナのネットワーキングやボリュームの設定、環境変数の設定などを行うことができます。

まとめ

この記事では、PHP, Nginx, Dockerの基本的な概念と設定方法、そしてそれらを統合する方法について詳しく解説しました。

これらのツールを適切に組み合わせることで、効率的で強力な開発環境を構築することが可能になります。

また、それぞれの設定を理解し、自由にカスタマイズすることで、自分のニーズに最適な環境を作り出すことができます。