長らくCentOS6上で運営してきたWordpressブログ,PHPのバージョンが古くてアップデートしようにもできなかった。今回仕事でDockerを使いはじめて便利さにいたく感動したので自分のブログもDockerで動かすことに。ついでにSSL化もサクッと。
SSL化か~証明書とかいろいろ面倒なんでしょ?と,僕も以前は思っていてこれまで自分のサイトをSSL化していなかったのだけど,今回Dockerを使うことで超簡単にSSL化できることを知ってこれを備忘録として記す。
必要なもの
これだけあれば,Docker上で動いているコンテナのサービスにアクセスするリバースプロキシの構築と,サイトのSSL化が可能。しかもマルチドメイン,サブドメイン化したい場合もVIRTUAL_HOST
環境変数でドメインを指定するだけでいくらでもコンテナ増やすだけで追加可能。面倒なこと一切なく証明書の取得,更新などすべてやってくれる。マジか!?便利すぎて不安になるレベル。
WordPressも当然公式イメージを引っ張ってくる。MySQLと連動させるためにDocker-compose.ymlをちょちょっと書いて(これもネットに転がっているサンプルをコピペするだけ)あとはネットワークを作成し,そこに参加させる設定を書き加えればもうHTTPSでアクセスできるWordpressがそこに登場する。
もちろん今までのデータは移行する必要があるので,wp-contentディレクトリをSFTPでダウンロードしておいて,volumesでマウントさせておいたディレクトリにアップロード,データベースはphpMyAdminでバックアップと復元で元通り。データベースのテーブル名が変わってしまったのでSQL文は若干手直しが必要だったもののデータベース構造は変わっていなかったので記事やカテゴリ関係のテーブルを削除してからデータを追加でOK。
これを機にURLをwww.shipweb.jp/blogからblog.shipweb.jpとサブドメインでの運用にすることにした。となるとこれまでのURLへ来たアクセスを新しいURLへリダイレクトさせる必要が出てくる。これもngixでもう一つサーバーを立てて,blog以下へのアクセスはクエリストリングをつけて新しいURLへリダイレクト,それ以外はそのままファイルを表示するようにさせた。
/etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name www.shipweb.jp;
rewrite ^/blog(.*)$ https://blog.shipweb.jp$1 permanent;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
最初locationブロックを入れておらず,リダイレクトはされるもののそれ以外の部分にアクセスできない現象に引っかかった。デフォルトのほうの設定には入っていたのでそれをコピーしてくればよかったのだけどDockerだと中に入ってファイルをとってくるのがやりにくいのでついつい横着して一からコピペするだけで済ませようとしてしまうので失敗する。
参考URL
Comments
[…] Dockerの「jwilder/nginx-proxy」で簡単にSSL化できてしまうというエントリを前回書いたのだけれど,今回はIPv6でもアクセスできるようにしてみたのでやったことのメモ。 […]