Docker + WordPress 試してみた
Docker を試してみた。FreeBSD の jail みたいなものと理解している。というより、技術的なものは一切理解せずに使っている。
Docker のインストール
qiita.com
この辺のを見てインストールした。単に Docker からシェルプロを wget して(記事の中では curl だが)、sudo で実行しただけ。もう、勝手に何かしらインストールされてしまいました。何がインストールされたかはわからずじまいです。
$ wget -qO- https://get.docker.com/ | sh $ sudo usermod -aG docker $USER
Docker を run させる。
よくわからないけど、まずは hello world を run させました。この時点で、何が起こっているのかわからない!!という状態です。つまり、 Docker (仮想環境というくらいは知っているが、基本的な知識としてはこのキーワードだけ)が何者かわからないうちに hello world 終了
$ docker run hello-world
ubuntu を起動させる
なんか ubuntu も起動させることが出来るらしいぞ、ということで ubuntu も起動。
$ docker run -i -t ubuntu /bin/bash
この時点でどうやら、どっかにイメージを作っているらしいことに気が付く。df でみてみると、確かにマウントしている。つまり、Docker は誰かが作った image を mount して Jail みたいにプロセスに割り当てて起動する技術らしい(今も詳細がわかっていないので、あくまで、らしいってことで)
一旦抜けても後から bash を起動できる
$ docker exec -it ubuntu /bin/bash
目的の WordPress を起動
tutum/wordpress というのを使ってみた。もう簡単。
$ docker run -d -p 8080:80 --name=wordpress tutum/wordpress
これで 8080 を 80 へフォワードする。後で調べると、じつはこのコンテナのなかで Linux + Apache + MySQL + PHP (いわゆる LAMP) が動いていることが分かった。調子に乗って、いくつも wordpress 入りのコンテナを作る。イメージがどこにあるのかしらないが、イメージなら、スナップショットが取れるのでは?と調べると commit というコマンドで取れることが分かった。
$ docker stop wordpress $ docker commit wordpress wordpress-snap0
tutum/wordpress は wordpress の旧バージョンが入っている。しかし、パーミッションの設定が悪く、WordPress 内部からアップデートできない。
$ cd /var/www/html $ chown -R www-data:www-data .
てなぐあいにしてやると、うまくいく。あと、ついでに sendmail (WordPress が必要とする) がなかったので、apt-get でいれる。apt-get が古かったようなので update もする。
$ apt-get update $ apt-get install postfix $ service postfix start $ service postfix stop
最初 sendmail を入れたら重かったので、postfix に変更。postfix の設定はしていない。(メールの送信だけだから)。service を stop していて大丈夫のはずだが、、、、stop しても ps でみるとデーモンが動いている。もう、目的主義で、その辺は気にしないことにする。
WordPress の設定
ここから混沌の道に入る。WordPress は簡単な言葉を使っているせいで、いままで Linux のサーバを使っていた人はかえってわからない。そして、うまく apache の裏に隠れてくれない(Proxyね)。
- WordPress アドレス
- サイトアドレス
この用語がわからない。どうやら、複数のコンテキストを管理できるように、WordPress の一般的な cgi とコンテンツ向けの cgi に分かれているようだ。生成される HTML のソースを見るとそう見える。なので、WordPress アドレスはコンテンツに関連なく共通の cgi のための URL。サイトアドレスはコンテンツのための URL。
結局どちらも、普通に同じ URL を設定し、おおもとの Apache で Proxy で転送。
ProxyPass / http://localhost:8080/
かな?ProxyPassReverse は WordPress が勝手にやってくれるから設定しない。WordPress 側は、もともとは http://192.168.0.XXX:8080 みたいになているはずなので、これを http://www.example.com のように(WordPress アドレスもサイトアドレスも)変更。
そしておまじないの
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
を wp-config.php に追加。追加するときは
require_once(ABSPATH . 'wp-settings.php');
より前にする必要があるらしい。WordPress 的には次のコメントの前に書くということになっている。
/* That's all, stop editing! Happy blogging. */
SSL 化
これはちょっとややこしい。が、結局、次のを wp-config.php に足しこむので OK だった。
define('FORCE_SSL_ADMIN', true); $_SERVER['HTTPS']='on';
これを例のコメントの前に設定する。$_SERVER はどうやら apache のサーバの環境変数らしい。PHP の if 文なんかも書けるみたいだから、intra から接続したときは (192.168.0.X からの接続とか) は https を使わずに、、、、みたいな複雑なことも php と apache の rewrite engine で可能、、、、らしいぞ。
危ない処理をする前にはイメージを commit すればよい
Docker 便利!!スナップショット取れるから、やり直しが簡単。あと、WordPress 的には wp-config.php に
define('WP_SITEURL', 'http://192.168.0.XXX:8080/'); define('WP_HOME', 'http://192.168.0.XXX:8080/');
の両方或いは片方。を(例のコメントより前に)書き加えれば DB の設定を使わずに固定で立ち上がるぞ。こまったら、直接たぶん MySQL を書き戻せばいい(やらなかった。Docker で手戻りした。その方が簡単だったので、、、<= いや、今考えるとシェルプロで MySQL を書き戻すようにしたほうがよかった。後々その方が使える)
WordPress おすすめのテーマはこれだ!
標準なら Twenty Ten がお勧めかな。ロゴがはれないのがちょっと残念。インストールするなら Clean Journal が気に入っている。無料版がある。無駄にオシャレになれます。あとプラグインでは bbPress を使うとフォーラムとか作れるみたいだ。
でもって Docker だけど、、、
技術的に全く理解していない Docker。
- Dockerfile なるものを github に登録して、
- Docker hub の ID を取得して
- Docker hub で github の Dockerfile を読み込ませて、
- Docker hub でイメージを作成する
と一般に公開できるらしいぞ。Dockerfile をみるといろいろスクリプトがかいてあるので、debootstrap だっけ?で生成した root image に対して、コマンドを実行して DB つくったり、デーモン立ち上げたりをするみたいだ。実際に使っていないからなんともいえない。