WordPressをdockerで構築してみた
こんにちは、@s_tsukaです。
今回はWordPressをdocker containerとして構築して、Immutableにする話です。
もともとこのblogはとあるサーバ(VPS)上に普通にインストールして動かしていたのですが、サーバ移転することになって、折角だからdockerにしようとしたときの話です。
WordPressをdockerで動かす意味
別に普通に他のサーバ上にWordPressなりPHPなりMySQLなりをインストールして動かしても良いのですが、dockerでやっておけば、いつでもどこでも簡単に移行できるようになります。
とあるVPSだろうが、オンプレ(自宅)のサーバだろうが、Google、Amazonのインスタンス上だろうが、dockerさえインストールされていれば動かすことができます。
WordPressをdockerで構築する為に必要なもの
以下の物をDockerfileで構築する必要があります。結構骨が折れます
- Apache
- PHP
- MySQL
骨が折れますが、実はある程度は楽ができます。公式のImageが既に用意されています・・・!
これを直接動かすか、カスタマイズしたければDockerfileでFROMすればOKです。
直接動かしても良いのですが、pluginなどを入れておかないと話になりません。また、テーマなども場合によっては必要でしょう。という訳でカスタマイズすることにします。
自分用のDockerfileを書く
結論を言うと、以下のようなDockerfileを書けばOKです。(直接書いても動きませんので、適宜変更してください)
FROM wordpress
ENV WORDPRESS_DB_HOST example.com:3306
ENV WORDPRESS_DB_USER root
ENV WORDPRESS_DB_PASSWORD password
ENV WORDPRESS_DB_NAME myblog
# Install tools
RUN apt-get update
RUN apt-get -y --force-yes -o Dpkg::Options::="--force-confdef" install wget curl unzip python python-pip libapache2-mod-php5 php5-mysql php5-curl
RUN pip install awscli
# Install plugins
WORKDIR /tmp/wp-plugins
RUN wget https://downloads.wordpress.org/plugin/svg-support.2.1.7.zip
RUN wget https://downloads.wordpress.org/plugin/crayon-syntax-highlighter.zip
RUN wget https://downloads.wordpress.org/plugin/crazy-bone.0.5.5.zip
RUN wget https://downloads.wordpress.org/plugin/easy-fancybox.1.5.7.zip
RUN wget https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.5.4.2.zip
RUN wget https://downloads.wordpress.org/plugin/google-sitemap-generator.4.0.8.zip
RUN wget https://downloads.wordpress.org/plugin/php-text-widget.zip
RUN wget https://downloads.wordpress.org/plugin/tinymce-advanced.4.1.9.zip
RUN wget https://downloads.wordpress.org/plugin/wp-multibyte-patch.2.3.1.zip
RUN wget https://downloads.wordpress.org/plugin/nephila-clavata.0.2.2.zip
RUN wget https://downloads.wordpress.org/plugin/amazon-web-services.0.2.2.zip
RUN wget https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.0.8.2.zip
RUN wget http://blog.openmedialabo.net/wp_plugin/wp-tmkm-amazon1.5.2.zip
RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/plugins
# Install themes
WORKDIR /tmp/themes
RUN wget https://s3-ap-northeast-1.amazonaws.com/tsukaby.techblog/stinger5ver20150505b.zip
RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/themes
# Download lang files
WORKDIR /usr/src/wordpress/wp-content/
RUN wget https://s3-ap-northeast-1.amazonaws.com/tsukaby.techblog/languages.zip
RUN unzip languages.zip && rm languages.zip
# Change owner
RUN chown -R www-data:www-data /usr/src/wordpress/wp-content
WORKDIR /var/www/html
まず始めにWORDPRESS_DB_HOSTなどの変数設定を行います。外部から与えても良いですが、今回は内部で直接指定することにしました。これらはwordpress imageが必要としています。詳細はDockerhubのwordpress imageのドキュメントを見ると良いと思います。
wordpress imageはUbuntuだかDebianだかで構築されているので、aptで色々入れています。ここも適宜変更してください。
Install pluginの部分ではプラグインを公式からDLして、解凍しています。基本これだけです。足したり引いたり適宜変更してください。
その次にテーマと言語ファイルを入れています。これらは使わない人は消しても良いです。自分は現在はstingerというテーマを利用させてもらっていますので、このようにインストールしています。
最後に色々とwp-content以下にファイルを追加したりしたので、所有者を変更してApacheが読めるようにしてやります。WORKDIRをwordpress imageが想定している場所である/var/www/htmlに戻してあげれば完了です。
この状態でdocker runすれば、指定したMySQLに接続に行きますし、WordPress自体もちゃんと動きますし、blogを見られるようになります。
注意点(ここはImmutableじゃない)
実は上記の設定だけではまだ不完全です。
WordPressは投稿データや設定データはMySQLに持っていますが、以下はサーバ内部に持っています。
- プラグインファイル
- テーマファイル
- 言語ファイル
- wp_configなどの追加の設定ファイル
- アップロードした画像
なので、プラグインやテーマをWordPress管理画面上で追加しても使えはしますが、dockerを再起動したら消えてしまいます。追加したプラグインやテーマはちゃんとDockerfileに書いておきましょう。
wp_configもそうです。もし現在稼働させているWordPressでwp_configに追加設定をしている場合はちゃんとDockerfileを変えておきましょう。一度稼働させたWordPressでも同様です。wp_configはまあまあ変更する場合もあるかと思いますので、注意が必要です。
最後に最も重要なのが画像です。メディア機能でアップロードしたファイルはwp-content/uploads以下に保存されます。ですが、これはdockerを再起動したら当然消えます。なので、これについては画像をS3に保存して永続化するなどの対策が必要です。画像の扱いについては以下にまとめていますので、併せてみて頂くと良いかと思います。
WordPressの画像ファイルをS3に保存する(メディア機能連携)
まとめ
- WordPressをdockerで構築する方法やDockerfileを解説しました
- WordPressをdockerで構築するときの注意点を解説しました
実は画像周りとか色々あって1ヶ月くらいかかりました・・・苦労した・・・
宜しければ参考にしてくださいー