まず全体像:リクエストはどこを通るか

この1枚が全ステップの地図です。各ステップで「いま図のどこを触っているか」を意識します。

Aリクエストライフサイクル

ブラウザからのリクエストが VPS 内の Apache → PHP → MySQL を通り、HTML になって返るまで。

ブラウザ利用者
②リクエスト
⑦応答
ApacheHTTPサーバ
:80 / :443
③依頼
⑥HTML
PHP動的にHTML生成
④SQL
⑤結果
MySQLデータ保存
:3306

① 事前に DNS がドメイン→IP を解決 / 行き=②③④、戻り=⑤⑥⑦(HTML レスポンス)。番号は処理の順番。

各部品を「何・なぜ」で知る

全体像の各ブロックを1つずつ、存在理由(なぜ要るか)から掘り下げます。

B-1Linux の3つの土台

ファイル・権限・プロセス。この3つが全ての足場です。

① ファイルシステム階層

/ ルート /etc 設定ファイル /var/www Web公開ファイル /var/log ログ /home ユーザーのホーム

どこに何があるか分かると、設定・ログ・公開先を自分で辿れる。

② ユーザーと権限

root(管理者) ↕ sudo で一時昇格 一般ユーザー(普段) 権限 rwx = 読/書/実行

「Permission denied」の多くはここ。誰が何をできるかを理解する。

③ プロセスと systemd

サービス=常駐プロセス (apache2/mysql/php-fpm) systemctl start 起動 systemctl status 状態 systemctl enable 自動起動

「動かない」時はまず status。ログは journalctl / /var/log。

B-2Apache は「受付」

:80/:443 で待ち受け、VirtualHost で対象サイトを選び、拡張子で静的配信と PHP 処理を振り分けます。

リクエスト/index.php
Apache :80/:443VirtualHost で対象選択
DocumentRoot=/var/www/html
拡張子で
分岐
.html / .css / 画像そのまま返す(静的)
.phpPHP に渡す(動的)→ mod_php / PHP-FPM

B-3MySQL は「データの倉庫」

サーバに接続(:3306 かソケット)して、データベース → テーブル → 行を読み書きします。

PHP(アプリ)PDO/mysqli で接続
mysql コマンド手動で確認
接続
:3306 / socket
データベース app_db

テーブル users id | name | email 1 | 佐藤 | a@ex... 2 | 鈴木 | b@ex... 行 = 1レコード

ユーザーと権限(GRANT)誰が・どのDBに・何を(SELECT/INSERT…)できるか

B-4PHP は毎回実行される

静的ファイルと違い、.php はリクエストごとに上から実行して HTML を作り直します。

静的ファイル(.html)そのまま返す。ファイルの内容 = 返る内容(変わらない)
リクエスト到着
上から実行
必要なら MySQL 照会
HTML 出力して終了状態は残らない

毎リクエストで作り直すから最新データを反映できる。「前回の続き」はセッション等で別途保持する。

つなぎ目(ここが一番つまずく)

初学者が必ず詰まるのは「部品どうしの繋ぎ方」。だから独立した図にしています。

C-1Apache ⇄ PHP のつなぎ方(2方式)

mod_php(Apache に内蔵)と PHP-FPM(別プロセスに転送)。研修は簡単な mod_php から。

方式1:mod_php(Apache に内蔵)
Apache プロセス内部に PHP モジュール(同一プロセスで実行)

○ 設定が簡単・研修向き × 密結合で重い・柔軟性が低い

方式2:PHP-FPM(別プロセスに転送)
Apacheproxy_fcgi
.php転送
PHP-FPM:9000/socket

○ 分離できて本番向き × 設定が一手間(転送先の指定)

C-2PHP ⇄ MySQL のつなぎ方(接続の4点セット)

host/port・dbname・user/pass・権限。1つでも違うと繋がりません。「動かない」の定番。

PHP スクリプト

$pdo = new PDO( "mysql:host=127.0.0.1; port=3306;dbname=app_db", "db_user", "db_pass");

PDO / mysqli どちらでも。値が1つ違うと繋がらない。

接続
接続の4点セット(つなぎ目の正体)
  • ① host / port(どこに)127.0.0.1:3306 か socket
  • ② dbname(どの DB に)
  • ③ user / pass(誰として)
  • ④ 権限 GRANT(何ができる)
MySQL:3306

C-3設定ファイルとログの配置マップ

Ubuntu 系と RHEL 系で置き場所が違います。「設定変更/ログ確認」はまずこの表で場所を特定します。

