Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築

2023/03/28(Tue) 19:31:54
以前、知人から WordPress の使い方を教えて欲しいと相談があったので、さくらインターネットに WordPress をインストールしてブログを始めました。その時、知人がカスタムドメインを利用していました。お名前.com で .com ドメインの1年間の更新料金を調べてみると1287円 ~ と安いのに驚きました。1個目の登録料金は0円なので 2022/08/06(Sat) に購入してみました。そのまま塩漬けにしていたのですが、試しに iCloud+ のカスタムメールドメインに設定してみました。次回のブログに書きたいと思います。

お名前.com に500円のクーポンを貰ったので、.jp ドメインを登録してみました。お名前.com にログインして、.jp ドメインの1年間の更新料金を調べてみると 3686円でした。予想した価格と違ったので、自動更新は解除しています。

.com ドメインは所有したいので、下記のように1年間更新してみました。
.net ドメインにも興味があったので、更に登録してみました。.com ドメインを更新したおかげか、登録料は無料でした。1年間の更新料金も妥当なので保持するつもりです。

また、メールとサイトのドメインを分離して運用しようと思っています。

2023/03/28(Tue) 19:33:04
お名前.com サイトに表示されている1年間の更新料金目安

更新料金
.com
1,287円~

.net
1,507円~

.jp
1,276円~

2023/03/28(Tue) 19:33:04
実際の1年間のドメイン更新料金

kyoshiaki.com
ドメイン更新1年		1,408 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	253 円 (税込)
お支払い金額		1,661 円 (税込)

kyoshiaki.net
ドメイン更新1年		1,628 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	293 円 (税込)
お支払い金額		1,921 円 (税込)

kyoshiaki.jp
ドメイン更新1年		3,124 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	562 円 (税込)
お支払い金額		3,686 円 (税込)

さくらインターネットに公開している WordPress やホームページを購入したカスタムドメインに変更しようと模索していました。

一度公開した WordPress サイトのドメインを変更することは、難易度が高そうですが、さくらインターネットの WordPress サイトを Docker 上に再現し、WP-CLI を使ってデータベースを書き換えてみた結果、上手くいきそうです。

大惨事になる可能性もありますが!

2023/03/28(Tue) 19:35:06
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

2023/03/28(Tue) 19:35:45
WP-CLI | WP-CLI
https://wp-cli.org/

ドメイン変更の検証のために、上記 URL で公開している docker-compose.yml に WP-CLI を下記 URL を参考に追加してみました。

2023/03/28(Tue) 19:36:40
WP-CLIのDocker公式イメージ「wordpress:cli」の使い方 | SIOS Tech. Lab
https://tech-lab.sios.jp/archives/25369

M2 Pro Mac mini (2023) でコマンド docker-compose up -d を実行すると下記エラーが出るので、

❯ docker-compose up -d

[+] Running 0/1
 ⠙ db Pulling                                                                                                                                                                  3.1s
no matching manifest for linux/arm64/v8 in the manifest list entries

docker-compose.yml ファイルの image: mysql:5.7 を image: mysql:latest に変更しました。

===== docker-compose.yml =====

version: '3.3'

services:
  db:
    image: mysql:5.7

↓

version: '3.3'

services:                                                             
  db:                                                                 
    image: mysql:latest    

通常、WP-CLI をインストールし、WordPress のデーターベースを wp コマンドを使って変更することになります。

さくらインターネットでの場合、WP-CLI コマンド wp はあらかじめインストールされています。

さくらインターネットに ssh ログインし、WordPress のディレクトリに移動した後、下記のように wp コマンドを実行するだけです。

下記例、wp db search kyoshiaki.sakura.ne.jp コマンドは、データーベースに、文字列 kyoshiaki.sakura.ne.jpが含まれるレコードを表示しています。

=== ssh ===

% cd wp

% pwd
/xxxx/xxxx/wp

