初心者向けLinuxサーバー構築ガイド|UbuntuでLAMP・LEMP環境を簡単に設定する方法
この記事では Ubuntu 22.04 LTS を例に、LAMP/LEMP スタックを構築し、HTTPS 化と基本セキュリティを整える方法を 9 ステップで紹介します。WordPress をすぐに立ち上げたい方や社内検証環境を用意したい方に最適です。
目次
前提条件
- OS:Ubuntu 22.04 LTS(最小インストール)
- ユーザー:sudo 権限を持つ一般ユーザー
- ターミナル:SSH でサーバーへログイン済み
- ドメイン例:
example.com
LAMP と LEMP の違い【比較表】
略称 | 構成 |
---|---|
LAMP | Linux + Apache + MySQL(MariaDB) + PHP |
LEMP | Linux + Nginx(Engine X) + MySQL(MariaDB) + PHP |
両スタックの流れはほぼ同じなので、好みや要件で選んでください。
ステップ1:システムを最新化
sudo apt update
sudo apt upgrade -y
カーネル更新が含まれた場合は sudo reboot
で再起動してから次へ進むと安心です。
ステップ2:Web サーバーをインストール
Apache パターン
2‑1) prefork + mod_php(手軽)
sudo apt install apache2 libapache2-mod-php8.1 php8.1-cli php8.1-common php8.1-mysql -y
sudo systemctl enable --now apache2
libapache2-mod-php の導入で Apache は自動的に mpm_prefork
へ切り替わります。
2‑2) event + PHP‑FPM(推奨)
sudo apt install apache2 php8.1-fpm php8.1-cli php8.1-common php8.1-mysql -y
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fpm
sudo systemctl enable --now apache2 php8.1-fpm
prefork から切り替える場合:
sudo a2dismod php8.1 mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
Nginx + PHP‑FPM パターン(LEMP)
sudo apt install nginx php8.1-fpm php8.1-cli php8.1-common php8.1-mysql -y
sudo systemctl enable --now nginx php8.1-fpm
将来 PHP 8.3 へ移行する場合は ppa:ondrej/php
を利用しても構いません。
ステップ3:MariaDB のインストールと初期セキュリティ
sudo apt install mariadb-server -y
sudo systemctl enable --now mariadb
sudo mysql_secure_installation
- Switch to unix_socket authentication?:基本は Y(安全)。
- Change the root password?:リモート接続が必要なら Y。
- 匿名ユーザー削除・test DB 削除は Y 推奨。
ステップ4:ファイアウォール(UFW)を有効化
sudo ufw status
inactive
でも既定は全許可です。ルールを入れてから有効化しましょう。SSH ポートを変更している場合は必ず許可します。
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # 例:2222 に変更なら 2222 を許可
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
ステップ5:サイトディレクトリと権限
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
プラグインが書き込みを必要とする場合は chmod 750
+ ACL で制御する方法もあります。
ステップ6:仮想ホスト/Server Block
6‑1) Apache の例
sudo nano /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
</VirtualHost>
sudo apache2ctl configtest # Syntax OK を確認
sudo a2ensite example.com.conf
sudo systemctl reload apache2
6‑2) Nginx の例
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com;
root /var/www/example.com/public_html;
index index.php index.html;
```
# PHP ハンドラ
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
try_files $uri =404; # WordPress では $uri $uri/ /index.php?$args に変更
}
# 隠しファイル拒否
location ~ /\. {
deny all;
}
```
}
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
ステップ7:HTTPS 化(Let’s Encrypt)
Snap 版 Certbot(公式推奨)
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache -d example.com --agree-tos -m admin@example.com --redirect
# Nginx の場合は --nginx
自動更新の仕組み
certbot.timer
は 0 時枠・12 時枠の 2 回起動し、RandomizedDelaySec=12h
で分散実行されます。
systemctl list-timers --all | grep certbot
ステップ8:Fail2ban で総当たり防御
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
/etc/fail2ban/jail.local
に [sshd]
や [apache-auth]
を追記し、保護対象を増やせます。
ステップ9:AppArmor でプロファイル強化
sudo apt install apparmor-utils -y
sudo aa-status # 現在のモード
sudo aa-logprof # ログから許可ルール生成
CentOS 系を使う場合は SELinux を Permissive でテストし、最終的に Enforcing へ移行するのが一般的です。
まとめ
これで Web サーバーの構築と初期防御が完了しました。運用を始めたら次を習慣化すると、より安全で快適な環境を維持できます。
- パッケージ自動更新(
unattended-upgrades
) - ログローテートと監視(
journalctl
/logrotate
) - バックアップ自動化(DB ダンプ & オブジェクトストレージ)
- CVE 情報の定期チェック(Ubuntu Security Notices)
一歩ずつ作業しながら、ご自身の運用方針に合わせてカスタマイズしてみてください。