LoginSignup
3
0

More than 3 years have passed since last update.

[Docker+WordPress+MySQL]で画像投稿できるようにする

Last updated at Posted at 2020-09-27

はい、はるうさぎです。
今回はお仕事で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.ymlwp-contentフォルダがあれば動きます。
wp-contentの中身はdocker-compose upすれば自動的に初期のものが構成されます。
wp-config.phpはWordPressには必須ファイルです。インストール時に自動生成してくれる?みたいなのですが、私の場合してくれなかったので公式wp-config.phpを参考に変更しました。

docker-compose.yml
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にある一文を追記しないといけないみたいです。

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の奥深いところを理解できたのではないか、そう思いました。
普段から触っている方には普通の内容だったかと思います。。。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0