部品設定(Ubuntu/Debian 系)設定(AlmaLinux/RHEL 系)ログ
Apache /etc/apache2/
apache2.conf
sites-available/*.conf
/etc/httpd/
httpd.conf
conf.d/*.conf
/var/log/apache2/error.log
(RHEL: /var/log/httpd/)
PHP /etc/php/8.x/
apache2/php.ini
fpm/php.ini
/etc/php.ini
/etc/php-fpm.d/
Apache の error.log に出る
(display_errors 次第)
MySQL /etc/mysql/
my.cnf
mysql.conf.d/
/etc/my.cnf
/etc/my.cnf.d/
/var/log/mysql/error.log
(RHEL: /var/log/mysqld.log)

手順のフロー

「順番」には理由があります。なぜその順かを図で押さえます。

D-1VPS を LAMP にする順番

先に接続と安全(①〜④)を固め、その上に各層(⑤〜⑦)を積み、最後に繋いで確認(⑧)します。

① SSH 鍵を作成
② VPS に SSH 接続
③ 作業ユーザー作成 + sudo
④ ファイアウォール(ufw):22/80/443 を許可
安全を確保してから公開
⑤ Apache を install → 起動http://IP で疎通確認
⑥ MySQL を install → 起動初期セキュリティ設定
⑦ PHP を install → Apache と結合phpinfo で確認
⑧ 4層を繋いで動作確認(統合)PHP から MySQL のデータを表示できたら完成

D-2HTTPS 化の流れ

DNS を先に向けるのは、certbot のドメイン所有確認がそこを見るから。順番の意味が分かります。

① ドメインの A レコードを VPS の IP に向ける(DNS)
② certbot を実行(Apache プラグイン)
③ Let's Encrypt がドメイン所有を確認(ACME)
④ 証明書を取得 → /etc/letsencrypt/ に保存
⑤ Apache :443 を有効化(certbot が設定を自動追記)
⑥ https:// でアクセス可(証明書は自動更新)

壊れた時に見る場所(最重要スキル)

「自分で調べて直す」を支える地図。最初から手元に置きます。

Eデバッグ地図

症状から順に、ポート → Apache起動 → PHPエラー → DB接続 → 権限、と切り分けます。

症状:ブラウザでページが出ない
① ポートは開いてる?ss -tlnp / curl -I localhost → FW と待ち受けを確認
OKなら次
② Apache は起動してる?systemctl status apache2 → journalctl -xe
OKなら次
③ PHP がエラー?tail -f /var/log/apache2/error.log → 500 は大抵ここ
OKなら次
④ DB に繋がってる?mysql -u user -p で接続テスト → 4点セット(C-2)を疑う
それでも駄目なら
⑤ 権限を確認ls -l /var/www … 所有者 / rwx
ログの置き場(まず見る場所)

Apache : /var/log/apache2/error.log access.log PHP : Apache の error.log に混ざる MySQL : /var/log/mysql/error.log システム: journalctl -u サービス名

混乱の元を先に潰す(対比)

F-1開発(手元)と本番(VPS)

同じ LAMP でも「誰が見るか・壊した時の影響」が段違い。ここを分けて理解します。

開発環境(自分の PC / WSL)
  • アクセス:http://localhost
  • 自分だけが見られる
  • ファイルは手元にある
  • 壊しても影響なし(試す場所)
  • SSH 不要・FW を意識せず
本番環境(VPS)
  • アクセス:http(s)://ドメイン or 公開IP
  • 世界中から見られる(=守る必要)
  • ファイルはサーバ上(SSH/SFTP で転送)
  • 壊すと公開サービスが止まる
  • SSH 鍵ログイン・FW/権限が必須

F-2Apache と Nginx

研修では設定が学びやすい Apache を正とし、Nginx は概念だけ押さえます。

Apache(本研修で使う)
  • .htaccess でディレクトリ単位の設定
  • mod_php で PHP を内蔵実行できる
  • プロセス / スレッド型
  • 設定が直感的で学習向き・教材が豊富
Nginx(違いを知っておく)
  • イベント駆動で大量接続に強い
  • PHP は PHP-FPM 必須(内蔵不可)
  • .htaccess なし(設定は集中管理)
  • リバースプロキシ用途で定番・高トラフィック本番で多い

ステップの型(例: VPS とは何かを知る)

クラウド(AWS 等)

大規模・多機能・従量課金

VPS

シンプル・低コスト・自分専用の1台

VPS は「物理サーバーを仮想化で分割した1台」。まずはここから。

VPS(仮想プライベートサーバー)とは、物理サーバーを仮想化で分割して提供するサービス。 自分専用の環境を低コストで持ち、本格的なサーバー運用を体験できます。

ゴール

  1. VPS の定義を自分の言葉で説明できる
  2. クラウド(AWS 等)と VPS の違いを理解する
  3. 使用する VPS の OS と IP アドレスを確認できる
ヒント1

「VPS クラウド 違い」で検索してみましょう。

ヒント2

VPS は物理サーバーを仮想化で分割したもの。AWS の EC2 も同様の仕組みです。

ヒント3

講師から渡された IP アドレス・ユーザー名・初期パスワードを手元に準備しましょう。