とーますメモ

Ruby on Rails / Goなどの学習メモ

【WordPress】Wordmoveで、ローカルのDocker環境をProductionのDocker環境へpushする

以前の記事の続き。
thoames.hatenadiary.jp

以下がプロダクション環境のdocker-compose.ymlの設定。
本当は細かく各ミドルウェアのバージョンを指定したほうが良いが
今回は省略。

またこの記事ではWordMoveのmovefile.ymlの説明も省略する。

version: "3"
services:

  #################################
  #           WordPress           #
  #################################

  wordpress:
    image: wordpress:latest
    container_name: wordpress

    links:
      - dbms:mysql
    ports:
      - 8080:80
    restart: always
    env_file: .env
    volumes:
      - ./wordpress:/var/www/html



  #################################
  #              MySQL            #
  #################################

  dbms:
    image: mariadb
    ports:
      - 4306:3306
    container_name: mysql
    restart: always
    env_file: .env
    volumes:
      - ./mysql:/var/lib/mysql



  #################################
  #           PHPMyAdmin          #
  #################################

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    env_file: .env
    links:
      - dbms
    ports:
      - 8090:80
    volumes:
      - ./phpmyadmin:/sessions

ポイントとしてはMySQLのポートをデフォルトの3306番を使用するのでハンク
4306番(任意)を使用しているところ。

この設定で、movefile.ymlの存在するディレクトリ上で「wordmove push -e production --all」すると
データベースのpush以外は同期でき、データベースのエラーとして

mysqldump: command not found (Wordmove::ShellCommandError)

と表示される。

原因としては、エラーそのままだが、Docker元のサーバにmysql-clientが存在しないため発生している。
本来はmysqlコンテナ内のmysqldumpコマンドを叩くべきだが、WordmoveではDocker元のサーバでmysqldumpコマンドを
叩いているため上記のエラーがでる。

aliasコマンドなどを使用して

alias mysqldump='docker exec CONTAINER /usr/bin/mysqldump'

のようにすれば、mysqlコンテナ内のmysqldumpを叩くことも可能だが、
そうすると、もしdocker-compose.yml内のvolumnsのパスと、movefile.ymlのwordpress_pathが違う場合
ディレクトリが見つからないというエラーがでる。

自分の場合は、あまりやりたくなかったが、Docker元サーバにもmysqldumpをするためだけの
mysql-clientをインストールした。

$ apt install mysql-client

自分の場合は、これで「wordmove push -e production -d」も通った。

Production Docker内での設定について

Production内のDocker環境内で、プラグインを更新するためには以下の設定が必要。

FTPを経由せずプラグインを更新するために必要

wp-config.php

define('FS_METHOD', 'direct');

by WordPress FTPなしでプラグインダウンロードできる設定 - Qiita

パーミッションの設定

plugins以下を

$ chown -R www-data:www-data /path/to/site

[参考]
Wordmove not friendly with dockerized production environments · Issue #421 · welaika/wordmove · GitHub