2
2

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.

CloudFront や ALB 適用済みの WordPress サイトにおいて、新しいバージョンの AMIMOTO AMI (Amazon Linux) へのリプレースをしてみる。

Last updated at Posted at 2019-06-04

0.はじめに

以下の様な対応を行なった WordPress サイトにおいて、

新しいバージョンの AMIMOTO AMI への リプレース をしてみます。

1.EC2 インスタンス (AMIMOTO AMI)

2.サーバー (Amazon Linux)

■ ログイン

  1. 以下のセッションマネージャーのコンソールから、インスタンスにログインする。

■ Root ユーザーのパスワードの変更

  1. 以下のコマンドを実行し、Root ユーザーのパスワードを変更する。

■ ec2-user ユーザーの削除

  1. 以下のコマンドを実行し、ec2-user ユーザーを削除する。

■ タイムゾーンと言語の設定

  1. 以下のコマンドを実行し、/etc/cloud/cloud.cfg の値を変更する。
    • ls -ld /etc/cloud/cloud.cfg*
    • sudo cp -fp /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.ORG
    • ls -ld /etc/cloud/cloud.cfg*
    • sudo vi /etc/cloud/cloud.cfg
    • diff /etc/cloud/cloud.cfg.ORG /etc/cloud/cloud.cfg
    • 
      

22a23,24

locale: ja_JP.UTF-8

  1. 以下のコマンドを実行し、/etc/sysconfig/i18n の値を変更する。
    • ls -ld /etc/sysconfig/i18n*
    • sudo cp -fp /etc/sysconfig/i18n /etc/sysconfig/i18n.ORG
    • ls -ld /etc/sysconfig/i18n*
    • sudo vi /etc/sysconfig/i18n
    • diff /etc/sysconfig/i18n.ORG /etc/sysconfig/i18n
    • 
      

1c1
< LANG="en_US.UTF-8"

LANG="ja_JP.UTF-8"

■ ホスト名の変更

  1. 以下のコマンドを実行し、/etc/sysconfig/network の値を変更する。
    • ls -ld /etc/sysconfig/network*
    • sudo cp -fp /etc/sysconfig/network /etc/sysconfig/network.ORG
    • ls -ld /etc/sysconfig/network*
    • sudo vi /etc/sysconfig/network
    • diff /etc/sysconfig/network.ORG /etc/sysconfig/network
    • 
      

2c2
< HOSTNAME=localhost.localdomain

HOSTNAME=[ホスト名]

  1. 以下のコマンドを実行し、/bin/hostname の値を変更する。
    • /bin/hostname
    • sudo /bin/hostname [ホスト名]
    • /bin/hostname
  2. 以下のコマンドを実行し、/etc/hosts の値を変更する。
    • ls -ld /etc/hosts*
    • sudo cp -fp /etc/hosts /etc/hosts.ORG
    • ls -ld /etc/hosts*
    • sudo vi /etc/hosts
    • diff /etc/hosts.ORG /etc/hosts
    • 
      

2a3,4

[IPアドレス] [ホスト名] [ドメイン]
* ※参考
* Linuxでホスト名を変更する方法 - [Linux [Red Hatなど]/サーバー] ぺんたん info
* 「My unqualified host name」「unable to qualify my own domain name」の対処法
* №2342 Sendmail 特定のドメイン宛へのメールが送信できない。 - Web Patio - CentOSで自宅サーバー構築

■ SSH の設定 (nginx)

  1. 以下のコマンドを実行し、/etc/passwd の値を変更する。
    • ls -ld /etc/passwd*
    • sudo cp -fp /etc/passwd /etc/passwd.ORG
    • ls -ld /etc/passwd*
    • sudo vi /etc/passwd
    • diff /etc/passwd.ORG /etc/passwd
    • 
      

26c26
< nginx:x:498:497:Nginx web server:/var/lib/nginx:/bin/bash

nginx:x:498:497:Nginx web server:/var/www/vhosts:/bin/bash

* ※参考
* nginx ユーザとして ssh 接続できるようにするには? | 超高速 WordPress AMI AMIMOTO

  1. 以下のコマンドを実行し、/etc/ssh/sshd_config の値を変更する。
    • ls -ld /etc/ssh/sshd_config*
    • sudo cp -fp /etc/ssh/sshd_config /etc/ssh/sshd_config.ORG
    • ls -ld /etc/ssh/sshd_config*
    • sudo vi /etc/ssh/sshd_config
    • diff /etc/ssh/sshd_config.ORG /etc/ssh/sshd_config
    • 
      

