paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

homelabにdokuwikiのデータを移植する

LXDで動かしていたサーバ群をdocker環境に移し替えているのですが今回はdokuwikiを移植しました。
dokuwikiディレクトリを抜いてコピればデータリストアは完了なのでお手軽さも相まって気に入ってます。

公式のイメージはなかったのですが自作もなんだしbitnamiのコンテナがあったのでこれを使います。

コンテナデプロイ

docker hubを参考にcomposeファイルを落としてきてカスタマイズします。

hub.docker.com

443番は落として82番で上げることにしました。

masashi@lab-docker1:~/dokuwiki$ cat docker-compose.yml
version: '3.3'
services:
  dokuwiki:
    image: docker.io/bitnami/dokuwiki:20230404
    ports:
      - '82:8080'
      # - '443:8443'
    volumes:
      - 'dokuwiki_data:/bitnami/dokuwiki'
volumes:
  dokuwiki_data:
    driver: local

swarmで動かそうとしたらエラーを吐いたのでバージョンを3に上げてます。

masashi@lab-docker1:~/dokuwiki$ docker stack deploy -c docker-compose.yml dokuwiki
unsupported Compose file version: 2
masashi@lab-docker1:~/dokuwiki$ docker stack deploy -c docker-compose.yml dokuwiki
Creating network dokuwiki_default
Creating service dokuwiki_dokuwiki

立ち上がりました。

masashi@lab-docker1:~/dokuwiki$ docker service ls
ID             NAME                  MODE         REPLICAS   IMAGE                           PORTS
mkssjuq5nwyw   dokuwiki_dokuwiki     replicated   1/1        bitnami/dokuwiki:20230404       *:82->8080/tcp
plup1b33qmjy   firefly_app           replicated   1/1        fireflyiii/core:latest          *:80->8080/tcp
u0009w7ryo30   firefly_db            replicated   1/1        mariadb:latest
luna6ms9v7bi   pi-hole_pihole        replicated   1/1        pihole/pihole:latest            *:53->53/tcp, *:81->80/tcp, *:53->53/udp
fyijaxnx2903   portainer_agent       global       2/2        portainer/agent:2.18.2
ddrxmnjz9is4   portainer_portainer   replicated   1/1        portainer/portainer-ce:2.18.2   *:8000->8000/tcp, *:9000->9000/tcp, *:9443->9443/tcp
masashi@lab-docker1:~/dokuwiki$ docker service ps dokuwiki_dokuwiki
ID             NAME                  IMAGE                       NODE          DESIRED STATE   CURRENT STATE           ERROR     PORTS
o9eru7ihz52d   dokuwiki_dokuwiki.1   bitnami/dokuwiki:20230404   lab-docker2   Running         Running 2 minutes ago

docker系のプロセスもOKですね。
画面も見えてます。

データ移植

データコピーはswarmのmanagerノードからは出来ないようなのでコンテナが稼働しているサーバ直でコピーします。
scpでデータは転送済み。
markdown記法のプラグインも使っていたのでこれも入れます。

masashi@lab-docker2:~/dokuwiki$ ls
data.tar  dokuwiki-plugin-markdowku-master.tar

展開してコピー。

masashi@lab-docker2:~/dokuwiki$ docker cp dokuwiki-plugin-markdowku-master e3e30bcac2a3:/bitnami/dokuwiki/lib/plugins/markdowku
Successfully copied 65kB to e3e30bcac2a3:/bitnami/dokuwiki/lib/plugins/markdowku
masashi@lab-docker2:~/dokuwiki$ docker cp data e3e30bcac2a3:/bitnami/dokuwiki/
Successfully copied 5.37MB to e3e30bcac2a3:/bitnami/dokuwiki/

コピーOKです。
アクセスすると…

あら、なんかエラーが出てます。 アクセスかwrite出来ないよって言ってる。

転送元のパーミッションを見ます。

masashi@lab-docker2:~/dokuwiki$ ls -l data
total 100
drwxrwxr-x  2 masashi masashi  4096 Jan 27 05:53 attic
drwxrwxr-x 18 masashi masashi  4096 Jan  5 14:36 cache
drwxrwxr-x 12 masashi masashi  4096 Feb  6  2021 data
...

その他ユーザのwriteがないと動かないのか。

masashi@lab-docker2:~/dokuwiki$ sudo chmod -R 777 data
masashi@lab-docker2:~/dokuwiki$ ls -l data
total 100
drwxrwxrwx  2 masashi masashi  4096 Jan 27 05:53 attic
drwxrwxrwx 18 masashi masashi  4096 Jan  5 14:36 cache
drwxrwxrwx 12 masashi masashi  4096 Feb  6  2021 data
...

再度データコピー。
プラグインディレクトリ名変更してます。

(この間に切り分けで数回コンテナを作り直してます)

masashi@lab-docker2:~/dokuwiki$ docker cp markdowku 9f916b88135b:/bitnami/dokuwiki/lib/plugins/
Successfully copied 65kB to 9f916b88135b:/bitnami/dokuwiki/lib/plugins/
masashi@lab-docker2:~/dokuwiki$ docker cp data 9f916b88135b:/bitnami/dokuwiki/
Successfully copied 5.37MB to 9f916b88135b:/bitnami/dokuwiki/

アクセス。

OKですね。移植完了です。
markdownプラグインはリアルタイムでは反映されなくて一回編集を挟まないと反映しないようです。

レイアウトも直ってOK!

labは外からもアクセスできるので見放題、更新し放題です。
もっとページ増やしたいですね。

まとめ

今回の作業ですが、
labのdocker swarm環境は一応本番扱いにしているので別筐体のdockerスタンドアロン環境で検証してました。
その時はデータコピーした後一発で表示できたのでlabへのデプロイもすんなりいくと思ったらパーミッション問題でこけて少し時間食ってしまいました。
docker環境の違いなのかどうかが分からず切り分けに時間がかかりました。

またbitnamiのコンテナはrootユーザが無効になっているので中に入っての切り分けができずこちらも苦労しました。
(コンテナのセキュリティとしてはこの姿があるべきの様ですが)
ホスト側で何とかして切り分けるという経験ができたのは良かったです。 記事に書き起こしたらなんてことなく、見たらすぐわかるじゃんwとなるかもしれませんが作業中はなんで動かないんだ…となってました。

検証機からlabへデータファイルをscp(オプションなし)したときにパーミッションが変わってしまったっぽい。
まずは環境は同じにしとかないと不要な切り分けポイントが出来てしまいますね。(仕事ではちゃんとやってるのに)