クラウドサーバを GMO クラウドから Amazon Web Service の EC2 に移行するに当たって、今までの RSS クローラを修正。
正直ものすごい修正した。
Amazon Web Service を無料枠で使う際の雑記
- EC2 インスタンス作成時、ストレージのボリュームを、EBS 無料枠の 30GB まで増やす。
- Amazon Linux 2 ではスワップファイルを初期状態では持っていないので、スワップファイルを作成する。
- amazon-linux-extras で lamp-mariadb10.2-php7.2=latest をインストールする。
- yum install httpd する。
- yum install mod_ssl する。
- VirtualHost で /home/hoge/www を指定した場合、エラーログに「Permission denied」が出る場合、多くの原因は、/home/hoge ディレクトリのパーミッションが 775 になっていない。
- Amazon SES を使う場合、まずは Postfix でメールをローカル配送できるようにする。
そして、SES から認証メールが着たら Maildir/new のファイルを cat して、認証 URL をブラウザにコピペする。
認証が終わったら、Postfix の設定を SES に転送するように変更する。 - CloudFront でディストリビューションする場合、オリジンは http でも https でも見られるようにする。
Redirect https かけると、後でブラウザから「TOO MUCH REDIRECT」と怒られることがある。 - RDS で作るユーザは、@以降のアドレスに EC2 のプライベートアドレスを付ける。
- メモリは使用率 92% ぐらいからスワップファイル使い出すから、CloudWatch Agent 入れて 90% で再起動だと WordPress とかの大物が一時的に大きなメモリサイズ使ってそこで再起動かかっちゃうし、95% だとそもそもその値にならない。
スワップファイルの空き容量までわかる方法ないかなー。 - WordPress でユーザ権限を与えるのは wp.* にだ。wpl.localhost ではない。
- AWS for WordPress の CloudFront 機能は、特にマルチサイトだと使い物にならない。
Amazon Linux 2 で Segmentation Fault
GMO クラウドで動かしていた、ツイートを一覧表示するプログラム、AWS の Amazon Lunux 2 に持って行って動かすと 10 回ぐらい動かすと「Segmentation Fault」でエラーになる。
それでもリスタートしないでおくと、順に
- WordPress がエラー画面
- Apache が落ちる
- SSH も繋がらなくなる
GMO クラウドでは1年間リスタートなしで動いているのに、Amazon Linux 2 では1週間と経たずに落ちる。メモリリークかと思って色々調べていたんだけど、原因は PHP のプログラムにあるっぽい。
PHP のガベージコレクションを信じるな。
使い終わったオブジェクトを unset するようにプログラムを書き換えたら、2 日経った今のところ、大丈夫そう。
WordPressの引っ越し
WordPress を CentOS7.6 + PHP7.2.9 + MySQL8.0.16 から AWS(EC2 + RDS) PHP7.2.27 + MariaDB10.2.21 に引っ越しました。
そこでの引っ越し方法とつまづきポイントを書きます。
データベースのエクスポート
mysqldump -u pocolog -p -h localhost -A -n > pocolog.sql
エクスポートしたデータで、旧URLから新URLに変換
エクスポートした SQL で、’https://{今までのブログのURL}’ を ‘https://{新しいブログのURL}’ にひたすら置換。
新サーバに上記データをコピー
mysql -h maria.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p < pocolog.sql
Access denied エラーをひたすら潰す
ERROR 1227 (42000) at line xx: Access denied; you need (at least one of) the SUPER privilege(s) for this operation をひたすら潰す。
新しいURLに変更
mysql コンソール上で update wp_blogs set domain = ‘{新しいブログのURL}’;
MediaWikiをAWSのEC2+RDS構成で動かす方法
MediaWikiに限らないかも知れませんが、Amazon Web Service の EC2 + RDS構成で動作させる方法です。
- MariaDB にはホストを指定して接続する。
mysql -h maria.xxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p - データベースを作成する。
create database [データベース名]; - ユーザを作成する。
create user ‘[ユーザ名]’@'[EC2 のプライベート IP アドレス]’ identified by ‘[パスワード]’; - ユーザにデータベース操作の権限を与える。ここで、[ユーザ名]@[EC2のプライベートIPアドレス]を指定する。
grant all privileges on [データベース名].* to ‘[ユーザ名]’@'[EC2のプライベートIPアドレス]’ identified by ‘[パスワード]’;
以上の設定をした後にMediaWikiをインストールすれば、正しく動作するはず。
AWS の CloudFront で WordPress を稼働してて、かつ ec2 間に SSL 通信をしている場合
Let’s Encrypt でよく使うコマンドのまとめ
AWS CloudFront で WordPress を立ち上げる大日程
- http で静的なオリジンサイトを立ち上げる。
- Let’s Encrypt で オリジンサイトに SSL 導入。
- https なオリジンサイトに WordPress インストール。
- CloudFront 導入。詳しくは
- 表側サイトの動作確認。
- WordPress の設定。管理画面で「一般」→「WordPress アドレス」「サイトアドレス」を表側の URL に変更。
- ec2 の方の httpd.conf にも表側サイトの設定を書く。←なぜ?
- マルチサイト作成。