17c17
< #Port 22

Port [SSHポート番号]
38c38
< #PermitRootLogin yes


PermitRootLogin no
45c45
< #PubkeyAuthentication yes


PubkeyAuthentication yes
65c65
< PasswordAuthentication no


PasswordAuthentication yes
140c140,144
< # ForceCommand cvs server
\ No newline at end of file


ForceCommand cvs server

AllowUsers nginx

Match User nginx
PasswordAuthentication no
* sudo service sshd restart



* ※参考
* 接続制限の設定

  1. 以下のコマンドを実行し、/etc/sysconfig/iptables の値を変更する。
    • ls -ld /etc/sysconfig/iptables*
    • sudo vi /etc/sysconfig/iptables
    • 
      

Generated by iptables-save v1.4.18 on Fri Oct 3 13:11:31 2014

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport [SSHポート番号] -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j LOG --log-prefix "[iptables] " --log-level 6
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Completed on Fri Oct 3 13:11:31 2014


* sudo service iptables restart

■ logwatch のインストール

  1. 以下のコマンドを実行し、logwatch をインストールする。
    • sudo yum install logwatch
    • sudo /usr/sbin/logwatch --print
  2. 以下のコマンドを実行し、logwatch のメールレポートを設定する。
    • ls -ld /etc/logwatch/conf/logwatch.conf*
    • sudo cp -fp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.ORG
    • sudo vi /etc/logwatch/conf/logwatch.conf
    • diff /etc/logwatch/conf/logwatch.conf.ORG /etc/logwatch/conf/logwatch.conf
    • 
      

1a2,5

MailFrom = [From メールアドレス]
MailTo = [To メールアドレス]
mailer = "sendmail -t -f [送信者アドレス]"
* ※参考
* Logwatch改造でEvernoteにノートブック、タグを指定して追加するよ! – oki2a24

■ AIDE のインストール

  1. 以下のコマンドを実行し、AIDE をインストールする。
    • sudo yum -y install aide
    • sudo aide -i
  2. 以下のコマンドを実行し、AIDE の初期設定をする。
    • sudo ls -la /var/lib/aide/
    • sudo cp -fp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
    • sudo ls -la /var/lib/aide/
    • sudo aide -C
  3. 以下のコマンドを実行し、/etc/aide.conf に除外設定を追加する。
    • sudo ls -ld /etc/aide.conf*
    • sudo cp -frp /etc/aide.conf /etc/aide.conf.ORG
    • sudo ls -ld /etc/aide.conf*
    • sudo vi /etc/aide.conf
    • sudo diff /etc/aide.conf.ORG /etc/aide.conf
    • 
      

221a222,225

