※本記事は2023年初頭に書いた記事だったのですが、自分用メモに近いものだったので公開するかどうかを迷っていたのを忘れたまま1年経過していたことに今頃気づきました(2024年3月時点)遅くなりましたが、このまま捨てるのも忍びないのでひっそりと公開するものです。
今回の記事を3行で言うと
- 最近はたいていの環境で公式や有志提供の Dockerコンテナが用意されていて、環境構築を1からやらなくても良くなってきています
- DockerHubを探してみると、Pukiwiki にもDockerコンテナがあるようです
- どんなもんだかちょっと触ってみました
という、ほぼ自分のためだけの興味本位な記事となります。実は、去年WSL上にPukiwikiを(コンテナなしで)構築する記事を書きましたが、そのときの作業の副産物で、コンテナありだとどうなるのか、も少し試していました。
なお、今回WSL上で作業していますが、WSLの使い方などの説明はしません。そちらについては別記事 Windows上のWSLでコンテナによる開発環境を作ってみる(前準備編) に少し書いていますので興味のある方は参照いただければ幸いです。
ちょっと昔は…
- Pukiwikiを使おうと思ったらPC上にApacheとPHP、もしくはXAMPP入れてどうのこうのとやっていましたが、最近はDockerという便利なものがあります。PukiwikiのDockerコンテナが提供されていれば面倒くさい環境構築はすっとばせます。
- コンテナはこちらで提供されていました→ pengo/pukiwiki - Docker Image | Docker Hub 感謝です。
- Dockerfileなどはこちらにあるようです1 →GitHub - pen/docker-pukiwiki: PukiWiki Unicode版のコンテナ化
まずは初期表示まで
- さっそく docker run してみましょう。
$ echo $HOME
/home/smatsu
$ mkdir $HOME\pukiwiki
$ docker run -p 8080:80 -v $HOME/pukiwiki:/ext -d pengo/pukiwiki
Unable to find image 'pengo/pukiwiki:latest' locally
latest: Pulling from pengo/pukiwiki
540db60ca938: Pull complete
490462e239fc: Pull complete
c71b743d9c28: Pull complete
99ddfc6996ec: Pull complete
Digest: sha256:3d55b800f725d334e628b1f8834d37a55db2d361ff11153ad7fd05b93b05907e
Status: Downloaded newer image for pengo/pukiwiki:latest
9eeed592292ff67a6e89c128b9c60fc4ec731a422235def8b96bdbc4f2eea0d7
$
-
オプション -p はポートのマッピングです。PC上で8080に対するアクセスがコンテナ上でのポート80にフォワードされます。
-
オプション -v の所でやっているのはマウントです。WSL上のディレクトリ \$HOME/pukiwiki をコンテナ内の /ext にマウントしています。今回の環境では$HOME=/home/smatsuです。これが何を意味するかというと、コンテナ内で /ext に置いてあるものはWSL上では /home/smatsu/pukiwiki を参照すれば見えるということです。
-
オプションの -d はデタッチドモード(バックグラウンド実行)を指定しています。
-
frosty_cerf という名前でコンテナができています。
-
簡単すぎて拍子抜けです。早くできたのはいいとして、パスワードとかどうなってるのでしょう?
コンテナ内を見てみる
- コンテナの中に入ってディレクトリを見てみます。bashを実行してみます。
$ docker container exec -it frosty_cerf bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
- -iは、Keep STDIN open even if not attached>標準入力を開き続ける。と言う意味
- -tは、Allocate a pseudo-TTY>疑似ttyを割りあてる。と言う意味
- startできないというエラーになりました。
- alpine linux にはbashが入ってないらしいです。では sh ならどうか。
$ docker container exec -it frosty_cerf sh
/ # ls
bin dev etc ext home lib media mnt opt proc root run sbin srv sys tmp usr var
/ # exit
- shなら入れました。bash もインストールできるらしいので使ってみましょう。
$ docker container exec -it frosty_cerf apk add bash
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/2) Installing readline (8.1.0-r0)
(2/2) Installing bash (5.1.16-r0)
Executing bash-5.1.16-r0.post-install
Executing busybox-1.32.1-r6.trigger
OK: 58 MiB in 33 packages
$ docker container exec -it frosty_cerf bash
bash-5.1#
- apk は Alpine 用のパッケージ管理コマンドです。add bash で bashをインストールします。
- OK、bashで入れたようです。ではコンテナ内でwikiはどこにあるのか。/var/www にあるようです。
bash-5.1# ls -l /var/www
total 64
lrwxrwxrwx 1 root root 16 May 28 2021 attach -> /ext/data/attach
lrwxrwxrwx 1 root root 16 May 28 2021 backup -> /ext/data/backup
lrwxrwxrwx 1 root root 15 May 28 2021 cache -> /ext/data/cache
lrwxrwxrwx 1 root root 17 May 28 2021 counter -> /ext/data/counter
lrwxrwxrwx 1 root root 25 May 28 2021 default.ini.php -> /ext/conf/default.ini.php
lrwxrwxrwx 1 root root 14 May 28 2021 diff -> /ext/data/diff
-rw-r--r-- 1 root root 17183 May 28 2021 en.lng.php
drwxr-sr-x 3 root root 4096 May 28 2021 image
-rw-r--r-- 1 root root 177 Jan 12 2021 index.html
-rw-r--r-- 1 root root 708 May 28 2021 index.php
-rw-r--r-- 1 root root 20076 May 28 2021 ja.lng.php
lrwxrwxrwx 1 root root 24 May 28 2021 keitai.ini.php -> /ext/conf/keitai.ini.php
drwxr-sr-x 2 root root 4096 May 28 2021 lib
drwxr-sr-x 2 root root 4096 May 28 2021 plugin
lrwxrwxrwx 1 root root 26 May 28 2021 pukiwiki.ini.php -> /ext/conf/pukiwiki.ini.php
lrwxrwxrwx 1 root root 23 May 28 2021 rules.ini.php -> /ext/conf/rules.ini.php
drwxr-sr-x 2 root root 4096 May 28 2021 skin
lrwxrwxrwx 1 root root 14 May 28 2021 wiki -> /ext/data/wiki
- なるほど。先ほどマウントした /ext に data や config があるのがわかると思います。
- Windowsのエクスプローラ上で /ext にマウントされている /home/smatsu/pukiwiki を見ると、こんな感じです。
- conf の下に pukiwiki.ini.php がありますので、開いてみましょう。パスワードに関する情報を探します。
/////////////////////////////////////////////////
// Admin password for this Wikisite
// Default: always fail
$adminpass = '{x-php-md5}!';
// Sample:
//$adminpass = 'pass'; // Cleartext
//$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72'; // PHP md5() 'pass'
//$adminpass = '{x-php-sha256}d74ff0ee8da3b9806b18c877dbf29bbde50b5bd8e4dad7a3a725000feb82e8f1'; // PHP sha256 'pass'
//$adminpass = '{CRYPT}$1$AR.Gk94x$uCe8fUUGMfxAPH83psCZG/'; // LDAP CRYPT 'pass'
//$adminpass = '{MD5}Gh3JHJBzJcaScd3wyUS8cg=='; // LDAP MD5 'pass'
//$adminpass = '{SMD5}o7lTdtHFJDqxFOVX09C8QnlmYmZnd2Qx'; // LDAP SMD5 'pass'
//$adminpass = '{SHA256}10/w7o2juYBrGMh32/KbveULW9jk2tejpyUAD+uC6PE=' // LDAP SHA256 'pass'
adminpass は初期状態では使えないようになっているようです。
// User definition
$auth_users = array(
// Username => password
'foo' => 'foo_passwd', // Cleartext
'bar' => '{x-php-md5}f53ae779077e987718cc285b14dfbe86', // PHP md5() 'bar_passwd'
'hoge' => '{SMD5}OzJo/boHwM4q5R+g7LCOx2xGMkFKRVEx', // LDAP SMD5 'hoge_passwd'
);
通常のid/パスワードは仮値として foo/foo_passwd, bar/bar_passwd, hoge/hoge_passwd が入っているようです。
VSCodeからpukiwiki.iniを開いてみる。
-
Windows上のVSCodeからpukiwiki.ini を開いてみます。
-
まず、VSCodeの左下の緑色のメニューから「新しいWSLウィンドウ」を選択します。するとWSLに接続されます。
VSCodeでWSL上のファイルの書き換えができない問題
$ ls -l
合計 52
-rw-r--r-- 1 root root 7312 5月 28 2021 default.ini.php
-rw-r--r-- 1 root root 13915 5月 28 2021 keitai.ini.php
-rw-r--r-- 1 root root 21681 5月 28 2021 pukiwiki.ini.php
-rw-r--r-- 1 root root 1536 5月 28 2021 rules.ini.php
- VS Code は WSL のデフォルトログインユーザで動作しているため,所有者でないユーザの編集とみなされたようです.デフォルトユーザにオーナーを変更してみます。
$ echo $USER
smatsu
$ sudo chown smatsu pukiwiki.ini.php
[sudo] smatsu のパスワード:(ここには自分のパスワードを入れる)
$ ll
合計 60
drwxr-sr-x 2 root root 4096 5月 28 2021 ./
drwxr-xr-x 4 smatsu smatsu 4096 7月 29 23:44 ../
-rw-r--r-- 1 root root 7312 5月 28 2021 default.ini.php
-rw-r--r-- 1 root root 13915 5月 28 2021 keitai.ini.php
-rw-r--r-- 1 smatsu root 21681 5月 28 2021 pukiwiki.ini.php
-rw-r--r-- 1 root root 1536 5月 28 2021 rules.ini.php
- こうすると、VSCodeでの書き換えが可能となりました。
実際にPukiwikiを編集してみたところ
まとめ
とりあえず、やってみようと思ったことはできたのでここまでの結果をまとめます。
- Pukiwikiの構築が面倒なら、DockerHubに Alpine Linuxで構築したDockerイメージが登録されているのでそれをDocker Runしてきて使うという手がある。
-
しかし、WSL上のフォルダがマウントされていたりといったカスタマイズが加えられているので、逆にちょっと使いづらい。普通にプレーンな設定で作って欲しかった…(※2024.4.1追記:作者の方よりコメントにてvオプションを省略すればマウントしないということを教えていただきました。ありがとうございます)。 - ということで、やっぱり自分の希望に合わせるにはコンテナから自分で作った方が良さそうです。
今回は以上です。どなたかの参考になれば幸いです。
-
今回は不要ですが、参考資料として記載しています。 ↩