Frontend Craft Labフロントエンド開発の実験場
← 記事一覧に戻る
php

駆け出しエンジニアにLAMPを教えてみた

今回はLAMP環境の全体像をざっくりつかむ、深堀は後から ゴールはLAMP環境を作ることです

目次

本を参考に

LAMPとは、Linux、Apache、MySQL、PHPの頭文字を取っていて、ウェブ開発で広く使われる技術スタック(組み合わせ)を指します。

LAMPとは?何ができる?

LAMPは、インターネット上でアクセスできる、動的なウェブアプリケーションを構築できる技術スタックです。

動的なという意味は分かりますか?(反対は静的)

※「動的な」とは、サイトの内容がユーザーの操作に応じて変化したり、データベースから情報を操作したりすることできることを指します。

LAMPの主な構成要素

  • Linux: オープンソースのオペレーティングシステム(OS)
  • Apache: 最も普及しているウェブサーバーソフトウェア
  • MySQL: 人気のあるオープンソースデータベース管理システム
  • PHP/Perl/Python: ウェブアプリケーションを開発するためのプログラミング言語(通常はPHPを指すことが多い)
コンポーネント 役割 特徴
Linux すべてのソフトウェアが動作するための基盤となるオペレーティングシステム 安定性が高く、サーバー用途に最適化されている
Apache インターネットからのリクエストを受け付け、処理を振り分けるウェブサーバー 柔軟な設定が可能で、多くのモジュールで機能拡張できる
MySQL データを保存・管理するためのデータベースシステム 高速で信頼性が高く、ウェブアプリケーションとの相性が良い
PHP ウェブアプリケーションのロジックを実装するためのプログラミング言語 ウェブ開発に特化した機能が豊富で習得しやすい

Linuxって?

Linuxは、オープンソースのOSです。

OSですので下記の内容が役割です。

┌─────────────────────────────────────────────────┐
│ Linux (オペレーティングシステム)                  │
├─────────────────────────────────────────────────┤
│                                                 │
│  ┌─────────────────┐    ┌──────────────────┐    │
│  │ システム起動     │    │ ネットワーク管理   │    │
│  │ ハードウェア制御 │    │ インターネット接続 │    │
│  └─────────────────┘    └──────────────────┘    │
│                                                 │
│  ┌─────────────────┐    ┌──────────────────┐    │
│  │ マルチタスク     │    │  ファイルシステム  │    │
│  │ 複数ソフトの同時 │    │ ファイル保存・管理 │    │
│  │ 実行を可能にする │    └──────────────────┘     │
│  └─────────────────┘                            │
│                                                 │
│  ┌───────────────────────────────────────────┐  │
│  │ リソース管理                               │  │
│  │ CPU・メモリ・ディスクの割り当てと制御        │  │
│  └───────────────────────────────────────────┘  │
│                                                 │
└─────────────────────────────────────────────────┘
   ↓         ↓          ↓
┌──────┐  ┌──────┐  ┌──────┐
│Apache│  │MySQL │  │PHP   │
└──────┘  └──────┘  └──────┘

この中でもWebアプリのデプロイに特に関係しているのは、

  • ネットワーク管理 ネットワーク管理についてはHTTP/HTTPSリクエストを受け取るにはIP設定やポート開放が必要なため

  • ファイルシステム /var/www/html にアプリ配置、ログ管理は /var/logのようにディレクトリ管理が必要なため

それでは、上記の役割でLinuxはWebサーバー環境において、他のOSと比較して何かゆういせいがあるのでしょうか?

準備中... (^^;)
Cooming Soon... 

Linuxインストール

そもそもどこにインストールするのか?PCにインストールします。

下記はLAMPのレイヤー構成図です。 下が支える側で上に行くほどその機能を使う側です。

┌──────────────────────────────────────┐
│ WordPress / Laravel(Webアプリ形式で) │
├──────────────────────────────────────┤
│ Apache + PHP + MySQL(ミドルウェア)   │
├──────────────────────────────────────┤
│ OS (ハードウェアの橋渡し)             │ ← Linuxはこのレイヤー
├──────────────────────────────────────┤
│ ハードウェアPC / クラウド(AWSなど)    │ ← だからココにインストール
└──────────────────────────────────────┘

選択肢として下記があります

Linuxインストールの学習について

  • ローカルPC
    • 仮想マシン(ローカル環境に安全にインストール)VirtualBox(仮想マシンの作成)、CentOS
    • WSL(Windows Subsystem for Linux)
  • クラウド(AWSやGCPなど) 実際のサーバーに近い構成で学べる

VirtualBoxとは?

VirtualBox(バーチャルボックス) は、PCの中に「仮想のパソコン(仮想マシン)」を作れるソフトウェア 注意点 仮想マシンはメモリやCPUを使うので、**PCスペック(8GB以上推奨)**が必要

WSLとは?

Windows Subsystem for Linux(WSL)は、Windowsの中にLinuxを動かすためのシステム。

比較 仮想マシン(VirtualBoxなど) WSL(Windows Subsystem for Linux)
動かし方 仮想PCを丸ごと起動 Linuxのコア機能だけ直接起動
リソース消費 多い(メモリ数GB、CPUも使う) 少ない(必要な分だけ動く)
起動時間 数十秒〜数分 数秒(Ubuntuアプリをクリックするだけ)
インストールサイズ 数GB以上 数百MB〜

学習順番

「WSL → VirtualBox → 最終的にAWS」

サクッと学習したいならWSL

WSLで学べない or 学びにくいこと(VirtualBoxと比べて)

