Amazon AWS で ec2 + rds の構成で WordPress 構築してみた。
速! ec2 の静的なサイト(.html のサイト)では Google Analytics の速度スコアが 80 ぐらいだったのに、WordPress のページは速度スコアが 99!
運用中の GMO クラウドより速い。
なんでこんなに速いんだ?
プラグインとか入れてないから?
AWS・Linux・Apache・qmail・レンタルサーバ・クラウド・HTML・CSS
GMOクラウドALTUSでhttpsサーバを立ち上げる道のりです。
目標は
です。
まずは、GMOクラウドの会員ページ→コンソールで新しい仮想サーバを作成。
OSはCentOS 7.3 LAMP 64bit
構成はミニサーバ
ディスクはなし
最後にrootパスワードが表示されるので、それをメモ。
同じくネットワークメニューから新規グローバルIPアドレスを付与。
コンソールのコンソールからrootでログインして初期パスワードを変更。
同時に、作業用の一般ユーザをuseraddで作成。
TeraTermよりsshログイン。
netstat -anとps auxで起動サービスを確認。
ApacheとSSHDが立ち上がっている模様。
ポートは空いているけど、メールサーバは立ち上がっていない模様。
ウェブブラウザでhttpアクセスして、サーバにつながって、Apacheの初期ページが表示されることを確認。
あ、お名前.comで新しいホストのAレコードも設定。
それで今日は時間切れ。
WordPressのテーマ、Twenty Seventeenいいですね。シンプルで今風のフラットなデザイン。
でも私は古い人間なので、5~10年ぐらい前に流行ったデザインにカスタマイズすることにしました。
うすーい灰色のバックに、白い紙を置いたイメージで。あとは空白を詰めます。
まず、PC画面で横幅を1200ピクセルに設定します。
media screen and (min-width: 48em) { .wrap { max-width: 1200px; } .has-sidebar:not(.error404) #primary { float: left; width: 67%; } .has-sidebar #secondary { float: right; padding-top: 0; width: 29%; } .navigation-top .wrap { max-width: 1100px; } }
は、PC画面などで幅が十分広い機種は、の意味です。
.wrapのmax-widthで横幅を設定(1200px)します。
記事部分の横幅は全体の67%、ウィジェット部分の横幅を29%としています。
@media screen and (max-width: 48em) { .wrap{ padding: 0px; margin: 0px; } }
逆にスマホでは画面全体にブログを表示させるため、padding・marginともに0px(余白なし)に設定します。
“WordPressのテーマTwenty Seventeenのカスタマイズ” の続きを読む
Google アナリティクスのレポート→行動→サイトの速度→速度の提案で、
ブラウザのキャッシュを活用する
静的リソースの HTTP ヘッダー内で、有効期日や最大経過時間を設定すると、ブラウザがネットワークからではなくローカル ディスクから以前にダウンロードしたリソースを読み込むようになります。
次のキャッシュ可能なリソースでブラウザのキャッシュを活用してください:
で、どうすればキャッシュさせるか調べてみました。
“Apacheウェブサーバで画像ファイル等をブラウザにキャッシュさせる” の続きを読むGMOクラウド ALTUS(アルタス)、Apacheの設定変更とWordPressのプラグイン追加でそこそこ速くなって満足していたんだけど、Kaeriyama Worksの応答速度が3秒程度、あとWordPressの編集画面が遅いので、もっと速くできないか考えてみる。
Kaeriyama Worksと同程度のボリュームの静的ページがロスなく表示されることから、遅い原因はメモリやネットワーク速度でない、CPU速度だと決めつけて、GMOクラウドでCPUを2つにすることに決定。
サポートページをいろいろ調べたのにGMOクラウド ALTUS(アルタス)のCPU追加方法が見つからなくて、サポートに連絡。やっとわかりました。
“GMOクラウド、CPUとメモリの増設” の続きを読むGMOクラウド ALTUS(アルタス)の最小構成ではPHP, Perlの実行がやや遅いので、ネットで調べてWordPressの高速化。
Apacheのサイトを見ながらファイルを圧縮。httpd.confを編集。
<Directory "/home/foo/www/wordpress"> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </Directory>
WP Super Cacheを追加。
最初、エラーが出て設定できなかったけど、wp-config.phpのパーミッションを757にしたら設定できた。
これで、PageSpeed Insightsのスコアが69から84へと急上昇。
満足の結果です。
MySQLです。GMOクラウドではバージョンが5.1だったので、phpMyAdminが動かなかったのと、mysqlでGRANT ALL PRIVILEGESがうまくいかなかったので、5.6にアップグレード。
やり方はさくらのVPS MySQLのアップデートを参考に。
アップデートできたのはいいが、GRANT ALL PRIVILEGESがエラーになる。
ネットを調べると5.6のバグとのこと。
「MySQLを5.1から5.6.10に上げたらなんか壊れた話」を参考にデータベースをアップグレードしたらうまくいくようになった。
WordPressはさくらのVPS WordPressのインストールとさくらのVPS WordPressの再インストールを参考にやったらできた。
当初、パーマリンク設定を「月と投稿名」にしていました。
それで運用して全然気づいてなかったんですけど、個別ページのリンクをクリックすると「404エラー」が出てました。
ググっても参考になりそうなサイトがない、最後の手段でkawa君に相談してみました。
パーマリンク設定をデフォルトにしてしばらく使っていたんですが、やはり「月と投稿名」にしたい。ネットで検索しなおしました。
今度は出てきました。
私の場合「2. 「httpd.confファイル」にサイトを配置したディレクトリに「AllowOverride」を追記」に当てはまってました。
今まで仕事でサイト管理者をやっていて、ユーザーが勝手に.htaccessでIncludesなんかを使われたらたまらん、ということで、「AllowOverride」をNoneに設定していました。
WordPressが「.htaccessに設定してくれ」と表示された時点で気づくべきでした。
それが今回の原因、と。
やっとWordPressで複数サイト対応できたのだが、URLがfoo.example.netでなく、メインのWordPressのURLにサブドメインを付ける形になって、URLがsub1.foo.example.netイマイチいけてない。
WordPressを再インストールすることにしました。
まずはexample.netを管理するユーザの追加。
その前に、今後ユーザを追加する場合があるだろうから、/etc/skelを編集します。
“さくらのVPS WordPressの再インストール” の続きを読む# cd /etc/skel # mkdir Maildir # mkdir Maildir/new # mkdir Maildir/cur # mkdir Maildir/tmp # mkdir www # mkdir cgi-bin # vi .forward [i] foo[:wq]
本命、WordPressのインストールまで来ました。
参考にしたサイトは、
皆さん、yumを使わず最新版をソースからインストールしているみたいなので、それに倣います。
$ wget http://ja.wordpress.org/latest-ja.tar.gz $ tar -xzvf latest-ja.tar.gz
“さくらのVPS WordPressのインストール” の続きを読む// mysqlでデータベースとユーザーの設定をします。 $ mysql -u root -p // WordPress用のデータベースを作成します。↓ mysql> CREATE DATABASE wordpress; // ユーザを作成し、データベースにアクセスする権限付与をします。↓ mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY "password"; // ↑意味は、wordpress(というユーザ)を作成して、パスワードは「password」を設定し(パスワードは推測しにくいものを入れてください)、 // wordpress(というデータベース)の全ての権限と操作を許可する、です。 // ↓データを反映します。 mysql> FLUSH PRIVILEGES; mysql> exit