1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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
    

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;
```

  1. 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 関連の設定を変更します。

  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'
```


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'

```

  1. 複製によるインスタンス 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
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 ファイル内の設定の対応
```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


  1. 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


  1. 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?