Amazon EC2でWebサーバーを構築してみた〜ソフトウェアインストールから完成まで〜

Amazon EC2でWebサーバーを構築してみた〜ソフトウェアインストールから完成まで〜

Shota Yamazaki

Shota Yamazaki

新卒ブログとは?
2024年4月に新卒入社したLIGメンバーが、日々の学びや気づきを綴るブログです。彼らがふだんどんなことを学んでいるのか、気軽にのぞいてみてください。

こんにちは、DX事業部の山崎です。

本記事は、実際にサーバーを構築しながら、よく使われる用語や構築の仕方をわかりやすく解説するシリーズです。サーバーをろくに触ったことのない新卒の自分が、サーバー移管作業を任されたときの経験をもとに作成しましたので、ご安心ください! 一緒に学んでいきましょう!

今回はその第三回目で「必要なソフトウェアのインストールと初期設定」を実際に手を動かしながら解説していきます。今回はNginx、PHP、MySQL、WordPressをインストールしていきます。

前回の記事で、サーバーの作成からSSH接続できるようになるまでをまとめていますので、まだ読んでいない方はそちらもチェックしてみてください。今回はその続きになります。

Nginxのインストール

WebサーバーソフトウェアであるNginxをインストールします。

インストール手順

まずは以下のコマンドでEPELリポジトリを有効化します。

bash
sudo amazon-linux-extras enable nginx1
EPELとは
Extra Packages for Enterprise Linuxの略で、CentOSやAmazon Linux向けに追加パッケージを提供するリポジトリです。これを有効にすることにより、標準リポジトリのままではインストールできないソフトウェアや最新バージョンを簡単にインストールできるようになります。ここではnginx1という名前のリポジトリを有効化しています。

リポジトリを有効化したら、以下のコマンドでNginxをインストールします。

bash
sudo yum install -y nginx

Nginxの設定と起動

インストールしたらNginxを起動し、サーバー起動時に自動的に起動するように設定します。

bash
sudo systemctl start nginx
bash
sudo systemctl enable nginx
NginxとApacheの違い
NginxとApacheはWebサーバーソフトウェアの代表格です。ApacheはNginxよりも歴史が長く、信頼性や安定性の高さがあります。機能も豊富なため柔軟性はありますが、Nginxに比べ並行処理が苦手で高い負荷に弱い面もあります。

PHPのインストール

必要なPHPモジュール

以下のコマンドを実行してプログラミング言語のPHPをインストールしましょう。

bash
sudo dnf install -y php php-cli php-fpm php-mysqlnd php-json php-common php-opcache

PHPの設定

以下のコマンドでバージョンが表示されたらインストール完了です。

bash
php -v
なぜPHPをインストールするのか
プログラミング言語であればPHPでなくてもいいのではないかと思ってしまいましたが、WordPressはPHPで動いており、PHPがインストールされないとWordPressをインストールすることができないそうです。なので、インストールの順番にも気を付ける必要があります。WordPressだけでなく、MySQLなどのデータベースとも連携しやすいこともPHPが選ばれる理由になります。

MySQLのインストール

データベースとしてMySQLをインストールします。

リポジトリの設定

Amazon Linux 2023はデフォルトでMySQLのリポジトリを含んでいません。なので、まずMySQLの公式リポジトリを追加する必要があります。

以下のコマンドを実行して追加します。

bash
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm -y

インストール手順

「Complete!」が表示されたら、以下のコマンドでMySQLをインストールしましょう。

bash
sudo dnf install mysql-community-server -y
Error : GPG check FAILEDが表示されたら?
こちらはパッケージインストール時にGPG署名の確認に失敗したことを示したセキュリティのエラーです。GPGキーが正しくインストールされてない、もしくは、古いリポジトリをインストールしている可能性があります。最新バージョンのリポジトリをインストールするか、以下のコマンドで公式のGPGキーを手動でインストールしましょう。
bash
sudo rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

インストールできたらMySQLを起動し、サーバー起動時にMySQLが自動的に起動するように設定します。

bash
sudo systemctl start mysqld
bash
sudo systemctl enable mysqld

 
以下のコマンドを実行してバージョンが表示されたらインストール完了です。

