CentOS 7 に MediaWiki をインストールする(Nginx + LEMP + Let's Encrypt)

重要: この記事は CentOS 7 系サーバーを想定しています。root 権限または sudo 権限が必要です。
概要
MediaWiki は PHP で書かれたオープンソースのウィキエンジンで、Wikipedia のために開発されました。本記事は CentOS 7 上に Nginx を利用した LEMP スタック(Linux, Nginx, MariaDB, PHP-FPM)を構築し、MediaWiki をインストールして HTTPS 化(Let’s Encrypt)する手順を説明します。必要なパッケージのインストール、設定の詳細、Web 設定、スキンの導入までカバーします。
主な手順(この記事で実施する内容)
- CentOS 7 に Nginx をインストール
- PHP 7.0 と PHP-FPM をインストール・設定
- MariaDB をインストールしてデータベースを作成
- MediaWiki をダウンロードして依存関係をインストール
- Let’s Encrypt で SSL 証明書を取得
- Nginx の仮想ホスト(server ブロック)を作成
- ブラウザからの Web インストールを実行
- デフォルトスキン(Vector)を導入
前提条件
- CentOS 7 が稼働するサーバー
- root または sudo 権限
- 公開ドメイン名(例: wiki.example.com)
- ファイアウォールで HTTP/HTTPS を許可できる設定
事前確認と注意点
- この手順は CentOS 7 向けです。CentOS のバージョンやディストリビューションが異なる場合、パッケージ名やサービス名が変わる可能性があります。
- 元の手順では PHP 7.0 を webtatic リポジトリから導入しています。セキュリティやサポートを考えると、可能であれば公式パッケージや Remi リポジトリなど、信頼できるリポジトリを検討してください。
- この記事ではファイル所有者を nginx:nginx に統一して説明します(CentOS の Nginx ユーザー)。
ステップ 1 — CentOS 7 に Nginx をインストール
CentOS 7 の標準リポジトリに Nginx が含まれていない場合は EPEL(Extra Packages for Enterprise Linux)を有効化します。パッケージを更新して EPEL を導入してください。
yum -y update
yum -y install epel-release
その後 Nginx をインストールして起動および自動起動設定を行います。
yum -y install nginx
systemctl start nginx
systemctl enable nginx
インストール後、ネットワークのリスニング状況を確認します。
netstat -plntu
重要: SELinux を有効にしている場合はポートやファイルアクセスに関するポリシー調整が必要になることがあります(後述のセキュリティ強化セクション参照)。
ステップ 2 — PHP-FPM のインストールと設定
このチュートリアルでは PHP 7.0 を使用します(ソースは webtatic)。リポジトリを追加して必要なパッケージを導入します。
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
必要な PHP パッケージと拡張をインストールします。
yum -y install ImageMagick php70w-fpm php70w-intl php70w-xml php70w-curl php70w-gd php70w-mbstring php70w-mysql php70w-cli php70w-pear php70w-pecl-apcu
PHP の設定と PHP-FPM の設定を調整します。
- php.ini の cgi.fix_pathinfo を無効化
vim /etc/php.ini
# 行: cgi.fix_pathinfo=1 を見つけてコメント解除し値を 0 にする
cgi.fix_pathinfo=0
- PHP-FPM のプール設定(www.conf)を編集し、実行ユーザーを nginx に設定、ソケット経由での待ち受けに変更します。
vim /etc/php-fpm.d/www.conf
# user と group を nginx に変更
user = nginx
group = nginx
# listen を unix ソケットに変更
listen = /run/php-fpm/php-fpm.sock
# ソケット所有者・モードを設定
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
# 必要に応じて環境変数を有効化
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
- セッション用ディレクトリを作成して権限を与える
mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
最後に PHP-FPM を起動して自動起動を有効化します。
systemctl start php-fpm
systemctl enable php-fpm
動作確認: php-fpm のソケットが存在するか確認します。
netstat -pl | grep php
注意: PHP のバージョンや拡張名はリポジトリにより異なります。必要があれば php-fpm のログ(/var/log/php-fpm/)をチェックしてください。
ステップ 3 — MariaDB をインストールしてデータベースを作成
MediaWiki は MySQL/MariaDB や SQLite をサポートします。本例では MariaDB を使用します。
yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
セキュリティスクリプトで root パスワードや匿名ユーザーを削除します。
mysql_secure_installation
# 対話で以下を実施:
# Set root password? [Y/n] Y
# 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
MediaWiki 用のデータベースと専用ユーザーを作成します(例):
mysql -u root -p
# MySQL プロンプトで次を実行
create database mediawikidb;
grant all privileges on mediawikidb.* to mediawiki@'localhost' identified by 'mypassword';
flush privileges;
exit;
セキュリティのヒント: 実運用では強力なパスワードを使用し、データベースユーザーの権限は最小限にしてください。外部アクセスが不要なら bind-address を localhost に限定します。
ステップ 4 — MediaWiki をダウンロードして依存関係をインストール
git と Composer、その他ツールをインストールします。
yum -y install git zip unzip composer
MediaWiki のソースを配置するディレクトリを作成してクローンします。
mkdir -p /var/www/mediawiki
git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki
cd /var/www/mediawiki
composer install --no-dev
所有権を nginx に変更します。
chown -R nginx:nginx /var/www/mediawiki
注: composer 実行時にメモリやタイムアウトの問題が出る場合があります。必要に応じて COMPOSER_MEMORY_LIMIT=-1 を設定するか、Composer のバージョンを見直してください。
ステップ 5 — Let’s Encrypt で SSL 証明書を生成
MediaWiki はセキュアな HTTPS 接続での運用を想定しています。Let’s Encrypt の無料証明書を利用して HTTPS を有効化します。
yum -y install letsencrypt
Nginx を止めて(または一時的に 80 番を開放し)、certbot(コマンド名 letsencrypt)の対話で証明書を取得します。
systemctl stop nginx
Firewalld を使用している場合、HTTP/HTTPS を許可します。
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
証明書の作成を開始します。
letsencrypt certonly
対話で「1」を選んで一時ウェブサーバー方式(standalone)を選び、メールアドレス、利用規約同意、証明書を作成するドメインを入力します。
取得が成功すると /etc/letsencrypt/live/<ドメイン>/ に証明書ファイルが保存されます。
自動更新の設定: certbot を cron か systemd タイマーで定期実行し、証明書の自動更新を有効にしてください(後述の運用セクション参照)。
ステップ 6 — Nginx の仮想ホストを作成
/etc/nginx/conf.d/ に MediaWiki 用の設定ファイルを作成します。例では mediawiki.conf を使用します。
cd /etc/nginx/
vim conf.d/mediawiki.conf
以下を貼り付けて、server_name と SSL 証明書パスを自分の環境に合わせて変更してください。
# HTTP Request will be Redirected to the HTTPS
server {
listen 80;
listen [::]:80;
server_name wiki.hakase-labs.co;
return 301 https://$host$request_uri;
}
# HTTPS Configuration
server {
listen 443 ssl;
listen [::]:443;
server_name wiki.hakase-labs.co;
root /var/www/mediawiki;
index index.php;
autoindex off;
# SSL Certificate Configuration
ssl_certificate /etc/letsencrypt/live/wiki.hakase-labs.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.hakase-labs.co/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?title=$1&$args;
}
location ^~ /maintenance/ {
return 403;
}
# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires max;
log_not_found off;
}
location = /_.gif {
expires max;
empty_gif;
}
location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
deny all;
}
location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {
internal;
}
# Security for 'image' directory
location ~* ^/images/.*.(html|htm|shtml|php)$ {
types { }
default_type text/plain;
}
# Security for 'image' directory
location ^~ /images/ {
try_files $uri /index.php;
}
}
保存して Nginx 設定をテスト、リスタートします。
nginx -t
systemctl restart nginx
注意: server_name
や SSL 証明書のパスは環境に合わせて必ず修正してください。HTTP を HTTPS にリダイレクトすることで常に TLS 接続を強制できます。
ステップ 7 — ブラウザでの MediaWiki インストール
ブラウザで https://wiki.hakase-labs.co/ にアクセスすると、HTTP から HTTPS へリダイレクトされ、MediaWiki のセットアップ画面が表示されます。”Set up the wiki”(ウィキをセットアップ)リンクをクリックして手順に従います。
言語設定
- English(en)などインストール画面の言語を選択して続行します。
環境チェック
- サーバー構成がすべてチェックを通過することを確認します。必要な拡張や設定に不足があると警告が出ます。
データベース設定
- データベース名: mediawikidb
- ユーザー名: mediawiki
- パスワード: mypassword
その後は画面の指示に従って管理者アカウント作成や追加設定を進めます。
インストール完了と LocalSettings.php
インストールが完了すると LocalSettings.php をダウンロードするよう促されます。ダウンロードしたらサーバーの /var/www/mediawiki/ 配下へアップロードします。
scp LocalSettings.php [email protected]:/var/www/mediawiki/
chown -R nginx:nginx /var/www/mediawiki
(注)元の手順では www-data を指定していましたが、CentOS の Nginx 環境では nginx:nginx に合わせるのが一般的です。実際の環境に合わせて所有者を設定してください。
アップロード後、ブラウザで “enter your wiki” をクリックしてトップページが表示されればインストールは成功です。
ステップ 8 — デフォルトスキン(Vector)を導入
スキンを導入して外観を整えます。デフォルトの Vector スキンを skins ディレクトリへクローンして有効化します。
cd /var/www/mediawiki/skins/
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/skins/Vector
chown -R nginx:nginx /var/www/mediawiki/skins/
LocalSettings.php の末尾に以下を追加してスキンを有効化します。
vim /var/www/mediawiki/LocalSettings.php
# ファイル末尾に追加
wfLoadSkin( 'Vector' );
保存してからブラウザをリロードすると Vector スキンの表示になります。
運用と自動化のヒント
- Let’s Encrypt の自動更新: cron もしくは systemd timer で
certbot renew
を定期実行し、更新に成功したら Nginx をリロードします。- 例: /etc/cron.d/letsencrypt に定期ジョブを入れる
- バックアップ: MediaWiki のファイルとデータベース(mysqldump)を別ストレージへ定期バックアップしてください。
- ログ監視: /var/log/nginx/、/var/log/php-fpm/、/var/log/mariadb/ を監視し、異常があればアラートを上げる仕組みを作りましょう。
セキュリティ強化(推奨設定)
- SELinux を有効にしている場合: Nginx と PHP-FPM の間のソケットや Web ディレクトリの SELinux コンテキストを正しく設定してください。例:
semanage fcontext -a -t httpd_sys_content_t "/var/www/mediawiki(/.*)?"
restorecon -Rv /var/www/mediawiki
- ファイル権限: 実行に不要なファイルは 600 / 644、ディレクトリは 755 に。LocalSettings.php は 640 など限定的に。
- HTTP ヘッダー: X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Content-Security-Policy を適切に設定して XSS / クリックジャッキング対策を行ってください。
- データベースの接続情報は LocalSettings.php に平文で保存されます。サーバーのアクセス制御(ファイアウォール、SSH 鍵)を必ず設定してください。
自動証明書更新の例(cron)
以下は certbot の自動更新と Nginx 再読み込みを行う cron の例です。
0 3 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx"
トラブルシューティング(よくある問題と対処)
- Nginx が 443 で起動しない: 証明書パスが間違っている、または別プロセスがポートを占有している可能性があります。
nginx -t
で構文チェック後、ss -lntp
でポート使用状況を確認。 - PHP が 500 を返す: /var/log/nginx/error.log と /var/log/php-fpm/error.log を確認。fastcgi_param の設定や php-fpm のソケット権限(nginx が読み取れるか)をチェック。
- MySQL 接続エラー: DB 名・ユーザー名・パスワードが LocalSettings.php と一致しているか、MariaDB サービスが稼働しているかを確認。
mysql -u mediawiki -p -h localhost mediawikidb
で接続確認。 - Let’s Encrypt でドメイン認証が通らない: ドメインが正しく DNS に向いているか、80 番ポートがインターネットから到達可能か確認。
よくある失敗例(いつこの手順が合わないか)
- 管理されたホスティング環境や PaaS(例: 一部のマネージドサービス)では root 権限や systemd へのアクセスがなく、この手順は使えません。その場合はホスティング提供の方法に従うか、コンテナ/Docker ベースの導入を検討してください。
- 最新の PHP バージョンを要求する拡張や MediaWiki の新しいバージョンを使いたい場合、PHP 7.0 では不足することがあります。その場合は PHP 7.4/8.0 などを用意してください。
移行や代替アプローチ
- Apache + mod_php を使う方法: Nginx に慣れていない場合は Apache + mod_php(または PHP-FPM)でも構築可能です。Apache 用の .htaccess 相当の設定を Nginx に変換する必要があります。
- Docker コンテナ化: MediaWiki と DB、リバースプロキシ(nginx)をコンテナで分離すると移植性・管理性が向上します。公式イメージや community イメージを利用可能です。
運用チェックリスト(役割別)
管理者(インフラ):
- OS とパッケージを定期的にアップデート
- 自動バックアップを設定(ファイル + DB)
- Let’s Encrypt の自動更新を確認
- SSL/TLS 設定の脆弱性スキャン
サイト管理者(Wiki 管理):
- 管理者アカウントを複数作成(冗長)
- 拡張やスキンの導入はステージングで検証
- ユーザー権限の最小化
開発者:
- Composer 依存を lock し、dev 環境でテスト
- 拡張の互換性を確認
- ログからエラーを再現し修正
受け入れ基準
- サイトが https://
/ で表示される - 管理者アカウントでログインし、ページの作成・編集ができる
- データベースに正しく接続できる(mediawikidb)
- LocalSettings.php を配置していること
- SSL 証明書が有効かつ自動更新が設定されている
1 行用語集
- LEMP: Linux + Nginx + MariaDB/MySQL + PHP-FPM の構成。Web サーバー構築の一般的なスタック。
- PHP-FPM: FastCGI プロセスマネージャ。PHP をプロセスで実行する仕組み。
- certbot / letsencrypt: 無料の SSL/TLS 証明書を管理するツール/サービス。
追加の運用ヒント(パフォーマンス)
- Opcode キャッシュ(APCu や OPcache)を有効にして PHP 実行を高速化する。
- リバースプロキシキャッシュ(Varnish 等)を導入すると動的ページの負荷を軽減できるが、パージ戦略が必要。
- MediaWiki のキャッシュ設定($wgSessionCacheType や $wgMemCachedServers)で memcached を使うことを検討。
まとめ
MediaWiki を CentOS 7 に Nginx ベースの LEMP スタックで導入する手順を、Nginx インストールから PHP-FPM、MariaDB、MediaWiki 本体、Let’s Encrypt による HTTPS 化まで解説しました。運用にあたっては自動更新、バックアップ、ログ監視、セキュリティ対策を必ず整備してください。
要点:
- Nginx を EPEL 経由で導入し、PHP-FPM はソケットで接続する構成がおすすめ
- MariaDB に専用データベースと限定的権限のユーザーを作成
- Let’s Encrypt で証明書を取得し、cron で自動更新
- LocalSettings.php をサーバーへアップロードして権限を適切に設定
短い運用アナウンス(100〜200 文字)
CentOS 7 上に MediaWiki を Nginx(LEMP)で構築し、Let’s Encrypt で HTTPS 化しました。セキュリティと自動更新、バックアップを有効にして運用開始できます。詳細な手順と運用チェックリストは本文を参照してください。
ソーシャルプレビュー(例)
OG タイトル: CentOS 7 に MediaWiki を Nginx(LEMP)で導入 OG 説明: CentOS 7 上で Nginx、PHP-FPM、MariaDB を構築し、Let’s Encrypt で HTTPS 化した MediaWiki の導入手順を解説します。
参考