% ls
index.php               wp-cron.php
license.txt             wp-includes
readme.html             wp-links-opml.php
wp-activate.php         wp-load.php
wp-admin                wp-login.php
wp-blog-header.php      wp-mail.php
wp-cli.local.yml        wp-settings.php
wp-comments-post.php    wp-signup.php
wp-config-sample.php    wp-trackback.php
wp-config.php           xmlrpc.php
wp-content

% wp db search kyoshiaki.sakura.ne.jp

wpxxxxxacomments:comment_author_url
8:http://kyoshiaki.sakura.ne.jp/osx/index.html
wpxxxxxaoptions:option_value
1:https://kyoshiaki.sakura.ne.jp/wp
wpxxxxxaoptions:option_value
2:https://kyoshiaki.sakura.ne.jp/wp
wpxxxxxaoptions:option_value
408:}}s:16:"background_image";s:84:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/uploads/2020/12/advent-57
wpxxxxxaoptions:option_value
410:;s:17:"top_slide_image_1";s:91:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/themes/lightning/assets/i [...] ;s:17:"top_slide_image_2";s:91:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/themes/lightning/assets/i [...] g";s:15:"top_slide_url_2";s:33:"https://kyoshiaki.sakura.ne.jp/wp";s:22:"top_slide_text_title_2";s:18:
wpxxxxxaoptions:option_value

︙

wpxxxxxaposts:guid
1322:https://kyoshiaki.sakura.ne.jp/wp/?p=1322
wpxxxxxaposts:guid
1323:https://kyoshiaki.sakura.ne.jp/wp/?p=1323
wpxxxxxaposts:guid
1324:https://kyoshiaki.sakura.ne.jp/jwp/?p=1324
2023/03/28(Tue) 19:39:17
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

上記に公開した docker-compose.yml の場合、

2023/03/28(Tue) 19:40:40
wordpress - Official Image | Docker Hub
https://hub.docker.com/_/wordpress

2023/03/28(Tue) 19:41:14
wordpress/Dockerfile at 809519cc86bee0d6c7f2743976a850267983e2c2 · docker-library/wordpress
https://github.com/docker-library/wordpress/blob/809519cc86bee0d6c7f2743976a850267983e2c2/cli/php8.2/alpine/Dockerfile

ENTRYPOINT ["docker-entrypoint.sh"]
USER www-data
CMD ["wp", "shell"]

WP-CLI コンテナは、実行されると上記 Dockerfile の CMD [“wp”, “shell”] より、wp コマンドをシェルモードで起動します。

CMD 命令の詳細は、下記ページを参考にしてください。

2023/03/28(Tue) 19:42:07
Dockerfile reference
https://docs.docker.com/engine/reference/builder/

CMD

The CMD instruction has three forms:

・CMD [“executable”,”param1″,”param2″] (exec form, this is the preferred form)
・CMD [“param1″,”param2”] (as default parameters to ENTRYPOINT)
・CMD command param1 param2 (shell form)
There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

If CMD is used to provide default arguments for the ENTRYPOINT instruction, both the CMD and ENTRYPOINT instructions should be specified with the JSON array format.

CMD
=== docker-compose.yml ===

version: '3.3' 

services:
  db:
    image: mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"

︙

 cli:
    image: wordpress:cli
    container_name: cli
    volumes_from: 
      - wordpress
    depends_on:
      - db
      - wordpress
    command: "--info"
    user: xfs
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_TABLE_PREFIX: wp_

volumes:
  db_data: {}

デフォルトだと上記 docker-compose.yml の cli コンテナの command: “–info” より、シェルモードで立ち上がっている wp に引数 –info が渡されます。

データベースを書き換えるには、docker-compose コマンドで cli コンテナを削除して、wp コマンドの引数を渡し、cli コンテナを再作成して起動させます。

❯ docker-compose run --rm cli search-replace 'Hello world' 'Welcome WordPress' 

上記 docker-compose コマンドを実行すると下記結果より、データベースのテーブル wp_posts、カラム post_title の ‘Hello world’ の文字列が1箇所 ‘Welcome WordPress’ に変更されています。

