EC2ではAmazon Linux (ライセンス費用無し)とRHELが選択できるのですが、CentOSはないです。
Amazon Linux はAmazon用にカスタマイズされていてコマンドも違うのではないか、その為に新しいコマンドを無駄に覚えたくない(覚えても仕事には繋がらない)という理由から、RHELを選択して、ボツワナに赴任している間に無料期間の1年が過ぎ、月5千円ほどRHELのライセンス料を支払っていました。
よくよく調べてみると Amazon Linux も CentOS (またはRHEL)と多少の違いがある程度で大きな差異はないようだったので、Amazon Linuxに移行することにしました(無駄に月々5千円多く払っていた。。)。月々約7千円払っていたのが、2千円程度に抑えられそうです。
EC2作成
リージョンは東京を選択します(やっと追加されたみたいですね)。そういえば、2、3年前は英語表示だったのに、今はまともな日本語に変わっていますね(途中は機械翻訳のへんな日本語の時もあったような)。英語勉強中とはいえ、やっぱり日本語の方がありがたい。
EC2(仮想サーバ)を選択します。
2つある内、WordPress用のLAMP環境が構築しやすそうで、Rubyも使えるこちらにしました。インスタンスタイプは「t2.micro」を選択、一般的なブログであればまあ何とか大丈夫です(t2.nanoだとメモリ不足で恐らくWordPressは動作しません)。
システム構成(EC2/t2.micro)
項目 | スペック |
---|---|
CPU | Intel Xeon 2.40GHz |
Memory | 1GB |
HDD | 約9GB |
項目 | 内容 |
---|---|
OS | Amazon Linux AMI 2018.03 |
MW | Apache 2.4.33 |
MySQL 5.6.40 | |
AP | PHP 7.0.30 |
Git 2.14.4 | |
WordPress 4.9.6 |
AWSアカウント作成
AWSのEC2は下記のサイトを参考にしました。
Key Pair(秘密鍵)を作成します(画面キャプチャ忘れました)。自分は前回RHELで作成したのと同じのを利用することにしました。
※ Windowsユーザで、AWS初めて触る人の最初の関門ですね(確かWindowsの場合は、下記リンクようにPuTTY Key Generatorを使う必要があった気がします)。
参考
わずか5分!? AWSのEC2でクラウドなウェブサーバーを構築してみた
[EC2] Windows環境で秘密鍵・公開鍵を作成しキーペアにインポートする
EC2にSSH接続
teratermを起動
ホスト名 : ec2-**********.compute.amazonaws.com or IPアドレス
ユーザー名: ec2-user
パスワード: 空白
「RSA/DSA鍵を使う」の「秘密鍵」で先ほど作成した「keyPair.pem」を選択
参考
EC2(Elastic Beanstalk)にSSH接続する
LAMP環境構築
下記のリンクにあるように、Teratermで接続しているとセッションが切れてしまって、都度再接続が必要な場合があります。その場合は、TeratermのKepp-aliveの設定はデフォルトで300秒になっているので、60秒とかにでも変更して設定を保存 (これ忘れがち) しておけばOKです。
参考
Amazon EC2でputtyのセッションが頻繁に切れる場合の対応方法
ロケールやswapの設定をしていきます。
# yum -y update # インストール済みのパッケージを最新にアップデートする(セキュリティ的に重要) : # date Tue Jun 19 11:46:41 UTC 2018 # 9時間ズレている # cp -p /etc/localtime /etc/localtime.org # ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # ロケール設定を東京に変更 # date Tue Jun 19 20:48:29 JST 2018 # 時刻のズレが解消 # # vi /etc/sysconfig/clock # 下記のようにタイムゾーン設定を設定 : # diff /etc/sysconfig/clock.org /etc/sysconfig/clock 1c1 < ZONE="UTC" --- > ZONE="Asia/Tokyo" # # mkswap /swap # /swap に、1G(1Mx1024)の領域を確保 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=429b5961-af0d-4436-b6b8-ca35f96c03f3 # chmod 0600 /swap # swapon /swap # free total used free shared buffers cached Mem: 1011176 940908 70268 144 48460 326476 -/+ buffers/cache: 565972 445204 Swap: 1048572 0 1048572 # /swap が作成されたことを確認 # # vi /etc/rc.local # 起動時にswapがONされるよう設定 : swapon /swap # shutdown -r now # 一旦リブート #
続いて、LAMP環境を構築していきます。
# yum install -y httpd24 php70 php70-mysqli php70-mbstring # Apache、PHP、PHP拡張モジュールのインストール : # yum install -y git # Gitもインストール : # httpd -v # Apacheのバージョン確認 Server version: Apache/2.4.33 (Amazon) Server built: May 23 2018 19:02:39 # php -v # PHPのバージョン確認 PHP 7.0.30 (cli) (built: May 10 2018 17:39:13) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies # service mysqld start # MySQLの起動 : # mysql --version # MySQLのバージョン確認 mysql Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using EditLine wrapper # git --version git version 2.14.4 # # service httpd start # Apacheの起動 Starting httpd: [ OK ] # # chkconfig httpd on # httpdを自動起動 # chkconfig mysqld on # mysqldを自動起動 # chkconfig # 設定されていることを確認 : httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off : #
AWS側でセキュリティグループのインバウンドタブをクリックして、SSH/HTTP/HTTPSポートによる通信を許可するルールを追加します(AWSコンソール→EC2→Security Groups→Inbound→Edit)。
ブラウザより、 http://IPアドレス/ にアクセスし、Apacheのページが表示されることを確認します。
apacheユーザへドキュメントルート(/var/www)へのアクセス許可を与えます。
プラグインの更新/ダウンロード、テーマのダウンロード等でftp接続情報を求められますが、apacheユーザへアクセス許可を付与しておけば、その画面が表示されることなくダウンロードが実施されます。ここで、その設定をしておかないと下記のように結構ハマります。ec2-userユーザへファイル所有者を変更するような記事が多いですが、「Wordpressのディレクトリのownerがphp(apache)実行ユーザと同一であること」が条件なので、apacheユーザへ変更するのが正解ですね。
- ec2-userユーザは公開鍵方式でパスワードを手入力しない
- じゃあ別にftp用アカウントを作成する必要がある? ⇒ 上手くいかない
- ftpサーバ(vsftpd)立てる必要あり? ⇒ 上手くいかない
- wp-config.phpを変更する? ⇒ セキュリティ的に脆弱
- functions.phpを変更する? ⇒ テーマをアップデートした時に上書き更新されないよう、子テーマを変更する?(なんか面倒くさくなってきた…)
# chown -R apache:apache /var/www # /var/wwwディレクトリ配下の所有者/グループを変更 # find /var/www -type d -exec chmod 2775 {} \; # /var/www配下のディレクトリの権限変更 # find /var/www -type f -exec chmod 0664 {} \; # /var/www配下のファイルの権限変更 #
参考
AWS EC2にLAMP環境を構築するまで
WordPressのアップグレードやプラグインの更新をFTP画面なしで行う方法
phpinfoの設置
$ vi /var/www/html/phpinfo.php <?php echo phpinfo(); ?>
ブラウザで http://IPアドレス/phpinfo.php にアクセスし、以下のように表示されることを確認
PHP設定
# /etc/php.ini を下記のように編集 # diff php.ini.org php.ini 877c877 < ;date.timezone = --- > date.timezone = Asia/Tokyo # タイムゾーン設定 1465c1465 < ;mbstring.language = Japanese --- > mbstring.language = Japanese # 日本語設定 1472c1472 < ;mbstring.internal_encoding = --- > mbstring.internal_encoding = UTF-8 # 文字コード設定 1480c1480 < ;mbstring.http_input = --- > mbstring.http_input = auto 1503c1503 < ;mbstring.detect_order = auto --- > mbstring.detect_order = auto
参考
AWS EC2にLAMP環境を構築するまで
MySQL設定
# mysql -u root -p Enter password: mysql> create database wp; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on wp.* to admin@localhost identified by 'wp用の任意パスワード'; Query OK, 0 rows affected (0.00 sec)
WordPressのインストール
WordPressのダウンロード
$ wget http://ja.wordpress.org/latest-ja.tar.gz # WordPressのダウンロード $ sudo tar zxvf latest-ja.tar.gz -C /var/www/ # WordPressの展開 $ sudo su - # chown -R apache:apache /var/www/wordpress # ファイル所有者/グループを変更 # find /var/www/wordpress -type d -exec chmod 2775 {} \; # /var/www/wordpress配下のディレクトリの権限変更 # find /var/www/wordpress -type f -exec chmod 0664 {} \; # /var/www/wordpress配下のファイルの権限変更 # # vi /etc/httpd/conf/httpd.conf DocumentRoot "/var/www/wordpress" # DocumentRootをWordPressのディレクトリに変更 <Directory "/var/www/wordpress"> # DocumentRootと同じディレクトリに変更 AllowOverride All # .htaccessによるディレクティブの上書きを許可 # service httpd restart # Apacheの設定を反映 Stopping httpd: [ OK ] Starting httpd: [ OK ]
WordPressのインストール
ブラウザで http://IPアドレス/ にアクセスし、インストール実施
固定IPアドレスの設定&ドメインの割り当て
固定IPアドレスの設定
デフォルトの状態では、AWS EC2のIPアドレスは再起動のタイミングで変わります。その状態では色々不具合が出てくるので、下記リンクを参考にIPアドレスを固定します。その後、ドメインを紐づけます。
参考
Elastic IP アドレスの設定とRoute 53から独自ドメインの割当
WordPressトラブルシューティング
WordPressを設置しているサーバのドメイン/固定IPを上記で変更したことで、管理画面が開けなくなります。WordPressをセットアップした際に、WordPressで使用しているDBにドメイン/IPアドレスの情報が記録されているので、このDBのレコードを更新する必要があります(WordPressインストール前にIPアドレスを固定していれば、この作業は不要になるので楽です)。
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar $ php wp-cli.phar --info OS: Linux 4.14.47-56.37.amzn1.x86_64 #1 SMP Wed Jun 6 18:49:01 UTC 2018 x86_64 Shell: /bin/bash PHP binary: /usr/bin/php-7.0 PHP version: 7.0.30 php.ini used: /etc/php.ini WP-CLI root dir: phar://wp-cli.phar WP-CLI vendor dir: phar://wp-cli.phar/vendor WP_CLI phar path: /home/ec2-user WP-CLI packages dir: WP-CLI global config: WP-CLI project config: WP-CLI version: 1.5.1 $ chmod +x wp-cli.phar $ sudo mv wp-cli.phar /usr/local/bin/wp $ wp option update siteurl '新URL' --path=/var/www/wordpress Success: Updated 'siteurl' option. $ wp option update home '新URL' --path=/var/www/wordpress Success: Updated 'home' option. $ wp search-replace '旧URL' '新URL' --path=/var/www/wordpress --skip-columns=guid +------------------+-----------------------+--------------+------+ | Table | Column | Replacements | Type | +------------------+-----------------------+--------------+------+ : | wp_options | option_value | 1 | PHP | | wp_posts | post_content | 2 | SQL | : Success: Made 3 replacements.
ドメイン名取得
下記リンクを参考に、AWSのRoute 53でドメインを購入します。.comドメインは、$12/年で、他のドメイン提供企業と大差はないようです。
固定グローバルIPアドレスにドメイン名を関連付ける
下記リンクを参考に、固定グローバルIPアドレスにドメイン名を関連付けます。
WordPressデータインポート/エクスポート
プラグインAll-in-One WP Migrationを使用することで、プラグインも含めてエクスポート/インポートできます。無料版は512MBが上限のようなので、バックアップファイルは削除するか、別なディレクトリへ移動してから実施します。「PHPのバージョン差異で問題発生するかもね」といった警告メッセージが表示されて、結果インポートできなかったので、仕方なくWordPress標準のエクスポート/インポートツールを使用して、その後はプラグインを逐次インストールしました。
参考
WordPressのサイトを別のサーバーに移行する方法
6b. WordPress制作入門(備忘録)
WordPressの画像とDBエクスポート/インポート
メディア画像は下記ディレクトリに保管されているので、WinSCPなどを使ってローカルPCにダウンロード後、AWSのEC2サーバへアップロードします。
/var/www/wordpress/wp-content/uploads配下の2018、2017、…、(年月形式でメディア画像を格納していた場合)
DBを作成していた場合は、下記を参考にDBをエクスポート/インポートします。
MySQLのデータベースをまるっとお引越し。 (エクスポート/インポート)
内部リンクを相対パスで設定していれば問題ないのですが、絶対パスで設定していた場合、下記のように変更が必要です。新①でもOKですが、ここで絶対パスを使用すると、今後移行する時にまた問題となるので、新②のような相対パスで設定しておきます。
旧:http://jocv-mb.com/setswana
新①:http://blessed-rain.com/setswana
新②:../setswana
WordPressのデータベースを直接書き換えて画像のリンク切れを解消した話
アイキャッチ画像も再度設定が必要になります。Export Featured Imagesプラグインを使用することで、アイキャッチ画像をインポートできるようです。私の旧WordPressはお亡くなりになっていたので、手動で一つ一つ再設定する羽目になりました。。
ファビコン(favicon)設定
ブラウザ上のタブや、お気に入り一覧で表示されるそのサイトのアイコンをファビコン(favicon)といいます。下記を参考に設定します。
301リダイレクト設定
旧URLにアクセスした際、新URLにリダイレクトするように、301リダイレクト設定をしておきます。1月程度並行稼働しておき、その後古いAWSサーバは解約します。
やってしまったこと/ハマったこと
個人ブログなので(仕事ではないし)、開発環境での検証もせずに、取り敢えずやってみたら色々ハマって、トラブルシューティングのいい勉強になりました。
①新サーバのPHPのバージョンは7.0なので、旧サーバ(PHPのバージョンは5.6)のWordPressのプラグインを引っ張ってこれなかったので、よく考えずに旧サーバのPHPのバージョンを上げるといいことあるかなとなぜかその時は思ってしまってバージョンを上げる ⇒ WordPressが動かなくなる ⇒ ダウングレードしても動かずご臨終…
②WordPressで使用するDBとは別のDBを作成していたので、その作成が終わって、WordPress用のDBを何用か忘れてしまって、うっかりDBを削除 ⇒ WordPressが動かなくなる ⇒ DBのバックアップを毎日取得する設定にしていたので、そのデータから前日の状態までは復旧
WebProgramming入門
- 01a. 開発環境構築(Windows8.1+VMware Player+CentOS)
- 01b. 開発環境構築(Windows 10+Ubuntu)
- 01c. 開発環境構築(Ubuntu18.04(WSL)+Ansible+Serverspec+WP-CLI)
- 01d. 開発環境構築(WSL2+Ubuntu18.04+Docker)(作成中)
- 02a. AWS環境構築(CentOS6)
- 02b. AWS環境構築(CentOS6+LAMP環境+WordPress)
- 02c. AWS環境構築(CentOS7+Django)
- 02d. AWS環境構築(CentOS7+Ansible+Serverspec+WP-CLI+Munin)(作成中)
- 02z. さくらのクラウド環境構築(CentOS7+Ansible+Serverspec+WP-CLI)
- 03a. WordPress制作入門
- 03b. WordPress制作入門
- 04. トラブルシューティング
- 11. HTML/CSS入門
- 11a. ProgateでHTML&CSS初級
- 11b. ProgateでHTML&CSS中級(ランディングページ)
- 11c. ProgateでHTML&CSS上級(レスポンシブデザイン)
- 11d. ProgateでHTML&CSS(Flexbox編)
- 11e. ProgateでSass(CSSをより便利に効果的に操作する言語)
- 11y. ドットインストールでBootstrap4入門
- 11z. PaizaラーニングでBootstrap4入門
- 12. MySQL入門
- 12a. ProgateでSQL Ⅰ~Ⅲ
- 12b. ドットインストールでmongoDB入門
- 13. PHP入門
- 14. ProgateでRubyⅠ~Ⅴ
- 15a. ProgateでRuby on RailsⅠ~Ⅴ
- 15b. ProgateでRuby on RailsⅥ~Ⅷ
- 15c. ProgateでRuby on RailsⅨ~Ⅺ
- 16. ProgateでPythonⅠ~Ⅴ
- 17. paizaラーニングでFlask入門
- 18a. Django入門1(Djangoの基本の理解)
- 18b. Django入門2(Djangoの動作の理解)
- 18c. Django入門3(Djangoのテンプレートとフォームを理解)
- 18d. Django入門4(お勧め店を投稿できるランチマップアプリの作成)
- 18e. Django入門5(Djangoでユーザー管理)
- 19a. ProgateでjQuery初級編
- 19b. ProgateでjQuery中級編
- 19c. ProgateでjQuery上級編
- 20a. ProgateでJavascript(ES6)Ⅰ~Ⅲ
- 20b. ProgateでJavaScript Ⅳ~Ⅴ
- 20c. ProgateでJavaScript Ⅵ~Ⅶ
- 20d. JavaScriptでCRUDアプリを作る(ELOOP)