bash
mysql –version
mysqlとmysqldの違い
mysqlと入力するときもあれば、mysqldと入力するときもあり、二つの違いについて理解していなかったので調べてみました。謎のdは「daemon(デーモン)」を意味し、Unix系OSでバックグラウンドで動作するサービスプロセスを指します。一方でmysqlは、mysqlサーバーに接続して操作を行うコマンドを表します。つまり、mysqldはMySQL本体のことで、mysqlはmysqldとやり取りするときに使われるコマンドです。mysqldの他にもhttpdやsshdなどがあります。

MySQLの初期設定

MySQLは初期設定を変更する必要があります。MySQLをインストールした時点でrootユーザーに自動的にパスワードが設定されます。ログファイルからそのパスワードを確認し、セキュリティ設定を行います。

rootユーザーとは
rootユーザーとはシステムの全てのリソースやファイルへのアクセス、変更、削除できる権限を持っているユーザー(管理者アカウント)のことです。パスワードが設定されたrootユーザーはMySQL内のrootユーザーなので、データベースシステム全体に対してすべての権限を持つ特別なアカウントです。サーバーのrootユーザーと混同しないように注意が必要です。

まず、以下のコマンドでrootユーザーのパスワードが確認できます。

bash
sudo grep “temporary password” /var/log/mysqld.log

 
以下のコマンドでMySQLにrootユーザーでログインします。Enter password:が表示されますので表示されたパスワードを使用してください(パスワードの入力時は入力文字が表示されません)。

bash
mysql -u root -p

 
以下のように表示されたらMySQLにrootユーザーとしてログイン成功です。

次に、セキュリティ設定を行うのでMySQLからexit;を実行して抜け出してください。

抜け出したら、初期パスワードの変更などの設定を以下のコマンドを実行して行います。しなくても良いですが、セキュリティ強化のため推奨します。

bash
sudo mysql_secure_installation

 
実行すると、パスワードの変更の要求があります。先ほどのrootユーザーのパスワードを入力します。

bash
Enter password for user root:

 
以下のように新しく設定したいパスワードが要求されるので2度入力してください。

Failed! Error: Your password does not satisfy the current policy requirementsがでたら
設定したパスワードの強度が弱いエラーです。アルファベットの大文字、小文字、数字、記号を混ぜて再設定してください。

MySQLはデフォルトでrootユーザーとは別に匿名ユーザーが存在しています。匿名ユーザーを使うとユーザーアカウントを作成しなくてもMySQLにログインできるようになります。特に本番環境としてMySQLを使う場合はyと入力し削除しましょう。

匿名ユーザーは何のために存在するのか
匿名ユーザーはテスト環境などで、設定やインストールをスムーズに行うために開発されたユーザーです。毎度認証が必要なくなるので、テスト環境では便利ですが、不正アクセスにも繋がるので本番環境では使わないようにしましょう。

次に「リモートからのrootユーザーのログインを禁止しますか」と質問されます。特別な理由がなければこちらもセキュリティ強化のためyを入力し禁止にしましょう。

rootユーザーのアクセスをなぜ禁止にするのか
rootユーザーは、パスワード変更やファイル閲覧などのすべての権限を持っています。そのためrootユーザーで不正アクセスされてしまうと、情報漏洩などのリスクがあります。

次に「テスト用データベースおよびそのデータベースへのアクセスを削除しますか」と質問されます。MySQLはデフォルトでtestという名前のデータベースを作成しますが、こちらは名前の通りテスト用のデータベースなので必要がなければ削除で大丈夫です。作成しても後に削除可能なのでどちらでも問題ありません。

 
次で最後になります! こちらは「特権テーブルを今すぐ再読み込みしますか」という質問です。今すぐ再読み込みすることで先ほどまでの設定が反映されますので、yで実行して反映させましょう。

「All done!」が表示されれば完了です。

WordPressのインストール

ダウンロード手順

まずWebサーバー、PHP、MySQLがインストールされていることを確認し、以下のコマンドで最新版のWordPressを公式サイトからダウンロードしましょう。

/var/www/html/配下にダウンロードする慣習に従い、-P /var/www/html/でディレクトリを指定します。

