以前の記事の続き。
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