一発でWordPressのダミーサイトを作成するスタートアップスクリプト for ConoHa

WordPressの様々な検証したり、使い方を練習したりするためにダミーデータでWEBサイトをポンポン作りたくなったりしませんか？

安価な [ConoHa](https://www.conoha.jp/)で作成してたりする身なわけで、いい加減に毎回毎回作ったり、Dockerで作っても微妙な違いが出るのを吸収するのが嫌になってきました。

そこで本記事では、ConoHaコントロールパネルからサーバーを作成する際に使える、**スタートアップスクリプト**を公開します。

## 前提

サーバーの種別は「Kusanagi」を選択します。UbuntuやCentOSを選んでもダメです。

リソースはどれでも構いませんが、テストなら一番小さいリソースで十分です。

## WordPressダミーサイト生成のスタートアップスクリプト

``` startup_wp_dummy.sh
#!/bin/sh

# Setting Parameters ==========================================================
## OS and Network Setting
IPADDRESS=`curl globalip.me`
HOSTNAME=example.com #（${IPADDRESS}）でもOK
EMAIL='admin@example.com'
SSHPORT=20202
KUSANAGIPASSWORD='SamplePassword'
WWWUSER=httpd

## WordPress Settings
WPNAME=wpsample
WPLANG=ja
WPTITLE=WPTEST
WPADMINNAME=admin
WPADMINPASS=Sample_Password_7
DBNAME=wordpress
DBUSER=wordpress
DBPASSWD=SamplePassword7
WPTHEMENAME=sosimple
WPTHEMEURL=https://downloads.wordpress.org/theme/sosimple.1.2.7.zip
SAMPLESITE=https://github.com/jawordpressorg/theme-test-data-ja.git
WPPLUGINS=("autoptimize" "nginx-helper" "siteguard" "w3-total-cache" "wp-optimize" "wp-hyper-response" "wordpress-importer")


# Setting Process =============================================================

# OS Update
YUMCMD='yum -y'
${YUMCMD} --enablerepo=remi,remi-php56 update
${YUMCMD} update
${YUMCMD} install zip unzip git jq

# Setting User
echo ${KUSANAGIPASSWORD} | passwd --stdin kusanagi

# Set Hostname
hostnamectl set-hostname ${HOSTNAME}

# Setting Sshd
SSHDCONF=/etc/ssh/sshd_config
SEDCMD='sed -i -e'
${SEDCMD} 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' ${SSHDCONF}
${SEDCMD} "s/#Port 22/Port ${SSHPORT}/" ${SSHDCONF}
${SEDCMD} 's/PermitRootLogin yes/PermitRootLogin no/' ${SSHDCONF}
systemctl restart sshd

# Setting Firewalld
systemctl start firewalld.service
systemctl enable firewalld.service
firewall-cmd --permanent --new-zone=wpnet
firewall-cmd --reload
firewall-cmd --set-default-zone=wpnet
firewall-cmd --permanent --add-service=http --zone=wpnet
firewall-cmd --permanent --add-port=${SSHPORT}/tcp --zone=wpnet
firewall-cmd --reload

# kusanagi provision
kusanagi provision --WordPress --wplang ${WPLANG} --fqdn ${HOSTNAME} --email ${EMAIL} --dbname ${DBNAME} --dbuser ${DBUSER} --dbpass ${DBPASSWD} ${WPNAME}
mv /etc/nginx/conf.d/${WPNAME}_ssl.conf /etc/nginx/conf.d/${WPNAME}_ssl.con_f
systemctl start nginx

# Wordpress Install and Basic Setting
WPHOST="/home/kusanagi/${WPNAME}"
WPROOT="${WPHOST}/DocumentRoot"
WPCONF=${WPROOT}/wp-config.php
WPCMD="/usr/local/bin/wp --path=${WPROOT}"
KUSANAGICMD='sudo -u kusanagi'
${KUSANAGICMD} ${WPCMD} core config --dbname=${DBNAME} --dbuser=${DBUSER} --dbpass=${DBPASSWD} --dbhost=localhost --locale=${WPLANG}
${KUSANAGICMD} ${WPCMD} core install --admin_user=${WPADMINNAME} --admin_password=${WPADMINPASS} --admin_email=${EMAIL} --url=http://${HOSTNAME}/ --title=${WPTITLE}
${KUSANAGICMD} chown kusanagi.www ${WPCONF}
${KUSANAGICMD} chmod 0440 ${WPCONF}
${KUSANAGICMD} echo "define('FS_METHOD', 'direct');" >> ${WPCONF}
${KUSANAGICMD} chmod 0755 ${WPROOT}
${KUSANAGICMD} mv ${WPCONF} ${WPHOST}

# Wordpress Setting
${KUSANAGICMD} ${WPCMD} core update
${KUSANAGICMD} ${WPCMD} plugin update --all
${KUSANAGICMD} ${WPCMD} theme update --all
${KUSANAGICMD} ${WPCMD} core language update

## WordPress Plugin Setting
HTTPDCMD="sudo -u ${WWWUSER}"
chown httpd $WPROOT/wp-content/plugins
for i in "${WPPLUGINS[@]}"
do
    ${HTTPDCMD} ${WPCMD} plugin install $i --activate
done

## WordPress Theme Setting
${KUSANAGICMD} curl ${WPTHEMEURL} -o ${WPROOT}/wp-content/themes/theme.zip
${KUSANAGICMD} unzip ${WPROOT}/wp-content/themes/theme.zip -d ${WPROOT}/wp-content/themes
${KUSANAGICMD} rm -f ${WPROOT}/wp-content/themes/theme.zip
${KUSANAGICMD} ${WPCMD} theme activate ${WPTHEMENAME}

## Sample Data Import to WordPress
git clone ${SAMPLESITE} /tmp/test-data
${KUSANAGICMD} ${WPCMD} import /tmp/test-data/wordpress-theme-test-date-ja.xml --authors=create

##  Cleanup default data of WordPress
${KUSANAGICMD} ${WPCMD} theme delete twentyfifteen twentyseventeen twentysixteen
${KUSANAGICMD} ${WPCMD} plugin uninstall akismet hello
${KUSANAGICMD} ${WPCMD} post delete 1
${KUSANAGICMD} ${WPCMD} db optimize
```

スタートアップスクリプトとして入力フォームに書き込んだ後、サーバーを「追加」して5〜15分したら出来上がります。

http://{サーバーのIPアドレス}/ に接続して、WordPressで作ったサイトが表示されたら完成。

管理画面は http://{サーバーのIPアドレス}/wp-admin/ から変えていません。ログインして、プラグインなどを調整すれば使い物になるはずです。

実用までの所要時間は３０分もかからないはず。


## スタートアップスクリプトの注意・解説

スクリプトの頭数行が設定値です。そこを用途に応じて変えてください。

### OSやネットワークに関する設定値

|変数名|設定内容|注意事項|
|:-----------------|:------------------|:------------------|
|IPADDRESS|サーバーのIPアドレス|直接IPアドレスを指定してもOK。|
|HOSTNAME|サーバーのホスト名|ホスト名＝IPアドレスにするなら、${IPADDRESS}を指定する。FQDNである必要なし。|
|EMAIL|電子メールアドレス|実在するかどうか不問。|
|SSHPORT|SSHの待受ポート|デフォルトポート（22）は極力指定しない方が無難。|
|KUSANAGIPASSWORD|OSユーザー「Kuasnagi」のパスワード|a-zA-Z0-9.!#%+_- のいずれかで 8 文字以上|
|WWWUSER|HTTPサーバーの実行ユーザー名|OSやインストール方法によってhttpdだったり、wwwだったりする。|

### WordPressに関する設定値

|変数名|設定内容|注意事項|
|:-----------------|:------------------|:------------------|
|WPNAME|kusanagiのプロファイル名|ホスト名やFQDN、サイト名でなくても良い。|
|WPLANG|WordPressサイトの言語|ほぼ ja 一択。|
|WPTITLE|WordPressサイトの名前|日本語じゃない方が無難かもしれません。|
|WPADMINNAME|WordPressサイトのログインアカウント名|推測されにくい独自のものにすべき。|
|WPADMINPASS|WordPressサイトのログインパスワード|推測されにくい独自のものにすべき。|
|DBNAME|MariaDBのデータベース名|忘れなければ何でも良いです。|
|DBUSER|MariaDBのログインアカウント名|推測されにくい独自のものにすべき。|
|DBPASSWD|MariaDBのログインパスワード|推測されにくい独自のものにすべき。|
|WPTHEMENAME|インストールするWordPressテーマ名|たまにwpコマンドで指定するには独自の名前じゃないとダメだったりするので注意。|
|WPTHEMEURL|インストールするWordPressテーマのダウンロードURL|[https://ja.wordpress.org/themes/](WordPressテーマ名)から探したりするもの。|
|SAMPLESITE|WordPressのサンプルデータをダウンロードするURL|独自のWordPressのエクスポートデータを指定する場合、XMLファイル名などの修正が必要。|
|WPPLUGINS|インストールするWordPressのプラグイン名|wpコマンドで指定するには独自の名前じゃないとダメだったりするので注意。|

### その他

* エラー処理は一切していません。そのため、業務などで定期的な運用に載せるなら、絶対に組み込んだ方が良いです。
* サンプルデータを対象としてますが、少し作り替えれば開発環境や検証環境を作るのにも使えると思います。
* [nukaga](http://nuuno.net/)さんが作成され、TaiさんがGitHubで公開されているテーマユニットテストデータの日本語版「[theme-test-data-ja](https://github.com/jawordpressorg/theme-test-data-ja)」を利用させていただいてます。データ量がたくさんあって助かります。
* ConoHaでは常用していますが、AWSやさくらインターネットなどの他のVPS/クラウドではテストしていません。ご利用には御注意ください。


## 参考にしたサイト・記事

* [スタートアップスクリプトを作成する｜VPSならConoHa](https://www.conoha.jp/guide/startupscript.php)
* [ドキュメント – KUSANAGI](https://kusanagi.tokyo/document/)
* [Commands | WordPress Developer Resources](https://developer.wordpress.org/cli/commands/)
* [WordPressをコマンドラインでインストールしたい](https://dev.classmethod.jp/tool/wordpress/wordpress-cli-install/)
* [CentOS 7 firewalld よく使うコマンド - Qiita](https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e)
* [WordPressテーマユニットテストデータ日本語版を更新したよ！ ‹ nuuno](http://nuuno.net/note/wordpress-testdata/)
* [GitHub - jawordpressorg/theme-test-data-ja: Japanese test data for WordPress](https://github.com/jawordpressorg/theme-test-data-ja)

## 筆者のサイト

こういう技術系の情報以外にも、iPadやSurface Pro、Mastodon、ライフハックなんかの記事を書いています。気軽にブログも見に来てください。

[いつもの匠](https://takulog.info)