❯ docker-compose run --rm cli search-replace 'Hello world' 'Welcome WordPress' 

[+] Running 2/0
 ⠿ Container docker-compose-wordpress-db-1         Running                                                                                                                     0.0s
 ⠿ Container docker-compose-wordpress-wordpress-1  Running                                                                                                                     0.0s
+------------------+-----------------------+--------------+------+
| Table            | Column                | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_commentmeta   | meta_key              | 0            | SQL  |
| wp_commentmeta   | meta_value            | 0            | SQL  |
| wp_comments      | comment_author        | 0            | SQL  |
︙
| wp_posts         | post_title            | 1            | SQL  |
︙
| wp_users         | display_name          | 0            | SQL  |
+------------------+-----------------------+--------------+------+
Success: Made 1 replacement.

WP-CLI コマンドの詳細については、下記ページの ‘お手軽 Docker コマンド起動 Ruby スクリプト docker.rb の WP-CLI コマンド’ を参照してください。

2023/03/28(Tue) 19:46:11
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress#readme

2023/03/28(Tue) 19:46:34
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress#%E3%81%8A%E6%89%8B%E8%BB%BD-docker-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%B5%B7%E5%8B%95-ruby-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-dockerrb-%E3%81%AE-wp-cli-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
2023/03/28(Tue) 19:47:01
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

上記の docker-compose.yml とお手軽 Docker コマンド起動 Ruby スクリプト docker.rb を利用すれば、気軽にデータベースを変更できます。
失敗しても、docker-compose down を実行した後、忘れずに Volume を docker.rb の 6番、docker volume rm docker-compose-wordpress_db_data を使用して削除すれば、docker-compose up -d で何度でも WordPress のインストールから、やり直せます。

Ruby 3.0.0

2020/12/30(Wed) 19:36:03
macOS(またはLinux)用パッケージマネージャー — Homebrew
https://brew.sh/index_ja

2020/12/30(Wed) 19:36:27
プロと読み解く Ruby 3.0 NEWS - クックパッド開発者ブログ
https://techlife.cookpad.com/entry/2020/12/25/155741

2020/12/30(Wed) 19:37:02
Ruby 3.0 の Ractor を自慢したい - クックパッド開発者ブログ
https://techlife.cookpad.com/entry/2020/12/26/131858

2020/12/30(Wed) 19:37:28
Ruby Programming Language
https://www.ruby-lang.org/en/

2020/12/30(Wed) 19:37:53
Ruby-Doc.org: Documenting the Ruby Language
https://ruby-doc.org/

2020/12/30(Wed) 19:38:21
Index of Files, Classes & Methods in Ruby 3.0.0 (Ruby 3.0.0)
https://ruby-doc.org/core-3.0.0/

2020/12/30(Wed) 19:39:35
Ruby 3.0.0 Standard Library Documentation
https://ruby-doc.org/stdlib-3.0.0/

とりあえず、macOS Big Sur バージョン 11.1 に Ruby 3.0.0 をインストールした。

ターミナル
2020/12/30(Wed) 19:41:47
~/Desktop/xxxxx/Ruby/
❯ sw_vers 
ProductName:macOSProductVersion: 11.1
BuildVersion:   20C69

~/Desktop/xxxxx/Ruby/
❯ rbenv install -l
2.5.8
2.6.6
2.7.2
3.0.0
jruby-9.2.14.0
mruby-2.1.2
rbx-5.0
truffleruby-20.3.0
truffleruby+graalvm-20.3.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.

~/Desktop/xxxxx/Ruby/
❯ rbenv install 3.0.0 
Downloading openssl-1.1.1i.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242
Installing openssl-1.1.1i...
Installed openssl-1.1.1i to /Users/xxxxxx/.rbenv/versions/3.0.0

Downloading ruby-3.0.0.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz
Installing ruby-3.0.0...
ruby-build: using readline from homebrew
Installed ruby-3.0.0 to /Users/xxxxxx/.rbenv/versions/3.0.0

