MediaWikiの設定 - 移行

提供:MochiuWiki : SUSE, EC, PCB
2023年11月27日 (月) 21:56時点におけるWiki (トーク | 投稿記録)による版 (→‎文字列の置換)
ナビゲーションに移動 検索に移動

MochiuWikiの移行

MochiuWiki(MediaWiki)のデータ移行をここに記載する。


前準備

MediaWikiディレクトリにあるimagesディレクトリのパーミッションと所有者および所有グループを以下のように変更する。

sudo chmod 777 images images/temp images/thumb images/archive
sudo chown -R <ユーザ名>:<ユーザグループ名> images/

または

sudo chmod 777 images images/temp images/thumb images/archive
sudo usermod -aG www-data "$USER"
sudo chown -R <ユーザ名>:www-data images/


次に、imagesディレクトリに存在する.htaccessファイルを以下のように編集する。

# 修正前
<IfModule rewrite_module>
       RewriteEngine On
       RewriteOptions inherit
       RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase]
       RewriteRule . - [forbidden]
       # Fix for bug T64289
       Options +FollowSymLinks
</IfModule>

# 修正後
<IfModule rewrite_module>
       RewriteEngine On
       RewriteOptions inherit
       RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase]
       RewriteRule . - [forbidden]
       # Fix for bug T64289
       # Options +FollowSymLinks
</IfModule>



MySQLのmysqldumpコマンドでバックアップする方法

バックアップの取得

MySQLが同じバージョンかつ文字コード等が同じ設定のMySQLのみ復元できる可能性がある。
また、違うバージョンのMediaWikiでは復元できない可能性がある。

コマンドラインからmysqldumpコマンドを使い手動でバックアップする。
特殊な文字が存在する場合の欠落を防ぐため、--hex-blobオプションでバイナリデータを16進数表記文字列に変換して出力する。

mysqldump -Q --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD --default-character-set=binary --hex-blob $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql
または
mysqldump --host=$MYSQL_SERVER --user=$MYSQL_USER -p --default-character-set=utf8mb4 $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql


もし、cronを使用して定期的にバックアップを取る場合、以下のように設定する。

crontab -e   # sudoは不要

# 毎月1日0時にバックアップを取得する
0 0 1 * * mysqldump -Q --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD --default-character-set=binary --hex-blob $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql


バックアップのインポート

上記でバックアップしたデータベースを、既存のMySQLに復元する。

mysql --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD $MYSQL_DB_NAME < MochiuWiki_DB_backup_20200101.sql
または
mysql --host=$MYSQL_SERVER --user=$MYSQL_USER -p $MYSQL_DB_NAME < MochiuWiki_DB_backup_20200101.sql



dumpBackup.phpツールでバックアップする方法

バックアップの取得

maintenanceディレクトリで以下のコマンドを実行する。
履歴も含めてすべてのページをxmlで取得できる。

php maintenance/dumpBackup.php --full --uploads > MochiuWiki_backup_20200101.xml  // ページのエクスポート
または
php dumpBackup.php --current > MochiuWiki_backup_20200101.xml  // ページのエクスポート


バックアップのインポート

新しいサーバ側で作業する。
maintenanceディレクトリで以下のコマンドを実行する。
すべてのページをインポートできる。

php maintenance/importDump.php < MochiuWiki_backup_20200101.xml



画像をバックアップする方法

バックアップの取得

imagesディレクトリを圧縮するだけでよい。

tar -zcf /<出力するディレクトリ名>/MochiuWiki_images_backup_20200101.tar.gz /<MediaWikiのディレクトリ名>/images   // 添付ファイルのアーカイブ


バックアップのインポート

画像やその他のアップロードされたファイルを復元する。
なお、PHPがセーフモードの場合、importImages.phpが実行できないので注意する。

cd /var/www/html/mediawiki
mkdir tmp
mv MochiuWiki_images_backup_20200101.tar.gz tmp
cd tmp
tar -zxf MochiuWiki_images_backup_20200101.tar.gz


imagesディレクトリ下にあるファイルを単一のディレクトリにコピーする。

cd ../
mkdir tmpimages
cp tmp/images/*/*/* tmpimages


画像やその他のアップロードされたファイルをインポートする。

php maintenance/importImages.php --overwrite tmpimages/


