この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: VPSへの導入例(CentOS編)
SEOタイトル: CentOS VPS Apache 導入完全ガイド

この記事の要点
  • VPS (Vultr / Linode / さくらの VPS / ConoHa) に CentOS を立ち上げて Apache を導入する一連の流れ
  • 初期セキュリティ: SSH 鍵認証必須 / root ログイン禁止 / dnf update / fail2ban
  • Apache 導入: sudo dnf install httpd + systemctl enable --now httpd
  • firewalld + SELinux + Virtual Host の三点セットを必ず設定
  • PHP + MySQL/MariaDB + Let's Encrypt SSL で LAMP スタックを完成させる

はじめに

本記事では海外 / 国内主要 VPS (Virtual Private Server) 上で CentOS Stream 9 / RHEL 9 系(AlmaLinux / Rocky Linux 含む)に Apache HTTP Server を導入する手順を、初期セキュリティ・SSL 化までまとめて扱います。

主要 VPS の選定

VPS特徴最安プラン
Vultr世界 30+ リージョン、SSD 標準$2.5/月〜
Linode (Akamai)歴史と安定性$5/月〜
DigitalOcean開発者向け UI、Marketplace 豊富$4/月〜
さくらの VPS国内、円建て、24/7 日本語サポート643 円/月〜
ConoHa VPS国内、長期割引483 円/月〜
WebARENA Indigo低価格349 円/月〜
Hetzner欧州、コスパ最強€4.59/月〜

Step 1: VPS インスタンスの作成

  1. VPS 管理画面にログイン
  2. 「Deploy New Server」「サーバー追加」等を選択
  3. OS: AlmaLinux 9 または Rocky Linux 9 を選択(CentOS 7 は EOL 済、Stream 9 でも可)
  4. プラン: 1 vCPU / 1GB RAM から開始可能。本番は 2GB+ 推奨
  5. SSH 鍵を登録(Vultr / Linode はインスタンス作成時に投入可能)
  6. 起動完了後、表示された IP に SSH

Step 2: 初期セキュリティ設定

SSH 鍵認証セットアップ

# 手元 PC で鍵生成 (まだなら)
ssh-keygen -t ed25519 -C "your-email@example.com"

# 公開鍵を VPS にコピー
ssh-copy-id root@your-vps-ip
# または手動で /root/.ssh/authorized_keys に貼る

# 接続テスト
ssh root@your-vps-ip
# パスワード入力なしでログインできれば OK

非 root 作業ユーザー作成

# 作業ユーザー作成
adduser deploy
passwd deploy

# sudo 権限付与
usermod -aG wheel deploy

# SSH 鍵を deploy ユーザーにコピー
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

# deploy で再ログインしてテスト
ssh deploy@your-vps-ip
sudo whoami  # root と表示されれば OK

sshd 設定強化

# /etc/ssh/sshd_config を編集
sudo vim /etc/ssh/sshd_config

# 推奨設定:
PermitRootLogin no              # root 直接ログイン禁止
PasswordAuthentication no       # パスワード認証無効化
PubkeyAuthentication yes        # 鍵認証のみ
Port 22022                      # デフォルト 22 から変更 (任意)
PermitEmptyPasswords no
MaxAuthTries 3

# 構文チェックして再起動
sudo sshd -t
sudo systemctl restart sshd

# 再ログインで確認 (元の接続は切らずに別ウィンドウで)
ssh -p 22022 deploy@your-vps-ip

システム更新と基本ツール

sudo dnf update -y

# 必須ツール
sudo dnf install -y vim wget curl tar git bash-completion

# EPEL リポジトリ
sudo dnf install -y epel-release

# fail2ban (brute-force 攻撃対策)
sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban

# /etc/fail2ban/jail.local
sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3

[sshd]
enabled = true
port = 22022
EOF

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Step 3: firewalld 設定

# 状態確認
sudo systemctl status firewalld

# 現在の許可
sudo firewall-cmd --list-all

# SSH ポート変更時は新ポートを許可
sudo firewall-cmd --permanent --add-port=22022/tcp
sudo firewall-cmd --permanent --remove-service=ssh

# HTTP / HTTPS 許可
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 反映
sudo firewall-cmd --reload

# 確認
sudo firewall-cmd --list-all

# クラウド VPS は別途「コントロールパネルの Firewall / Security Group」設定も必須
# Vultr: Firewall Group, AWS: Security Group, Linode: Cloud Firewall

Step 4: Apache HTTP Server 導入

# インストール
sudo dnf install -y httpd

# バージョン確認
httpd -v
# Server version: Apache/2.4.x

# 起動 + 自動起動
sudo systemctl enable --now httpd

# 状態確認
sudo systemctl status httpd

# ブラウザで http://your-vps-ip にアクセス
# → Apache のテストページが表示されれば成功

Step 5: バーチャルホスト設定

