AWS無料枠で1台のEC2上にWordPressを構築
概要
AWSの無料枠を利用して、EC2にWordPressを構築し、ブログを書けるようにする。
サマリー:
項目 | 内容 |
---|---|
EC2タイプ | t2.micro。1vCPU, メモリ1GB |
ストレージ | 30GB |
ELB | ALB |
LAMP | Amazon Linux2 / Apache2.4.53 / MariaDB10.5.10 / PHP8.0.16 |
WordPress | 5.9.3 |
プロトコル | HTTP/HTTPS |
前提
AWS上無料枠の申込が完了し、ルートユーザーが作成され、MFA認証のセキュリティ設定が完了していること。
手順
IAM(アイアム)ユーザーの作成する
Identity and Access Management (IAM)のメニューにて、
- 「ユーザーを追加」ボタンを押す。
- ユーザー名を決めて入力(割愛)
- 下記チェックをする
- 「アクセスキー - プログラムによるアクセス」
- 「パスワード - AWS マネジメントコンソールへのアクセス」
- 「コンソールのパスワード」に「カスタムパスワード」にチェック、そしてPWを設定。
にて
- 「グループの作成」ボタンを押す。
- グループ名を決めて入力(users)
実質管理者として作業できるようにしたいため、「AdministratorAccess」にチェック。 - 「ブループの作成」ボタンを押す。
- 「「次のステップ:タグ」を押す。 タブの追加は一旦なし。
- 「次のステップ」を押す。
- 「ユーザーの作成」を押す。
VPCの作成
パブリックサブネットのVPCを1つ作成し、その中にEC2のインスタンスを後から作成するイメージ。
EC2インスタンスを作成
EC2(Elastic Compute Cloud)を作成する。 画面にある「インスタンスを起動」ボタンを押す。
- ステップ1: Amazon マシンイメージ(AMI)
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type を選択。
- ステップ 2: インスタンスタイプの選択
下の「次のステップ:インスタンスの詳細の設定」を押す。
- ステップ 3: インスタンスの詳細の設定
設定項目は多いが、先程作成されたVPCとパブリックサブネットの選択以外、基本は一旦デフォルトでよし。
下の「次のステップ:ストレージの追加」を押す。
- ステップ 4: ストレージの追加
サイズを8から30に変更(無料枠で使える最大サイズ)。
下の「次のステップ:タグの追加」を押す。
- ステップ 5: タグの追加
最低限Nameタグを設定する。ここでは「wordpress01」に設定する。
下の「次のステップ:セキュリティグループの設定」を押す。
新しいセキュリティグループを作成する。SSHとHTTPとHTTPSのプロトコルを許可する設定する。
SSHは「マイIP」を設定(変動するので、都度変更等を行う必要がある)
下の「確認と起動」を押す。
- ステップ 7: インスタンス作成の確認
下の「作成」ボタンを押すと、下記「キーペア」作成のダイアログが表示される。
新しいキーペアの作成を選択、RSAで「wp-ssh-key」のキーペア名を指定し、「キーペアのダウンロード」ボタンを押すと、「wp-ssh-key.pem」という秘密鍵ファイルがDLされる。次に「インスタンスの作成」を押すと、インスタンスが作成される。
作成されました。
Elastic IPの作成と割り当てる
↓ ↓ ↓ 割り当てられた ↓ 「アクション」プルダウンにある「Elasitc IP アドレスの関連付け」を選択し、出た来た関連付け画面に作られたインスタンス 選択し、「関連付ける」ボタンを押す。これで、EC2のインスタンスには静的なグローバルIPが関連付けられて、SSH接続する準備ができた。
EC2にSSH接続する
インスタンスを選択した状態で、画面上部にある「接続」ボタンを押す。
次に、sshクライアントのタブに切り替えて、
↓
sshのコマンド行をコピーし、自分が使用するMacにて秘密鍵を$chmod 400
した後に、コマンドを実行する。
無事にssh接続できた。ついでに以下のコマンドで確認してみた。
$ cat /etc/system-release Amazon Linux release 2 (Karoo) $ df -k ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 devtmpfs 485340 0 485340 0% /dev tmpfs 493848 0 493848 0% /dev/shm tmpfs 493848 408 493440 1% /run tmpfs 493848 0 493848 0% /sys/fs/cgroup /dev/xvda1 31444972 1316048 30128924 5% / tmpfs 98772 0 98772 0% /run/user/1000
30GBの容量が確保されていることが分かる。
EC2にLAMP環境を構築
最初はまずSSHログインしている状態で、EC2にインストールされているソフトウェアを最新化する。
$ sudo yum update -y
Apacheをインストール
$ sudo yum install -y httpd (省略) $ httpd -v Server version: Apache/2.4.53 () Server built: Apr 12 2022 12:00:44
次に、apacheを起動する
$ sudo systemctl start httpd $ sudo systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since 日 2022-05-01 03:10:04 UTC; 5s ago Docs: man:httpd.service(8) Main PID: 558 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─558 /usr/sbin/httpd -DFOREGROUND ├─559 /usr/sbin/httpd -DFOREGROUND ├─560 /usr/sbin/httpd -DFOREGROUND ├─561 /usr/sbin/httpd -DFOREGROUND ├─562 /usr/sbin/httpd -DFOREGROUND └─563 /usr/sbin/httpd -DFOREGROUND 5月 01 03:10:04 ip-10-0-1-153.ec2.internal systemd[1]: Starting The Apache HTTP Server... 5月 01 03:10:04 ip-10-0-1-153.ec2.internal systemd[1]: Started The Apache HTTP Server.
上記Active: active (running)
になっているので、無事に立ち上がっていることが分かる。
次に、OSの再起動とともにhttpdも起動するように設定しておく
$ sudo systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
なお、以下のコマンドでhttpdが自動再起動する設定になっているかを確認できる
$ sudo systemctl is-enabled httpd enabled
上記の結果がenabled
になっているので設定されていることが分かる。
Webサーバが正常に起動されているか、ブラウザからも確認しておこう。http://52.22.省略
で以下の画面が開けば確認OK(注:まだSSL証明書が未設定のため、まだhttpsではみれない)
MariaDBをインストール
- EC2環境にインストール可能なバージョンを確認する
$ amazon-linux-extras | grep -i maria 54 mariadb10.5 available [ =stable ] $ sudo amazon-linux-extras install mariadb10.5 (省略) $ mariadb -V mariadb Ver 15.1 Distrib 10.5.10-MariaDB, for Linux (x86_64) using EditLine wrapper
MariaDBのバージョンが10.5.10であることが分かる。ついでにMariaDB関連のパッケージは次のコマンドで確認できる
$ yum list installed | grep -i mariadb Judy.x86_64 1.0.5-8.amzn2.0.1 @amzn2extra-mariadb10.5 libsphinxclient.x86_64 2.2.11-5.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-backup.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-common.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-config.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-connect-engine.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-cracklib-password-check.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-devel.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-errmsg.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-gssapi-server.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-libs.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-oqgraph-engine.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-pam.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-rocksdb-engine.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-server.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-server-utils.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mariadb-sphinx-engine.x86_64 3:10.5.10-2.amzn2.0.1 @amzn2extra-mariadb10.5 mytop.noarch 1.7-20.b737f60.amzn2 @amzn2extra-mariadb10.5 sphinx.x86_64 2.2.11-5.amzn2.0.1 @amzn2extra-mariadb10.5
- MariaDBサービスを起動する
まずは確認してみる
$ systemctl status mariadb ● mariadb.service - MariaDB 10.5 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ $ sudo systemctl start mariadb ● mariadb.service - MariaDB 10.5 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ [ec2-user@ip-10-0-1-153 ~]$ sudo systemctl start mariadb [ec2-user@ip-10-0-1-153 ~]$ systemctl status mariadb ● mariadb.service - MariaDB 10.5 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled) çsince 日 2022-05-01 05:16:43 UTC; 4s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Process: 1540 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS) Process: 1377 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 1353 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS) Main PID: 1487 (mariadbd) Status: "Taking your SQL requests now..." CGroup: /system.slice/mariadb.service └─1487 /usr/libexec/mariadbd --basedir=/usr 5月 01 05:16:41 ip-10-0-1-153.ec2.internal systemd[1]: Starting MariaDB 10.5 database server... 5月 01 05:16:41 ip-10-0-1-153.ec2.internal mariadb-prepare-db-dir[1377]: Initializing MariaDB database 5月 01 05:16:43 ip-10-0-1-153.ec2.internal mariadb-prepare-db-dir[1377]: Two all-privilege accounts were created. 5月 01 05:16:43 ip-10-0-1-153.ec2.internal mariadb-prepare-db-dir[1377]: One is root@localhost, it has no password, but you need to 5月 01 05:16:43 ip-10-0-1-153.ec2.internal mariadbd[1487]: 2022-05-01 5:16:43 0 [Note] /usr/libexec/mariadbd (mysqld 10.5.10-...7 ... 5月 01 05:16:43 ip-10-0-1-153.ec2.internal systemd[1]: Started MariaDB 10.5 database server. Hint: Some lines were ellipsized, use -l to show in full.
- MariaDBのプロンプトに入ってみる
$ sudo mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.5.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
- MariaDBのセキュリティ設定をする
- rootアカウントのパスワード設定
- 匿名アカウントの削除
- rootによるリモートログインの無効化
- テストDBの削除 セキュリティをよくする設定のようだ。
$ sudo mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] Enabled successfully! Reloading privilege tables.. ... Success! You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
rootアカウントのパスワードを設定し、他はすべてデフォルトのYで設定した。
- MariaDBを再起動するように設定しておく
$ systemctl is-enabled mariadb disabled $ sudo systemctl enable mariadb Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. $ systemctl is-enabled mariadb enabled $
Phpをインストール
EC2上利用可能なバージョンを確認する
$ amazon-linux-extras | grep php 42 php7.4 available [ =stable ] 51 php8.0 available [ =stable ]
一方、Supported Versions によると、php7.4は2022/11/28でセキュリティサポートが切れる。
なので、php8.0をインストールことにする。
$ sudo amazon-linux-extras enable php8.0 0 ansible2 available \ [ =2.4.2 =2.4.6 =2.8 =stable ] 2 httpd_modules available [ =1.0 =stable ] 3 memcached1.5 available \ [ =1.5.1 =1.5.16 =1.5.17 ] 5 postgresql9.6 available \ [ =9.6.6 =9.6.8 =stable ] 6 postgresql10 available [ =10 =stable ] 9 R3.4 available [ =3.4.3 =stable ] 10 rust1 available \ [ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0 =stable ] 11 vim available [ =8.0 =stable ] 18 libreoffice available \ [ =5.0.6.2_15 =5.3.6.1 =stable ] 19 gimp available [ =2.8.22 ] 20 docker=latest enabled \ [ =17.12.1 =18.03.1 =18.06.1 =18.09.9 =stable ] 21 mate-desktop1.x available \ [ =1.19.0 =1.20.0 =stable ] 22 GraphicsMagick1.3 available \ [ =1.3.29 =1.3.32 =1.3.34 =stable ] 23 tomcat8.5 available \ [ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50 =stable ] 24 epel available [ =7.11 =stable ] 25 testing available [ =1.0 =stable ] 26 ecs available [ =stable ] 27 corretto8 available \ [ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 =1.8.0_242 =stable ] 28 firecracker available [ =0.11 =stable ] 29 golang1.11 available \ [ =1.11.3 =1.11.11 =1.11.13 =stable ] 30 squid4 available [ =4 =stable ] 32 lustre2.10 available \ [ =2.10.5 =2.10.8 =stable ] 33 java-openjdk11 available [ =11 =stable ] 34 lynis available [ =stable ] 35 kernel-ng available [ =stable ] 36 BCC available [ =0.x =stable ] 37 mono available [ =5.x =stable ] 38 nginx1 available [ =stable ] 39 ruby2.6 available [ =2.6 =stable ] 40 mock available [ =stable ] 41 postgresql11 available [ =11 =stable ] _ php7.4 available [ =stable ] 43 livepatch available [ =stable ] 44 python3.8 available [ =stable ] 45 haproxy2 available [ =stable ] 46 collectd available [ =stable ] 47 aws-nitro-enclaves-cli available [ =stable ] 48 R4 available [ =stable ] _ kernel-5.4 available [ =stable ] 50 selinux-ng available [ =stable ] 51 php8.0=latest enabled [ =stable ] 52 tomcat9 available [ =stable ] 53 unbound1.13 available [ =stable ] 54 mariadb10.5=latest enabled [ =stable ] 55 kernel-5.10=latest enabled [ =stable ] 56 redis6 available [ =stable ] 57 ruby3.0 available [ =stable ] 58 postgresql12 available [ =stable ] 59 postgresql13 available [ =stable ] 60 mock2 available [ =stable ] 61 dnsmasq2.85 available [ =stable ] Now you can install: # yum clean metadata # yum install php-cli php-pdo php-fpm php-mysqlnd
続けて、以下のコマンドを実行する。
$ sudo yum clean metadata 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd リポジトリーを清掃しています: amzn2-core amzn2extra-docker amzn2extra-kernel-5.10 amzn2extra-mariadb10.5 amzn2extra-php8.0 22 個の metadata ファイルを削除しました 8 個の sqlite ファイルを削除しました 0 個の metadata ファイルを削除しました $ $ sudo yum install php-{pear,pdo,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip} (省略) ======================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================================================== インストール中: php-bcmath x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 65 k php-common x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 1.2 M php-fpm x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 1.7 M php-gd x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 168 k php-intl x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 179 k php-mbstring x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 473 k php-mysqlnd x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 189 k php-pdo x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 122 k php-pear noarch 1:1.10.12-9.amzn2 amzn2-core 359 k php-xml x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 173 k 依存性関連でのインストールをします: libxslt x86_64 1.1.28-6.amzn2 amzn2-core 240 k libzip x86_64 1.3.2-1.amzn2.0.1 amzn2-core 62 k oniguruma x86_64 5.9.6-1.amzn2.0.4 amzn2-core 127 k php-cli x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 5.0 M php-process x86_64 8.0.16-1.amzn2 amzn2extra-php8.0 83 k トランザクションの要約 ======================================================================================================================================== インストール 10 パッケージ (+5 個の依存関係のパッケージ) 総ダウンロード容量: 10 M インストール容量: 48 M Is this ok [y/d/N]:y (省略) 完了しました! php-json is available in Amazon Linux Extra topic "php7.4" To use, run # sudo amazon-linux-extras install php7.4 Learn more at https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
php-jsonはphp7.4までしかなう、php8.0ではインストールされなかったが、一旦よしとする。
次にバージョン確認
$ php -v PHP 8.0.16 (cli) (built: Mar 1 2022 00:31:45) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.16, Copyright (c) Zend Technologies
Httpdのファイルにアクセス権限追加
Apache2でのドキュメントルートは/var/www/html
になる。EC2のデフォルトユーザである「ec2-user」がドキュメントルート配下のディレクトリやファイルにアクセスできるようにする。
- ec2-userをapacheグループに追加
$ sudo usermod -a -G apache ec2-user
追加直後だと、まだapacheグループが作成されていない状態
$ groups ec2-user adm wheel systemd-journal
なので、一旦SSH接続をログアウトにしてから再ログインする。
$ groups ec2-user adm wheel apache systemd-journal
apacheグループが追加され、カレントユーザであるec2-userがそのグループのメンバーになっていることが分かる。
- /var/wwwとその配下コンテンツのオーナーとグループを変更
$ sudo chown -R ec2-user:apache /var/www
これにより、変更前のroot:root
からec2-user:apache
のオーナーとグループに変わる。
$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
これにより、各ディレクトリのパーミッションがdrwxrwsr-x
になり、ec2-userユーザとapacheグループに読み書き、その他ユーザに参照権限が付く。
また、各ディレクトリ配下で作られるファイルは、そのディレクトリと同じグループを継承することになる。
$ find /var/www -type f -exec sudo chmod 0664 {} \;
- httpdを再起動する
$ sudo systemctl restart httpd
おまじないのphpinfo.phpでテストする
$ tee /var/www/html/phpinfo.php <<EOF ><? phpinfo(); ?> EOF <?php phpinfo(); ?>
ブラウザから、http://52.22.xx.xx/phpinfo.php
でアクセスすると(xx.xx部分は割愛)
phpが正しく動いたことが確認できたので、phpinfo.php ファイルを削除する。ここまで一息休憩。
WordPressをインストールする
DLとDB設定
- 最新バージョンをダウンロード
下記サイトからDL可能(2022/05/01時点では、5.9.3が最新バージョン)。
$ wget https://ja.wordpress.org/latest-ja.zip --2022-05-01 08:15:05-- https://ja.wordpress.org/latest-ja.zip ja.wordpress.org (ja.wordpress.org) をDNSに問いあわせています... 198.143.164.252 ja.wordpress.org (ja.wordpress.org)|198.143.164.252|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 21126278 (20M) [application/zip] `latest-ja.zip' に保存中 100%[=============================================================================================>] 21,126,278 22.6MB/s 時間 0.9s 2022-05-01 08:15:06 (22.6 MB/s) - `latest-ja.zip' へ保存完了 [21126278/21126278]
- unzipコマンドでzipを解凍
$ unzip latest-ja.zip (省略) $ ls -l wordpress 合計 216 -rw-r--r-- 1 ec2-user ec2-user 405 2月 6 2020 index.php -rw-r--r-- 1 ec2-user ec2-user 19915 4月 5 20:05 license.txt -rw-r--r-- 1 ec2-user ec2-user 10083 4月 5 20:05 readme.html -rw-r--r-- 1 ec2-user ec2-user 7165 1月 21 2021 wp-activate.php drwxr-xr-x 9 ec2-user ec2-user 4096 4月 5 20:00 wp-admin -rw-r--r-- 1 ec2-user ec2-user 351 2月 6 2020 wp-blog-header.php -rw-r--r-- 1 ec2-user ec2-user 2338 11月 9 23:07 wp-comments-post.php -rw-r--r-- 1 ec2-user ec2-user 4068 4月 5 20:05 wp-config-sample.php drwxr-xr-x 5 ec2-user ec2-user 69 4月 5 20:05 wp-content -rw-r--r-- 1 ec2-user ec2-user 3939 8月 3 2021 wp-cron.php drwxr-xr-x 26 ec2-user ec2-user 12288 4月 5 20:05 wp-includes -rw-r--r-- 1 ec2-user ec2-user 2496 2月 6 2020 wp-links-opml.php -rw-r--r-- 1 ec2-user ec2-user 3900 5月 15 2021 wp-load.php -rw-r--r-- 1 ec2-user ec2-user 47916 1月 4 08:30 wp-login.php -rw-r--r-- 1 ec2-user ec2-user 8582 9月 22 2021 wp-mail.php -rw-r--r-- 1 ec2-user ec2-user 23025 11月 30 17:32 wp-settings.php -rw-r--r-- 1 ec2-user ec2-user 31959 10月 25 2021 wp-signup.php -rw-r--r-- 1 ec2-user ec2-user 4747 10月 8 2020 wp-trackback.php -rw-r--r-- 1 ec2-user ec2-user 3236 6月 8 2020 xmlrpc.php
- MariaDBへ接続するDBユーザとパスワードを作成
MariaDB [(none)]> CREATE USER 'wp-user'@'localhost' IDENTIFIED BY 'your_strong_password';
実際には、各自でユーザ名とパスワードを決めて実行すること。
- WordPressが使うDataBaseを作成
MariaDB [(none)]> CREATE DATABASE `wp-db`;
- 作成したDataBaseに対しDBユーザに権限を付与する
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `wp-db`.* TO "wp-user"@"localhost";
- 権限付与を反映する
MariaDB [(none)]> FLUSH PRIVILEGES;
wp-config.phpファイルを作成
- テンプレートからコピペしてする
$ cd wordpress; cp wp-config-sample.php wp-config.php $ vim wp-config.php
- DB関連の設定変更
/** WordPress のためのデータベース名 */ define( 'DB_NAME', 'database_name_here' ); /** MySQL データベースのユーザー名 */ define( 'DB_USER', 'username_here' ); /** MySQL データベースのパスワード */ define( 'DB_PASSWORD', 'password_here' );
- 認証キーなどを設定する
https://api.wordpress.org/secret-key/1.1/salt/ にアクセス、自動生成の値を下記キーに設定する
define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' );
$ cp -r wordpress/* /var/www/html/
$ sudo vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
の中にあるAllowOverride None
をAllowOverride All
に変更する。
httpdはapacheユーザで動作するため、ドキュメントルート以下のコンテンツを読み書きできるよう、オーナーをapacheに変更する。
$ sudo chown -R apache /var/www
- httpdを再起動
$ sudo systemctl restart httpd
- WordPress画面を動作確認
ブラウザからhttp://52.22.xx.xx
にアクセスし次のような画面が表示されれば成功!(xx.xx部分は割愛)
`
試しに、タイトル、ユーザ名、パスワード、メールアドレスを入力してWordPressをインストール!
すると、次のような画面が現れてる。
「ログイン」を押すと、次のhttp://domainname.net/wp-login.php
画面になる。
先程作ったユーザー名とパスワードでログインすると、なんと
WordPressのダッシュボードが表示され、環境構築がようやく完了した!!
ドメイン名を使えるようにする
前提は、お名前.comなどドメイン名登録サービスを通じて自分のドメインを登録していること(済み)。
- Route 53に登録する
にて、「ホストゾーンの作成」を押す。
「ドメイン名」に、取得したドメイン名を入力し、説明欄に適当に入力する。
「タイプ」に「パブリックホストゾーン」を選択し、下部の「ホストゾーンの作成」を押す。
すると、NSレコードとSOAレコードが作られる。
- ドメイン購入サイト(お名前.com)側の設定
ドメインを購入した際に作られたIDやパスワードを使ってログインする。下記「初期設定」を押す。
「ネームサーバーの選択」に「その他のサービス」を選択し、Amazon Route 53のホストゾーンにて表示されている4つのNSを入力する。
これにより、Route 53と購入したドメインが関連付けられた。設定の反映が少し時間がかかるそうだ。
Route 53のホストゾーン詳細画面にて「レコードを作成」を押す。
「レコードタイプ」にAレコードを選択し(デフォルト)、レコード名は空にし、値にIPv4のElastic IPアドレスを入力する。
下部の「レコードを作成」を押す。これにより、ドメインとEC2のIPアドレスが紐付けられた。
ブラウザにてhttp://domainname.net
(実際のドメイン名に読み替える)を打って動作確認をすると、ちゃんと見れた!
HTTPS通信できるように設定する
AWSではCertificate Managerというサービスがありサーバ証明書を発行・管理することができて、しもし無料で!
Certificate ManagerでSSL証明書を発行
Certificate Managerを検索して入る。
「証明書をリクエスト」を押す。 下部の「次へ」を押す。 ドメイン名にトップドメイン(domainname.net)とサブドメイン(*.domainname.net)を入力し、「リクエスト」を押す。
にある「証明書ID」のリンクを押すと、次の画面が表示される。
「Route 53でレコードを作成」ボタンを押すと、
が表示されるので、「レコードを作成」ボタンを押すと、DNSレコードが正常に作成された。
ロードバランサーを設定
AWSではhttpsを通信させるためには、ロードバランサーを設定する必要がある。その場合の通信経路のプロトコルは次のようになる
ユーザ <->(https)<-> ロードバランサ <->(http)<-> EC2
- ロードバランサの作成画面に入る
「Applicatoin Load Balancer」を選択する(「Create」を押す)。
設定項目が多いため、省略。
- Route53を設定
設定したALB経由でEC2にアクセスされるようにRoute53の設定を変更する。
Route 53のホストゾーン画面にて、取得したドメインの詳細画面に入り、もともとあったAレコードを削除し、新たに「レコードを作成」し、ALBにルーティングするように設定する。これでしばらく(1、2分)後、https://domainname.net
でアクセス可能になる。
WordPress内のhttps化
管理画面へアクセスする`http://domainname.net/wp-login.php'。次に左カラムにある「プラグイン」の「新規追加」を選択。 次に、「Really Simple SSL」を検索しインストール。インストールが終わったら有効化。
しかし、これだけではまだ完了しないので、EC2サーバ側での設定も必要。
- 画面画面へのhttps接続を設定
WordPressのwp-config.php に管理画面へのhttpsアクセスを許可するよう設定を追加。
EC2へSSH接続し、wp-config.phpを編集するが、ec-userによる書き込み権限がなければ $ sudo chmod g+w wp-config.php
をしておく。
require_once(ABSPATH . 'wp-settings.php’);
行より前に、下記3行を追加。
$_SERVER['HTTPS']='on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true);
- 管理画面の設定変更
左カラムの「設定」を押して、「一般設定」画面にて、
・ WordPress アドレス (URL)
・サイトアドレス (URL)
両方とも、https://domainname.net
に変更する。
httpをhttpsへリダイレクトする
EC2のロードバランサの画面にいき、対象のALBを選択した状態で画面下部にある「リスナー」画面にて、HTTP:80
の行の「ルールの表示/編集」を押す。
そして、ルール編集画面にて、上部の「+」を押して、出てきた「ルールの挿入」を押して、以下のように設定する。
・IF(すべてに一致) → 「パス...」=「*」に設定
・THEN → 「リダイレクト先...」=「HTTPS」「443」に設定
・デフォルトホスト、パス、クエリを使用... → 「301-完全に移動されました」に設定
画面右上の「保存」ボタンを押す。
これで、全部の設定が完了した。
トラブルシューティング
メモリ不足
504エラーが出てWeb接続できない現象が頻発。topコマンドをみると、Memory free容量が数十MBな状態。
対策:swapメモリを確保すること(EC2デフォルトでは確保されていない)。
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 $ sudo mkswap /swapfile $ sudo swapon /swapfile $ sudo chmod 600 /swapfile
設定後、topコマンドをみると、約2GBのfree memoryが表示されている。