タイトルの通り、実際にWordPress環境をDocker上に構築した際の作業手順を解説します。
前提条件
- OS:Debian 10 Buster
- ハードウェア:VPS -> さくらのVPS 1Gプラン(石狩)
- インターネット接続設定済み(IPv4/IPv6デュアルスタック)
- ufw等によるポート開放/閉鎖設定済み
- SSH公開鍵認証設定済み
- 殆どは「偉大なる先駆者達」の後追い
Dockerインストール
以下のページを参考にインストール
www.codeflow.site
ついでにdocker-composeもインストール
www.server-world.info
WordPress環境構築
以下のページを参考にコンテナ作成
qiita.com
HTTPS対応
以下のページを参考にコンテナ作成(docker-compose.ymlの内容から読み取らないといけない点に注意)
qiita.com
WordPress初期設定
“Two Factor”と”Wordfence Security”をそれぞれインストール
easy-wordpress.work
tcd-theme.com
Wordfence securityについてはリンク先の比較を見る限り無料版でいいかな…どうせ個人ブログだし、何ならサクッと消し飛ばして再構築できるし…
あと2段階認証の設定も忘れずに(以下ページの「FIDO ユニバーサルセカンドファクター(U2F)」参照)
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