テクノロジーガイド

CentOS 7 に Nginx、PHP‑FPM7、MariaDB を使って Moodle 3.2 をインストールする手順

4 min read システム構築 更新されました 08 Oct 2025
CentOS7でNginx+PHP‑FPM7+MariaDBにMoodle3.2を導入
CentOS7でNginx+PHP‑FPM7+MariaDBにMoodle3.2を導入

重要: 本手順は教育目的のサンプル設定を含みます。実運用では強力なパスワード、正式な SSL 証明書、バックアップ、監視を必ず導入してください。

この記事の対象読者と前提条件

対象読者: サーバー管理者、システム担当者、または自己管理の学習環境を構築したい教育関係者。

前提条件:

  • CentOS 7 が稼働しているサーバー
  • root 権限(sudo 可)
  • 基本的な Linux コマンド操作ができること

短い定義: Moodle — オープンソースの学習管理システム(LMS)。

目次

  • 概要と目的
  • 必要なソフトウェアと役割の説明
  • 手順概要
  • 各ステップの詳細(1〜8)
  • セキュリティと運用に関する追加対策
  • よくあるトラブルと対処法
  • ロール別チェックリスト
  • アップグレードのための簡易 SOP
  • 受入基準
  • 1行用語集
  • FAQ

概要と目的

このガイドは、Moodle 3.2 を CentOS 7 上に Nginx(リバースプロキシ兼 Web サーバー)、PHP‑FPM 7.0(処理)、MariaDB(データベース)で稼働させる実践手順です。主な狙いは安定して運用できる LEMP スタックの構築と Moodle 固有の要件(ファイル保存用の moodledata、PHP 拡張、SELinux ラベルなど)を満たすことです。

関連する設計意図(バリアント):

  • Apache + mod_php ではなく Nginx + PHP‑FPM を採用する理由: パフォーマンスとプロセス分離
  • MariaDB を採用する理由: MySQL 互換の高速なストレージエンジン
  • PHP7 を選ぶ理由: Moodle 3.2 での互換性とパフォーマンス向上

主要な作業フロー

  1. Nginx のインストール
  2. PHP‑FPM 7.0 と必要な拡張のインストール
  3. MariaDB のインストールと Moodle 用 DB/ユーザー作成
  4. Moodle ソースの取得とディレクトリ準備
  5. SSL と Nginx 仮想ホストの設定
  6. SELinux と firewalld の設定
  7. Web インストーラで Moodle を導入
  8. 動作確認とテスト

価値のある補足(このガイドで追加した項目)

  • 代替手順: Apache を使う場合の要点
  • 障害例と対処: PHP-FPM が起動しない、DB 接続エラーなど
  • セキュリティ強化項目: TLS、ファイル権限、SELinux の最小権限
  • ロール別チェックリスト: 管理者/教師/生徒の観点
  • 簡易 SOP: バックアップ、アップグレード手順
  • 受入基準(Kriterii priemki): インストール成功の判断基準

前準備: 環境確認

まずサーバーが最新であることと root 権限を確認してください。

推奨: テスト環境で手順を確認した後、運用環境に適用すること。

重要な注意点: サンプルのデータベースパスワードや自己署名証明書は本番利用に不向きです。


Step 1 - Nginx のインストール

このステップでは EPEL リポジトリから Nginx をインストールします。CentOS 標準リポジトリに最新の nginx がないため epel-release を追加します。

yum -y install epel-release

次に nginx をインストールします。

yum -y install nginx

インストール後、起動と自動起動の登録を行います。

systemctl start nginx  
systemctl enable nginx

Nginx はデフォルトでポート 80 で起動します。open port を確認するには netstat を使います。

netstat -plntu

CentOS 7 に nginx をインストールした後の netstat 出力

netstat コマンドがない場合は net-tools をインストールします。

yum -y install net-tools

重要: 企業運用ではファイアウォールや SELinux のポリシーに配慮してから外部公開してください。


Step 2 - PHP‑FPM のインストールと設定

Moodle 3.2 は PHP 7 をサポートするため、本例では PHP 7.0 を使用します。CentOS の標準リポジトリには含まれないため webtatic リポジトリを追加してインストールします。

リポジトリ追加:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

必要なパッケージ群を一括でインストールします(Moodle に必要な拡張を含む)。

yum install -y graphviz aspell php70w-fpm php70w-cli php70w-pspell php70w-curl php70w-gd php70w-intl php70w-mysql php70w-xml php70w-xmlrpc php70w-ldap php70w-zip php70w-json php70w-opcache php70w-readline php70w-mbstring php70w-soap

php.ini の変更: cgi.fix_pathinfo を無効にします。これは PATH_INFO を悪用した攻撃を防ぐ目的です。

