駆け出しエンジニアに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環境作成手順
- WSLのインストール
WSLがインストールされているか確認するには、以下のコマンドをWindowsのコマンドプロンプトまたはPowerShellで実行します。
このコマンドを実行すると、インストールされているWSLのディストリビューションのリストが表示されます。
wsl --list --verbose
Ubuntuがインストールされているかも確認できます
wsl --install
- 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を起動する」
- 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やウェブアプリケーションの基盤として使われています。 初心者からプロフェッショナルまで、幅広い開発者に支持されている信頼性の高い環境です。