ニィロウで本天井ぶちかましたので初投稿です。
事の発端
自動作成した記事をWordPressに下書き投稿する機能を業務で開発しました。
(一から十まで自動作成するのではなく、後から人の手が入ることを前提としたシステムです。)
テストするためにぶっ壊してもいいテスト用のWordPressが欲しいんですが、WordPressって用意するの面倒臭そうじゃないですか?
~定例MTGにて~
僕「開発用のWordPress貸してもらえないかなぁー(怠惰)」
弊社のスゥパエンジニィア「コンテナでテストできませんか?」
僕「できます(反射)」
やっべ。
ゴール
コンテナ作る
Python側
Dockerfileで作りました。
(OS確認するまでUbuntuだと思ってたのは内緒)
# cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
(中略)
# cat /etc/debian_version
11.5
# python --version
3.10.7
WordPressに関連する処理の内容は、
- 画像をメディアライブラリにPOSTする
- 記事を下書き状態でPOSTする
の2つです。
WordPress側
ビルド
こちらの通りにディレクトリやらyamlを作ってdocker compose up -d
します。
http://localhost:8000
にアクセスして、言語設定とアカウント設定を行ってインストール。
アプリケーションパスワードの設定
WordPress REST APIを利用するにはいくつか認証方法がありますが、今回は一番手っ取り早いアプリケーションパスワード認証で行きました。
ボックスに入力した文字列はKeyで、ValueとなるパスワードはWordPressが自動で作ってくれます。
作ったパスワードにはもう二度と会えないので、恋人との思い出よりも大切にしまっておきましょう。
忘れてしまったら新しい恋再設定が必要になります。
ちなみに、Basic認証を掛けていると設定できなかったです。
2人は相容れない存在なのかな‥‥不倶戴天なのかな‥‥悲しいね‥‥。
これでコンテナの準備は完了です。
簡単ですね。これだからDockerはやめられねぇ。
2コンテナ間で通信できるようにする
ここのためにこの記事を書いたといっても過言じゃない。
結論を言うとhttp://gateway.docker.internal:8000/wp-json/wp/v2/posts
を使います。
(もちろん画像の方は/wp-json/wp/v2/media
です)
たったこれだけの文字列に出逢うために2日かかりました。
始めは「http://localhost:8000/wp-json/wp/v2/posts
で行けるっしょwwwww」とか思っていたんですよこの人。
何考えてるんですかね?
ここでいうlocalhostは当然ホストマシンから見たlocalhost、つまりホストマシンなわけで。
WordPressが動いているコンテナではないです。
小見出しのように2つのコンテナ間で通信する方法を調べていたせいで、中々辿り着くことができませんでした。
WordPressのコンテナをホストOS上で動く1つのプロセスと考えることで、ようやく正しい検索ができた次第です。
始末
docker-compose down --volumes
しましょう。
--volumes
でデータベースも消去します。
次回起動時に投稿内容などを確認したい場合は--volumes
を外すだけ。
おわりに
理解が浅いと調べ方すら分からないものですね。
色々な情報がネット上に存在する時代だからこそ、ソレを扱う人間が勉強する意義は増しているんだなあ
ラップトップ抱えた原始人にならないよう、これからも精進していきとうございます。
参考
非常に助かりました。有難うございます。