vim /etc/php.ini

php.ini 内で:

cgi.fix_pathinfo=0

php-fpm のプール設定を編集して、nginx ユーザーで動作するようにします。

cd /etc/php-fpm.d/  
vim www.conf

下記を設定します:

user = nginx  
group = nginx

ソケットで PHP‑FPM を扱う設定に変更します(TCP ポートよりソケットを推奨)。

listen = /run/php-fpm/php-fpm.sock

listen.owner = nginx  
listen.group = nginx  
listen.mode = 0660

処理する拡張子を制限します。

security.limit_extensions = .php

環境変数を有効にします(例)。

env[HOSTNAME] = $HOSTNAME  
env[PATH] = /usr/local/bin:/usr/bin:/bin  
env[TMP] = /tmp  
env[TMPDIR] = /tmp  
env[TEMP] = /tmp

セッションディレクトリとソケットのオーナーを nginx にします。

mkdir -p /var/lib/php/session/  
chown -R nginx:nginx /var/lib/php/session/

chown -R nginx:nginx /run/php-fpm/

php-fpm を起動して自動起動登録します。

systemctl start php-fpm  
systemctl enable php-fpm

ソケットの存在を確認します。

netstat -lx | grep php-fpm.sock

注意点とトラブルシューティング:

  • PHP が 502 Bad Gateway を返す場合: php-fpm が起動しているか、ソケットのパスと権限を確認。
  • SELinux 有効時は httpd_sys_rw_content_t 等のラベル調整が必要(後述)。

Step 3 - MariaDB のインストールと Moodle 用 DB 作成

MariaDB をインストールして、Moodle 用のデータベースとユーザーを作成します。

yum -y install mariadb-server mariadb

my.cnf に InnoDB 設定を追加します。

vim /etc/my.cnf

[mysqld] セクション末尾に:

default_storage_engine = innodb  
innodb_file_per_table = 1  
innodb_file_format = Barracuda

MariaDB を起動して自動起動を設定します。

systemctl start mariadb  
systemctl enable mariadb

root パスワード設定と初期セキュリティを対話形式で実行します。

mysql_secure_installation

推奨回答の例:

Set root password? [Y/n] Y  
New password:  
Re-enter new password:  
Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] Y  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

Moodle 用 DB とユーザーを作成します。例では “moodledb”、”moodleuser”、パスワードはサンプルです。実運用では強固なパスワードを採用してください。

mysql -u root -p  
TYPE YOUR PASSWORD

CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;  
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';  
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';  
FLUSH PRIVILEGES;

Moodle 用データベースの設定画面

トラブル例:

  • “Access denied” エラー: ユーザー名/パスワード、ホスト(localhost vs %)を確認。
  • 文字化けや文字セット問題: DB の照合順序 utf8_unicode_ci を確認。

Step 4 - Moodle のダウンロードと配置

git クローンで最新版ソースを取得します。

yum -y install git

mkdir -p /var/www/

cd /var/www/  
git clone https://github.com/moodle/moodle.git

Moodle ディレクトリに入り、安定ブランチをチェックアウトします。ここでは MOODLE_32_STABLE を例示します。

cd moodle/  
git branch -a

git branch --track MOODLE_32_STABLE origin/MOODLE_32_STABLE  
git checkout MOODLE_32_STABLE

git status

期待される出力:

# On branch MOODLE_32_STABLE  
nothing to commit, working directory clean

Moodle をダウンロードしている様子

moodledata(アップロード/キャッシュ保存用)を作成し、nginx が書き込めるよう権限を設定します。

mkdir -p /var/moodledata  
chown -R nginx:nginx /var/moodledata  
chmod 777 /var/moodledata

chown -R nginx:nginx /var/www/moodle  
chmod 755 /var/www/moodle

注意: chmod 777 はテスト用。運用ではより厳密な権限を検討してください(例: 770 + グループ管理)。


Step 5 - SSL と Nginx 仮想ホストの設定

本例は自己署名証明書を利用します。実運用では Let’s Encrypt や商用 CA を利用してください。

mkdir -p /etc/nginx/ssl/  
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key

chmod 600 /etc/nginx/ssl/moodle.key

自己署名証明書を作成している様子

nginx の仮想ホスト設定を作成します(/etc/nginx/conf.d/moodle.conf)。以下は例です。ドメインはテスト用に moodle.hakase-labs.com を想定しています。実運用では実ドメインに置き換えてください。

cd /etc/nginx/  
vim conf.d/moodle.conf

設定例(原文のまま配置):

# PHP Upstream Handler  
upstream php-handler {  
    server unix:/run/php-fpm/php-fpm.sock;  
}  
   
