単一サーバーにおけるLAMPアーキテクチャの実装(モジュール方式)

LAMPアーキテクチャとは

LAMPは、Linux、Apache(httpd)、MySQL/MariaDB、PHP の頭文字を取った用語で、Webアプリケーションを構築するためのオープンソース技術スタックです。本稿では、単一サーバー上でPHPをApacheのモジュールとして統合する形態での構成方法について説明します。

Webリソースの種類

  • 静的リソース:HTML、CSS、JavaScript、画像ファイルなど、サーバーから直接送信され、クライアント側で変更されることのないコンテンツ。
  • 動的リソース:PHPやPythonなどのスクリプトによって生成されるコンテンツ。サーバー上で実行され、その結果がHTTPレスポンスとして返されます。

サーバーとクライアントの処理言語

  • クライアントサイド:HTML、CSS、JavaScript、画像形式(JPG/PNGなど)
  • サーバーサイド:PHP、Python、JSP、ASP.NET など

PHPはHTML内に埋め込むことができるサーバーサイドスクリプト言語であり、Zendエンジンによりオペコード(中間コード)にコンパイルされ、キャッシュすることで繰り返しのパースコストを削減できます。

CGIとその代替方式

CGI(Common Gateway Interface)は、Webサーバーと外部プログラム間のデータ交換を定義するプロトコルです。しかし、リクエストごとにプロセスを起動するためオーバーヘッドが大きく、現在では非推奨です。

代わりに利用される方式:

  1. Apacheモジュール(mod_php):PHPをApacheの内部モジュールとして組み込み、リクエストごに分離したプロセスを立ち上げず、効率的に処理。
  2. FastCGI + php-fpm:独立したPHPプロセスマネージャーとして動作。スケーラビリティに優れる。

Apache MPMモデルとの関係

ApacheのMPM(Multi-Processing Module)に応じて、使用するPHPモジュールが異なります。

  • Prefork:スレッド非対応。libphp5.so を使用。安定性重視の環境向け。
  • Worker / Event:マルチスレッド対応。ZTS(Zend Thread Safety)対応版の libphp5-zts.so が必要。

CentOS/RHEL系では、デフォルトでPreforkが使用されるため、モジュール方式でも問題なく動作します。

PHPとデータベースの連携

PHPからMariaDB/MySQLへ接続するには、php-mysql 拡張モジュールが必要です。この拡張により、mysqliPDO_MySQL 経由でのデータベース操作が可能になります。

PHP設定ファイルの管理

主な設定ファイルは以下の通り:

  • /etc/php.ini:メインの設定ファイル
  • /etc/php.d/*.ini:追加モジュールの設定を格納

公式ドキュメント:

設定変更時の反映方法

  • Apacheモジュール方式:systemctl restart httpd
  • php-fpm方式:systemctl restart php-fpm

php.iniの記述形式

[section_name]
; コメント(有効化可能な設定行の無効化に使用)
; directive = value
directive = new_value

代表的なPHP設定例

max_execution_time = 60
memory_limit = 256M
display_errors = Off
display_startup_errors = Off
post_max_size = 16M
upload_max_filesize = 8M
max_file_uploads = 20
date.timezone = Asia/Tokyo
short_open_tag = On

実践:単一サーバーへのLAMP構築(CentOS 7)

1. 必要パッケージのインストール

yum install -y httpd mariadb-server php php-mysql php-mbstring

php-mbstring は多バイト文字列処理に必要。phpMyAdmin利用時は必須です。

2. サービスの起動と自動登録

systemctl start httpd mariadb
systemctl enable httpd mariadb

3. MariaDBの初期セキュリティ設定

mysql_secure_installation

rootパスワードの設定、匿名ユーザーの削除、テストデータベースの削除などを案内に従って実施。

4. PHP動作確認ページの作成

echo '<h1>Static Page</h1>' > /var/www/html/index.html
cat > /var/www/html/info.php << 'EOF'
<?php
echo "<h2>Current Time: " . date('Y/m/d H:i:s') . "</h2>";
\$link = mysqli_connect('localhost', 'lamp', 'password123', 'testdb');
if (\$link) {
    echo "<p style='color:green;'>Database connection successful.</p>";
} else {
    echo "<p style='color:red;'>Connection failed.</p>";
}
mysqli_close(\$link);
?>
EOF

5. データベースとユーザーの作成

mysql -u root -p

MySQLコンソール内で以下を実行:

CREATE DATABASE testdb CHARACTER SET utf8mb4;
CREATE USER 'lamp'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON testdb.* TO 'lamp'@'localhost';
FLUSH PRIVILEGES;

6. 動作確認

ブラウザで以下のURLにアクセス:

  • http://[サーバーIP]/info.php

日時表示と「Database connection successful」のメッセージが表示されれば成功です。

phpMyAdminの導入手順

1. アーカイブのダウンロードと展開

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz
tar xzf phpMyAdmin-5.2.1-all-languages.tar.gz
mkdir -p /var/www/html/phpadmin
cp -r phpMyAdmin-5.2.1-all-languages/* /var/www/html/phpadmin/

2. 設定ファイルの準備

cd /var/www/html/phpadmin
cp config.sample.inc.php config.inc.php

セキュリティのため、blowfish_secret の値をランダムな文字列に変更することを推奨。

3. Webアクセスの再読込

systemctl reload httpd

4. ブラウザからログイン

http://[サーバーIP]/phpadmin にアクセスし、MariaDBのrootまたはlampユーザーでログイン。

代表的なLAMPベースアプリケーション

  • WordPress:PHP+MySQLによるブログ/CMSプラットフォーム。
  • phpMyAdmin:Web経由でMySQL/MariaDBを管理。
  • EC-CUBE:日本発のオープンソースECシステム(PHP製)。
  • DokuWiki:PHPベースの軽量Wikiエンジン。

タグ: PHP Apache MySQL MariaDB LAMP

6月17日 20:20 投稿