LoginSignup
1
1

More than 5 years have passed since last update.

AMIMOTO AMI を使って、WordPress を立ち上げて、接続先を RDS に変更してみる

Last updated at Posted at 2017-07-04

0.はじめに

WordPress でサイトを作ろうということになって、

やっぱ AWS だよね。ということになって、

AMIMOTO AMI を使ってみました。

ついでに、
DB の接続先を RDS に変更してみました。

1.AMIMOTO AMI の EC2 インスタンスを作成する

  1. 以下のサイトの手順に沿って、AMIMOTO AMI の EC2 インスタンスを作成

    ん〜、細かく書いててくれて、非常にありがたい。
    感謝♪

2.MySQL on RDS を作成する

  1. RDS のコンソール画面から、ウィザートにしたがって、ポチポチと RDS インスタンスを作成

    本当、すぐできちゃう。
    素敵♪

3.DB をローカルから RDS へ移行する

  1. WordPress を停止

    nginx -s stop
    service httpd stop
    service nginx stop
    


  2. ローカル DB からダンプファイルをエクスポート

    mysqldump -h localhost -P 3306 -u [USERID] -p[PASSWORD] --databases [DBNAME] > mysqldump.sql
    


  3. RDS にデータベースを作成

    mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] mysql
    > show databases;
    > create database [DBNAME];
    > show databases;
    


  4. 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;
    


  5. 出力したダンプファイルから、データを RDS へインポート

    mysql -h [RDS EndPoint] -P 3306 -u [USERID] -p[PASSWORD] [DBNAME] < mysqldump.sql
    


  6. 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);
    


  7. WordPress を開始

    nginx
    service httpd start
    service nginx start
    


  8. ※参考

3.chef 関連の設定変更

作成した EC2 インスタンスから AMI を作成し、それを元に複製したりすると、動かなくなったりするので、chef 関連の設定を変更します。

  1. デフォルト言語の変更

    • /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'
    


  2. ローカルの 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'
    


  3. 複製によるインスタンス 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
    > 
    


  4. 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 |
    
  5. 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 %>
    
  6. 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 の設定とかもしたので、その辺の事も投稿しようかなと思います。

大した設定してないですけどね…。
メモ代わりに。

ご参考になれば。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1