MediaWiki
はじめに
有識者の知恵を拝借する
- MediaWikiの環境をdocker-composeで簡易的に構築する You_name_is_YU - Qiita
https://qiita.com/You_name_is_YU/items/98ad1ee121067c1cdf85
ディレクトリ構成
~/docker/mediawiki
├── db
│ └── mysql
│ └── var_lib_mysql
├── phpmyadmin
│ ├── images
│ ├── cache
│ ├── extensions
│ └── skins
├── mediawiki
│ ├── sessions
│ └── Dockerfile
└── docker-compose.yml
cd ~/docker/mediawiki
mkdir -p ./db/mysql/var_lib_mysql
mkdir -p ./mediawiki/images
mkdir -p ./mediawiki/cache
mkdir -p ./mediawiki/extensions
mkdir -p ./mediawiki/skins
mkdir -p ./phpmyadmin/sessions
インストール
メンテ用コマンド
docker compose up
# ---- メンテ用コマンド
docker build
docker images
docker ps
# CNAME=(docker ps 最終項目 NAMES)
export CNAME=mediawiki_wiki
docker exec -it -w "/work" ${CNAME} bash
docker compose exec -it mediawiki bash
docker run -it -p 4000:4000 -p 35729:35729 -v "$PWD:/work" -w "/work" ${CNAME} bash
docker compose build
docker compose build --no-cache
docker compose down
docker compose exec --service-ports mediawiki bash
docker compose run -it --service-ports mediawiki bash
docker compose up
docker compose up -d
docker compose up -d --force-reload
docker compose up -d --force-recreate
----
docker compose exec #{container} ${command}
docker compose exec mediawiki bash
docker compose cp mediawiki:/var/www/html/composer.local.json ./mediawiki/composer.local.json
docker compose ls mediawiki:/var/www/html/
docker compose stop $(`docker ps -q`)
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -aq)
docker rmi $(docker images -aq) -f
~/docker/mediawiki/mediawiki/Dockerfile
mediawiki イメージに composer を追加したかったので Dockerfile でビルドした。
ついでに FDClone, lv, less, ng-cjk とそれらの設定ファイルも追加。
FROM mediawiki:1.43.1
RUN apt-get update && apt-get upgrade -y && \
apt-get install --no-install-recommends --allow-unauthenticated -y \
git locales curl zip unzip silversearcher-ag fdclone less lv ng-cjk
# multi-stage builds (マルチステージビルド) を使用するため,Docker のバージョンは >=17.05 が必須です。
# composerのインストール
COPY --from=composer/composer:latest-bin /composer /usr/local/bin/composer
# COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
# COPY --from=composer:2.1.8 /usr/bin/composer /usr/local/bin/composer
WORKDIR /root
VOLUME /root
EXPOSE 80
COPY .bashrc /root
COPY .bash_aliases /root
COPY .fd2rc /root
COPY .ng /root
COPY .profile /root
RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen
RUN locale-gen ja_JP
RUN update-locale LANG=ja_JP.UTF-8
ENV LANG="ja_JP.UTF-8" \
LANGUAGE="ja_JP:ja" \
LC_ALL="ja_JP.UTF-8" \
TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN curl -OL https://github.com/jgm/pandoc/releases/download/3.7.0.1/pandoc-3.7.0.1-1-amd64.deb && \
apt-get install -y ./pandoc-3.7.0.1-1-amd64.deb
# https://zenn.dev/ysmtegsr/articles/640809c07d983ea911d6
# COPY --from=composer /usr/bin/composer /usr/bin/composer
# ENV COMPOSER_ALLOW_SUPERUSER 1
# ENV COMPOSER_HOME /composer
# RUN composer config -g repos.packagist composer https://packagist.jp
# RUN composer global require hirak/prestissimo
# RUN docker-php-ext-install pdo_mysql opcache
~/docker/mediawiki/docker-compose.yml
services:
mediawiki:
depends_on:
- database
# depends_on:
# database:
# condition: service_healthy
container_name: mediawiki_wiki
# image: mediawiki:1.43.1
build: ./mediawiki
restart: always
links:
- database
ports:
- 8080:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./php.ini:/usr/local/etc/php/php.ini
- ./mediawiki/images:/var/www/html/images
- ./mediawiki/cache:/var/www/html/cache
- ./mediawiki/extensions:/var/www/html/extensions
- ./mediawiki/skins:/var/www/html/skins
- ./mediawiki/.htaccess:/var/www/html/.htaccess
# 以下の行を編集して、LocalSettings.phpをホストマシンからコンテナにマウントします。
# - ./mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php
database:
container_name: mediawiki_db
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=my_wiki
- MYSQL_USER=mysqluser
- MYSQL_PASSWORD=mysqladmin
- MYSQL_ROOT_PASSWORD=mysqladmin
- TZ=Asia/Tokyo
# command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data-db/data:/var/lib/mysql
# - ./data-db/my.cnf:/etc/mysql/conf.d/my.cnf
# - ./data-db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
- 33060:33060
# healthcheck: # here
# test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$MYSQL_ROOT_PASSWORD"]
# interval: 30s
# timeout: 5s
# retries: 6
# start_period: 30s
phpmyadmin:
container_name: mediawiki_phpmyadmin
image: phpmyadmin/phpmyadmin
restart: always
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=database
- PMA_USER=mysqluser
- PMA_PASSWORD=mysqladmin
- TZ=Asia/Tokyo
links:
- database
ports:
- 8082:80
volumes:
- ./phpmyadmin/sessions:/sessions
extensions, skins ディレクトリを上書き
空で上書きしたディレクトリは、本家gitから持ってきて上書きする事にした。
./vendor も追加しました!
./work もワークディレクトで追加しました!
圧縮ファイルをダウンロードしてコピペする
cd ~/docker/mediawiki/
wget https://releases.wikimedia.org/mediawiki/1.43/mediawiki-1.43.1.zip
unzip xxxx.zip
cp -rf ./mediawiki-1.43.1/extensions ./mediawiki/
cp -rf ./mediawiki-1.43.1/skins ./mediawiki/
cp -rf ./mediawiki-1.43.1/vendor ./mediawiki/
docker compose up
で色々起動している事を確認した後、本家gitから持ってきた extensions, skins
ディレクトリで上書きコピーする。
※ docker-compose.yml の volumes で指定したディレクトリは、ホスト側が優先され、起動した側の
ディレクトリ内は上書きされる(空だった場合は空になる)
イメージ内のファイルをコピーしたかったけど docker cp コマンドがいまいちわからなかった。
今、試しにやってみたら出来た!だけどなかった事にする!した!
mkdir ~/docker/mediawiki/work
cd ~/docker/mediawiki
# コンテナ内ディレクトリを丸ごとコピーしてローカルに持ってくる
docker compose cp mediawiki:/var/www/html/vendor ./mediawiki/
docker compose cp mediawiki:/root ./mediawiki/work
# ↑ディレクトリの中に出来たので、適当にローカルPC側で直した
起動確認
色々と雑事をして落ち着く。
- 失敗したイメージを削除したり
- 撒き散らしたゴミを削除したり
- 起動した環境がブラウザ表示できるか確認したり
- 試行錯誤した結果、そこかしこに残る適当に付けた設定名を消し回ったり
MediaWiki - http://localhost:8080
MysqlAdmin - http://localhost:8082
MediaWikiの初期設定をする
設定ファイルを変更したので再起動する。した。
cd ~/docker/mediawiki
docker compose up
http://localhost:8080
アクセスすると set up the wiki
リンクのあるページが表示される。
set up the wikiリンクをクリックする
言語の選択画面で[続行]押下する
ja - 日本語
ja - 日本語
MediaWikiへようこそ![続行]押下する
"データベースに接続"
- データベースのホスト: database (docker-compose.ymlで定義したmysqlのコンテナ)
- データベースの接頭辞: (なし)
- データベース名: my_wiki
- データベースのユーザー名: mysqluser
- データベースのパスワード: mysqladmin
[続行] 押下
データベースの設定画面で[続行]押下する
デフォルト内容に変更なし
[x] インストール作業と同じアカウントを使用する
ストレージエンジン:
[x] InnoDB(推奨)
[ ] MyISAM
名前の画面で値を設定し、続行ボタンを押下する
ウィキ名: LifeWiki
プロジェクト名前空間
[x] ウィキ名と同じ LifeWiki
利用者名: bash
パスワード: 0123456789
メールアドレス: bash@localhost.local
インストールの画面で続行ボタンを押下する
インストールの確認画面で続行ボタンを押下する
LogalSettings.phpファイルのダウンロード
上記手順の続行ボタンを押下するとLocalSettings.phpファイルがダウンロードされるので、./mediawiki/
配下にダウンロードする。
.
├── db
│ └── mysql
│ └── var_lib_mysql
├── mediawiki
│ └── images
│ └── LocalSettings.php ← ここに配置
└── docker-compose.yml
一度docker-compose down
を実行してコンテナを停止する
$ docker-compose down
docker-compose.ymlファイルにLocalSettings.phpのvolumes記述を追加する
volumes:
- ./mediawiki/images:/var/www/html/images
# 以下の行を編集して、LocalSettings.phpをホストマシンからコンテナにマウントします。
- ./mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php
docker-compose up -d でコンテナを再度起動する
$ docker-compose up -d
MediaWikiに再度アクセスする
完了
以上の手順でMediaWikiをdocker-composeで簡易的に構築することができました。
拡張機能 pandoc-mediawiki-ext
ちょっと使ってみる(テスト)
pandoc ダウンロードとインストール
うごいたー
Dockerfile で pandoc をインストールするようにした。
debian系
~/docker/mediawiki/mediawiki/Dockerfile
pandocを追加した
RUN curl -OL https://github.com/jgm/pandoc/releases/download/3.7.0.1/pandoc-3.7.0.1-1-amd64.deb && \
apt-get install -y ./pandoc-3.7.0.1-1-amd64.deb
MediaWiki用の Pandoc 拡張機能を本家からgitクローンする
Path:/var/www/html/extensions/Pandoc
[463925d8c4d3 vendor]# cd /var/www/html/extensions
[463925d8c4d3 extensions]# git clone https://github.com/bekker/pandoc-mediawiki-ext.git Pandoc
[463925d8c4d3 extensions]# ll Pandoc/
total 28
-rw-r--r-- 1 root root 12543 5月 23 16:02 Pandoc.php
-rw-r--r-- 1 root root 6673 5月 23 16:02 PandocTest.php
-rw-r--r-- 1 root root 4042 5月 23 16:02 README.md
[463925d8c4d3 extensions]#
LocalSettings.php 末尾に拡張機能のロード指示を追加する。
vi ~/docker/mediawiki/mediawiki/LocalSettings.php
require_once("$IP/extensions/Pandoc/Pandoc.php");
$wgPandocDefaultFormat = 'gfm';
$wgPandocExecutableOption = '';
拡張機能 mw-markdown
MediaWiki 1.35 で使えなくなっているみたい。
MediaWiki拡張機能のインストール中、唐突に composer require コマンドをしろと言われ途方にくれた!
PHPよく知らないってんねん!
composer コマンドを実行する方法も検索してもわからなかった。自分でなんかとかした!
次、必要になった時のため残しておく!
https://github.com/bharley/mw-markdown/issues/17
Call to undefined method Parser::doDoubleUnderscore #17
This is because many calls from Markdown.php are deprecated or private now (see https://www.mediawiki.org/wiki/Release_notes/1.35):
- https://github.com/bharley/mw-markdown
- https://github.com/erusev/parsedown
- https://github.com/erusev/parsedown-extra
mw-markdown-v0.2.zip https://github.com/bharley/mw-markdown/archive/refs/heads/master.zip
parsedown-master-x.zip https://github.com/erusev/parsedown/archive/refs/heads/master.zip
parsedown-extra-v2.0.x.zip https://github.com/erusev/parsedown-extra/archive/refs/heads/master.zip
アップデートとパッケージ追加。それと実行時コマンドログ。
※ Dockerfile を作成し、その中で composer コマンドを追加しています!
composer require erusev/parsedown
composer require erusev/parsedown-extra
[debian work]$ docker compose exec -it mediawiki bash
.bashrc
.bash_aliases
[463925d8c4d3 ~]# cd /var/www/html/vendor/
## ------------------------------------------------------------
## アップデート
## ------------------------------------------------------------
[463925d8c4d3 vendor]# composer update
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
- Upgrading wikimedia/wikipeg (4.0.0 => 4.0.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 1 update, 0 removals
- Downloading php-parallel-lint/php-parallel-lint (v1.4.0)
- Downloading wikimedia/wikipeg (4.0.2)
- Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
- Upgrading wikimedia/wikipeg (4.0.0 => 4.0.2): Extracting archive
Generating optimized autoload files
12 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
## ------------------------------------------------------------
## パッケージ追加
## composer require erusev/parsedown
## ------------------------------------------------------------
[463925d8c4d3 vendor]# composer require erusev/parsedown
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
./composer.json has been updated
Running composer update erusev/parsedown
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking erusev/parsedown (1.7.4)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading erusev/parsedown (1.7.4)
- Installing erusev/parsedown (1.7.4): Extracting archive
Generating optimized autoload files
12 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
Using version ^1.7 for erusev/parsedown
## ------------------------------------------------------------
## パッケージ追加
## composer require erusev/parsedown-extra
## ------------------------------------------------------------
[463925d8c4d3 vendor]# composer require erusev/parsedown-extra
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
./composer.json has been updated
Running composer update erusev/parsedown-extra
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking erusev/parsedown-extra (0.8.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading erusev/parsedown-extra (0.8.1)
- Installing erusev/parsedown-extra (0.8.1): Extracting archive
Generating optimized autoload files
12 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
Using version ^0.8.1 for erusev/parsedown-extra
[463925d8c4d3 vendor]#
LocalSettings.php ファイルの末尾に追記
# https://qiita.com/nanbuwks/items/9a1bd400fe89f15fdec4
# https://github.com/bharley/mw-markdown/blob/master/README.md
require_once("$IP/extensions/Markdown/Markdown.php");
$wgMarkdownExtra = true;
$wgMarkdownHighlight = true;
#$wgMarkdownHighlightJs = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.0/highlight.min.js';
#$wgMarkdownHighlightCss = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.0/styles/default.min.css';
$wgMarkdownHighlightJs = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.0/highlight.min.js';
$wgMarkdownHighlightCss = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.0/styles/default.min.css';
MediaWiki設定
コピペしてきた大元どこだかわからなくなりました
URLのindex.phpを表示しないようにする
https://localhost:8080/index.php/メインページ
URLアドレスに含まれる index.php
を不要にする。
LocalSettings.php
LocalSettings.phpを編集し、末尾に下記のコードを追記します。
$wgScript = "$wgScriptPath/index.php";
$wgRedirectScript = "$wgScriptPath/redirect.php";
$wgArticlePath = "$wgScriptPath/$1";
.htaccess
新たに .htaccess
ファイルをMediaWikiルートフォルダに作成する。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?title=$1 [L,QSA]
ファイルが消えないように docker-compose.yml
に追加する。
~/docker/mediawiki/docker-compose.yml
services:
mediawiki:
volumes:
- ./mediawiki/.htaccess:/var/www/html/.htaccess
再起動して確認する
cd ~/docker/mediawiki/
docker compose up -d --force-recreate