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