【WordPress/Docker】開発環境を構築
前提
Dockerの環境構築が終わっていること。
コンテナ名やパスワード等は適宣、置き換えてください。
環境
- Windows 10 Pro
- Docker v4.12.0
- WordPress v6.1
- PHP v7.4
- apache
- MySQL v8.0.18
ディレクトリ構造
wordpress-blog
├─docker
│ ├─mysql
│ │ ├─costom.cnf
│ │ ├─Dockerfile
│ └─wordpress
│ ├─Dockerfile
│ └─.env
│ └─docker-compose.yml
└─web
準備
version: "3.8"
services:
wordpress_web:
build:
context: ../
dockerfile: ./docker/wordpress/Dockerfile
image: wordpress_web
container_name: wordpress_web
ports:
- "8080:80"
- "443:443"
volumes:
- ../web:/var/www/html
links:
- wordpress_db
wordpress_db:
build:
context: ../
dockerfile: ./docker/mysql/Dockerfile
image: wordpress_db
container_name: wordpress_db
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: useruser
MYSQL_PASSWORD: passpass
ports:
- "3306:3306"
volumes:
- ../docker/mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf
- wordpress_db_data:/var/lib/mysql
volumes:
wordpress_db_data:
COMPOSE_PROJECT_NAME=wordpress
# syntax=docker/dockerfile:1
FROM php:7.4-apache
RUN apt-get update
RUN apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev zip libicu-dev
RUN docker-php-ext-install pdo pdo_mysql mysqli iconv gd
# syntax=docker/dockerfile:1
FROM mysql:8.0.18
# When your application needs to interact with UTF-8.
ENV LANG C.UTF-8
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
max_allowed_packet=32M
[client]
default-character-set=utf8mb4
WordPressのインストール
wordpress ダウンロードページ
ダウンロードしたWordPressのzipファイルを解凍し、「Web」ディレクトリにコピーしておく。
コピー後のディレクトリ構造は以下のようになっています。
wordpress-blog
├─docker
│ ├─mysql
│ │ ├─costom.cnf
│ │ ├─Dockerfile
│ └─wordpress
│ ├─Dockerfile
└─web
├─wp-admin
├─wp-content
├─wp-include
省略
Docker 立ち上げ
powershellなどで、wordpress-blog/dockerのディレクトリにcdコマンドで移動し、下記コマンドを実行。
docker compose up --build
Dockerのビルドが終わったら、
にブラウザにアクセスすると、WordPressのセットアップの画面になります。
docker-compose.ymlで設定したものを入れましょう。
情報に間違いなければ次の画面へ進みますので、インストールを実行します。
WordPressのログイン画面の設定になります。
好きなものでいいですが、ログインに必要になりますので、忘れずにメモしておきましょう。
先程、設定したログイン情報でログインすると無事にWordPressの管理画面になりました。
よく使うコマンド
コマンド | 内容 |
---|---|
docker-compose up | コンテナを作成して、起動します。オプションで-dをつけることでバックグラウンドで実行することができます。 |
docker-compose start | サービスを開始します。これは既にコンテナがある状態でなければなりません。 |
docker-compose stop | サービスを停止します。 |
docker-compose build | サービス(wordpress_web,wordpress_db)のビルドを実行します。 |
docker ps | コンテナの一覧を表示します. |
docker exec -it コンテナ名 sh | コンテナへ入る。 |
docker ps でコンテナ名 | (Namesのとこ)調べることができる。 |
mysql -u root -p | mysqlにrootで接続。 |
※パスワードは、docker-compose.ymlの「MYSQL_ROOT_PASSWORD: rootpass」のところ。
プラグインをインストールする時にFTP情報を求められる場合の対処法
Dockerで構築した後、プラグインなどをインストールしようとすると、FTPの情報を求められることがあります。
対処法
wp-config.php のファイルに、
define('FS_METHOD','direct');
を追記します。(私は一番下に追記しました)
画面を更新して、再度チャレンジしてみると無事プラグインをインストールできました。
すでにあるWordPressの環境を作りたいなら「All-in-One WP Migration」のプラグインがおすすめ
※SiteGurdのプラグインをインストールしている場合は、無効化しておいた方がいいです。
コピー元のWordPressに「All-in-One WP Migration」のプラグインをインストールし、データをエクスポート。開発環境のWordPressにも、「All-in-One WP Migration」を使ってデータをインポートする。
作業は、プラグインをインストールして、有効化していれば、管理画面の左ツールバーに出ています。
「サイトの最大アップロードサイズを超過しています: 2 MB」 が出たときの対処法
web/.htaccess のファイルを編集します。
end wordpressの下に追記しました。
# END WordPress
php_value memory_limit 30G
php_value post_max_size 20G
php_value upload_max_filesize 10G
画面を更新し、再度アップロードを試していると無事に成功しました。
SiteGurdのプラグインでエラーが出てログインできなくなった場合の対処法
SiteGurdでエラーが出てログインできません。
データベースから無効化するのは、大変そうなので、
wp-content/plugins/sitegurd
のディレクトリ名を適当に変更してあげます。
ログイン画面を更新すると無事にログインすることができました。
パーマリンクを変更すると、404エラーでページが表示されないときの対処法
固定ページを自分で決めたURLにしたく、パーマリンクの設定を変えました。
すると、うまくページが表示されなくなってしまいました。。。
.htaccess
apache2.conf
の順で確認していきます。
.htaccessを見てみると、
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
こちらはきちんと設定が反映されています。(ここに何も記載されていなかったら権限が原因?)
条件が 「RewriteEngine On」の時に~となっているので、こちらがOFFになっているなどの原因がありそうです。
apache.confのAllowOverrideを変更
Dockerのコンテナの中に入りコマンドを入力していきます。
私の環境のコンテナ名はwordpress_webでした。
docker exec -it wordpress_web sh
rewriteのモジュールがちゃんとあるか確認。
ls -l /usr/lib/apache2/modules/mod_rewrite.so
-rw-r--r-- 1 root root 67624 Apr 3 22:22
/usr/lib/apache2/modules/mod_rewrite.so
apache2.confの編集。ファイルの場所は、/etc/apache2/apache2.conf
変更前
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
変更後
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
apacheの再起動
service apache2 restart
ここまで設定しても、まだエラーが解消されません。
調べてみると、httpdのファイルを編集する記事が多くでてくるのですが、私の環境だとhttpdファイルが見当たりません。
どうやら、Devian系かRedHat系で変わるようです。
/etc/debian_versionとあるので、私の環境はDevian系でした。
コマンドでモジュールを有効化します。
# a2enmod を実行
a2enmod
>>Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi
authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex brotli buffer cache cache_disk cache_socache cern_meta cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor http2 ident imagemap include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro md mime mime_magic mpm_event mpm_prefork mpm_worker negotiation php7 proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_hcheck proxy_html proxy_http proxy_http2 proxy_scgi proxy_uwsgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_redis socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc
Which module(s) do you want to enable (wildcards ok)?
a2enmodコマンドを打つと、色々出てきました。
どれを有効化したいんだい?っと聞いてきているので、rewriteを入力します。
apache2を再起動します。
service apache2 restart
少しタイムラグありましたが、無事にパーマリンクの設定ができました。
参考
図解! Dockerのツボとコツがゼッタイにわかる本
Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド
Discussion