ジョギング
- 博多天神周りで 50 分程
- 懸垂 x 8
- 今日も RINCON で走ったけど, 蹴り出しの際にどうしても左足の小指の付け根付近にズキッとした痛みが...なぜだ...
岳宴祭 (がくえんさい)
会社の社員参加型, 社員の家族までも参加型のイベントが田川のいいかねパレットで開催された.
DJ 体験, バンド体験, ドローン体験, バーベキュー等でとても楽しめた. 準備にとても大変だったと思う. 大変お疲れ様でした.
会社の社員参加型, 社員の家族までも参加型のイベントが田川のいいかねパレットで開催された.
DJ 体験, バンド体験, ドローン体験, バーベキュー等でとても楽しめた. 準備にとても大変だったと思う. 大変お疲れ様でした.
サービスを見なければいけないのに、サーバーしか見ていなかったのかもしれない。
— Yohei Kawahara(かっぱ) (@inokara) 2019年11月29日
あと, Terraform 業と CircleCI 業, AWS CDK をやる時間は取れなかった.
WordPress を運用していて, 個人的な調べによると, 最もやらかすのは WordPress アドレスとサイトアドレスの設定をミスってしまい, せっかく頑張って構築した WordPress サイトにアクセス出来なることではないでしょうか. 多分にもれず, 私も何度となくやらかしました.
やらかすたんびにググっていたので, 実際のその解決方法をメモっておきます.
解決方法は複数あるようですが, 一番, お手軽な解決方法は, wp-config.php をイジって定数 WP_HOME
と WP_SITEURL
を定義することだと思います.
define('WP_HOME','https://oreno-wordpress.com'); define('WP_SITEURL','https://oreno-wordpress.com'); /* That's all, stop editing! Happy blogging. */
wp-config.php の 90 行目くらいに書いておくと良さそうです.
サーバーにログインして, vim が入っていなければインストール, vim で wp-config.php を修正しましょう.
上記のドキュメントを参考にさせて頂きました.
定数 | 詳細 |
---|---|
WP_HOME | サイトアドレスを定義する. wp_options テーブル の home の値よりも優先される. WordPress をインストールした URL |
WP_SITEURL | WordPress アドレスを定義する. wp_options テーブルの siteurl の値よりも優先される. WordPress にクライアントユーザーがアクセスする URL |
定数の名前と定義の意味が逆のような気がして紛らわしいです...
ちなみに, wp_options テーブルのテーブル定義は以下の通りとなっていて, WordPress の稼働に必要なデータが格納されています.
mysql> DESC wp_options; +--------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+----------------+ | option_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | option_name | varchar(191) | NO | UNI | | | | option_value | longtext | NO | | NULL | | | autoload | varchar(20) | NO | | yes | | +--------------+---------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
さらに, 以下は手元の環境にて Docker で起動した WordPress の wp_options テーブルの中身の一部抜粋です.
mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = 'home'; +-------------+-----------------------+ | option_name | option_value | +-------------+-----------------------+ | home | http://localhost:8080 | +-------------+-----------------------+ 1 row in set (0.00 sec) mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = 'siteurl'; +-------------+-----------------------+ | option_name | option_value | +-------------+-----------------------+ | siteurl | http://localhost:8080 | +-------------+-----------------------+ 1 row in set (0.00 sec)
これらの値を定数 WP_HOME
とか WP_SITEURL
は上書きする挙動になっているということですな.
話題となっている WP_HOME
と WP_SITEURL
を呼んでいる関数はいくつかありますが, 以下のコードを読んでみたいと思います.
WP_HOME
と WP_SITEURL
は以下のように呼ばれています.
/** * Retrieve the WordPress home page URL. * * If the constant named 'WP_HOME' exists, then it will be used and returned * by the function. This can be used to counter the redirection on your local * development environment. * * @since 2.2.0 * @access private * * @see WP_HOME * * @param string $url URL for the home location. * @return string Homepage location. */ function _config_wp_home( $url = '' ) { if ( defined( 'WP_HOME' ) ) { return untrailingslashit( WP_HOME ); } return $url; } /** * Retrieve the WordPress site URL. * * If the constant named 'WP_SITEURL' is defined, then the value in that * constant will always be returned. This can be used for debugging a site * on your localhost while not having to change the database to your URL. * * @since 2.2.0 * @access private * * @see WP_SITEURL * * @param string $url URL to set the WordPress site location. * @return string The WordPress Site URL. */ function _config_wp_siteurl( $url = '' ) { if ( defined( 'WP_SITEURL' ) ) { return untrailingslashit( WP_SITEURL ); } return $url; }
それぞれ, _config_wp_home
と _config_wp_siteurl
という関数内で WP_HOME
や WP_SITEURL
が定義されているかどうかをチェックしていることがわかります. もし定義されている場合には, 定数の値を読み取って, ご丁寧に文字列の最後の /
を取り除いて値を返すように実装されていました.
WordPress アドレス
とサイトアドレス
, WP_HOME
, WP_SITEURL
がうまく整理出来ていませんが, メモとさせて頂きます.
JP日本郵政グループの 1 区を走った廣中選手の走りがルーキーとは思えない堂々と走りで度肝を抜かれた. うまく育ててもらえればすごい選手になるんじゃないかと思った.
前のブログの続き.
上の記事を書いている時にはてっきり setup_remote_docker
を設定した時には Docker in Docker を実現していたのかと思っていたけど, なんだか setup_remote_docker
という名前で Docker in Docker は違うよなーとモヤモヤしていたのでも少し深堀りしたのでメモ.
以下のような .circleci/config.yml を書いて調べた.
version: 2 jobs: build: docker: - image: docker:19.03.5-git steps: - checkout - setup_remote_docker - run: name: Test command: | echo '--- ホストのグローバル IP アドレスを確認 ----------------------------' apk add curl curl httpbin.org/ip echo '--- env で環境変数を確認 --------------------------------------------' env echo '--- docker ps が実行出来るか確認 ------------------------------------' docker ps
実行結果は以下のようになった.
お, 新しい UI になっている. それは置いといて...
--- ホストのグローバル IP アドレスを確認 ---------------------------- fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz (1/1) Installing curl (7.66.0-r0) 0% % ############################################Executing busybox-1.30.1-r2.trigger OK: 33 MiB in 27 packages { "origin": "54.234.128.201, 54.234.128.201" } --- env で環境変数を確認 -------------------------------------------- ... 省略 DOCKER_VERSION=19.03.5 DOCKER_TLS_CERTDIR=/certs DOCKER_HOST=tcp://35.237.215.99:2376 CIRCLE_PROJECT_USERNAME=inokappa ... 省略 --- docker ps が実行出来るか確認 ------------------------------------ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
あー, DOCKER_HOST
で全く異なるホストの Docker が指定されているんですな.
メモでした. なんでも試してみると良いですな.
今更かもしれないけど, 実際に手を動かしてみて初めて遭遇したのでメモっておく.
amiCtrl のインテグレーションテスト的なテストを docker-compose でやりたくて docker-compose.yml を書いた. もちろん, ローカルマシン (macOS 上の Docker マシン) ではテストは動いたんだけど CircleCI 上で実行した場合にはどうしても動かない... と調べていたら, ドキュメントに以下のように書かれていた.
but volume mounting and port forwarding do not work the same way in this setup.
ほう...ローカルマシンのボリュームをマウントすることが出来ないとのこと. これは, 全く意識していなかったけど, 留意が必要.
ちなみに, 以下は .circleci/config.yml を掲載.
version: 2 jobs: build: docker: - image: circleci/golang:1.9.7 steps: - checkout - setup_remote_docker - run: name: Install docker-compose command: | curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose chmod +x ~/docker-compose sudo mv ~/docker-compose /usr/local/bin/docker-compose - run: name: Run Test Environment command: | docker-compose up -d - run: name: Run Install Dependencies command: | docker-compose exec amictrl_circleci make ensure - run: name: Run Test command: | docker-compose exec amictrl_circleci make test
ローカルマシンのボリュームをマウントしてソースコードやテストコードを Docker コンテナ上で操作出来るようにしたかったんだけど, CircleCi 上ではローカルマシンのボリュームをコンテナにマウントすることが出来ないので, コンテナをビルドする際にソースコードを含めるようにした.
FROM golang:alpine RUN apk update && apk add git make bash gcc libc-dev python py2-pip jq dep && pip install awscli RUN mkdir /root/.aws && mkdir /go/src/amiCtrl ADD ./ /go/src/amiCtrl/ RUN printf "[dummy_profile]\n\ aws_access_key_id = AKxxxxxxxxxxxxxxxxxx\n\ aws_secret_access_key = zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n\ region = ap-northeast-1" >> /root/.aws/credentials
苦肉の策ではあるけど, 以下のようにローカルマシン上でも CircleCI 上でも意図した通りに動いてくれている.
以下はローカルマシンで実行結果.
$ docker-compose exec -T amictrl_local make test === RUN TestVersionFlag --- PASS: TestVersionFlag (2.21s) === RUN TestStdoutList --- PASS: TestStdoutList (3.62s) === RUN TestStdoutCreate --- PASS: TestStdoutCreate (2.99s) === RUN TestStdoutCreateError --- PASS: TestStdoutCreateError (2.93s) === RUN TestStdoutDelete --- PASS: TestStdoutDelete (3.91s) === RUN TestStdoutDeleteError --- PASS: TestStdoutDeleteError (3.59s) === RUN TestStdoutDeleteNo --- PASS: TestStdoutDeleteNo (3.70s) === RUN TestStdoutState --- PASS: TestStdoutState (5.08s) === RUN TestStdoutJson --- PASS: TestStdoutJson (4.88s) PASS ok amiCtrl 32.913s
以下は CircleCI 上の実行結果.
上記のドキュメントではなんだか小難しく書かれているが, ビルド用の Docker コンテナ内で更に docker コマンドを利用出来るようにしたもの. Docker in Docker, Docker のマトリョーシカということだと思っている.
以下, setup_remote_docker
有り, 無しの違い.
version: 2 jobs: build: docker: - image: docker:19.03.5-git steps: - checkout - run: name: Test command: | docker info
setup_remote_docker
を付与していない場合には, 下図のようにビルドは失敗する.
setup_remote_docker
を付与している場合.
version: 2 jobs: build: docker: - image: docker:19.03.5-git steps: - checkout - setup_remote_docker - run: name: Test command: | docker info
下図のように docker info
の結果がちゃんと返ってくる.
なーんだ, 普通の Docker じゃないかーと思って油断していると, 今回のようにホスト (こやつも Docker コンテナ) のボリュームをマウント出来ないという制約があるので注意が必要というお話.
現場からの報告でした.