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
-
ローカル DB からダンプファイルをエクスポート
mysqldump -h localhost -P 3306 -u [USERID] -p[PASSWORD] --databases [DBNAME] > mysqldump.sql
-
RDS にデータベースを作成
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;
-
出力したダンプファイルから、データを RDS へインポート
mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] [DBNAME] < mysqldump.sql
-
WP の接続先を RDS へ変更
- ベースディレクトリへ移動し、
cd /var/www/vhosts/i-*
- ローカル接続用の設定ファイルを mv
mv local-config.php local-config.php.remove
- 接続用の設定ファイルを変更
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);
-
WordPress を開始
nginx service httpd start service nginx start
-
※参考
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'
-
ローカルの MySQL の設定を削除
- /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb
diff default.rb.ORG default.rb 30c30 < include_recipe 'amimoto::mysql' --- > # include_recipe 'amimoto::mysql'
- /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb
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
…ベースディレクトリ名の対応
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 > end > > template "/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 ファイル内の設定の対応
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 >
- /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb
-
PHP Warning: session_start(): の対応
- /opt/local/chef-repo/cookbooks/amimoto/recipes/mod_php7.rb
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 |
-
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 %>
-
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 の設定とかもしたので、その辺の事も投稿しようかなと思います。
大した設定してないですけどね…。
メモ代わりに。
ご参考になれば。