AWS上でのWordPress落とし穴

前回WordPressのインストールをした後の気づきです。

WordPressの表示がおかしい

AWS上のEC2インスタンスにテスト環境を作ったのですが、しばらく使わないだろうという理由で一旦シャットダウンしていました。
その後、ちょっと確認したい事があったのでEC2を起動してWordPressにアクセスしたのですが、表示が壊れている状態となっていました。

  • IP直打ちでインストールした際の注意点

調べてみるとよくある現象のようですが、インストール時にパブリックIP直打ちでインストールした場合、WordPressのサイトアドレスに「http:(IPアドレス)」と設定されてしまい、EC2のシャットダウン、起動によりサーバのIPアドレスが変わってしまうため、諸々設定が読み込めず、サイトの表示が壊れてしまうようです。

ぱっと思い浮かんだ対処としては、以下2点。
1. インストール後、EC2を落とさずにWordPressの設定からサイトアドレスを変更
 [設定]-[一般]-[サイトアドレス(URL)]を変更
2.ドメイン設定してからインストール(今回はRoute53を使用)

WordPressの管理画面から「更新」などができない

AWS上だけに限った話ではないですが、インストールディレクトリの所有者をroot等にしている場合、更新する際にFTPの情報を求められると思います。今回の環境ではwebサーバはapacheを使っているので、インストールディレクトリ(/var/www/wordpress)の所有者をapacheにしてあげることで回避可能。

chown -R apache:apache /var/www/wordpress

WordPress 4.8.2 インストールメモ

WordPress 4.8.2をインストールしたときのメモ。

環境

サーバ EC2
OS Amazon Linux 2017.09
webサーバ Apache 2.4
言語環境 php7.1
DB mysql5.7

webサーバのインストール

teratermなどからAWS上のEC2インスタンスにログイン。

今回の環境でyumhttpdのみを指定するとApache2.2がインストールされる。
php7系のインストールでうまくいかなかったので、Apache2.4のバージョンを指定。

sudo yum install httpd24

webサーバの起動と自動起動設定

sudo service httpd start
sudo chkconfig httpd on

phpのインストール

どのパッケージにどんな役割があるかどうかはよくわかりませんが、以下のパッケージをインストール。

sudo yum install php71 php71-mbstring.x86_64 php71-devel.x86_64 php71-pdo.x86_64 php71-gd.x86_64 php71-mysqlnd.x86_64

mysqlのインストール

mysql5.7をインストール。

sudo yum install mysql57-server

mysqlの設定

mysqladmin -u root password 'xxxxx' #dbのrootパスワード設定
mysql -u root -p
  mysql> create database wp; #wpという名前のdbを作成
        Query OK, 1 row affected (0.00 sec)

  mysql> grant all privileges on wp.* to wp@localhost identified by 'xxxxx'; #管理権限付与
        Query OK, 0 rows affected, 1 warning (0.00 sec)

WordPressダウンロード、解凍

WordPressのパッケージをダウンロードして解凍。

wget https://ja.wordpress.org/wordpress-4.8.2-ja.tar.gz .
tar zxvf wordpress-4.8.2-ja.tar.gz

webサーバの公開場所に保存

sudo cp -r wordpress /var/www/

webサーバのDocumentRootの変更

sudo vi /etc/httpd/conf/httpd.conf
     DocumentRoot "/var/www/wordpress" #120行目付近
  <Directory "/var/www/wordpress"> 
      AllowOverride All
      # Allow open access:
      Require all granted
  </Directory>

httpd.confの編集が完了したらサービス再起動

sudo service httpd restart

WordPress設定ファイルの編集

sudo cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
sudo vim /var/www/wordpress/wp-config.php

28 /** WordPress のためのデータベース名 */
29 define('DB_NAME', 'xxxxx');
30
31 /** MySQL データベースのユーザー名 */
32 define('DB_USER', 'xxxx');
33
34 /** MySQL データベースのパスワード */
35 define('DB_PASSWORD', 'xxxxxxxx');
#先ほどmysqlで設定した内容を記載

WordPressのインストール

ブラウザからサーバへアクセスすると、以下のような画面が表示されるので、一通り入力して「WordPressをインストール」。
f:id:kawakamasu:20171014233716p:plain

vps上にメールサーバ構築

webサービスのアカウント登録などに使うための捨てアドレスが欲しかったので自前でメールサーバ構築。
以下の環境で構築開始。

サーバ Serversman@vps
OS CentOS7.0

サーバの設定

本題に入る前にvpsの設定をいじる。
 userアカウント作成 
 sshでrootログイン禁止
 SELINUX Disabled
 ホスト名変更
 iptables設定変更
  INPUT DROP
   sshのポート穴あけ
  

Postfixを設定

設定自体はwebに沢山あるので調べながら進める。
今回参考にさせてもらったのは以下のサイト。
centossrv.com


vi /etc/postfix/main.cf
※左の数字は行番号
75 #myhostname = host.domain.tld
76 #myhostname = virtual.domain.tld
77 myhostname = duck-dz.kazika.net ※追記

