はじめに
WordPressはずいぶん前から流行っているPHP製のCMSで、ちょっとしたコーポレートサイトやブログサイトを非技術者でもある程度管理しやすいように作るにはいまだに便利です。
ただ、Ruby on RailsなどモダンなWeb開発手法に慣れていると、FTPでデプロイとかサーバー上のファイルを直接更新みたいなことはできるだけしたくないもんです。
2018年2月現在で、さくっとHerokuで動かせてGitHubで管理できるWordPress開発環境を構築する方法をまとめておきます。
なお、以下はmacOS Sierraでの作業手順です。
使えそうなものを探す
何事も何かを実装する前には、まず、GitHubで、最近の環境で、参考にできそうなもの、利用できそうなものを探します。
下記のものがよさげなので、こちらを使って作業を開始します。
WordPressをモダンな開発環境でいい感じにできる Bedrockっていうものがあるんだ、ふーんって思っておきます。
ローカル開発環境構築
- Composerのインストール
brew install homebrew/php/composer
- MySQLのインストール
brew install mysql mysql.server start mysql_secure_installation # 適当にrootのパスワードを設定などする sudo ln -s /usr/local/opt/mysql/homebrew.mxcl.mysql.plist /Library/LaunchAgents/
- Redisのインストール
brew install redis ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
基本的に以下を見てやればいいだけです。
https://github.com/PhilippHeuer/wordpress-heroku/wiki/Deployment
git clone https://github.com/PhilippHeuer/wordpress-heroku cd wordpress-heroku composer install mysql -uroot -p
some_database
は適当に変えます。
mysql > create database `some_database`;
https://roots.io/salts.html でEnv Format
のキーをコピーして、.env
というファイルに以下を設定します。
password
とsome_database
は、適当に変えます。
# DB Connection CUSTOM_DB_URL=mysql://root:password@127.0.0.1:3306/some_database # Redis REDIS_URL='redis://127.0.0.1:6379' # WP Settings WP_ENV=development WP_HOME=http://localhost:8080 WP_SITEURL=${WP_HOME}/wp # Generate your keys here: https://roots.io/salts.html AUTH_KEY='generateme' SECURE_AUTH_KEY='generateme' LOGGED_IN_KEY='generateme' NONCE_KEY='generateme' AUTH_SALT='generateme' SECURE_AUTH_SALT='generateme' LOGGED_IN_SALT='generateme' NONCE_SALT='generateme'
- 起動
macOSでは80番ポート使うのにroot権限が必要そうだったので8080で立ち上げます。
php wp-cli.phar server --host=0.0.0.0 --port=8080 --path=web
http://localhost:8080にアクセスして、適当にサイト名やパスワードを入れるとローカルでwordpressの画面にアクセスできるようになります。
Herokuにデプロイ
Herokuのアプリを作成します。ダッシュボードからでも良いです。
heroku create ${APP_NAME}
上記と同じようにhttps://roots.io/salts.htmlからキーをコピーして、herokuの環境変数に設定します。
heroku config:set \ AUTH_KEY='generateme' \ SECURE_AUTH_KEY=''generateme \ LOGGED_IN_KEY='generateme' \ NONCE_KEY='generateme' \ AUTH_SALT='generateme' \ SECURE_AUTH_SALT='generateme' \ LOGGED_IN_SALT='generateme' \ NONCE_SALT='generateme' \ --app ${APP_NAME}
アドオンを追加していきます。
heroku addons:create sendgrid:starter --app ${APP_NAME} heroku addons:create scheduler:standard --app ${APP_NAME} heroku config:set DISABLE_WP_CRON='true' --app ${APP_NAME} heroku addons:open scheduler --app ${APP_NAME} heroku addons:create jawsdb:kitefin --app ${APP_NAME} heroku addons:create papertrail:choklad --app ${APP_NAME} heroku addons:create heroku-redis:hobby-dev --app ${APP_NAME}
Herokuのファイルシステムではdynoが再起動されると、更新されたファイルが消えます。そのため、画像などのメディアは、Amazon S3のクラウドストレージにアップロードさせます。S3へのアクセス権限を持つアクセスキーをAWS_S3_URL
の環境変数に指定します。
AWS_S3_URL
は、s3://${アクセスキー}:${シークレットキー}@s3-${リージョン}.amazonaws.com/${バケット名}
の形式を想定しているようです。
2018年2月1日現在のソースでは、シークレットキーにスラッシュが含まれている場合、parseに失敗したので、例えば、 https://github.com/PhilippHeuer/wordpress-heroku/pull/27/files のようにして回避しました。*1
heroku config:set \ AWS_S3_URL='s3://${アクセスキー}:${シークレットキー}@s3-${リージョン}.amazonaws.com/${バケット名}' \ --app ${APP_NAME}
これでHeroku側の設定は終わったので、gitのremoteに登録してプッシュすれば、デプロイは完了です。
heroku git:remote -a ${APP_NAME}
git push heroku master
後は、https://${APP_NAME}.herokuapp.com/ にアクセスして、初期インストールすれば、データベースが構築されます。
この状態だとcloneしてきた元のリポジトリのままなので、適当に自分たちのアプリ用に管理しやすいように整えてGitHub管理しましょう。
あと、composerがとても遅いので以下などを参考にして整えたほうがいいと思います。
最後に
次はプラグインあさったり、独自テーマを作ったりしていこうと思います。
ところで、私は、知的財産の商業化に関するスタートアップ IP Nexus(https://www.ipnexus.com)に関連するプロジェクトや特許の検索・分析プラットフォーム(https://patentfield.com)の開発などをしています。
今回のようなWebっぽいことからデータベース、検索、言語処理や機械学習などオールラウンドにしていますが、もっと検索、言語処理や機械学習などの方の作業の比重を大きくしたいです。
ということで、Web開発を手伝ってくれる人がいたら嬉しいです。データ分析や機械学習の方に興味があるという方でも有りです。ただし、現状、Web開発の比重の方がかなり大きいです。
興味があれば、Twitter(@naoa_y)かメール(naoya at patentfield.com)までご連絡ください。
*1:なお、今思うとS3が独自ドメインだとパースできない気がしますが、まあ必要になったら適宜対応すればよさそうという感じです。