ブログ

CPIサーバーにWP-CLIでWordPressを楽にインストール

弊社の開発でよく使うサーバー CPIサーバー(シェアードプラン)にWP-CLIでWordpressを楽に入れたいぞ、というお話です。

WP-CLIに関してはこちらの記事こちらの記事も参照してください。

なお、先にお伝えしておくと、正解は概ねこちらのサイトに書いてあります。
第2回 wp-cli を利用する – CPIエバンジェリストコラム

前提

CPIサーバー(シェアードプラン)

  • 共用サーバー
  • phpコマンドはphp-5.5.27
  • OSはFreeBSD

WP-CLIのインストールに関しては、こちらの記事にあります。~/bin/以下にインストール済みです。

そもそものSSH接続については、以下にマニュアルがあります。

構成

~/
├── html(ドキュメントルート)
├── wp-cli.yml(設定ファイル)
└── wp-install.sh(実行ファイル)

DBはコントロールパネルから事前に作成しておく

サーバー側からDBを作成する権限は無いので、wp db createは使えません。

mysql -u ae******** -h 127.0.0.1 -p -P3307

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ae********_wp      |
+--------------------+
2 rows in set (0.01 sec)

mysql>
mysql> CREATE DATABASE test;
ERROR 1044 (42000): Access denied for user 'ae********'@'127.0.0.1' to database 'test'

インストール概要

wp-cli.yml(設定ファイル)とwp-install.sh(実行ファイル)を用意します。

wp-install.shで実現することは

  • html/wpにWordpressファイルダウンロード
  • wp-config.php作成
  • サイトURLをドメイン直下に変更
  • 「検索エンジンでの表示」を「検索エンジンがサイトをインデックスしないようにする」に設定
  • 不要なプラグイン削除、指定したプラグインのインストール

まで、です。

wp-cli.yml

# Global parameter defaults
path: html/wp

# Subcommand
core download:
  locale: ja
core config:
  dbuser: ae********
  dbpass: Password
  dbhost: 127.0.0.1:3307
  dbname: ae********_wp
core install:
  admin_user: admin
  admin_password: password
  admin_email: ********@evoworx.co.jp
  title: TEST
  url: http://********.jp/wp

wp-install.sh

#!/usr/local/bin/bash

set -Ceu

home='http://********.jp'
sitedir='wp'

pluginarr=()
pluginarr+=( 'all-in-one-wp-security-and-firewall' )
pluginarr+=( 'cmb2' )


php-5.5.27 ~/bin/wp-cli.phar core download
php-5.5.27 ~/bin/wp-cli.phar config create --skip-check
php-5.5.27 ~/bin/wp-cli.phar core install

php-5.5.27 ~/bin/wp-cli.phar option update home $home
php-5.5.27 ~/bin/wp-cli.phar option update blog_public 0
cp -p html/$sitedir/index.php html/index_org.php
sed -e "s/wp-blog-header.php/$sitedir\/wp-blog-header.php/g" html/index_org.php > html/index.php
#rm -f html/index_org.php

php-5.5.27 ~/bin/wp-cli.phar plugin delete hello
for plugin in ${pluginarr[@]}
do
  php-5.5.27 ~/bin/wp-cli.phar plugin install ${plugin} --activate
done

2ファイル作成したら、

% bash wp-install.sh

以上です。

インストール詳細

wp-install.shを上から順に、シェルスクリプトに不慣れな人間向けの解説です。

#!/usr/local/bin/bash

set -Ceu

おまじないです。

  • set -C・・・リダイレクト先のファイルが既に存在している場合にスクリプトを停止する
  • set -e・・・エラーがあったらスクリプトを停止する
  • set -u・・・未定義の変数を使おうとした場合にスクリプトを停止する
home='http://********.jp' #サイトURL
sitedir='wp' #Wordpressインストールディレクトリ

#インストールするWordpressプラグイン
pluginarr=()
pluginarr+=( 'all-in-one-wp-security-and-firewall' )
pluginarr+=( 'cmb2' )

必要な情報を記述します。

php-5.5.27 ~/bin/wp-cli.phar core download
php-5.5.27 ~/bin/wp-cli.phar config create --skip-check
php-5.5.27 ~/bin/wp-cli.phar core install

順に、ダウンロード、wp-config.phpを作成、インストール。

php-5.5.27 ~/bin/wp-cli.phar option update home $home
cp -p html/$sitedir/index.php html/index_org.php
sed -e "s/wp-blog-header.php/$sitedir\/wp-blog-header.php/g" html/index_org.php > html/index.php
#rm -f html/index_org.php

サイトURLを変更し、index.phpを移動、パスを書き換えています。
rmコマンドは個人の責任に置いて(!)コメントアウトを外して使用してください。

php-5.5.27 ~/bin/wp-cli.phar plugin delete hello
for plugin in ${pluginarr[@]}
do
  php-5.5.27 ~/bin/wp-cli.phar plugin install ${plugin} --activate
done

使わないプラグイン(Hello Dolly)を削除、必要なプラグインをインストールします。

エラー!

php-5.5.27 ~/bin/wp-cli.phar core download

Error: The requested locale (ja) was not found.

wp-cli.ymlで日本語版を指定していますが、指定の最新バージョンに日本語版が無い場合はエラーで停止します。
日本語版のあるバージョンを指定するか、英語版を使用するか、で解消します。

php-5.5.27 ~/bin/wp-cli.phar config create –skip-check

% wp config create
/usr/bin/env: not found

–skip-check
DBへの接続確認をしない、というオプションです。
これが無いとエラーで停止します。

MAMP版

実はMAMP版も作りましたが、ローカルの実装はLocal by Flywheelなりvccwなりの仮想環境でやろうという話になり、ぽしゃりました。
供養に載せておきます。

wp-cli.yml

# Global parameter defaults
path: htdocs/wp

# Subcommand
core download:
#  locale: ja
core config:
  dbuser: root
  dbpass: root
  dbhost: localhost:/Applications/MAMP/tmp/mysql/mysql.sock
  dbname: DBName
core install:
  admin_user: admin
  admin_password: password
  admin_email: ********@evoworx.co.jp
  title: TEST
  url: http://localhost:1000/wp

install.command

#!/bin/sh

set -Ceu

home='http://localhost:1000'
sitedir='wp'

theme_name='テーマ名'
pluginarr=()
pluginarr+=( 'all-in-one-wp-security-and-firewall' )
pluginarr+=( 'cmb2' )


cd `dirname $0`
export PATH=$PATH:/Applications/MAMP/Library/bin

mkdir htdocs && true

wp core download
wp config create
wp db create
wp core install

wp option update home $home
wp option update blog_public 0
cp -p htdocs/wp/index.php htdocs/index_org.php
sed -e "s/wp-blog-header.php/$sitedir\/wp-blog-header.php/g" htdocs/index_org.php > htdocs/index.php
rm -f htdocs/index_org.php

wp plugin delete hello
for plugin in ${pluginarr[@]}
do
  wp plugin install ${plugin} --activate
done

wp scaffold _s sample_theme --theme_name="$theme_name" --author="EVOWORX" --sassify --activate

参考