85 #mydomain = domain.tld
 86 mydomain = kazika.net ※追記
 
 101 #myorigin = $myhostname
102 #myorigin = $mydomain
103 myorigin = $mydomain ※追記

117 #inet_interfaces = all
118 #inet_interfaces = $myhostname
119 #inet_interfaces = $myhostname, localhost
120 inet_interfaces = localhost
↓ に変更
117 inet_interfaces = all
118 #inet_interfaces = $myhostname
119 #inet_interfaces = $myhostname, localhost
120 #inet_interfaces = localhost


168 mydestination = $myhostname, localhost.$mydomain, localhost
169 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
170 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
171 #       mail.$mydomain, www.$mydomain, ftp.$mydomain
↓ に変更
168 #mydestination = $myhostname, localhost.$mydomain, localhost
169 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
170 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
171 #       mail.$mydomain, www.$mydomain, ftp.$mydomain

422 #home_mailbox = Mailbox
423 #home_mailbox = Maildir/
424 home_mailbox = Maildir/ ※追記

577 #smtpd_banner = $myhostname ESMTP $mail_name
578 #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
579 smtpd_banner = $myhostname ESMTP unknown ※追記
master.cfを編集
#smtp      inet  n       -       n       -       -       smtpd ※コメントアウト

submission inet n       -       n       -       -       smtpd ※コメントアウト解除
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes ※コメントアウト解除
各種サービス起動
sasl起動
systemctl start saslauthd
systemctl enable saslauthd.service


Postfix起動
systemctl restart postfix.service
systemctl enable postfix.service
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'

とりあえず以上でサーバからメール送信することはできる。


はまった箇所
 サーバから自分のgmailにメール送信したときに遅れない問題
  

  • デフォルトメールクライアントがpostfixでなくsendmailだった

  →解決:alternatives --config mta コマンドでデフォルトmailコマンドを変更

  • dnsで名前解決ができていなかった

  →iptablesでINPUTに53ポートが許可されていなかった
   これが原因でyumcurlが出来なかった
   sshでログインする際も遅かった。これはアクセス元のIPアドレスを逆引きしようとしていて、
   名前解決できずにタイムアウトしてから次の処理に進むためだった。
   ログインしたときに、"Last login: Mon Jul 17 21:24:44 2017 from xxxxx.jp"
   これを表示するときのやつ。

  • logにipv6関連のメッセージが記載してあった。

   →IPv6に対応していないサーバ環境で出るメッセージだった模様。
       postfixのmain.cfの"inet_protocols = all"を"inet_protocols = ipv4"に変更

Raspberry Pi2に無線設定

Raspberry Pi2 typeBにUSB無線ドングルを買ってきて設定。DHCPで。

あんまり安いと発熱がすごいらしいのでこちらを購入。少し使用した状態だと発熱は大丈夫そう。

sudo iwlist wlan0 scan |grep ESSID
                    ESSID:"xxxxxxxxxx"
                    ESSID:"oooooooooo"
                    ESSID:"aaaaaaaa"

wpa_passphrase <ESSID> ←検索したSSIDを指定
# reading passphrase from stdin
ここにパスワード打ち込む

以下のようにネットワークの設定が生成されるので、コピー
network={
	ssid="xxxxxxxxxx"
	#psk="hogehoge"
	psk=4923805fdgnoas0gtwn4fgntl2l410anebtpabe0
}

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf 
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
#先ほどコピーしたネットワークの設定をここに貼り付け

再起動して、ifconfigでIPが振られていることを確認。

bashでランダムな2進数を生成

8bitの2進数をランダムに出したかったのでメモ。
bashでランダムな10進数の数字を2進数に変換する。

echo "ibase=10; obase=2 ; `expr $RANDOM % 256`" | bc

$RANDOM は0~32767までの数字を出力する
それをnで割った余りを割り出す。0~255までのランダムな数字がでてくる。
ibase=10進数; obase=2進数; <変換したい数字> | bc

という感じで、bashでランダムな10進数を2進数に変換。

linuxコマンドライン上からメール送信

linux上からメール送信したときのメモ。

[user@hostname ~]$ mail -s “件名” -r 送信元アドレス 宛先アドレス

#Enterを押したあとに本文入力。
#ヒアドキュメント的に入力できる。

お疲れ様です。
明日の飲み会行けたら行きます。
以上、よろしくお願いいたします。

入力終わったら、ctrl+Dで抜ける

grepコマンドで特定の文字列を抜きだす

linuxgrepコマンドを使っていて、特定の文字だけ抜き出したい時に調べたメモ。
以下のようなテキストファイルをベースに色々試す。「-w」「-x」などのオプションでの挙動の違いなど。

$ cat test.txt
duck
duckduck
hogehogeduck
duck 12345

#オプション無し
$ grep duck test.txt
duck
duckduck
hogehogeduck
duck 12345

#「-w」オプション
$ grep -w duck test.txt
duck
duck 12345

#「-x」オプション
$ grep -x duck test.txt
duck

「-w」は検索語にマッチする「行」を出力。

「-x」は行全体が検索語にマッチするかを判定。

manにも書いてある。