0.はじめに
WordPress でサイトを作ろうということになって、
やっぱ AWS だよね。ということになって、
AMIMOTO AMI を使ってみました。
ついでに、
DB の接続先を RDS に変更してみました。
1.AMIMOTO AMI の EC2 インスタンスを作成する
-
以下のサイトの手順に沿って、AMIMOTO AMI の EC2 インスタンスを作成
ん〜、細かく書いててくれて、非常にありがたい。
感謝♪
2.MySQL on RDS を作成する
-
RDS のコンソール画面から、ウィザートにしたがって、ポチポチと RDS インスタンスを作成
本当、すぐできちゃう。
素敵♪
3.DB をローカルから RDS へ移行する
-
WordPress を停止
nginx -s stop service httpd stop service nginx stop
1. ローカル DB からダンプファイルをエクスポート
```bash
mysqldump -h localhost -P 3306 -u [USERID] -p[PASSWORD] --databases [DBNAME] > mysqldump.sql
```
1. RDS にデータベースを作成
```bash
mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] mysql
> show databases;
> create database [DBNAME];
> show databases;
```
-
RDS にデータベースユーザーを作成
mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] mysql > select Host, User, Password from mysql.user; > grant all on [DBNAME].* to '[USERID]'@'[IP-Address]' identified by '[PASSWORD]'; > select Host, User, Password from mysql.user;
1. 出力したダンプファイルから、データを RDS へインポート
```bash
mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] [DBNAME] < mysqldump.sql
```
1. WP の接続先を RDS へ変更
* ベースディレクトリへ移動し、
```bash
cd /var/www/vhosts/i-*
```
* ローカル接続用の設定ファイルを mv
```bash
mv local-config.php local-config.php.remove
```
* 接続用の設定ファイルを変更
```bash
cp -fp wp-config.php wp-config.php.ORG
vi wp-config.php
diff wp-config.php wp-config.php.ORG
18,57c18
< $db_data = false;
< if ( file_exists('/opt/aws/cloud_formation.json') ) {
< $db_data = json_decode(file_get_contents('/opt/aws/cloud_formation.json'), true);
< if ( isset($db_data['rds']) ) {
< $db_data = $db_data['rds'];
< $db_data['host'] = $db_data['endpoint'] . ':' . $db_data['port'];
< }
< }
< if ( !$db_data ) {
< $db_data = array(
< 'database' => '[DBNAME]',
< 'username' => '[USERID]',
< 'password' => '[PASSWORD]',
< 'host' => '[RDS EndPoint]:3306',
< );
< }
<
< /** The name of the database for WordPress /
< //define('DB_NAME', $db_data['database']);
< define('DB_NAME', '[DBNAME]');
<
< /* MySQL database username /
< //define('DB_USER', $db_data['username']);
< define('DB_USER', '[USERID]');
<
< /* MySQL database password /
< //define('DB_PASSWORD', $db_data['password']);
< define('DB_PASSWORD', '[PASSWORD]');
<
< /* MySQL hostname /
< //define('DB_HOST', $db_data['host']);
< define('DB_HOST', '[RDS EndPoint]:3306');
<
< /* Database Charset to use in creating database tables. /
< define('DB_CHARSET', 'utf8');
<
< /* The Database Collate type. Dont change this if in doubt. */
< define('DB_COLLATE', '');
<
< unset($db_data);
require_once( dirname(FILE).'/local-config.php' );
128,130d88
< /** SSL **/
< define('FORCE_SSL_LOGIN', true);
< define('FORCE_SSL_ADMIN', true);
```
1. WordPress を開始
```bash
nginx
service httpd start
service nginx start
```
1. ※参考 * [AMIMOTO AMI で Amazon RDS を使う \| 超高速 WordPress AMI AMIMOTO](https://ja.amimoto-ami.com/2016/03/25/use-amazon-rds-amimoto-ami-wordpress/) * [WordPressのセキュリティ向上\-管理画面のHTTPS化 ~AWSで作るWordPress~ Part\.5 \| ねっとわーくえんじにあとか](https://www.neteng.co/?p=455)
3.chef 関連の設定変更
作成した EC2 インスタンスから AMI を作成し、それを元に複製したりすると、動かなくなったりするので、chef 関連の設定を変更します。
-
デフォルト言語の変更
- /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb
diff default.rb.ORG default.rb
1c1
< default[:sysconfig][:lang] = 'en_US.UTF-8'
default[:sysconfig][:lang] = 'ja_JP.UTF-8'
```
1. ローカルの MySQL の設定を削除 * /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb
```bash
diff default.rb.ORG default.rb
30c30
< include_recipe 'amimoto::mysql'
include_recipe 'amimoto::mysql'
```
* /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb
```bash
diff wordpress.rb.ORG wordpress.rb
7c7
< include_recipe 'amimoto::mysql'
include_recipe 'amimoto::mysql'
```
- 複製によるインスタンス ID 変更時の対応の設定
- /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb
…ベースディレクトリ名の対応
```bash
diff httpd.rb.ORG httpd.rb
19a20,43
if !(File.exist?(node[:wordpress][:document_root])) then
pre_servername_tmp =ls -Ft /var/www/vhosts/ | grep / | grep ^i- | grep -v #{node[:ec2][:instance_id]} | head -n 1 | tr -d ^/
.chomp
case pre_servername_tmp
when /^i-/
pre_document_root = '/var/www/vhosts/' + pre_servername_tmp
execute "pre_document_root zip" do
command "zip -r '#{pre_document_root}'.zip '#{pre_document_root}'"
action :run
end
execute "pre_document_root rename" do
command "mv '#{pre_document_root}' '#{node[:wordpress][:document_root]}'"
action :run
end
end
endtemplate "/etc/httpd/conf/httpd.conf" do
variables node[:httpd][:config]
source "httpd/conf/httpd.conf.erb"
if node[:httpd][:service_action].include?(:start)
notifies :restart, 'service[httpd]'
end
end
```
* /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb
…conf ファイル内の設定の対応
```bash
diff /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb
16a17,32
%w{ default.conf default.backend.conf }.each do | file_name |
template "/etc/nginx/conf.d/" + file_name do
variables(
:listen => node[:nginx][:config][:listen],
:listen_backend => node[:nginx][:config][:listen_backend],
:server_name => node[:ec2][:instance_id],
:document_root => node[:wordpress][:document_root],
:wp_multisite => node[:nginx][:config][:wp_multisite],
:mobile_detect_enable => node[:nginx][:config][:mobile_detect_enable],
:phpmyadmin_enable => node[:nginx][:config][:phpmyadmin_enable]
)
source "nginx/conf.d/" + file_name + ".erb"
notifies :restart, 'service[nginx]'
end
end
```
1. PHP Warning: session_start(): の対応 * /opt/local/chef-repo/cookbooks/amimoto/recipes/mod_php7.rb
```bash
diff mod_php7.rb.ORG mod_php7.rb
41c41
< %w{ /var/tmp/php /var/tmp/php/session /var/log/php-fpm }.each do | dir_name |
%w{ /var/tmp/php /var/tmp/php/session /var/log/php-fpm /var/opt/remi/php70/lib/php/session }.each do | dir_name |
```
* 参考
* nginx+php-fpm環境でのCakePHPで"Warning (2): session_start()"エラーが出る - Qiita
-
server reached MaxClients setting, consider raising the MaxClients setting の対応
- /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb
diff httpd.conf.erb.ORG httpd.conf.erb
106,107c106,107
< ServerLimit <%= node[:nginx][:config][:upstream_keepalive].to_i + 2 %>
< MaxClients <%= node[:nginx][:config][:upstream_keepalive].to_i + 2 %>
ServerLimit <%= node[:nginx][:config][:upstream_keepalive].to_i + 112 %>
MaxClients <%= node[:nginx][:config][:upstream_keepalive].to_i + 112 %>
```
* 参考
* 実用 Apache 2.0運用・管理術(3):httpd.confによるWebサーバの最適化 (2/3) - @IT
-
nginx のログファイル名
- 以下のファイルにおいて、
<%= @server_name %>-
や<%= @server_name %>.
の部分を削除
$ cd /opt/local/chef-repo/cookbooks/amimoto/templates/default/nginx/conf.d $ grep 'access\.log' *.erb default-ssl.conf.erb: access_log /var/log/nginx/<%= @server_name %>-ssl.access.log main; default.backend.conf.erb: access_log /var/log/nginx/<%= @server_name %>.backend.access.log backend; default.conf.erb: access_log /var/log/nginx/<%= @server_name %>.access.log main; $ grep 'error\.log' *.erb default-ssl.conf.erb: error_log /var/log/nginx/<%= @server_name %>-ssl.error.log; default.conf.erb: error_log /var/log/nginx/<%= @server_name %>.error.log;
- 以下のファイルにおいて、
99.ハマりポイント
- RDS への接続先の切替で大分手間取りました…。ローカル接続用の設定ファイル (local-config.php) があるとは露も知らずに、オロオロしてました…。非常に悔しい思いです。
- あとは、やっぱり chef 絡みです。AMI から複製してもちゃんと動かないし、色々と調べながらで苦労しました。というか、この対応で本当にいいのか、正直疑問です。何か問題があれば、言ってください。
XX.まとめ
WrodPress も chef もよく知らなかったので色々戸惑いましたが、とりあえず、ちゃんと動いて良かったです。
t2.micro で動かしてますが、特に問題なく非常に助かってます。
そういえば、
WordPress 絡みで、Google Analytics の設定とかもしたので、その辺の事も投稿しようかなと思います。
大した設定してないですけどね…。
メモ代わりに。
ご参考になれば。