Open nakedtatsuya opened 7 months ago
Host infra-training
User ubuntu
Port 22
IdentityFile 鍵ファイル
HostName パブリックIPアドレス
ServerAliveInterval 5
ServerAliveCountMax 12
~/.bashrc を開いてみよう の意図確認
HTTPでのみアクセスできたけど何か設定おかしい?
http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/index.php
sudo apt install php8.1-fpm
インストール時に出た
デフォルトの選択肢でOK。(cmd + enter)
手元のマシンで /etc/hosts を書いてブラウザでアクセスしてみよう
これの意図確認(Mac側の/etc/hostsを書き換える?)
総じて負荷のかけ方とログでの確認方法がわからなかったので教えてもらう
cat ~/.ssh/authorized_keys
でSSH接続は見れるかも。OS情報は適当に見れそう
sudo apt install php
してみよう
ps aux
を打ってみよう
less /etc/apache2/sites-enabled/000-default.conf
してみよう
<?php var_dump($_SERVER);
と書いたindex.phpというファイルを置いてブラウザでアクセスしてみよう
メモ:下記でEC2内からパブリックIPを確認できる
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4
sudo systemctl status php8.1-fpm
と打ってみよう
/etc/hosts
を書いてブラウザでアクセスしてみようdstat -tlamp --top-cpu-adv --top-io-adv
と打ってみよう@nakedtatsuya ザックリ回答します
SSH 接続の意図
ISUCON中にEC2インスタンスへのsshが切れるという問題がよく発生するので、こういう指定をしておくと切れにくくなるので入れていました。なくても問題はないですが、あると便利です。
your-key.pemの一般的な置き場所
~/.ssh/your-key.pem のように.sshディレクトリに置くのが一般的だと思います。
~/.bashrc を開いてみよう の意図確認
.bashrcのPATHの設定がされるなど、重要になることがあるからです。ターミナル上でエディタを使うことになれていない人に対して使ってみて欲しいという意図で、正直何でも良いですが、重要になりやすいファイルを指定しています。
HTTPでのみアクセスできたけど何か設定おかしい?
別におかしくはないと思います。
aptでphp8.1-fpmをインストールしてみよう
問題ないと思います。
これの意図確認(Mac側の/etc/hostsを書き換える?)
そうです。Hostヘッダーでnginxの設定を変えることができるので、それを試してみるという意図です。
総じて負荷のかけ方とログでの確認方法がわからなかったので教えてもらう
Webブラウザでリロードしまくって数値の動きを見たり、ログを見たりするだけです。
ありがとうございます!僕が知識不足だったので助かりましたmm
追記したバージョンをプルリクに混ぜさせていただきます!
概要
クリアに必要な知識
セットアップ
AWSにインスタンスを立ててみよう
インスタンス作成
mv ./Downloads/key.pem ~/.ssh/
SSH接続
AWS EC2インスタンスへのSSH接続は、以下のステップで行います。SSH鍵の用意ができているとのことなので、その後の手順を説明します。
SSH鍵のパーミッション設定: 最初に、SSH鍵のパーミッションを安全な設定に変更する必要があります。これは、他のユーザーによる鍵ファイルの読み取りを防ぐためです。ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します(
your-key.pem
はあなたの鍵ファイル名に置き換えてください)。SSH接続コマンド: SSH鍵のパーミッションを設定した後、SSHコマンドを使用してEC2インスタンスに接続します。接続するには、EC2インスタンスのパブリックDNSまたはパブリックIPアドレスが必要です。この情報は、AWSマネジメントコンソールのEC2ダッシュボードから取得できます。
接続コマンドの基本的な形式は以下の通りです。
ここで、
/path/to/your-key.pem
はSSH鍵ファイルのパス、ec2-user
は接続するインスタンスのユーザー名(Amazon Linuxの場合はec2-user
、Ubuntuの場合はubuntu
など)、your-instance-public-dns
はインスタンスのパブリックDNSまたはパブリックIPアドレスに置き換えてください。以上のステップを行うことで、AWS EC2インスタンスにSSHで接続することができます。何かトラブルがあれば、エラーメッセージを確認し、適宜対応してください。
これ書かなくても接続できたけど意図確認
サーバーの状態を見てみよう
ps
起動しているプロセスの数
はい、
ps aux
コマンドの出力から起動しているプロセスの数を数えることは可能です。ps aux
コマンドはシステム上で実行中のすべてのプロセスに関する情報を表示します。その出力からプロセスの数を数えるには、一般的にはwc -l
コマンドをパイプでつなげて使用します。しかし、ps aux
の出力の最初の行はヘッダー行なので、実際のプロセス数を得るにはそのヘッダー行を除外する必要があります。次のコマンドラインを使用すると、システム上で実行中のプロセスの数を正確に数えることができます。
このコマンドは、以下のステップで動作します:
ps aux
で実行中の全プロセスのリストを取得します。wc -l
で得られたリストの行数(プロセス数 + 1)を数えます。awk '{print $1-1}'
でヘッダー行を除外するために1を減算し、実際のプロセス数を出力します。ただし、このコマンドを直接ここで実行することはできませんが、あなたのシステムのターミナルやコマンドプロンプトで実行してみてください。それで期待通りの結果が得られるはずです。
top を打ってみよう
このサーバーのメモリはどのぐらい?そのうちどのぐらい使われてる?
MiB Mem : 446.0 total, 27.8 free, 142.0 used, 276.2 buff/cache
メモリ情報を見る:
top
の出力では、以下のような行でメモリ使用状況が表示されます。KiB Mem :
この後に総メモリ、使用中のメモリ、空いているメモリ、バッファに使用されているメモリなどの情報が続きます。KiB Swap:
スワップ領域の使用状況を表示します。メモリ使用状況を理解する:
top
コマンドはリアルタイムで更新されるため、メモリ使用状況をリアルタイムで監視することができます。また、top
コマンドは多数のオプションを持っており、特定のプロセスを表示したり、表示方法をカスタマイズしたりすることが可能です。サーバーのメモリ使用状況を詳細に確認するには、実際にサーバーのターミナルで
top
コマンドを実行してください。質問:このサーバーのディスク容量はどのぐらい?そのうちどのぐらい使われてる?
7.6G容量 1.7G使用 5.9G空き
このサーバーに入ってるテキストエディタは何がある?
~/.bashrc を開いてみよう
の意図確認PHPでウェブアプリケーションを起動してみよう
Apacheのプロセスはいくつ起動してる?
ps aux | grep apache2 | wc -l
8
どこにphpファイルを置けばブラウザから見られる?
/var/www/html
SERVER_SOFTWAREの値は?
["SERVER_SOFTWARE"]=> string(22) "Apache/2.4.52 (Ubuntu)"
必要に応じてセキュリティグループでMyIP以外も許可。URLをHTTPSではなくHTTPでアクセスできる。
http://xxx.xxxx.xxx.xxxx/index.php
PHPをphp-fpmで動かしてみよう
Apacheを止めてみよう
起動中
停止中
aptでphp8.1-fpmをインストールしてみよう
sudo apt install php8.1-fpm
相談:インストール時に出た
デフォルトの選択肢でOK。(cmd + enter)
出力によると、
php8.1-fpm
サービスにはメインのプロセス(マスタープロセス)が1つと、pool www
として実行されている子プロセスが2つあります。したがって、合計で3つのプロセスが起動しています。これは、CGroup
セクションに表示されている以下の行から確認できます。php-fpm
の設定ファイルのパスは、マスタープロセスの記述に明示的に記載されています。これは/etc/php/8.1/fpm/php-fpm.conf
です。これがphp-fpm
のメインの設定ファイルであり、php-fpm
の動作やプール設定などをカスタマイズする際に編集します。このパスから、PHP 8.1 用の
php-fpm
の設定ファイルが/etc/php/8.1/fpm/
ディレクトリ内にあり、ファイル名はphp-fpm.conf
であることがわかります。この情報をもとに、必要に応じてphp-fpm
の設定を調整できます。設定ファイルを開いてみよう
/run/php/php8.1-fpm.sock
設定ファイルの内容から直接的に
php-fpm
がリッスンしているソケットファイルの場所を特定することはできませんが、一般的な設定パターンに基づくと、ソケットファイルの場所はプール設定ファイル (*.conf
) 内で指定されます。設定ファイルの最後の部分で、プール設定ファイルをインクルードするディレクティブがあります:このディレクティブは、
/etc/php/8.1/fpm/pool.d/
ディレクトリ内のすべての.conf
ファイルをインクルードすることを示しています。php-fpm
のソケットファイルやポートのリッスン設定は、このディレクトリ内の個々のプール設定ファイルに記述されています。ソケットファイルの設定は通常、
listen =
ディレクティブで指定され、それは以下のような形式になる可能性があります:listen = /var/run/php/php8.1-fpm.sock
listen = 127.0.0.1:9000
具体的なソケットファイルまたはポート番号を確認するには、
/etc/php/8.1/fpm/pool.d/
ディレクトリ内のプール設定ファイルを確認する必要があります。この情報はプールごとに異なるため、具体的なファイルを見ることで詳細がわかります。以下のコマンドを使って、該当するディレクトリ内のファイルを確認し、それらの内容を確認することができます:
これにより、
php-fpm
がどのソケットファイルまたはポートでリッスンしているかを特定できます。php-fpm
がリッスンしているソケットファイルの場所は、提供された設定ファイルのlisten
ディレクティブで指定されています。この場合、ソケットファイルは以下にあります:この設定は、
php-fpm
が UNIX ドメインソケット/run/php/php8.1-fpm.sock
を使用してリッスンしていることを意味します。ウェブサーバー(Apache や Nginx など)は、PHP コンテンツを処理するためにこのソケットファイル経由でphp-fpm
にリクエストを送信するように設定する必要があります。Apache または Nginx の設定ファイル内で、PHP ファイルを処理するためのプロキシパスまたはハンドラをこのソケットに設定して、PHP コードの実行を
php-fpm
に委譲します。この設定を適切に行うことで、ウェブサーバーはリクエストをphp-fpm
に転送し、PHP ファイルの実行結果をクライアントに返すことができます。nginxを使ってみよう
aptでnginxをインストールしてみよう
sudo apt install nginx
nginxでphp-fpmにリバースプロキシしてみよう
["SERVER_SOFTWARE"]=> string(12) "nginx/1.18.0"
はい、Nginxを使用して
php-fpm
にリバースプロキシすることができます。これを実現するためには、Nginxの設定ファイル(通常は/etc/nginx/sites-available/
ディレクトリ内のファイル)に適切な設定を追加する必要があります。以下は、PHPファイルを処理するためにphp-fpm
にリクエストを転送する基本的なNginxの設定例です。この例では、
php-fpm
がUNIXドメインソケット/run/php/php8.1-fpm.sock
を使用してリッスンしているとします。この情報は、先ほどのphp-fpm
の設定から取得しました。Nginx設定例
この設定では、
server_name
ディレクティブをあなたのドメイン名に、root
ディレクティブをあなたのウェブサイトのドキュメントルートに置き換えてください。location ~ \.php$
ブロックは、リクエストがPHPファイルにマッチした場合にphp-fpm
に転送するように設定します。手順
/etc/nginx/sites-available/default
またはあなたのサイト専用のファイル)。sudo nginx -t
コマンドを実行します。sudo systemctl reload nginx
コマンドでNginxを再読み込みします。これで、NginxはPHPリクエストを
php-fpm
にリバースプロキシし、PHPアプリケーションを正しく処理できるようになります。負荷をかけてみよう
nginxのアクセスログにレスポンスタイムを出すようにしてみよう
39.110.211.41 - - [30/Mar/2024:02:03:28 +0000] "GET /index.php HTTP/1.1" 200 858 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "0.001"
htopコマンドを使ってみよう
dstatコマンドをインストールしてみよう
sudo apt install dstat
dstat -tlamp --top-cpu-adv --top-io-adv と打ってみよう
ウェブブラウザで負荷をかけてみよう