レンタルサーバであるバリューサーバでは、以下のコマンドを実行する。

phpcli maintenance/importImages.php --overwrite tmpimages/


サーバの移行でない(ディレクトリの移行)であれば、以下のコマンドを実行すれば画像をインポートできる。

php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/0
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/1
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/2
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/3
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/4
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/5
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/6
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/7
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/8
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/9
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/a
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/b
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/c
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/d
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/e
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/f



文字列の置換

方法 1 (推奨)

まず、ReplaceTextの拡張ディレクトリに移動する。

cd /<Mediawikiのディレクトリ>/extensions/ReplaceText/maintenance


次に、replaceAll.phpファイルを実行する。

phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --user <Wikiユーザ名>

# 試験実行することも可能
phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --dry-run --user <Wikiユーザ名>

# --debugオプションを付加して、実行時の詳細を表示することも可能
phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --dry-run --user <Wikiユーザ名> --debug


EmbedVideoの拡張が存在する場合、以下に示すような警告 / エラーが出力される場合がある。

PHP Deprecated:  Premature access to service container


この時、以下に示すように修正する。

# ファイルのバックアップ
mv /<Mediawikiのディレクトリ>/extensions/EmbedVideo/EmbedVideo.hooks.php \
   /<Mediawikiのディレクトリ>/extensions/EmbedVideo/EmbedVideo.hooks_org.php


EmbedVideoのGitLabにアクセスして、修正済みのファイルをダウンロードする。
ダウンロードしたファイルをEmbedVideoの拡張ディレクトリにアップロードする。

mv EmbedVideo.hooks.php /<Mediawikiのディレクトリ>/extensions/EmbedVideo/


方法 2 (非推奨)

Mediawikiのトップページから、[特別ページ] - [文字列の置換]にアクセスして、文字列を置換する。

Replace Textは、MediaWikiのジョブとして構成されており、ユーザが同時に多くのアクションを実行する場合があるため、システムに負荷が掛からないようになっている。
これは、大規模な置換はすぐには行われず、完了までに数分、数時間、あるいはそれ以上掛かることを意味する。

ジョブはMediaWikiでページが閲覧されるたびに起動されるが、処理を速める(あるいは遅らせる)ために、ページが閲覧されたときに実行されるジョブの数を変更することができる。
したがって、優先順位の高い新しいジョブが無い場合、Replace Textは開始後すぐに停止する可能性がある。
全てのジョブをすぐに実行するには、maintenance/runJobs.phpファイルを実行する。

chmod u+x maintenance/runJobs.php
php74cli maintenance/runJobs.php



sitemap.xmlの生成

sitemap.xmlを生成する。

php<バージョン>cli maintenance/generateSitemap.php \
         --fspath=<sitemap.xmlファイルを保存するディレクトリの相対パス> \  # このディレクトリは、オンラインで閲覧可能である必要がある
         --identifier=<データベース名> \                           # LocalSettings.phpファイルにある$wgDBnameの値
         --urlpath=/sitemap/ \                                  # --fspathオプションの値を指し示すドメインの相対URL (/sitemap/を指定する時、サイトマップインデックス内のファイル名の先頭に置かれる)
         --server=<MediaWikiのホームページのURL> \
         --compress=no \                                        # 圧縮しない場合
         --skip-redirects                                       # リダイレクトしない場合

# 例 (PHP 8.1を使用している場合)
php81cli maintenance/generateSitemap.php \
         --fspath=sitemap/ \                             # sitemap.xmlファイルを保存するディレクトリの相対パス (このディレクトリは、オンラインで閲覧可能である必要がある)
         --identifier=<データベース名> \                    # LocalSettings.phpファイルにある$wgDBnameの値
         --urlpath=/sitemap/ \                           # --fspathオプションの値を指し示すドメインの相対URL (/sitemap/を指定する時、サイトマップインデックス内のファイル名の先頭に置かれる)
         --server=http://mochiuwiki.e2.valueserver.jp \  # MediaWikiのホームページのURL
         --compress=no \                                 # 圧縮しない場合
         --skip-redirects                                # リダイレクトしない場合


MediaWikiのトップディレクトリにsitemap.xmlのシンボリックリンクを作成する。

ln -fs sitemap/sitemap-index-<サイト名>.xml sitemap.xml