0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MediaWikiを使ったみる[Docker][docker-compose]

Posted at

MediaWiki

はじめに

有識者の知恵を拝借する

  1. 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

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側で直した

起動確認

色々と雑事をして落ち着く。

  1. 失敗したイメージを削除したり
  2. 撒き散らしたゴミを削除したり
  3. 起動した環境がブラウザ表示できるか確認したり
  4. 試行錯誤した結果、そこかしこに残る適当に付けた設定名を消し回ったり

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):

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 ファイルの末尾に追記

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を編集し、末尾に下記のコードを追記します。

LocalSettings.php
$wgScript           = "$wgScriptPath/index.php";
$wgRedirectScript   = "$wgScriptPath/redirect.php";
$wgArticlePath      = "$wgScriptPath/$1";

.htaccess

新たに .htaccess ファイルをMediaWikiルートフォルダに作成する。

.htaccess
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

~/docker/mediawiki/docker-compose.yml
services:
  mediawiki:
    volumes:
      - ./mediawiki/.htaccess:/var/www/html/.htaccess

再起動して確認する

cd ~/docker/mediawiki/
docker compose up -d --force-recreate
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?