Amazon EC2 – Amazon Linux 2023

LAMP環境の構築

# アップデート
sudo dnf update -y


# LAMP環境のインストール
sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
 httpd:   Apache web server
 wget:    ネットワークからデータをDLするためのPKG
 php-fpm:  fast-cgi process manager  特にWebサーバでPHPを効率的に実行するためのもの
 php-mysqli: mysql improved  PHPからMYSQLDBへのより良い接続を提供するためのPHP拡張機能
 php-json:  PHPでJSON形式のデータを処理するためのツール
 php:     PHP言語のコアパッケージ
 php-devel: php-develop  PHP開発ツールとライブラリ、PHP拡張機能をビルドしたり、PHPをより深くカスタマイズできる


# Apache バージョン確認
httpd -v
 Server version: Apache/2.4.59 (Amazon Linux)
 Server built:   Apr 18 2024 00:00:00

# PHP バージョン確認
php -v
 PHP 8.2.15 (cli) (built: Jan 16 2024 12:19:32) (NTS gcc x86_64)
 Copyright (c) The PHP Group
 Zend Engine v4.2.15, Copyright (c) Zend Technologies
     with Zend OPcache v8.2.15, Copyright (c), by Zend Technologies


# Apache サービス起動
sudo systemctl start httpd

# Apache
sudo systemctl status httpd
     Active: active (running) を確認
 :q で表示終了★

# Linuxカーネル起動時にhttpdサービスを自動起動する設定
sudo systemctl enable httpd

# 自動起動設定の確認
sudo systemctl is-enabled httpd
 enabled

ファイルのアクセス権限の設定 → 静的なウェブページを表示する

# 作成したhtmlファイルの置き場所★ドキュメントルート
ll /var/www
 drwxr-xr-x. 2 root root 6 Apr 22 22:05 cgi-bin
 drwxr-xr-x. 2 root root 6 Apr 22 22:05 html ← ココに格納するとインターネットに公開できる

# index.htmlを作ってみる ▼権限がなくて失敗
touch /var/www/html/index.html
 touch: cannot touch '/var/www/html/index.html': Permission denied

  ↓ 権限を変更して、ec2-userがドキュメントルートディレクトリに書き込みできるようにする

# ec2-userをApacheグループに加える
sudo usermod -aG apache ec2-user  # Group User の順
groups
 ec2-user adm wheel apache systemd-journal

# Apacheグループの所有者を変更する (/var/www/を再帰的に)
sudo chown -R ec2-user:apache /var/www
ll /var/www
 drwxr-xr-x. 2 ec2-user apache 6 Apr 22 22:05 cgi-bin
 drwxr-xr-x. 2 ec2-user apache 6 Apr 22 22:05 html

# ドキュメントルートdir&その配下のdirに対して権限を変更する
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;

# ドキュメントルートdir内のファイルに対して権限を変更する
find /var/www/ -type f -exec sudo chmod 0664 {} \;

# 権限の確認
ll /var/www
 drwxrwsr-x. 2 ec2-user apache 6 Apr 22 22:05 cgi-bin
 drwxrwsr-x. 2 ec2-user apache 6 Apr 22 22:05 html
       ↑ 2:SGIDが反映されている

  ↓ ec2-userがドキュメントルートディレクトリに書き込みできるようになっている

# index.htmlを作ってみる
touch /var/www/html/index.html  エラーなし
ll /var/www/html
 -rw-r--r--. 1 ec2-user apache 0 May 29 16:07 index.html
      ↑ ファイルの権限も664と期待通り作成された

# index.htmlに文字列を記述
vim /var/www/html/index.html
 Hello Linux!
 :wq!

# ブラウザで http://ElasticIP(/index.html) にアクセスし「Hello Linux!」を確認

PHPの動作確認

# PHPの正常動作を確認する為、phpinfoを表示させてみる
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

# ブラウザで http://ElasticIP/phpinfo.php にアクセスし、phpinfo画面を確認

