- 新卒ブログとは?
- 2024年4月に新卒入社したLIGメンバーが、日々の学びや気づきを綴るブログです。彼らがふだんどんなことを学んでいるのか、気軽にのぞいてみてください。
こんにちは、DX事業部の山崎です。
本記事は、実際にサーバーを構築しながら、よく使われる用語や構築の仕方をわかりやすく解説するシリーズです。サーバーをろくに触ったことのない新卒の自分が、サーバー移管作業を任されたときの経験をもとに作成しましたので、ご安心ください! 一緒に学んでいきましょう!
今回はその第三回目で「必要なソフトウェアのインストールと初期設定」を実際に手を動かしながら解説していきます。今回はNginx、PHP、MySQL、WordPressをインストールしていきます。
前回の記事で、サーバーの作成からSSH接続できるようになるまでをまとめていますので、まだ読んでいない方はそちらもチェックしてみてください。今回はその続きになります。
Amazon EC2でWebサーバーを構築してみた〜インスタンス作成からSSH接続まで〜
目次
Nginxのインストール
WebサーバーソフトウェアであるNginxをインストールします。
インストール手順
まずは以下のコマンドでEPELリポジトリを有効化します。
sudo amazon-linux-extras enable nginx1
- EPELとは
- Extra Packages for Enterprise Linuxの略で、CentOSやAmazon Linux向けに追加パッケージを提供するリポジトリです。これを有効にすることにより、標準リポジトリのままではインストールできないソフトウェアや最新バージョンを簡単にインストールできるようになります。ここではnginx1という名前のリポジトリを有効化しています。
リポジトリを有効化したら、以下のコマンドでNginxをインストールします。
sudo yum install -y nginx
Nginxの設定と起動
インストールしたらNginxを起動し、サーバー起動時に自動的に起動するように設定します。
sudo systemctl start nginx
sudo systemctl enable nginx
- NginxとApacheの違い
- NginxとApacheはWebサーバーソフトウェアの代表格です。ApacheはNginxよりも歴史が長く、信頼性や安定性の高さがあります。機能も豊富なため柔軟性はありますが、Nginxに比べ並行処理が苦手で高い負荷に弱い面もあります。
PHPのインストール
必要なPHPモジュール
以下のコマンドを実行してプログラミング言語のPHPをインストールしましょう。
sudo dnf install -y php php-cli php-fpm php-mysqlnd php-json php-common php-opcache
PHPの設定
以下のコマンドでバージョンが表示されたらインストール完了です。
php -v
- なぜPHPをインストールするのか
- プログラミング言語であればPHPでなくてもいいのではないかと思ってしまいましたが、WordPressはPHPで動いており、PHPがインストールされないとWordPressをインストールすることができないそうです。なので、インストールの順番にも気を付ける必要があります。WordPressだけでなく、MySQLなどのデータベースとも連携しやすいこともPHPが選ばれる理由になります。
MySQLのインストール
データベースとしてMySQLをインストールします。
リポジトリの設定
Amazon Linux 2023はデフォルトでMySQLのリポジトリを含んでいません。なので、まずMySQLの公式リポジトリを追加する必要があります。
以下のコマンドを実行して追加します。
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm -y
インストール手順
「Complete!」が表示されたら、以下のコマンドでMySQLをインストールしましょう。
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が自動的に起動するように設定します。
sudo systemctl start mysqld
sudo systemctl enable mysqld
以下のコマンドを実行してバージョンが表示されたらインストール完了です。
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ユーザーのパスワードが確認できます。
sudo grep “temporary password” /var/log/mysqld.log
以下のコマンドでMySQLにrootユーザーでログインします。Enter password:が表示されますので表示されたパスワードを使用してください(パスワードの入力時は入力文字が表示されません)。
mysql -u root -p
以下のように表示されたらMySQLにrootユーザーとしてログイン成功です。
次に、セキュリティ設定を行うのでMySQLからexit;を実行して抜け出してください。
抜け出したら、初期パスワードの変更などの設定を以下のコマンドを実行して行います。しなくても良いですが、セキュリティ強化のため推奨します。
sudo mysql_secure_installation
実行すると、パスワードの変更の要求があります。先ほどのrootユーザーのパスワードを入力します。
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/でディレクトリを指定します。
wget -P /var/www/html/ https://wordpress.org/latest.tar.gz
WordPressをダウンロードしたディレクトリ(今回は/var/www/html/)に移動して、以下の解凍コマンドを実行します。
tar -xvzf latest.tar.gz
パーミッションの設定
Webサーバーがアクセスできるようにパーミッションを設定します。
sudo chown -R nginx:nginx /var/www/html/wordpress
- sudo chown -R nginx:nginx /var/www/html/wordpressとは
- このコマンドは、WordPressのディレクトリに正しくアクセスできるようにファイルの所有権をWebサーバーの実行ユーザーにするためのコマンドで、nginxの実行ユーザーで適切に扱えるように、WordPress関連ファイルの所有者を変更しています。ページが正しく表示されない問題や、「Permission denied」のエラーが表示されないように設定しています。
sudo chown 755 /var/www/html/wordpress
- パーミッション:755とは
- パーミッションは3桁の数字で表され、最初の桁は所有者、2番目の桁はファイルを共有するユーザーグループ、3桁目は全ユーザーを指しています。数字は読み取り、書き込み、実行の権限の合計値を表しています。所有者はディレクトリの読み取り、書き込み、実行のすべてが可能で、ユーザーグループと全ユーザーは読み取りと実行だけが可能となります。
wp-config.phpファイルにデータベース情報などの機密情報が含まれているため、こちらもアクセス権を設定しましょう。
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エディタで開きます。
sudo nano wp-config.php
以下のようにデータベースの接続情報を設定する箇所があります。
主に変更するものは以下のデータベース名、ユーザー名、パスワードを入力します。その他はデフォルトの設定で問題ありません。
define(‘DB_NAME’, ‘作成したデータベース名’)
define(‘DB_USER’, ‘アクセスするためのユーザー名’)
define(‘DB_PASSWORD’, ‘データベースユーザーに設定したパスワード’)
まとめ
ここまで3回に分けてWebサーバーを構築しました。
実際に手を動かしたほうが理解しやすいこともありますので、この記事を参考にしていただけると幸いです。自分自身もエラーに直面しつつ、疑問に思ったところを部分を調べながらまとめられたので、よい学びになりました。
今回はサーバーを構築しただけで、ドメインの取得やデータのインポートなど、Webサーバーとして運用するためにはもう少し作業が必要になります。AWSの無料期間はEC2インスタンスを作成してから1年なので、忘れないように注意しましょう。
- 日本・フィリピン・ベトナムでの活躍チャンス
- 最先端技術と多言語環境での成長
- 有識者による月1回の勉強会
現在、海外拠点(フィリピン、ベトナム)に関われるエンジニアを募集しています。日本だけじゃなく世界で活躍することに興味のある方は、以下よりぜひご応募ください!