以前の記事の続き。
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');
パーミッションの設定
plugins以下を
$ chown -R www-data:www-data /path/to/site