# サーバ情報がダダ洩れになっちゃうので、確認したらすぐにファイルを消すこと
rm /var/www/html/phpinfo.php

# 「Hello World」を表示するPHPファイルを作成してみる
echo "<?php echo 'Hello World'?>" > /var/www/html/index.php

# ブラウザで http://ElasticIP/index.php にアクセスし「Hello World」を確認

MariaDB(MySQL 互換)
 AWS – MariaDB と MySQL の違いはなんですか?
 ※互換性があるので、MariaDBであってもmysqlコマンドを使う

# MariaDBをインストール
sudo dnf install mariadb105-server -y

# MariaDBサービスを開始
sudo systemctl start mariadb

# 初期設定 mysql_secure_installation(インタラクティブ)で安全に設定できる
sudo mysql_secure_installation
 Enter current password for root (enter for none): そのままEnter(デフォルトはノーパス)
   OK, successfully used password, moving on...
 Switch to unix_socket authentication [Y/n]  Y
   Enabled successfully!...
 Change the root password? [Y/n]  Y
   New password: ******
   Re-enter new password: ******
      Password updated successfully!
 Remove anonymous users? [Y/n]  Y
    ... Success!
 Disallow root login remotely? [Y/n]  Y
    ... Success!
 Remove test database and access to it? [Y/n]  Y
    ... Success!
 Reload privilege tables now? [Y/n]  Y
    ... 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!

# MariaDBの状態確認
sudo systemctl status mariadb
     Active: active (running) を確認
    q で表示終了★

# MariaDBを停止
sudo systemctl stop mariadb
sudo systemctl status mariadb
  Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
  Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service →/usr/lib/systemd/system/mariadb.service.

# 自動起動設定の確認
sudo systemctl is-enabled mariadb
 enabled

phpMyAdmin(GUIでDBの操作・管理ができる)