# Nginx redirect HTTP to HTTPS - moodle.hakase-labs.com  
server {  
    listen 80;  
    server_name moodle.hakase-labs.com;  
    # enforce https  
    return 301 https://$server_name$request_uri;  
}  
   
# HTTPS Configuration  
server {  
        server_name          moodle.hakase-labs.com;  
   
        listen               *:443 ssl http2;  
        listen               [::]:443 ssl http2;  
   
        # SSL Configuration       
        ssl  on;  
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";  
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
        ssl_prefer_server_ciphers on;  
        ssl_session_cache shared:SSL:10m;  
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";  
        add_header X-Frame-Options DENY;  
        add_header X-Content-Type-Options nosniff;  
        ssl_session_tickets off;  
        #ssl_stapling on;  
        #ssl_stapling_verify on;  
        resolver_timeout 5s;  
        ssl_certificate /etc/nginx/ssl/moodle.crt;  
        ssl_certificate_key /etc/nginx/ssl/moodle.key;  
        
        # Root Moodle Data DIrectory  
        root /var/www/moodle;  
        rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;  
   
        location ^~ / {  
                try_files $uri $uri/ /index.php?q=$request_uri;  
                index index.php index.html index.htm;  
   
                location ~ \.php$ {  
                        include fastcgi.conf;  
                        fastcgi_pass php-handler;  
                }  
        }  
}

設定のテストと nginx 再起動:

nginx -t  
systemctl restart nginx

セキュリティ注意:

  • SSL 設定は例示的です。TLS 設定は最新のベストプラクティスに合わせて更新してください(TLSv1/1.1 は将来的に無効化推奨)。
  • HSTS ヘッダーは注意して適用(まずは短めの max-age で検証)。

Step 6 - SELinux と Firewalld の設定

SELinux が有効な場合、web コンテンツと moodledata に適切なコンテキストを設定します。

SELinux 管理ツールをインストール:

yum -y install policycoreutils-python

web ルートと moodledata に httpd_sys_rw_content_t を設定して restorecon を実行します。

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/moodle(/.*)?'  
restorecon -Rv '/var/www/moodle/'  
   
semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata(/.*)?'  
restorecon -Rv '/var/moodledata/'

Firewalld の設定:

yum -y install firewalld

systemctl start firewalld  
systemctl enable firewalld

firewall-cmd --permanent --add-service=http  
firewall-cmd --permanent --add-service=https  
firewall-cmd --permanent --add-service=ssh

firewall-cmd --reload  
firewall-cmd --list-all

注記:

  • SELinux を無効にする代わりに、必要なコンテキストだけを付与する方が安全です。
  • 外部に公開する場合は 443 のみ開放するのが推奨です(80 はリダイレクト専用)。

Step 7 - Moodle をインストール(Web インストーラ)

