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アカウントを閉じる 等