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 <<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 "wp-*" /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 <<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 の扱いに習熟していないゆえ、と感じましたわ。
まだまだ勉強が足りませんの♪
以上です。