# 必要なパッケージをインストール
sudo dnf install php-mbstring php-xml -y
  php-mbstring(PHPでマルチバイト文字列を扱う為のpkg
  php-xml: PHPでxml形式を扱うためのpkg

# Apacheとphp-fpmを再起動
sudo systemctl restart httpd
sudo systemctl restart php-fpm

# Apache ドキュメントルートに移動
cd /var/www/html

# ファイルをダウンロード
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
ls
  index.html  index.php  phpMyAdmin-latest-all-languages.tar.gz

# phpMyAdminディレクトリを作成し、その中にtar.gzを解凍
mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1

# ダウンロードしたtar.gzファイルは削除しておく
rm phpMyAdmin-latest-all-languages.tar.gz
ls -F
  index.html  index.php  phpMyAdmin/
ls phpMyAdmin -w60
  babel.config.json      locale
  ChangeLog              package.json
  composer.json          README
  composer.lock          RELEASE-DATE-5.2.1
  config.sample.inc.php  robots.txt
  CONTRIBUTING.md        setup
  doc                    show_config_errors.php
  examples               sql
  favicon.ico            templates
  index.php              themes
  js                     url.php
  libraries              vendor
  LICENSE                yarn.lock

# phpMyAdminにログイン
# ブラウザで http://ElasticIP/phpMyAdmin にアクセス
# ユーザ名: root
  パスワード: 自分で設定したパスワード
# ログインできたら成功 GUI画面からDBの操作・管理が行えるので便利


PHPとMySQLDBを連携するための準備

# 必要なパッケージのインストール
sudo dnf install php-mysqlnd -y  # PHPとMySQLDBを連携するためのPHP拡張モジュール

# mysqlにrootでログイン
sudo mysql -u root -p  # rootユーザとしてpwを使ってログインするという意味
 Enter password: ***
 Welcome to the MariaDB monitor...
## プロンプトが MariaDB [(none)]> に変わる

## WordPressで使うMySQLDBのユーザを作成しPWを設定する(セキュリティ上rootは使わない)
CREATE USER 'masa'@'localhost' IDENTIFIED BY '*****';  # シングルクオートなので間違えず!
 Query OK, 0 rows affected (0.004 sec)

## DBを作成 wp-db
CREATE DATABASE `wp-db`;  # バッククオートなので間違えず!

## DB`wp-db`に対するユーザ"masa"の権限を設定
GRANT ALL PRIVILEGES ON `wp-db`.* TO "masa"@"localhost";

## 変更を反映
FLUSH PRIVILEGES;

## 抜ける
exit

WordPress

# WordPressパッケージをダウンロード
wget https://ja.wordpress.org/latest-ja.tar.gz

# パッケージを解凍
tar -xzf latest-ja.tar.gz
 wordpress/

 

# 圧縮ファイルは消しておく
rm latest-ja.tar.gz

# wp-config.phpを作る(sampleからコピー)
cp wordpress/wp-config-sample.php wordpress/wp-config.php

# wp-config.phpを編集する
vim wordpress/wp-config.php

## define( 'DB_NAME', 'wp-db' );
## define( 'DB_USER', 'masa' );
## define( 'DB_PASSWORD', '*****' );
## /**#@+  認証用ユニークキー
   * Authentication unique keys and salts.
   * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
             ↓ このURLから取得した値で上書き
   define('AUTH_KEY',         '***');
   define('SECURE_AUTH_KEY',  '***');
   define('LOGGED_IN_KEY',    '***');
   define('NONCE_KEY',        '***');
   define('AUTH_SALT',        '***');
   define('SECURE_AUTH_SALT', '***');
   define('LOGGED_IN_SALT',   '***');
   define('NONCE_SALT',       '***');
:wq!

ドキュメントルートにWordPressのファイルを配置

# 配置する場所
ll /var/www/html
 -rw-r--r--.  1 ec2-user apache    13 May 29 16:09 index.html
 -rw-r--r--.  1 ec2-user apache    29 May 29 17:39 index.php
 drwxr-sr-x. 12 ec2-user apache 16384 May 29 19:31 phpMyAdmin

# blogディレクトリの作成
mkdir /var/www/html/blog

# wordpressディレクトリ内のdir/fileを全て、/var/www/html/blogディレクトリに再帰的にコピーする
cp -r wordpress/* /var/www/html/blog



## wordpressのパーマリンク(恒久的URL)が正しく機能するよう設定
## Apacheの.htaccessファイルを使用する必要があるが、AmazonLinux2023ではデフォルトで有効になっていない
## htaccess: Hyper Text Access  Apacheウェブサーバーに対して特定のディレクトリの挙動を制御するための設定ファイル
       URLの書き換えもここで行うことができる

# Apacheの設定ファイルを開く
sudo vim /etc/httpd/conf/httpd.conf
   /Directory  検索してnNで移動
 <Directory "/var/www/html">
     #
     #
     AllowOverride None → All に変更 ※これにより.htaccessファイルによるすべての設定変更が可能となる

# PHPグラフィック描画ライブラリをインストール(画像のリサイズなどの操作に使われる)
sudo dnf install php-gd -y



## wordpressで使用できる機能の中にはApacheドキュメントルートへの書き込み権限が必要なものもある
## Apacheドキュメントルートへの書き込み権限を設定する必要がある。

# アクセス権を確認しておくこと
ll /var/www
 drwxrwsr-x. 2 ec2-user apache  6 Apr 22 22:05 cgi-bin
 drwxrwsr-x. 4 ec2-user apache 71 May 30 12:44 html  ← 2775, ec2-user, apache になっていること


# ここまで来たら、ブラウザを立ち上げてブログ情報を設定しよう
URL: ElasticIP/blog


AWSのクリーンアップをしておこう

Elastic IPアドレスの関連付けを解除 & 解放
EC2インスタンスを停止 / 終了
セキュリティグループを削除
サブネットを削除
VPCを削除
  —
AWSアカウントを閉じる 等