ブログをDockerでSSL化

blog

長らく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

この記事を書いた人

PHPが好物な個人開発プログラマ。フリーランスエンジニアとしてWebサービス作ったりしてます。15年の経験を生かしてMENTAでメンターもやってます。WordPressやPHPでお困りのことがあればご相談に乗りますのでDMください。

Follow on SNS
blogDocker
SOHO MIND

Comments

  1. […] Dockerの「jwilder/nginx-proxy」で簡単にSSL化できてしまうというエントリを前回書いたのだけれど,今回はIPv6でもアクセスできるようにしてみたのでやったことのメモ。 […]