【実録】Dockerを使ったWordPress環境構築

タイトルの通り、実際にWordPress環境をDocker上に構築した際の作業手順を解説します。

前提条件

  • OS:Debian 10 Buster
  • ハードウェア:VPS -> さくらのVPS 1Gプラン(石狩)
  • インターネット接続設定済み(IPv4/IPv6デュアルスタック)
  • ufw等によるポート開放/閉鎖設定済み
  • SSH公開鍵認証設定済み
  • 殆どは「偉大なる先駆者達」の後追い

Dockerインストール

以下のページを参考にインストール

Debian 10にDockerをインストールして使用する方法

www.codeflow.site

ついでにdocker-composeもインストール

Docker : Docker Compose を利用する

www.server-world.info

WordPress環境構築

以下のページを参考にコンテナ作成

今更だけどDockerでWordPress環境を用意してみたら超簡単だった

qiita.com

HTTPS対応

以下のページを参考にコンテナ作成(docker-compose.ymlの内容から読み取らないといけない点に注意)

https-portalで簡単https対応!

qiita.com

WordPress初期設定

“Two Factor”と”Wordfence Security”をそれぞれインストール

初心者が扱いやすいセキュリティープラグイン『Wordfence』の設定方法

easy-wordpress.work

ログイン時に二要素認証が設定できるWordPressプラグイン「Two-Factor」

tcd-theme.com

Wordfence securityについてはリンク先の比較を見る限り無料版でいいかな…どうせ個人ブログだし、何ならサクッと消し飛ばして再構築できるし…

あと2段階認証の設定も忘れずに(以下ページの「FIDO ユニバーサルセカンドファクター(U2F)」参照)

5分でできる!WordPress への2段階認証の導入方法

blog.apar.jp

全てをdocker-compose.ymlにまとめる

ここが肝と言っても過言ではない…(厳密には”コンテナ仮想化の肝”)

「めんどくさいから全部消し飛ばして再構築」とか、「これがウケたから特化ブログを作りたい」とか、「プログラミングスキルを獲得するために1からコードを書きたい」とか、そういうことを思い立ったときにコンテナ技術にて仮想化していることが大きな意味を持つのです…

雑に言うなら、「必要最小限の範囲のみscrap and buildできる」と表現できます。

「新しく特化ブログを立ち上げたい」となればymlにてnginxをきちんとリバースプロキシとして再定義後、新しいwebフロントを定義してdocker-compose up -dすれば下準備完了だし、「いやーVPS業者がサービス終了を予定しちゃって…」となればDBバックアップとymlファイルをリモートリポジトリにpushしとけばいつでも総とっかえしてOKだし、「試しに別のDBを使ってみたい」となればcsvか何かでDBバックアップ後、ymlのDB定義を書き換えてrun、バックアップファイルをインポートすれば「データはそのままDBMSだけ差し替え」が1台のマシンの中で完結します。(csvバックアップが適切か否かは移行先DBMSに依る)

メリットの能書きはこの辺りにして、具体的なymlはこんな感じになります。(ベースのymlはHTTPS対応時に参照したもの)

### 同色マーキング箇所は参照関係を表す ###
version: '3.8'
services:
  db:
    image: mysql:5.7.21
    container_name: ${db_container_name}
    volumes:
      - ./db_data:${any_directory1}
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${db_root_password}
      MYSQL_DATABASE: ${db_db_name}
      MYSQL_USER: ${db_user_name}
      MYSQL_PASSWORD: ${db_user_password}
  webapp:
    image: wordpress:latest
    container_name: wordpress
    volumes:
      - ./wp-content:${any_directory2}
    depends_on:
      - db
    restart: always
    links:
      - db
    ports:
      - 8080:8080
    environment:
      WORDPRESS_DB_HOST: db:3306   # mysqlのデフォルトポートは3306
      WORDPRESS_DB_USER: ${db_user_name}
      WORDPRESS_DB_PASSWORD: ${db_user_password}
      WORDPRESS_DB_NAME: ${db_db_name}
  https-portal:
    image: steveltn/https-portal:1
    container_name: https-portal
    volumes:
      - ./certs:${any_directory3}
    restart: always
    links:
      - webapp
    ports:
      - '80:80'
      - '443:443'
    depends_on:
      - webapp
    environment:
      DOMAINS: 'www.point-q-motion.com -> http://webapp'
      STAGE: 'production'         # 実際にLet's Encryptを有効化するためproduction指定
      CLIENT_MAX_BODY_SIZE: 20M   # WordPressテーマのアップロード等にデフォルトの1Mだと困るので変更

まとめ

という感じで、極小さなサービスで必要となるインフラは検索すれば構築できます。これは実務においても同様なので、実務で迷ったら取り敢えず調査するといいと思います。(それでもダメな場合?トライ&エラーあるのみ…)

あと、検索すればそれで解決するということはつまり、サーバ利用料、ドメイン取得料以外は大体無料なのです。ビジネスを始める際のアドバイスとして「小さく、素早く始めよう」と著名人が口を揃えて言うのにはワケがあるのです。

  • 小さく始めることで、初期投資額を大幅に抑えることができる。
  • 素早く始めることで、「どこは無料で問題なくて、どこはコストをかければ解決して、どこは専門家でないとだめなのか?」がはっきりとわかるようになる。

まあ私も他人に言えた義理ではないですが、「やってみたい!」と思ったのならサクッと初めて見るのがいい結果を生みやすいのではないでしょうか。

Comments

タイトルとURLをコピーしました