!/var/log/*
!/etc/lvm/cache/.cache

  1. 以下の2つのファイルを作成し、AIDE のメールレポートの設定する。
    • /etc/default/aide
    • /etc/cron.daily/aide
      • sudo chmod +x /etc/cron.daily/aide で実行権限を付与すること。
/etc/default/aide
# These settings are mainly for the wrapper scripts around aide,
# such as aideinit and /etc/cron.daily/aide

# This is the email address reports get mailed to

MAILTO="-r [From メールアドレス] [To メールアドレス]" 

# Set this to suppress mailings when there's nothing to report

# QUIETREPORTS=1

# This parameter defines which aide command to run from the cron script.
# Sensible values are "update" and "check".
# Default is "check", ensuring backwards compatibility.
# Since "update" does not take any longer, it is recommended to use "update",
# so that a new database is created every day. The new database needs to be
# manually copied over the current one, though.

COMMAND=update

# This parameter defines how many lines to return per e-mail. Output longer
# than this value will be truncated in the e-mail sent out.

LINES=1000

# This parameter gives a grep regular expression. If given, all output lines
# that _don't_ match the regexp are listed first in the script's output. This
# allows to easily remove noise from the aide report.

NOISE="" 

# This parameter defines which options are given to aide in the daily
# cron job. The default is "-V4".

AIDEARGS="" 

#
#
DATABASE="/var/lib/aide/aide.db.gz" 
DATABASE_NEW="/var/lib/aide/aide.db.new.gz" 
/etc/cron.daily/aide
# !/bin/bash

PATH="/sbin:/usr/sbin:/bin:/usr/bin" 
LOGDIR="/var/log/aide" 
LOGFILE="aide.log" 
CONFFILE="/etc/aide.conf" 
ERRORLOG="error.log" 
ERRORTMP=`mktemp -t "$ERRORLOG".XXXXXXXXXX`

[ -f /usr/sbin/aide ] || exit 0

AIDEARGS="-V4" 

if [ -f /etc/default/aide ]; then
        . /etc/default/aide
fi

FQDN=`hostname`
DATE=`date +"at %Y-%m-%d %H:%M"`

# default values

MAILTO="${MAILTO:-root}" 
DATABASE="${DATABASE:-/var/lib/aide/aide.db.gz}" 
DATABASE_NEW="${DATABASE_NEW:-/var/lib/aide/aide.db.new.gz}" 
LINES="${LINES:-1000}" 
COMMAND="${COMMAND:-check}" 

if [ ! -f $DATABASE ]; then
        (
        echo "Fatal error: The AIDE database does not exist!" 
        echo "This may mean you haven't created it, or it may mean that someone has removed it." 
        ) | /bin/mail -s "Daily AIDE report for $FQDN" $MAILTO
        exit 0
fi

aide $AIDEARGS --$COMMAND >"$LOGDIR/$LOGFILE" 2>"$ERRORTMP" 
RETVAL=$?

if [ -n "$QUIETREPORTS" ] && [ $QUIETREPORTS -a \! -s $LOGDIR/$LOGFILE -a \! -s $ERRORTMP ]; then
        # Bail now because there was no output and QUIETREPORTS is set
        exit 0
fi

mv ${DATABASE_NEW} ${DATABASE}

(cat << EOF;
This is an automated report generated by the Advanced Intrusion Detection
Environment on $FQDN ${DATE}.

EOF

# include error log in daily report e-mail

if [ "$RETVAL" != "0" ]; then
        cat > "$LOGDIR/$ERRORLOG" << EOF;

*****************************************************************************
*                    aide returned a non-zero exit value                    *
*****************************************************************************

EOF
        echo "exit value is: $RETVAL" >> "$LOGDIR/$ERRORLOG" 
else
        touch "$LOGDIR/$ERRORLOG" 
fi
< "$ERRORTMP" cat >> "$LOGDIR/$ERRORLOG" 
rm -f "$ERRORTMP" 

if [ -s "$LOGDIR/$ERRORLOG" ]; then
        errorlines=`wc -l "$LOGDIR/$ERRORLOG" | awk '{ print $1 }'`
        if [ ${errorlines:=0} -gt $LINES ]; then
                cat << EOF;

****************************************************************************
*                      aide has returned many errors.                      *
*           the error log output has been truncated in this mail           *
****************************************************************************

EOF
                echo "Error output is $errorlines lines, truncated to $LINES." 
                head -$LINES "$LOGDIR/$ERRORLOG" 
                echo "The full output can be found in $LOGDIR/$ERRORLOG." 
        else
                echo "Errors produced  ($errorlines lines):" 
                cat "$LOGDIR/$ERRORLOG" 
        fi
else
        echo "AIDE produced no errors." 
fi

# include de-noised log

if [ -n "$NOISE" ]; then
        NOISTEMP=`mktemp -t aidenoise.XXXXXXXXXX`
        NOISTEMP2=`mktemp -t aidenoise.XXXXXXXXXX`
        sed -n '1,/^Detailed information about changes:/p' "$LOGDIR/$LOGFILE" | \
        grep '^\(changed\|removed\|added\):' | \
        grep -v "^added: THERE WERE ALSO [0-9]\+ FILES ADDED UNDER THIS DIRECTORY" > $NOISETMP2

        if [ -n "$NOISE" ]; then
                < $NOISETMP2 grep -v "^\(changed\|removed\|added\):$NOISE" > $NOISETMP
                rm -f $NOISETMP2
                echo "De-Noised output removes everything matching $NOISE." 
        else
                mv $NOISETMP2 $NOISETMP
                echo "No noise expression was given." 
        fi

        if [ -s "$NOISETMP" ]; then
                loglines=`< $NOISETMP wc -l | awk '{ print $1 }'`
                if [ ${loglines:=0} -gt $LINES ]; then
                        cat << EOF;

****************************************************************************
*   aide has returned long output which has been truncated in this mail    *
****************************************************************************

EOF
                        echo "De-Noised output is $loglines lines, truncated to $LINES." 
                        < $NOISETMP head -$LINES
                        echo "The full output can be found in $LOGDIR/$LOGFILE." 
                else
                        echo "De-Noised output of the daily AIDE run ($loglines lines):" 
                        cat $NOISETMP
                fi
        else
                echo "AIDE detected no changes after removing noise." 
        fi
        rm -f $NOISETMP
        echo "============================================================================" 
fi

# include non-de-noised log

if [ -s "$LOGDIR/$LOGFILE" ]; then
        loglines=`wc -l "$LOGDIR/$LOGFILE" | awk '{ print $1 }'`
        if [ ${loglines:=0} -gt $LINES ]; then
                cat << EOF;

****************************************************************************
*   aide has returned long output which has been truncated in this mail    *
****************************************************************************

EOF
                echo "Output is $loglines lines, truncated to $LINES." 
                head -$LINES "$LOGDIR/$LOGFILE" 
                echo "The full output can be found in $LOGDIR/$LOGFILE." 
        else
                echo "Output of the daily AIDE run ($loglines lines):" 
                cat "$LOGDIR/$LOGFILE" 
        fi
else
        echo "AIDE detected no changes." 
fi
) | /bin/mail -s "Daily AIDE report for $FQDN" $MAILTO

■ yum-cron-security のインストール

  1. 以下のコマンドを実行し、yum-cron-security をインストールする。
    • sudo yum install yum-cron-security
    • sudo service yum-cron status
    • sudo service yum-cron start
    • sudo service yum-cron status
    • sudo chkconfig yum-cron on
    • sudo chkconfig --list yum-cron
  2. 以下のコマンドを実行し、yum-cron-security のメールレポートを設定する。
    • sudo ls -ld /etc/yum/yum-cron-security.conf*
    • sudo cp -fp /etc/yum/yum-cron-security.conf /etc/yum/yum-cron-security.conf.ORG
    • sudo vi /etc/yum/yum-cron-security.conf
    • sudo diff /etc/yum/yum-cron-security.conf.ORG /etc/yum/yum-cron-security.conf
    • 
      

44c44
< emit_via = stdio

emit_via = email
53c53
< email_from = root


email_from = [From メールアドレス]
56c56
< email_to = root


email_to = [To メールアドレス]
59c59
< email_host = localhost


email_host = [メールホスト]:[ポート]
* sudo ls -ld /usr/sbin/yum-cron*
* sudo cp -fp /usr/sbin/yum-cron /usr/sbin/yum-cron.ORG
* sudo vi /usr/sbin/yum-cron
* sudo diff /usr/sbin/yum-cron.ORG /usr/sbin/yum-cron
*


247,248c247,253
<             s = smtplib.SMTP()
<             s.connect(self.opts.email_host)

        #s = smtplib.SMTP()
        #s.connect(self.opts.email_host)
        s = smtplib.SMTP(self.opts.email_host)
        #s.set_debuglevel(1)
        s.ehlo()
        s.starttls()
        s.login("[ログインID]", "[ログインパスワード]")

519,525c524,531
< if res == 0:
< # success, empty transaction
< sys.exit(0)
< elif res == 2:
< # success, dependencies resolved
< pass
< else:

    #if res == 0:
    #    # success, empty transaction
    #    sys.exit(0)
    #elif res == 2:
    #    # success, dependencies resolved
    #    pass
    #else:
    if res != 2:

■ Clam AntiVirus のインストール

  1. 以下のコマンドを実行し、Clam AntiVirus をインストールする。
    • sudo yum install clamav clamav-scanner-sysvinit clamav-update
  2. 以下のコマンドを実行し、freshclam の初期設定をし、実行する。
    • sudo ls -ld /etc/freshclam.conf*
    • sudo cp -fp /etc/freshclam.conf /etc/freshclam.conf.ORG
    • sudo ls -ld /etc/freshclam.conf*
    • sudo vi /etc/freshclam.conf
    • sudo diff /etc/freshclam.conf.ORG /etc/freshclam.conf
    • 
      

13c13
< #DatabaseDirectory /var/lib/clamav

DatabaseDirectory /var/lib/clamav
17c17
< #UpdateLogFile /var/log/freshclam.log


UpdateLogFile /var/log/freshclam.log
56c56
< #DatabaseOwner clamupdate


DatabaseOwner clamupdate
191a192,194

#DatabaseMirror db.XY.clamav.net
DatabaseMirror db.jp.clamav.net

* sudo ls -ld /etc/clamd.d/scan.conf*
* sudo cp -fp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.ORG
* sudo ls -ld /etc/clamd.d/scan.conf*
* sudo vi /etc/clamd.d/scan.conf
* sudo diff /etc/clamd.d/scan.conf.ORG /etc/clamd.d/scan.conf
*


8c8
< Example

#Example
93c93
< #LocalSocket /var/run/clamd.scan/clamd.sock


LocalSocket /var/run/clamd.scan/clamd.sock
117c117
< #TCPAddr 127.0.0.1


TCPAddr 127.0.0.1
177,178c177,178
< #ExcludePath ^/proc/
< #ExcludePath ^/sys/


ExcludePath ^/proc/
ExcludePath ^/sys/
182c182
< #MaxDirectoryRecursion 20


MaxDirectoryRecursion 20
207c207
< User clamscan


User root
468c468
< #ScanArchive yes


ScanArchive no

* sudo freshclam

  1. 以下のコマンドを実行し、clamd.scan の初期設定をし、実行する。
    • sudo ls -ld /var/run/clamd.scan
    • sudo /etc/rc.d/init.d/clamd.scan start
    • sudo ls -ld /etc/clamd.conf
    • sudo ln -s /etc/clamd.d/scan.conf /etc/clamd.conf
    • sudo ls -ld /etc/clamd.conf
    • sudo chkconfig --list | grep clamd
    • sudo chkconfig clamd.scan on
    • sudo chkconfig --list | grep clamd
  2. 以下のファイルを作成し、/etc/cron.daily/clamdscan.sh を作成する。
    • /etc/cron.daily/clamdscan.sh
      • sudo chmod +x /etc/cron.daily/clamdscan.sh で実行権限を付与すること。
/etc/cron.daily/clamdscan.sh
# !/bin/sh

PATH=/usr/bin:/bin
TMPCLAMSCAN=`mktemp`

## Scan
clamdscan / > $TMPCLAMSCAN
grep "FOUND" $TMPCLAMSCAN > /var/log/clamav/scan.log
grep "FOUND" $TMPCLAMSCAN | mail -s "ClamAV Scan Report for ${HOSTNAME}" -r "[From メールアドレス]" "[To メールアドレス]"
rm -r $TMPCLAMSCAN

exit

■ chef 関連

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

    • /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb


    • $ ls -ld /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb*
    • $ sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb.ORG
    • $ ls -ld /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb*
    • $ sudo vi /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb
    • $ diff /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb

1c1
< default[:sysconfig][:lang] = 'en_US.UTF-8'

default[:sysconfig][:lang] = 'ja_JP.UTF-8'

<br>
1. ローカルの MySQL の設定を削除
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb`

    ```bash
47c47
< include_recipe 'amimoto::mysql'
---
> #include_recipe 'amimoto::mysql'
    ```
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb`

    ```bash
7c7
< include_recipe 'amimoto::mysql'
---
> #include_recipe 'amimoto::mysql'
    ```
<br>
1. 複製によるインスタンス ID 変更時の対応の設定
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb
        * …ベースディレクトリ名の対応
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb`

    ```bash
24a25,48
> 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 ファイル内の設定の対応
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb`

    ```bash
22a23,38
> %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
>
     ```
<br>
1. ~~PHP Warning:  session_start(): の対応~~
1. server reached MaxClients setting, consider raising the MaxClients setting の対応
    * /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb `
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb.ORG /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb`

    ```bash
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 %>
    ```
<br>
1. nginx のログファイル名
    * 以下のファイルにおいて、 `<%= @server_name %>-` や `<%= @server_name %>.`
 の部分を削除

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

### ■ PHP のバージョンアップ ※[2019.07.01]追記

* ※参考
    * [How to change PHP from 7 to version 5\.6 \| Amimoto Help Center](https://support.amimoto-ami.com/articles/968043-how-to-change-php-from-7-to-version-5-6)

1. PHP の 旧バージョン(7.2) を削除し、新バージョン(7.3) をインストールする。

    ```bash
php -v
sudo yum remove php php-*
cd /opt/local
echo '{"phpfpm":{"enabled": true, "version":"73"}}' > /tmp/php-fpm-73.json
sudo jq -s '.[1] * .[0]' /tmp/php-fpm-73.json /opt/local/amimoto.json > /tmp/amimoto.json
sudo mv -f /tmp/amimoto.json /opt/local/amimoto.json
sudo /opt/local/provision
php -v
sudo service monit stop; sudo service nginx restart; sudo service php-fpm restart; sudo service monit start

3.DB (MySQL on RDS)

■ ログイン

  1. 以下のコマンドで、MySQL on RDS へ接続する。
    • $ mysql -h [RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] [DATABASE]
      • RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
      • PORT : ex) 3306
      • USER : ※接続するユーザー
      • PASSWORD : ※接続するユーザーのパスワード
      • DATABASE : ※接続するデータベース

■ MySQL ユーザーの追加と削除

  1. 以下のコマンドで、ユーザー情報を確認し、所定のデータベースへ接続できるユーザーを追加する。
    • mysql> select Host, User, Password from mysql.user order by User;
    • mysql> grant all privileges on [DATABASE].* to [USER]@"[IP-ADDRESS]" identified by '[PASSWORD]' with grant option;
      • DATABASE : ※所定のデータベース
      • USER : ※接続ユーザー
      • IP-ADDRESS : ※接続元 IP アドレス
      • PASSWORD : ※接続ユーザーのパスワード
    • mysql> select Host, User, Password from mysql.user order by User;
    • ※参考
  2. 以下のコマンドで、ユーザー情報を確認し、所定のデータベースへ接続できるユーザーを削除する。
    • mysql> select Host, User, Password from mysql.user order by User;
    • mysql> drop user [USER]@"[IP-ADDRESS]";
      • USER : ※接続ユーザー
      • IP-ADDRESS : ※接続元 IP アドレス
    • mysql> select Host, User, Password from mysql.user order by User;

■ 【補足】MySQL データベースの バックアップ と リストア

  1. 以下のコマンドで、MySQL on RDS から所定のデータベースをバックアップする。
    • $ mysqldump -h [RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] --databases [DATABASE] > [BACKUP-FILE]
      • RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
      • PORT : ex) 3306
      • USER : ※接続するユーザー
      • PASSWORD : ※接続するユーザーのパスワード
      • DATABASE : ※バックアップするデータベース
      • BACKUP-FILE : ※バックアップするデータベース ex) ~~~~.sql
  2. 以下のコマンドで、MySQL on RDS に所定のデータベースをリストアする。
    • $ mysql -h RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] [DATABASE] < [RESTORE-FILE]
      • RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
      • PORT : ex) 3306
      • USER : ※接続するユーザー
      • PASSWORD : ※接続するユーザーのパスワード
      • DATABASE : ※バックアップするデータベース
      • RESTORE-FILE : ※リストアするデータベース ex) ~~~~.sql


    • mysql> show databases;
    • mysql> show tables;


    • ※サイトの URL が変更になる場合は、事前にリストアファイルの内容を全て置換しておくこと !!

4.WordPress

  • ※ リプレース元のベースディレクトリの WordPress データを、そのままリプレースします。
    • /var/www/vhost/i-*

5.ALB

  1. 以下のリンクから、ターゲットグループのコンソールを開きます。
  2. 所定のターゲットグループを選択し、「編集」ボタンを押下します。
    • FireShot Capture 123 - ターゲットグループ - EC2 Management Console - ap-northeast-1.console.aws.amazon.com.png
  3. インスタンスの一覧から、作成したインスタンスを選択後、「登録済みに追加」ボタンを押下し、作成したインスタンスを登録済みターゲットに追加します。
    • FireShot Capture 124 - ターゲットグループ - EC2 Management Console - ap-northeast-1.console.aws.amazon.com.png
  4. 「保存」ボタンを押下します。

99.ハマりポイント

  • 特に、ハマったところはないけど…。

XX.まとめ

検証とか、どうしようかな…。

CloudFront とかも含めた、検証環境を構築するのとか、メンドイ…。

何か良い方法ないかしら???

うーん…。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?