bash
wget -P /var/www/html/ https://wordpress.org/latest.tar.gz

 

WordPressをダウンロードしたディレクトリ(今回は/var/www/html/)に移動して、以下の解凍コマンドを実行します。

bash
tar -xvzf latest.tar.gz

パーミッションの設定

Webサーバーがアクセスできるようにパーミッションを設定します。

bash
sudo chown -R nginx:nginx /var/www/html/wordpress
sudo chown -R nginx:nginx /var/www/html/wordpressとは
このコマンドは、WordPressのディレクトリに正しくアクセスできるようにファイルの所有権をWebサーバーの実行ユーザーにするためのコマンドで、nginxの実行ユーザーで適切に扱えるように、WordPress関連ファイルの所有者を変更しています。ページが正しく表示されない問題や、「Permission denied」のエラーが表示されないように設定しています。
bash
sudo chown 755 /var/www/html/wordpress
パーミッション:755とは
パーミッションは3桁の数字で表され、最初の桁は所有者、2番目の桁はファイルを共有するユーザーグループ、3桁目は全ユーザーを指しています。数字は読み取り、書き込み、実行の権限の合計値を表しています。所有者はディレクトリの読み取り、書き込み、実行のすべてが可能で、ユーザーグループと全ユーザーは読み取りと実行だけが可能となります。

wp-config.phpファイルにデータベース情報などの機密情報が含まれているため、こちらもアクセス権を設定しましょう。

bash
sudo chown 440 /var/www/html/wordpress/wp-config.php
wp-config.phpがないとき
wp-config.phpが最初にない場合があります。そのときは、wp-config-sample.phpが作成されていますので、以下のコマンドで新しく作るwp-config.phpにコピーしましょう。
bash
cp wp-config-sample.php wp-config.php

wp-config.phpの設定

wp-config.phpファイルは上記の通り、機密情報が含まれているため、このファイルの中身の設定を行いましょう。

以下のコマンドでファイルを開きましょう。今回はnanoエディタで開きます。

bash
sudo nano wp-config.php

 

以下のようにデータベースの接続情報を設定する箇所があります。

主に変更するものは以下のデータベース名、ユーザー名、パスワードを入力します。その他はデフォルトの設定で問題ありません。

bash
define(‘DB_NAME’, ‘作成したデータベース名’)

bash
define(‘DB_USER’, ‘アクセスするためのユーザー名’)

bash
define(‘DB_PASSWORD’, ‘データベースユーザーに設定したパスワード’)

 

まとめ

ここまで3回に分けてWebサーバーを構築しました。

実際に手を動かしたほうが理解しやすいこともありますので、この記事を参考にしていただけると幸いです。自分自身もエラーに直面しつつ、疑問に思ったところを部分を調べながらまとめられたので、よい学びになりました。

今回はサーバーを構築しただけで、ドメインの取得やデータのインポートなど、Webサーバーとして運用するためにはもう少し作業が必要になります。AWSの無料期間はEC2インスタンスを作成してから1年なので、忘れないように注意しましょう。

新卒採用募集中!
LIGは、Webデザインからグローバルなシステム開発まで、幅広い分野のコンサルティングから制作、運用までおこなう企業です。

  • 日本・フィリピン・ベトナムでの活躍チャンス
  • 最先端技術と多言語環境での成長
  • 有識者による月1回の勉強会

現在、海外拠点(フィリピン、ベトナム)に関われるエンジニアを募集しています。日本だけじゃなく世界で活躍することに興味のある方は、以下よりぜひご応募ください!

新卒採用ページへ

この記事のシェア数

Shota Yamazaki
Shota Yamazaki Technology / Technical Director / 山﨑 翔太

大手IT企業のWebサイト運営に関するディレクション業務を担当。AIやアプリ開発など、情報数学を含むIT関連の幅広い分野に精通。山形大学でデータサイエンスの学位を取得後、LIGに入社。

このメンバーの記事をもっと読む
LIG新卒ブログ【2024】 | 10 articles
10年以上の開発実績があるLIGが、最適な開発体制や見積もりをご提案します
相談する サービス概要を見る