# ドキュメントルート作成
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R deploy:deploy /var/www/example.com

# テストページ
echo '<h1>Hello example.com</h1>' > /var/www/example.com/public_html/index.html
# /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
# 構文チェック
sudo httpd -t

# リロード (無停止)
sudo systemctl reload httpd

# DNS の A レコードを VPS IP に向けたら http://example.com で表示確認

Step 6: SELinux 対応

# SELinux モード確認
getenforce  # Enforcing が望ましい

# 標準パス /var/www は最初から httpd_sys_content_t が付いている

# 非標準パスを使う場合
sudo dnf install -y policycoreutils-python-utils
sudo semanage fcontext -a -t httpd_sys_content_t '/data/web(/.*)?'
sudo restorecon -Rv /data/web

# Apache から外部接続(DB / API)
sudo setsebool -P httpd_can_network_connect 1

# Apache から DB 接続
sudo setsebool -P httpd_can_network_connect_db 1

# 拒否ログ
sudo journalctl -t setroubleshoot --since "1 hour ago"

Step 7: PHP インストール

# Remi リポジトリで最新 PHP 8.x
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module enable -y php:remi-8.3

# Apache 連携 (mod_php) + 必須拡張
sudo dnf install -y php php-mysqlnd php-mbstring php-xml php-gd \
                    php-curl php-zip php-intl php-bcmath

# バージョン
php -v
# PHP 8.3.x

# Apache 再起動 (mod_php 反映のため)
sudo systemctl restart httpd

# 動作確認
echo '<?php phpinfo();' | sudo tee /var/www/example.com/public_html/info.php
# http://example.com/info.php で確認 → 確認後すぐ削除
sudo rm /var/www/example.com/public_html/info.php

Step 8: MariaDB (MySQL 互換)

# MariaDB インストール
sudo dnf install -y mariadb-server

sudo systemctl enable --now mariadb

# 初期セキュリティ設定
sudo mysql_secure_installation
# - root パスワード設定
# - 匿名ユーザー削除
# - リモート root ログイン無効化
# - test DB 削除
# - 権限テーブル再読み込み

# データベース作成
sudo mysql -u root -p <<EOF
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp'@'localhost';
FLUSH PRIVILEGES;
EOF

Step 9: Apache or Nginx の選択

項目ApacheNginx
同時接続性能prefork は重い、event MPM で改善イベント駆動で軽量
.htaccess○ 動的読込× 起動時 conf のみ
mod_php× (PHP-FPM 必須)
静的配信◎ 高速
リバースプロキシ
WordPress 互換◎ (.htaccess 文化)○ (設定書換必要)

Step 10: Let's Encrypt SSL 化

sudo dnf install -y certbot python3-certbot-apache

# 証明書取得 + Apache 設定自動書き換え
sudo certbot --apache -d example.com -d www.example.com

# 自動更新は certbot-renew.timer が systemd で動く
sudo systemctl status certbot-renew.timer
sudo certbot renew --dry-run

# 結果: /etc/httpd/conf.d/example.com-le-ssl.conf が自動生成
# → https://example.com で アクセス可能

Step 11: 監視と運用

  • アクセスログ: /var/log/httpd/access_log
  • エラーログ: /var/log/httpd/error_log
  • logrotate は標準で設定済 (/etc/logrotate.d/httpd)
  • Uptime 監視: UptimeRobot / Better Uptime / Mackerel
  • リソース監視: Netdata, Prometheus + Grafana, Datadog, NewRelic
  • バックアップ: tar + cron, BorgBackup, クラウド側 Snapshot

ufw / iptables を使う場合(参考)

CentOS 標準は firewalld ですが、Debian 系から移行した場合は ufw / iptables を直接使う場合もあります:

# firewalld を停止して iptables を使う場合(非推奨)
sudo systemctl disable --now firewalld
sudo dnf install -y iptables-services
sudo systemctl enable --now iptables

# ルール例
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22022 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -P INPUT DROP
sudo service iptables save

FAQ

Q: CentOS 7 ではダメ?
A: 2024 年 6 月で EOL。セキュリティパッチが出ないため新規構築は AlmaLinux 9 / Rocky Linux 9 を推奨。

Q: VPS と AWS EC2 の違いは?
A: VPS は固定料金で分かりやすく個人向け。EC2 は従量課金で柔軟、エンタープライズ向け。同等スペックでは VPS が安価。

Q: 初期パスワードログインのまま放置するとどうなる?
A: 数時間以内に全世界から SSH brute-force 攻撃が始まります。必ず鍵認証化 + fail2ban + 不要なら root ログイン無効化を。

Q: バックアップはどう取る?
A: クラウド側の Snapshot 機能(VPS 提供元)+ コンテンツとデータベースを別途オフサイト(S3 / Backblaze B2 等)に保存の二重化が推奨。