はじめに
これは株式会社ハートビーツ様のインターンシップで経験した内容を自分の環境で立て直してwordpressを実際に使うことができるようになるまで設定を行ったものである。今回作成するサーバはLAMP環境を構築する。
株式会社ハートビーツ様
自己紹介(2023年6月現在)
- 2021年4月に大学入学し、初めてプログラミングを学ぶ
- プログラミング経歴
- C言語(2021年4月~2022年6月)
- 主に学校の授業で使用
- ubuntu、gcc、Atmel Studio、VScode
- 基本文法から組み込みの基礎まで
- AtCoderのBまでは安定的に解ける
- Python(2021年10月~現在)
- 主に学校の授業で使用
- VScode、python、anaconda jupiter、Raspberry Pi, tensorfrow
- 基本文法から機械学習の基礎、データ解析基礎、センサシステムの作成
- Java(2022年5月~現在)
- 独学で趣味の範囲で使用
- 基本文法からMavan、Gradleまで経験あり
- MinecraftのMod作成を行った
- 現在はSpring Bootに挑戦中
- 基本文法からMavan、Gradleまで経験あり
- 独学で趣味の範囲で使用
- C言語(2021年4月~2022年6月)
- Linuxに関しては全く触ったことがなくubuntuで触れたcdやviのみ使える
早速作業をしよう
今回準備するもの
- AWSアカウント
- Teraterm(windows)
今回利用するもの
- AWS EC2(無料利用枠で最低限は動きます)
- PHP
- MySQL
- Apache
- WordPress
目次
1.Linux編
2.Apache編
3.PHP編
4.MySQL編
5.WordPress編
6.これを通して学んだこと
7.上手く動作しないとき
Linux設定編
- AWSマネジメントコンソールからインスタンスを作成、起動する
- Linuxの初期設定を変更する
では、やっていこう
AWSマネジメントコンソールからインスタンスを作成、起動する
各自のAWSマネジメントコンソールにログインする
リージョンを東京にする
マネジメントコンソール上側「コンピューティング」から「EC2」を選ぶ
インスタンスを作成の設定について
自分が実際に設定したもの
-
名前とタグ
- サーバの内容を含めた方が良い
- 今回はwebサーバなので「web」を含める
- Alma Linuxからもじって「albus-webdb01」と設定
- サーバの内容を含めた方が良い
-
AMI
- AWS MarketplaceからAlma Linux OS 8.7を選択
- インターンシップではalma Linuxを基にしたイメージを設定したため
注意点
Linuxディストリビューションによってはコマンドが少し異なるものがあります。
この記事はRedHat系Alma Linuxで行います。
その他RedHat系はCent OS、Fedoraがあります。
違う場合は読み替えて実行してください。 - AWS MarketplaceからAlma Linux OS 8.7を選択
-
インスタンスタイプ
- t2.micro
- 無料枠で一番性能が高い
- t2.micro
-
キーペア
- キーペア名は任意
- キーペアタイプはED25519を選択
- Teratarmでは「.pem」を選ぶ
- キーペアを作成をクリック
-
ネットワーク設定
- VPC デフォルト
- サブネット デフォルト
- パブリックIPの自動割り当て デフォルト
- ファイアウォール
- セキュリティグループを作成する
- セキュリティグループ名:任意
- 説明:任意
- インバウンドセキュリティグループのルール
- タイプ ssh
- ソースタイプ 任意の場所
- 説明 任意
-
ストレージを設定
- 10GiB gp3
注意点
メモリが少なすぎるとMySQLの起動中、処理が遅くなる可能性がある -
その他はそのままで「インスタンスを起動」をクリック
-
もしサービスなどを本格的に行う場合はAuto Scalingなどでアクセス数やインスタンス稼働率に応じてインスタンスを増減させる仕組みを組み込むべきですが、今回は趣旨と異なるため行いません。
Linuxの初期設定を行う
まずはTeratermなどで接続する
- 自動切断の設定
$ sudo vi /etc/ssh/sshd_config
#change
ClientAliveInterval 60
ClientAliveCountMax 30
#
$ sudo systemctl restart sshd
タイムゾーンの設定
$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Thu Jun 8 14:47:24 JST 2023
ホスト名の設定
$ hostnamectl set-hostname albus-webdb01
$ hostname
albus-webdb01
SE Linuxの設定
$ getenforce
Enable
$ sudo vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
再起動しないと反映されないため一旦別コマンドで無効化
$ sudo setenforce 0
$ getenforce
Permissive
Linux設定終了!!
Apache設定編
- Apacheのインストール、設定
- テストページの作成、表示
Apacheのインストール、起動
$ sudo yum install httpd -y
インストールが完了する
$ sudo systemctl start httpd
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/httpd.service.d
mqphp-fpm.conf
Active: active (running) since Thu 2023-06-08 14:42:41 JST; 28min ago
ステータスを確認してActive:activeになっていれば完了
ブラウザでパブリックIPアドレスを入力するとテストページが表示される
次回から自動起動にする設定
$ sudo systemctl enabled httpd
テストページを作成し、テストページを表示する
$ sudo vi /var/www/html/index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>テストページ</title>
</head>
<body>
テスト
</body>
</html>
保存後にブラウザにインスタンスのパブリックIPアドレスを入力することで以下のようなページが表示される
Apache設定終了!!
PHP設定編
- PHPのインストール
- ApacheとPHPを連結させる
PHPのインストール
システムパッケージを更新する
$ sudo dnf upgrade --refresh -y
PHPのリポジトリをインストールする
$ sudo dnf install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm
PHPのバージョンを確認する
$ dnf module list php
AlmaLinux 8 - BaseOS 3.0 MB/s | 3.0 MB 00:01
AlmaLinux 8 - AppStream 7.3 MB/s | 10 MB 00:01
AlmaLinux 8 - Extras 24 kB/s | 18 kB 00:00
AlmaLinux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
php 8.0 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
今回はPHP8.0を使うため対象バージョンを有効化する
$ sudo dnf module enable php:8.0 -y
インストールする
$ sudo dnf install php -y
PHPのバージョン確認
$ php -v
PHP 8.0.27 (cli) (built: Jan 3 2023 16:17:26) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.27, Copyright (c) Zend Technologies
with Zend OPcache v8.0.27, Copyright (c), by Zend Technologies
Apacheの設定ファイルにPHPをデフォルトで表示させる設定をする
vi /etc/apache2/sites-enabled/000-default.conf
#以下を追記
DirectoryIndex index.php index.html index.htm
ApacheとPHPを連結させる
PHPを起動&自動起動設定をする
$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm
ここがつまった!!
ここブラウザでパブリックIPアドレスを入れるとPHPのテストページがされるはずなのに動かない、、
そもそも!連結させるさせるためのファイルは入ったのか??
$ sudo rpm -qc php-fpm
#↓インストールしたもの
#/etc/httpd/conf.d/php.conf ←これ!!
#/etc/logrotate.d/php-fpm
#/etc/nginx/conf.d/php-fpm.conf
#/etc/nginx/default.d/php.conf
#/etc/php-fpm.conf
いるなぁ、、、
原因:Apacheの再起動しないと設定が判明されない!!
$ sudo systemctl restart httpd
連結できた!!
初期設定ではDocumentrootが/var/www/htmlになっているのでその配下にphp/phpinfo.phpを作成する
cd /var/www/html
mkdir php
テストページの作成
vi phpinfo.php
<?php phpinfo.php?>
ブラウザでパブリックIPアドレス/php/phpinfo.phpでアクセスするとバージョンや導入したライブラリなどが表示される。
PHP設定終了!!
MySQL設定編
- MySQLのインストール
- 初期設定
MySQLのインストール
rootユーザーのパスワードを設定する
passwd
ここで驚愕の事実を知る
下記コマンドでrootユーザーへの変更が出来る
$ sudo su -
PHPのインストールされているものの確認
# dnf list installed | grep php
php.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-cli.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-common.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-fpm.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-mbstring.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-opcache.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-pdo.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-xml.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
MySQLのインストール
# dnf install mysql-server php-mysqlnd
なんでも「sudo」処理は危ないので一旦rootユーザーから抜ける
# exit
MySQLの起動、確認、自動起動設定をする
$ sudo systemctl start mysqld
$ sudo systemctl status mysqld
#active
$ sudo systemctl enable mysqld
MySQLの初期設定をする
参考サイト:MySQLの初期設定(Ingenious)
$ sudo mysql_secure_installation
MySQLへの設定確認
$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30 Source distribution
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL設定終了!!
WordPress設定編
- WordPressのインストール
- MySQLとの接続
WordPressのインストール
一旦rootユーザーに切り替える
$ sudo su -
Documentルートに移動してそこにインストールする
# cd /var/www/html
WordPressのインストール
# wget https://ja.wordpress.org/latest-ja.tar.gz
-bash: wget: command not found
wgetがない!?のでcurlを使うことに、、
# curl -O https://ja.wordpress.org/latest-ja.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 24.0M 100 24.0M 0 0 7024k 0 0:00:03 0:00:03 --:--:-- 7024k
zipファイルの解凍をする
# unzip latest-ja.zip
-bash: unzip: command not found
unzipも入ってない!?のでunzipをインストールすることに、、
# yum install unzip -y
MySQLとの接続
MySQLにWordPress用のデータベースとユーザ作成する
MySQLにログイン
# mysql -u root -p
データベースの作成とユーザへの権限割り振り
mysql> CREATE DATABASE sample;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY '****';
mysql> GRANT ALL PRIVILEGES ON sample.* TO testuser@localhost;
mysql> FLUSH PRIVILEGES;
mysql> exit
rootユーザから抜ける
# exit
wordpressのディレクトリに移動
先にバックアップファイルを作成する
今は/var/www/htmlにいるはずなので配下のディレクトリに移動する
cd ./wordpress
$ sudo cp wp-config-sample.php wp-config.php
$ ls
index.php wp-blog-header.php wp-cron.php wp-mail.php
license.txt wp-comments-post.php wp-includes wp-settings.php
readme.html wp-config.php wp-links-opml.php wp-signup.php
wp-activate.php wp-config-sample.php wp-load.php wp-trackback.php
wp-admin wp-content wp-login.php xmlrpc.php
configファイルを書き換える
先ほど作成したMySQLユーザの情報を書き込む
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'sample' );
/** Database username */
define( 'DB_USER', 'testUser' );
/** Database password */
define( 'DB_PASSWORD', '******' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0);
ここまでできたら確認!!
http://パブリックIPアドレス/wordpress/wp-admin/install.phpでアクセス!!
インストール画面に飛ぶことができたら完了!!
WordPress設定終了!!
WordPressで画像データを扱うためにはphp-gdというライブラリが必要になるためインストールしておく。
参考サイト:よろず屋ありみちのブログ
サーバ構築完了!!!
しかし、ここで落とし穴があることに気がつく
EC2インスタンスのパブリックIPアドレスが変わったらwordpressの記事見れない!!!!
次回:原因を突き止めて解決方法を試してみた。
学んだこと編
現代ではクラウドとして簡単に個人用サーバを立てられるようになったが、今回の実習を通してサーバがどのように出来上がっているのか、Linux、Apache、PHP、MySQLがどのように動いているのかを学んだ。学校で使ったことのあるコマンド「wgetやunzip」が入っていなくて素朴なLinuxでのCLI操作について慣れることも出来た。以下はリクエストを受け取ってからブラウザへ表示するまでのサーバ内部での処理を図にしてまとめた画像を掲載する。なお、今回はウェアサーバ内部についての記事のためHTMLリクエストやレンダリングについては省略する。
上手く動作しないとき編
ここでは上でまとめたものの作業中につまずいた問題について記載する
Apacheのテストページが表示されない!!
原因:DocumentRootの設定が間違ってる!!
確認方法
$ sudo vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
ここのDocumentRootの部分がページを表示する際にコンピュータが辿るディレクトリの道で今設定の場合、/var/www/htmlディレクトリ配下のhogehoge.htmlなどが表示対象になる。
WordPressのインストールページに飛べない!!
原因:MySQLのユーザ作成のときにホスト名の設定を間違えた!!
間違えた箇所:mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY '****';
ここのlocalhostの部分をhostnamectlで設定した名前を入れてしまったことが原因で起きた
推測:hostnamectlはPC(Linux上)の名前が変わるだけでMySQLで認識するのは別サーバか、このサーバなのかの差だからlocalhostになるのではないかなぁ、、