カテゴリー
Linux

【WordPress】root ユーザで WP-CLI を使ってインストール・セットアップしたい時のポイント

Vagrant のプロビジョニング時に WordPress をインストールしたいですの。

プロビジョニングは基本的に root ユーザで実行されます。

コマンドラインから WordPress を扱える WP-CLI が、この影響を受けてエラーとなってしまいました><。

いくつかの失敗を経て root ユーザでも WP-CLI を扱えるようになりましたの!

今回は root ユーザでの WP-CLI コマンドと、失敗事例をノートいたします。

環境

  • CentOS 7
  • WP-CLI version: 0.23.1

まとめ。root ユーザで wp-cli で WordPress をインストールする手順

  • sudo -u USER -i -- wp <command> を使い、root 以外のユーザとして実行する必要がある。
  • sudo で 実行ユーザを指定する場合、/usr/local/bin/wp とフルパスで実行する。
  • sudo で 実行ユーザを指定する場合、インストールするディレクトリには一旦 wp を実行するユーザに権限を与える。インストール後に適切な権限を再度設定する。
  • sudo で 実行ユーザを指定する場合、–path オプションで WordPress の場所を指定する。
# WordPress インストール
# wp-cli インストール
cd ~
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# wp コマンドで使用可能にする(実行権限付与とパスを通す)
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

# 今後は php wp-cli.phar と実行しなくとも wp で実行可能だが、
# sudo による別ユーザでの実行では使用できなかったため、フルパスで実行する。

# `sudo -u USER -i -- wp <command>` での実行ユーザに権限を与える。
chown -R vagrant:vagrant /var/www/html/

# WordPress ダウンロード
sudo -u vagrant -i -- /usr/local/bin/wp core download --locale=ja --path=/var/www/html
# wp-config.php のセットアップ
sudo -u vagrant -i -- /usr/local/bin/wp core config --dbname=wpdb --dbuser=wpuser --dbpass=wppass --locale=ja --path=/var/www/html --extra-php <<PHP
define('WP_POST_REVISIONS', 3);
PHP
# WordPress 初期設定
sudo -u vagrant -i -- /usr/local/bin/wp core install --url=http://192.168.56.11/ --title=test --admin_user=wploginuser --admin_password=wploginpass  --admin_email=test@example.com --path=/var/www/html
# 所有者、所有グループをウェブサーバ実行ユーザに設定し、プラグインをインストールできるようにする。
chown -R nginx:nginx /var/www/html/
# WordPress 設定したもの確認
sudo -u vagrant -i -- /usr/local/bin/wp user list --path=/var/www/html
sudo -u vagrant -i -- /usr/local/bin/wp option get siteurl --path=/var/www/html
sudo -u vagrant -i -- /usr/local/bin/wp option get blogname --path=/var/www/html

失敗その1. root ユーザでインストールしようとすると警告、停止

# wp --info
Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.

If you REALLY mean to run this as root, we won't stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.

If you'd like to continue as root, please run this again, adding this flag:  --allow-root

If you'd like to run it as the user that this site is under, you can run the following to become the respective user:

    sudo -u USER -i -- wp <command>

エラーメッセージの通り、sudo -u USER -i -- wp <command> で実行してみたところ、次のようなエラーとなりました><。

失敗その2. sudo のユーザ指定で wp-cli を使おうとするとコマンドが見つからないエラー

# sudo -u vagrant -i -- wp --info
-bash: wp: コマンドが見つかりません

これは、wp-cli のフルパスを指定することで実行することができました♪

# sudo -u vagrant -i -- /usr/local/bin/wp --info
PHP binary:	/usr/bin/php
PHP version:	7.0.8
php.ini used:	/etc/php.ini
WP-CLI root dir:	phar://wp-cli.phar
WP-CLI packages dir:	/home/vagrant/.wp-cli/packages/
WP-CLI global config:
WP-CLI project config:
WP-CLI version:	0.23.1

失敗その3. sudo のユーザ指定でインストールしようとすると、ユーザのホームディレクトリがデフォルトのパスとして指定されてしまう。

通常、たとえば cd /var/www/html/ などディレクトリ移動し、そこで wp-cli を実行してダウンロードやインストールを行います。

ところが、sudo -u USER -i -- wp <command> で実行する場合は、カレントディレクトリではなく USER のホームディレクトリがダウンロードやインストールの実行場所となってしまいました><。

# sudo -u vagrant -i -- /usr/local/bin/wp core download --locale=ja
Downloading WordPress 4.5.3 (ja)...
md5 hash verified: dfbe4102868c5f65f151c74d26a51354
Success: WordPress downloaded.
# sudo -u vagrant -i -- /usr/local/bin/wp core config --dbname=wpdb --dbuser=wpuser --dbpass=wppass --locale=ja --extra-php &lt;&lt;PHP
> define('WP_POST_REVISIONS', 3);
> PHP
Success: Generated wp-config.php file.
sudo -u vagrant -i -- /usr/local/bin/wp core install --url=http://192.168.56.11/ --title=test --admin_user=wploginuser --admin_password=wploginpass  --admin_email=test@example.com
Success: WordPress installed successfully.
# ll
合計 0
# pwd
/var/www/html
# find / -name &quot;wp-*&quot;
/home/vagrant/wp-mail.php
... 略 ...

これを解決するには、ダウンロード時に –path オプションを付ければよいそうですの♪

失敗その4. WordPress が存在しないディレクトリでインストールなどを実行しようとしているとエラー

思い通りの場所にダウンロードできましたのでその後は –path を付けずに進めようとしましたら、ダメでしたの><。

# sudo -u vagrant -i -- /usr/local/bin/wp core download --locale=ja --path=/var/www/html
Downloading WordPress 4.5.3 (ja)...
Using cached file '/home/vagrant/.wp-cli/cache/core/wordpress-4.5.3-ja.tar.gz'...
Success: WordPress downloaded.
# sudo -u vagrant -i -- /usr/local/bin/wp core config --dbname=wpdb --dbuser=wpuser --dbpass=wppass --locale=ja --extra-php &lt;&lt;PHP
> define('WP_POST_REVISIONS', 3);
> PHP
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.

すべてのコマンドに –path オプション付けましたら回避できました。コマンドが長くなってしまいましたの。。。

# sudo -u vagrant -i -- /usr/local/bin/wp user list --path=/var/www/html
+----+-------------+--------------+------------------+---------------------+---------------+
| ID | user_login  | display_name | user_email       | user_registered     | roles         |
+----+-------------+--------------+------------------+---------------------+---------------+
| 1  | wploginuser | wploginuser  | test@example.com | 2016-07-05 20:59:31 | administrator |
+----+-------------+--------------+------------------+---------------------+---------------+
# sudo -u vagrant -i -- /usr/local/bin/wp option get siteurl --path=/var/www/html
http://192.168.56.11
# sudo -u vagrant -i -- /usr/local/bin/wp option get blogname --path=/var/www/html
test
# sudo -u vagrant -i -- /usr/local/bin/wp option get admin_email --path=/var/www/html
test@example.com

おわりに

WP-CLI の扱いに難儀いたしましたけれども、これは Linux の扱いに習熟していないゆえ、と感じましたわ。

まだまだ勉強が足りませんの♪

以上です。

コメントを残す