~/Desktop/xxxxx/Ruby/
❯ rbenv rehash

~/Desktop/xxxxx/Ruby/
❯ cd Ruby\ 3.x 

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ rbenv versions     
  system
* 2.6.5 (set by /Users/xxxxxx/Desktop/Ruby/.ruby-version)
  3.0.0

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ rbenv local 3.0.0

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ ruby -v          
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20]

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ ls
pattern.rb

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ cat pattern.rb
#!/usr/bin/env ruby

a = [1, 2, 3]
puts "case #{a}"
puts "in [x, y, z]"
case a
in [x, y, z]
	puts "x:#{x} y:#{y} z:#{z}"
end

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯ ./pattern.rb
case [1, 2, 3]
in [x, y, z]
x:1 y:2 z:3

~/Desktop/xxxxx/Ruby/Ruby 3.x
❯

PC 内の音声ファイルをブラウザで再生する Ruby on Rails プログラム yplayer を公開。

PC 内の音声ファイルをブラウザで再生する Ruby on Rails プログラム yplayer を下記 URL で公開します。

kyoshiaki/yplayer
https://github.com/kyoshiaki/yplayer
yplayer/README.md
https://github.com/kyoshiaki/yplayer/blob/master/README.md

詳しい解説は上記 URL の README.md を参照してください。README.md は Markdown 記法で書かれています。上記サイトでプレビューを見ることができます。

最近だと Markdown 記法ファイルの表示、編集には下記 URL の エディタ Visual Studio Code を使うのが一番簡単です

Visual Studio Code - Code Editing. Redefined
https://code.visualstudio.com/

GitHub や git に不慣れだったり、私にとって Ruby on Rails の仕組みが複雑すぎて yplayer がうまく動作するか心配ですが、よかったらダウンロードしてみてください。

後、私の運用方法ですが、Raspberry Pi 2 Model B に

2018/11/04(Sun) 00:05:40
【 日本正規代理店品 】 Seagate 外付けハードディスク 2TB 3.5インチ USB3.0 3年保証 Expansion デスクトップ STEB2000100
販売: Amazon Japan G.K.
¥ 8,380
注文内容
商品の小計:¥ 8,380
配送料・手数料:¥ 0
注文合計:¥ 8,380
タイムセール割引:-¥ 1,200
ご請求額:
¥ 7,180

上記、アマゾンのタイムセールで安売りしてた Seagate 外付けハードディスク 2TB 3.5インチ USB 3.0 (Raspberry Pi の USB 規格は 2.0 です。) を ext4 形式でフォーマットして繋げ、

yplayer/tools/README.md
https://github.com/kyoshiaki/yplayer/blob/master/tools/README.md

上記 tools/README.md で紹介したスクリプト rec_radiko_live.sh を crontab で指定時刻に起動するように予約して Radiko を録音しています。

以前は 64GB の SDカードに録音し、拙作 delete.py を使ってディレクトリごとに最新 28 個のファイルだけ残すようにしていたのですが、SD カードでエラーが出るようになったので、ハードディスクに保存するように変更しました。今現在、録音した音声ファイルは全て残しています。

録音に失敗したら macOS Mojave バージョン 10.14.3(18D109)のターミナルで、同じ上記 tools/README.md で紹介したスクリプト rec_radiko_ts.sh を使ってダウンロードしています。ダウンロードした音声データはコマンド scp を使って Raspberry Pi 2 Model B に繋げたハードディスクにコピーしています。

yplayer は Raspberry Pi 2 Model B の電源を入れたら systemd を使って自動起動するようになっています。

上記スクリプトで録音した Radiko の音声ファイルを yplayer を使って iPhone XS MaxSafari で聴いています。
ほとんど自動化されているので聴きたくなったら Safari を起動する感じです。

Raspberry Pi 2 Model B に不満がないので Raspberry Pi 3 Model B+ は買うか悩んでいます。
Synology などの NAS にも興味があります。NAS があれば yplayer も必要ないかもしれません。