準備が整ったら、ブラウザで仮想ホストのドメイン(例: https://moodle.hakase-labs.com)にアクセスし、画面の指示に従ってインストールします。

インストールフローの主な項目:

  • 言語選択
  • Moodle のウェブアドレス、ウェブルート(/var/www/moodle)、moodledata(/var/moodledata)などの入力
  • データベースドライバで MySQL を選択し、ホスト/local socket、DB 名、ユーザー、パスワードを指定
  • 必要な PHP 拡張のチェック(すべて OK が必要)
  • 管理者アカウント作成
  • サイト名や初期設定

画面イメージ(手順に沿ったスクリーンショット):

Moodle インストール: 言語選択

Moodle インストール: ウェブルートと moodledata の指定

Moodle インストール: データベースドライバ選択

Moodle インストール: データベース詳細入力

Moodle インストール: ライセンス同意

Moodle インストール: システム要件チェック

インストール完了後、管理者情報とフロントページ情報を入力してダッシュボードに入ります。

Moodle 管理者設定

Moodle フロントページ設定

Moodle ダッシュボード


Step 8 - テストと確認

Moodle ホームページ

Moodle ログインページ

  • ユーザーダッシュボード、管理メニュー、ユーザー環境設定を確認して問題なければ完了です。

Moodle ユーザーダッシュボード

Moodle サイト管理

Moodle ユーザープリファレンス

成功例: Nginx + PHP‑FPM + MariaDB の組み合わせで Moodle が動作していれば基本的な導入は完了です。


セキュリティと運用上の追加推奨項目

  • 本番運用では必ず正式な CA 発行の証明書(Let’s Encrypt も可)を利用
  • DB のバックアップを定期化(mysqldump、LVM スナップショットなど)
  • moodledata とコードベースを別ボリュームに分離し、バックアップポリシーを設定
  • PHP 設定の hardening(expose_php=Off、display_errors=Off、opcache の適切化)
  • Web アクセスログとアプリケーションログの集約(例: rsyslog、ELK、Grafana)
  • 監視: プロセス死活、レスポンスタイム、DB 接続数を監視
  • 定期的なプラグイン/Moodle 本体のアップデートと検証

代替アプローチと考慮点

  • Apache + mod_php を利用する場合: .htaccess ベースの設定が簡単だが、プロセス分離が弱く高負荷時に不利
  • 単一サーバーか分散構成か: 利用者数が多い環境では DB 分離、NFS での moodledata 共有、ロードバランサを検討
  • PHP のバージョン: Moodle 3.2 は PHP7 をサポート。ただし将来的な互換性は新しい LTS 版へ計画的に移行

よくある障害と対応(トラブルシューティング)

  1. 502 Bad Gateway

    • 対策: php-fpm の起動状況(systemctl status php-fpm)、ソケットのパス、SELinux の拒否ログを確認
  2. DB 接続エラー(database connection failed)

    • 対策: mysql が動作しているか、ユーザー/パスワード、ホスト、ソケットのパスを確認
  3. ファイルアップロード失敗

    • 対策: moodledata の権限、SELinux ラベル、ディスク容量を確認
  4. PHP 拡張不足

    • 対策: php -m で有効拡張を確認し、必要なパッケージをインストール

ログ確認のコマンド例:

journalctl -u php-fpm -e
journalctl -u nginx -e
journalctl -u mariadb -e

SELinux が原因の拒否を確認するには /var/log/audit/audit.log を確認し、audit2allow を検討。


ロール別チェックリスト

管理者:

  • サイト設定、プラグイン管理ができること
  • バックアップと復元手順を把握していること
  • SSL 証明書の更新手順を理解していること

システム運用:

  • サービスの起動・再起動、ログ確認ができること
  • ディスク容量と DB サイズを監視していること

教育担当者(教師):

  • コース作成、課題・評価の基本操作を実行できること
  • ユーザー管理(登録、ロール付与)の基本を理解していること

アップグレードの簡易 SOP

  1. 変更を加える前にフルバックアップを取得(DB + moodledata + /var/www/moodle)
  2. テスト環境でアップグレードを検証
  3. プラグインの互換性を確認
  4. メンテナンスモードでダウンしてからアップグレードを実行
  5. 動作確認後、メンテナンスモードを解除

受入基準

  • Web ブラウザでフロントページが表示され、管理者でログインできること
  • コースの作成、ユーザー登録、ファイルアップロードが正常に動作すること
  • moodledata にアップロードファイルが保存されること
  • PHP の必須拡張がすべて “OK” であること
  • 502/5xx エラーが出ないこと

1行用語集

  • Moodle: 学習管理システム(LMS)
  • moodledata: Moodle がファイルを保存するディレクトリ
  • PHP‑FPM: PHP を FastCGI で動かすプロセスマネージャ
  • EPEL: Extra Packages for Enterprise Linux、追加パッケージリポジトリ

FAQ

Q: 自己署名証明書で運用できますか?

A: テスト環境では可能ですが、公開サービスではブラウザ警告やセキュリティリスクがあるため公式な CA による証明書を推奨します。

Q: Moodle のファイル(moodledata)を NFS に置けますか?

A: 可能ですが、アクセス権やパフォーマンス、ロックの問題に注意が必要です。高負荷環境では専用ストレージや分散ファイルシステム設計を検討してください。

Q: PHP のバージョンを上げても大丈夫ですか?

A: Moodle のバージョンによってサポートされる PHP バージョンが異なります。公式ドキュメントで互換性を確認してからアップデートしてください。


参考


まとめ: このガイドでは CentOS 7 上に Nginx、PHP‑FPM 7.0、MariaDB を使って Moodle 3.2 を導入する一連の手順を示しました。実環境ではセキュリティ強化、監視、バックアップ、自動化を別途整備してください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Ubuntu 17.04にChef Serverをインストールする手順
DevOps

Ubuntu 17.04にChef Serverをインストールする手順

Microsoft Teams エラー500の完全対処法
トラブルシューティング

Microsoft Teams エラー500の完全対処法

信頼できるオンライン証券を見つける6ステップ
投資

信頼できるオンライン証券を見つける6ステップ

Discordでテキストの色を変える方法ガイド
Discordガイド

Discordでテキストの色を変える方法ガイド

CentOS7でNginx+PHP‑FPM7+MariaDBにMoodle3.2を導入
システム構築

CentOS7でNginx+PHP‑FPM7+MariaDBにMoodle3.2を導入

Windows起動でプログラムが自動起動しない時の対処法
Windows

Windows起動でプログラムが自動起動しない時の対処法