最初に
このやり方はいかに現代のweb技術を使ってwebで作成•デプロイまで行けるかを考えて作成しました。
Wordpressを使い慣れている方はローカルで作成してFTPで本番にあげてしまうのがめっちゃ簡単、
自分にとって現代webとは
- Git, Github等のバージョン管理ツール
- Docker等のコンテナツール
- VPSを使ってデプロイ
...etc
いろいろありますが、最低限この3つは使いたいなぁと思っています。
環境設定
カレントディレクトリに作成
docker-compose.yml
version: "3.7"
services:
wordpress:
image: wordpress:latest
container_name: wordpress
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
WORDPRESS_DB_USER: '${DB_USER}' # WordPress用データベース接続ユーザ名(dbの内容に合わせる)
WORDPRESS_DB_PASSWORD: '${DB_PASSWORD}' # WordPress用データベース接続パスワード(dbの内容に合わせる)
WORDPRESS_DB_NAME: '${DB_NAME}' # WordPress用データベース名(dbの内容に合わせる)
volumes:
- ./html:/var/www/html
networks:
- myappnet
db:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' # rootユーザのパスワード
MYSQL_DATABASE: '${DB_NAME}' # WordPress用データベース名
MYSQL_USER: '${DB_USER}' # WordPress用データベース接続ユーザ名
MYSQL_PASSWORD: '${DB_PASSWORD}' # WordPress用データベース接続パスワード
volumes:
- db_data:/var/lib/mysql
networks:
- myappnet
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: phpmyadmin_ingrid
depends_on:
- db
volumes:
- ./phpmyadmin/phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
networks:
- myappnet
volumes:
wordpress:
db_data:
networks:
myappnet:
driver: bridge
ビルドコマンド
docker-compose build
docker-compose up -d
htmlのファイルが生成されるので、そのファイル内のhtmlを修正して開発していくイメージです
気をつけること
1.wordpressのdocker imageが癖ありすぎる
dockerhubのimage説明です。
引用
静的イメージ / 再デプロイによる更新
このイメージのデフォルト設定は、自動更新が有効になっている公式の WordPress デフォルトと一致します (したがって、最初のインストールはイメージから行われますが、その後は/var/www/html/データ ボリューム内で自己管理されるようになります)。
となっていいてボリューム内で自己完結してしまいます。
つまり、ボリュームを使って環境を構築しているので、場合によっては過去のボリュームを使ってdbの接続などが失敗してしまいます。
なので以下のコマンドを使います
docker-compose stop
docker-compose build --no-cache
キャッシュを使うと
Error Establishing a Database Connection
このようなエラーが出てしまいます。
テーマやプラグインを使う場合はimageの説明にも書いてある通り追加でDockerflieを読み込ませる必要があったります。
2.wordpress ssl設定するにはリバースプロキシかまさないといけない🥺
docker-imageのwordpressにはApacheがすでに入っていて、それを使ってssl設定を行うことはできないです。
ですのでリバースプロキシでnginxをかましてnginxでSSLを設定する必要があります。
参考サイト
https://wa3.i-3-i.info/word1755.html
version: "3.7"
services:
proxy:
image: jwilder/nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes:
- ./data/docker-compose.d/certs:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
networks:
- myappnet
letsencrypt-proxy:
image: jrcs/letsencrypt-nginx-proxy-companion
privileged: true
volumes:
- ./data/docker-compose.d/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- proxy
wordpress:
restart: always
environment:
WORDPRESS_DEBUG: 0 # デバッグモードOFF
VIRTUAL_HOST: "example.com"
VIRTUAL_PORT: 80
LETSENCRYPT_HOST: "example.com"
LETSENCRYPT_EMAIL: '${OWNER_EMAIL_ADDRESS}'
networks:
- myappnet
- テーマを使わない
テーマ内の修正はDBで管理しているので、バージョン管理ツールで追えないので。ローカルと本番環境にDBごと移さないと変更が反映されず運用しにくいです。
まとめ
gitやdockerを使ってデプロイ自体はできますが、現状はFTPでデプロイした方が楽です。
また一から作れるのであれば極力テーマは使わない方がいいです。