分野 学びにくい点
OSの起動〜ブート処理 WSLは「OSの途中から」起動してる感じなので、電源入れてからOSが立ち上がる仕組みは見れない。起動ログとかカーネル設定もいじれない
systemd(システム管理の心臓部) 最近WSL使えるようになってきたが、標準ではない、設定が面倒。普通のLinuxとは動きが違うこともある。
ネットワークの構成 VirtualBoxだと「専用のネットワーク作って、ルーター的なこと」もできるけど、WSLはWindowsのネットワークを借りてるため、固定IPとかブリッジ接続の練習がしづらい
ディスク構成の練習 WSLはファイルシステムがちょっと特殊で、パーティション分けやマウントの練習が思うようにできないfstab(起動時のマウント設定)も一部使えない。

WSL で LAMP を学ぶ

LAMP環境作成手順

  1. WSLのインストール

WSLがインストールされているか確認するには、以下のコマンドをWindowsのコマンドプロンプトまたはPowerShellで実行します。

このコマンドを実行すると、インストールされているWSLのディストリビューションのリストが表示されます。

wsl --list --verbose

Ubuntuがインストールされているかも確認できます

wsl --install
  1. Ubuntu Serverのインストール

Ubuntu(ウブントゥ)とは? Ubuntuは、LinuxというOSの一種です。 くさんあるLinuxの中でも、特に「初心者にも使いやすくしたバージョン」。

Windowsではアプリとしてインストール、起動することで、OS(オペレーティングシステム)が起動します。 WSLは仮想マシンではなく、Windowsの中で**「必要なときだけ起動するLinux」**

Ubuntuのインストール

wsl --install -d Ubuntu

Docker Desktopのインストール時に自動で入ってたというパターンもあるので、その場合は不要です。私はそうでした → Dockerが裏でWSL+Ubuntuを使ってるパターン → たった数百MBなので、入れた自覚もなかったです

Ubuntu(WSL)は 「アプリを開く=OSを起動する」

  1. Apacheのインストール

Apacheを使いたい場所(OS)にインストールする必要がある

Ubuntuターミナルでインストール
↓
Ubuntuという「Linuxの仮想環境」にインストールされる
↓
その中のディレクトリ(/etc や /var など)は Linuxそのもの
↓
だからApacheはそこで動く

「Linuxのソフトが動くために必要なファイル群」と、それを動かす「機能」や「制御層」が合わさって、初めて **“Linux仮想環境”**というものが完成します。

結果として単に「WSLのディレクトリの中」が仮想環境にみえます

マウントについて(ご参考)
┌────────────────────────────────────────────┐
│           Windowsのファイルシステム          │
├────────────────────────────────────────────┤
│                                            │
│  C:\Users\...\AppData\...\ext4.vhdx        │ ← Ubuntu環境の仮想ディスクファイル
│                                            │
│  \\wsl$\Ubuntu\                            │ ← 動作中のWSLに接続するための共有パス
│                                            │
└────────────┬───────────────────────────────┘
             │ WSLが起動すると、下記のように展開される
             ▼
┌────────────┴───────────────────────────────┐
│          WSL上のLinuxファイルシステム        │
├────────────────────────────────────────────┤
│                                            │
│  /  ← ext4.vhdx の中身がここにマウントされる │
│   ├── /home/yourname/...                   │
│   ├── /etc/...                             │
│   └── /mnt/c/                              │ ← WindowsのCドライブがここに接続される
│        └── Users/YourName/Desktop/         │
│                                            │
└────────────────────────────────────────────┘


主体 対象の場所 パス例 役割・意味
WSL(Linux) WindowsのCドライブ /mnt/c/Users/... LinuxからWindowsのファイルにアクセスできる
Windows WSLのファイルシステム \\wsl$\Ubuntu\ WindowsからWSLのLinuxファイルにアクセス可能
WSL(Linux) ext4.vhdx(仮想ディスクファイル) / この仮想ディスクがLinux環境のルートとして機能する

Apacheのインストール

インストールされているか確認するコマンド

dpkg -l apache2
dpkg-query: no packages found matching apache2
sudo apt install apache2

上記でインストールが始まり、途中8MBの容量を使用するけど続けるか? 確認されましたがYESで返答しインストールが完了

ブラウザでhttp://localhost/でApacheの初期ページが確認できました。

  • PHPモジュールをインストールする
sudo apt install php libapache2-mod-php
  • Apache再起動
sudo systemctl restart apache2

\wsl$\Ubuntu\var\www\html 上記のアドレスのフォルダ内にinfo.phpを作成し、下記のように記述

<?php phpinfo(); ?>

これでlocalhost/info.phpをブラウザで確認するとphpの動作が確認できます

  • MySQLサーバー(データベースの中身)と、クライアント(操作するツール)をインストール

※Ubuntuの標準がMariaDBだから、MySQLとしてMariaDBを入れてる

sudo apt install mariadb-server
  • phpMyAdmin のインストール
sudo apt install phpmyadmin
  • Apacheに設定ファイルをリンク、設定ファイルを有効化
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf

sudo a2enconf phpmyadmin

sudo systemctl restart apache2

代替スタック

  • WAMP: Windows, Apache, MySQL, PHP (Windowsベース)
  • MAMP: Mac, Apache, MySQL, PHP (Macベース)
  • LEMP: Linux, Nginx, MySQL, PHP (Apacheの代わりにNginxを使用)

LAMPスタックは、WordPressなどの多くの人気CMSやウェブアプリケーションの基盤として使われています。 初心者からプロフェッショナルまで、幅広い開発者に支持されている信頼性の高い環境です。