はい、はるうさぎです。
今回はお仕事でWordPress案件をいただいて、詰まったことがあったのでメモ書きです。
普段からWordPressを触っている人はご存知だと思う内容かと思います。
前提
- dockerでWordPress環境を構築する
- その環境下でテーマ作成
今回詰まったところ
- dockerでWordPress環境を構築したら、WordPressで画像をアップロードできない
- そもそもコンテナが立ち上がらない
順番に見ていきます。
まずディレクトリ構造
wp-template
├── docker-compose.yml
├── wp-config.php
└── wp-content
├── index.php
├── languages
├── plugins
├── themes
├── upgrade
└── uploads
最悪、docker-compose.yml
とwp-content
フォルダがあれば動きます。
wp-content
の中身はdocker-compose up
すれば自動的に初期のものが構成されます。
wp-config.php
はWordPressには必須ファイルです。インストール時に自動生成してくれる?みたいなのですが、私の場合してくれなかったので公式wp-config.phpを参考に変更しました。
version: "3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress #任意
MYSQL_DATABASE: wordpress #任意
MYSQL_USER: wordpress #任意
MYSQL_PASSWORD: wordpress #任意
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress #任意
WORDPRESS_DB_PASSWORD: wordpress #任意
volumes:
- ./wp-content:/var/www/html/wp-content
- ./wp-config.php:/var/www/html/wp-config.php
volumes:
db_data:
DB関連は.envで管理した方が楽だと書きながら思いました。
これでhttp://localhost:8000/にアクセスするとWordPressの見慣れた画面が出てきます。
ここまでが普通にできること。
dockerでWordPress環境を構築したら、WordPressで画像をアップロードできない
WordPressで投稿を行う為に画像をアップロードしようと思ったらできない!
調べてみると、wp-config.php
にある一文を追記しないといけないみたいです。
define('DB_NAME', 'wordpress'); #docker-compose.ymlで設定したもの
define('DB_USER', 'wordpress'); #docker-compose.ymlで設定したもの
define('DB_PASSWORD', 'wordpress'); #docker-compose.ymlで設定したもの
define('DB_HOST', 'db'); #docker-compose.ymlで定義したmysqlコンテナ名
define('WP_DEBUG', true);
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
define('UPLOADS', 'wp-content/uploads' ); #これを追記
$table_prefix = 'wp_';
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
これが最終形態なコード。
以下を追記する必要があったコード。
define('UPLOADS', 'wp-content/uploads' );
そもそもコンテナが立ち上がらない
sed: cannot rename ./xxxxx Device or resource busy
と表示されてコンテナが立ち上がらない。
調べると以下の記事が出てきた。これで解決。先人の知恵は素晴らしい。
https://qiita.com/suzukihi724/items/e56fa9516639c6c90a33
おわりに
学生の頃からWordPressを触っていましたが、MAMP環境だったので難しいことはありませんでした。
今回はdockerで環境構築だったので、WordPressの奥深いところを理解できたのではないか、そう思いました。
普段から触っている方には普通の内容だったかと思います。。。