Progate / path-community-projects

Pathのコミュニティメンバーがタスクを作れるか実験的に使うレポ
Other
0 stars 0 forks source link

事前インフラ研修企画 #4

Open nakedtatsuya opened 7 months ago

nakedtatsuya commented 7 months ago

概要

クリアに必要な知識

セットアップ

AWSにインスタンスを立ててみよう

インスタンス作成

SSH接続

AWS EC2インスタンスへのSSH接続は、以下のステップで行います。SSH鍵の用意ができているとのことなので、その後の手順を説明します。

  1. SSH鍵のパーミッション設定: 最初に、SSH鍵のパーミッションを安全な設定に変更する必要があります。これは、他のユーザーによる鍵ファイルの読み取りを防ぐためです。ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します(your-key.pemはあなたの鍵ファイル名に置き換えてください)。

    chmod 400 ~/.ssh/your-key.pem
  2. SSH接続コマンド: SSH鍵のパーミッションを設定した後、SSHコマンドを使用してEC2インスタンスに接続します。接続するには、EC2インスタンスのパブリックDNSまたはパブリックIPアドレスが必要です。この情報は、AWSマネジメントコンソールのEC2ダッシュボードから取得できます。

    接続コマンドの基本的な形式は以下の通りです。

    ssh -i /path/to/your-key.pem ec2-user@your-instance-public-dns

    ここで、/path/to/your-key.pemはSSH鍵ファイルのパス、ec2-userは接続するインスタンスのユーザー名(Amazon Linuxの場合はec2-user、Ubuntuの場合はubuntuなど)、your-instance-public-dnsはインスタンスのパブリックDNSまたはパブリックIPアドレスに置き換えてください。


 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

  System information as of Thu Mar 28 13:46:21 UTC 2024

  System load:  0.0               Processes:             96
  Usage of /:   20.4% of 7.57GB   Users logged in:       0
  Memory usage: 42%               IPv4 address for eth0: 172.31.36.76
  Swap usage:   0%

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

The list of available updates is more than a week old.
To check for new updates run: sudo apt update

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-31-36-76:~$ 
  1. セキュリティグループの確認: EC2インスタンスへの接続がうまくいかない場合は、インスタンスに関連付けられているセキュリティグループの設定を確認してください。SSH接続を許可するには、セキュリティグループにてポート22での入力を許可する必要があります。

以上のステップを行うことで、AWS EC2インスタンスにSSHで接続することができます。何かトラブルがあれば、エラーメッセージを確認し、適宜対応してください。

これ書かなくても接続できたけど意図確認

Host infra-training
  User ubuntu
  Port 22
  IdentityFile 鍵ファイル
  HostName パブリックIPアドレス
  ServerAliveInterval 5
  ServerAliveCountMax 12

サーバーの状態を見てみよう

ps

ubuntu@ip-172-31-36-76:~$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  2.6 167416 12120 ?        Ss   Mar28   0:05 /sbin/init
root           2  0.0  0.0      0     0 ?        S    Mar28   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Mar28   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Mar28   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   Mar28   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   Mar28   0:00 [netns]
root           8  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kworker/0:0H-events_highpri]
root          10  0.0  0.0      0     0 ?        I    Mar28   0:00 [kworker/u30:0-events_power_efficient]
root          11  0.0  0.0      0     0 ?        I<   Mar28   0:00 [mm_percpu_wq]
root          12  0.0  0.0      0     0 ?        I    Mar28   0:00 [rcu_tasks_rude_kthread]
root          13  0.0  0.0      0     0 ?        I    Mar28   0:00 [rcu_tasks_trace_kthread]
root          14  0.0  0.0      0     0 ?        S    Mar28   0:00 [ksoftirqd/0]
root          15  0.0  0.0      0     0 ?        I    Mar28   0:01 [rcu_sched]
root          16  0.0  0.0      0     0 ?        S    Mar28   0:00 [migration/0]
root          17  0.0  0.0      0     0 ?        S    Mar28   0:00 [idle_inject/0]
root          18  0.0  0.0      0     0 ?        S    Mar28   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    Mar28   0:00 [kdevtmpfs]
root          20  0.0  0.0      0     0 ?        I<   Mar28   0:00 [inet_frag_wq]
root          22  0.0  0.0      0     0 ?        S    Mar28   0:00 [kauditd]
root          23  0.0  0.0      0     0 ?        S    Mar28   0:00 [khungtaskd]
root          25  0.0  0.0      0     0 ?        S    Mar28   0:00 [oom_reaper]
root          26  0.0  0.0      0     0 ?        I<   Mar28   0:00 [writeback]
root          27  0.0  0.0      0     0 ?        S    Mar28   0:01 [kcompactd0]
root          28  0.0  0.0      0     0 ?        SN   Mar28   0:00 [ksmd]
root          29  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kintegrityd]
root          30  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kblockd]
root          31  0.0  0.0      0     0 ?        I<   Mar28   0:00 [blkcg_punt_bio]
root          32  0.0  0.0      0     0 ?        S    Mar28   0:00 [xen-balloon]
root          33  0.0  0.0      0     0 ?        I<   Mar28   0:00 [tpm_dev_wq]
root          34  0.0  0.0      0     0 ?        I<   Mar28   0:00 [ata_sff]
root          35  0.0  0.0      0     0 ?        I<   Mar28   0:00 [md]
root          36  0.0  0.0      0     0 ?        I<   Mar28   0:00 [md_bitmap]
root          37  0.0  0.0      0     0 ?        I<   Mar28   0:00 [edac-poller]
root          38  0.0  0.0      0     0 ?        I<   Mar28   0:00 [devfreq_wq]
root          39  0.0  0.0      0     0 ?        S    Mar28   0:00 [watchdogd]
root          42  0.0  0.0      0     0 ?        S    Mar28   0:00 [kswapd0]
root          43  0.0  0.0      0     0 ?        S    Mar28   0:00 [ecryptfs-kthread]
root          44  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kthrotld]
root          45  0.0  0.0      0     0 ?        I<   Mar28   0:00 [acpi_thermal_pm]
root          46  0.0  0.0      0     0 ?        S    Mar28   0:00 [xenbus]
root          47  0.0  0.0      0     0 ?        S    Mar28   0:00 [xenwatch]
root          48  0.0  0.0      0     0 ?        I<   Mar28   0:00 [nvme-wq]
root          49  0.0  0.0      0     0 ?        I<   Mar28   0:00 [nvme-reset-wq]
root          50  0.0  0.0      0     0 ?        I<   Mar28   0:00 [nvme-delete-wq]
root          51  0.0  0.0      0     0 ?        I<   Mar28   0:00 [nvme-auth-wq]
root          52  0.0  0.0      0     0 ?        S    Mar28   0:00 [scsi_eh_0]
root          53  0.0  0.0      0     0 ?        I<   Mar28   0:00 [scsi_tmf_0]
root          54  0.0  0.0      0     0 ?        S    Mar28   0:00 [scsi_eh_1]
root          55  0.0  0.0      0     0 ?        I<   Mar28   0:00 [scsi_tmf_1]
root          56  0.0  0.0      0     0 ?        I<   Mar28   0:00 [mld]
root          57  0.0  0.0      0     0 ?        I<   Mar28   0:00 [ipv6_addrconf]
root          64  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kstrp]
root          66  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kworker/u31:0]
root          70  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kworker/0:2H-kblockd]
root          71  0.0  0.0      0     0 ?        I<   Mar28   0:00 [charger_manager]
root          72  0.0  0.0      0     0 ?        S    Mar28   0:00 [jbd2/xvda1-8]
root          73  0.0  0.0      0     0 ?        I<   Mar28   0:00 [ext4-rsv-conver]
root         111  0.0  3.0  47888 14084 ?        S<s  Mar28   0:00 /lib/systemd/systemd-journald
root         142  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kaluad]
root         144  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kmpath_rdacd]
root         146  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kmpathd]
root         147  0.0  0.0      0     0 ?        I<   Mar28   0:00 [kmpath_handlerd]
root         151  0.0  5.9 289316 27392 ?        SLsl Mar28   0:04 /sbin/multipathd -d -s
root         160  0.0  1.2  11364  5828 ?        Ss   Mar28   0:00 /lib/systemd/systemd-udevd
root         171  0.0  0.0      0     0 ?        I<   Mar28   0:00 [cryptd]
systemd+     314  0.0  1.5  16260  7296 ?        Ss   Mar28   0:00 /lib/systemd/systemd-networkd
systemd+     316  0.0  2.3  25540 10848 ?        Ss   Mar28   0:00 /lib/systemd/systemd-resolved
root         368  0.0  0.4   2816  2048 ?        Ss   Mar28   0:00 /usr/sbin/acpid
root         373  0.0  0.6   7288  2816 ?        Ss   Mar28   0:00 /usr/sbin/cron -f -P
message+     374  0.0  1.0   8656  4864 ?        Ss   Mar28   0:00 @dbus-daemon --system --address=systemd: --nofork --nopidfile 
_chrony      385  0.0  0.7  18892  3484 ?        S    Mar28   0:01 /usr/sbin/chronyd -F 1
_chrony      387  0.0  0.4  10564  1988 ?        S    Mar28   0:00 /usr/sbin/chronyd -F 1
root         401  0.0  4.0  33084 18676 ?        Ss   Mar28   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-tr
syslog       413  0.0  1.2 222404  5632 ?        Ssl  Mar28   0:00 /usr/sbin/rsyslogd -n -iNONE
root         429  0.0  1.5  15540  7296 ?        Ss   Mar28   0:00 /lib/systemd/systemd-logind
root         565  0.0  0.0      0     0 ?        I<   Mar28   0:00 [tls-strp]
root         567  0.0  4.1 110100 19072 ?        Ssl  Mar28   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upg
root         569  0.0  0.5   6220  2304 ttyS0    Ss+  Mar28   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 t
root         571  0.0  0.4   6176  2176 tty1     Ss+  Mar28   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root         572  0.0  1.5 235448  7304 ?        Ssl  Mar28   0:00 /usr/libexec/polkitd --no-debug
root         658  0.0  1.8  15440  8320 ?        Ss   Mar28   0:00 sshd: /usr/sbin/sshd -D -o AuthorizedKeysCommand /usr/share/ec
root        1079  0.0  2.7 1241300 12380 ?       Ssl  Mar28   0:02 /snap/amazon-ssm-agent/7628/amazon-ssm-agent
root        1322  0.0  0.0      0     0 ?        I    Mar28   0:00 [kworker/u30:1-events_unbound]
root        1388  0.0  0.0      0     0 ?        I    Mar28   0:00 [kworker/0:0-events]
root        1510  0.0  6.8 1319216 31292 ?       Ssl  Mar28   0:04 /usr/lib/snapd/snapd
root        2145  0.0  0.0      0     0 ?        I    00:00   0:00 [kworker/0:1-events]
root        2153  0.0  0.0      0     0 ?        I    00:17   0:00 [kworker/u30:3-events_unbound]
root        2186  0.0  2.3  17056 10752 ?        Ss   05:01   0:00 sshd: ubuntu [priv]
ubuntu      2189  0.0  2.1  16944  9600 ?        Ss   05:01   0:00 /lib/systemd/systemd --user
root        2190  0.0  0.0      0     0 ?        I    05:01   0:00 [kworker/0:2-events]
ubuntu      2191  0.0  1.4 170328  6524 ?        S    05:01   0:00 (sd-pam)
ubuntu      2274  0.0  1.7  17192  7920 ?        S    05:01   0:00 sshd: ubuntu@pts/0
ubuntu      2275  0.0  1.1   9156  5120 pts/0    Ss   05:01   0:00 -bash
root        2286  0.0  0.0      0     0 ?        I    05:01   0:00 [kworker/u30:2-events_unbound]
root        2287  0.0  0.0      0     0 ?        I    05:01   0:00 [kworker/u30:4]
ubuntu      2288  0.0  0.7  10464  3200 pts/0    R+   05:03   0:00 ps aux

起動しているプロセスの数

ubuntu@ip-172-31-36-76:~$ ps aux | wc -l | awk '{print $1-1}'
95

はい、ps aux コマンドの出力から起動しているプロセスの数を数えることは可能です。ps aux コマンドはシステム上で実行中のすべてのプロセスに関する情報を表示します。その出力からプロセスの数を数えるには、一般的には wc -l コマンドをパイプでつなげて使用します。しかし、ps aux の出力の最初の行はヘッダー行なので、実際のプロセス数を得るにはそのヘッダー行を除外する必要があります。

次のコマンドラインを使用すると、システム上で実行中のプロセスの数を正確に数えることができます。

ps aux | wc -l | awk '{print $1-1}'

このコマンドは、以下のステップで動作します:

  1. ps aux で実行中の全プロセスのリストを取得します。
  2. wc -l で得られたリストの行数(プロセス数 + 1)を数えます。
  3. awk '{print $1-1}' でヘッダー行を除外するために1を減算し、実際のプロセス数を出力します。

ただし、このコマンドを直接ここで実行することはできませんが、あなたのシステムのターミナルやコマンドプロンプトで実行してみてください。それで期待通りの結果が得られるはずです。

top を打ってみよう

ubuntu@ip-172-31-36-76:~$ top

top - 05:08:20 up 15:46,  1 user,  load average: 0.03, 0.03, 0.00
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    446.0 total,     27.8 free,    142.0 used,    276.2 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    275.4 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                  
   1322 root      20   0       0      0      0 I   0.3   0.0   0:00.33 kworker/u30:1-events_power_efficient                     
   2274 ubuntu    20   0   17192   7920   5632 S   0.3   1.7   0:00.05 sshd                                                     
   2289 ubuntu    20   0   10900   3840   3200 R   0.3   0.8   0:00.11 top                                                      
      1 root      20   0  167416  12120   7640 S   0.0   2.7   0:05.53 systemd                                                  
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                                 
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                   
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                               
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 slub_flushwq                                             
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns                                                    
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri                              
     10 root      20   0       0      0      0 I   0.0   0.0   0:00.51 kworker/u30:0-events_unbound                             
     11 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                             
     12 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_rude_kthread                                   
     13 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_trace_kthread                                  
     14 root      20   0       0      0      0 S   0.0   0.0   0:00.15 ksoftirqd/0                                              
     15 root      20   0       0      0      0 I   0.0   0.0   0:01.00 rcu_sched                                                
     16 root      rt   0       0      0      0 S   0.0   0.0   0:00.37 migration/0                                              
     17 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0                                            
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                                  
     19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs                                                
     20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 inet_frag_wq                                             
     22 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kauditd                                                  
     23 root      20   0       0      0      0 S   0.0   0.0   0:00.01 khungtaskd                                               
     25 root      20   0       0      0      0 S   0.0   0.0   0:00.00 oom_reaper                                               
     26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 writeback                                                
     27 root      20   0       0      0      0 S   0.0   0.0   0:01.19 kcompactd0                                               
     28 root      25   5       0      0      0 S   0.0   0.0   0:00.00 ksmd                                                     
     29 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kintegrityd                                              
     30 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kblockd                                                  
     31 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 blkcg_punt_bio  

このサーバーのメモリはどのぐらい?そのうちどのぐらい使われてる?

MiB Mem : 446.0 total, 27.8 free, 142.0 used, 276.2 buff/cache

`top` コマンドはリアルタイムにシステムのプロセスやメモリ使用状況などを表示するユーティリティですが、ここで直接 `top` コマンドを実行することはできません。しかし、`top` コマンドを使用してサーバーのメモリ使用状況を確認する方法については説明できます。

サーバーで `top` コマンドを実行した場合、メモリ使用状況に関する情報は通常、出力の上部に表示されます。以下は、`top` コマンドの出力の一部に関する説明です:

1. **起動する**: ターミナルまたはコマンドプロンプトを開いて、`top` コマンドを実行します。
top
```
  1. メモリ情報を見る: top の出力では、以下のような行でメモリ使用状況が表示されます。

    • KiB Mem : この後に総メモリ、使用中のメモリ、空いているメモリ、バッファに使用されているメモリなどの情報が続きます。
    • KiB Swap: スワップ領域の使用状況を表示します。
  2. メモリ使用状況を理解する:

    • 総メモリ: システムに搭載されている物理メモリの総量です。
    • 使用中のメモリ: アプリケーションやシステムプロセスによって現在使用されているメモリ量です。
    • 空いているメモリ: 使用されていない、即座に利用可能なメモリ量です。
    • バッファ/キャッシュに使用されているメモリ: システムが効率的なアクセスのためにファイルやデータを一時的に保存しているメモリ領域です。この部分は必要に応じて他のプロセスによって再利用されることがあります。

top コマンドはリアルタイムで更新されるため、メモリ使用状況をリアルタイムで監視することができます。また、top コマンドは多数のオプションを持っており、特定のプロセスを表示したり、表示方法をカスタマイズしたりすることが可能です。

サーバーのメモリ使用状況を詳細に確認するには、実際にサーバーのターミナルで top コマンドを実行してください。


### df -h を打ってみよう

```sh
ubuntu@ip-172-31-36-76:~$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.6G  1.7G  5.9G  23% /
tmpfs           223M     0  223M   0% /dev/shm
tmpfs            90M  844K   89M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/xvda15     105M  6.1M   99M   6% /boot/efi
tmpfs            45M  4.0K   45M   1% /run/user/1000

質問:このサーバーのディスク容量はどのぐらい?そのうちどのぐらい使われてる?

7.6G容量 1.7G使用 5.9G空き

この `df -h` コマンドの出力は、あなたのシステムのディスク使用状況に関する情報を示しています。それぞれの列と行が何を意味するのか、順番に解説します。

##### 列の説明

- **Filesystem**: 使用されているファイルシステムのデバイスやファイルです。
- **Size**: ファイルシステムの総容量です。
- **Used**: 使用されている容量です。
- **Avail**: 利用可能な容量です。
- **Use%**: 使用されている容量の割合です。
- **Mounted on**: ファイルシステムがマウントされているディレクトリです。

### 行の解説

- **/dev/root**: ルートファイルシステムで、7.6GBの容量があります。このうち1.7GBが使用されており、5.9GBが利用可能です。使用率は23%です。これはシステムのメインファイルシステムで、ほとんどのプログラムとデータがこの領域に格納されます。

- **tmpfs**: これはテンポラリファイルストレージのためのメモリ上のファイルシステムです。例えば、`/dev/shm` は共有メモリのために使われ、223MBの容量があり、全く使用されていません(0%の使用率)。`tmpfs` のエントリは主にシステムやアプリケーションによる一時的なデータ保存に使用され、再起動時には内容が消去されます。

- **/dev/xvda15**: `/boot/efi` ディレクトリにマウントされたファイルシステムで、EFI(Extensible Firmware Interface)の起動に関連したファイルが格納されています。この領域は105MBの容量があり、6.1MBが使用されていて、99MBが利用可能です。使用率は6%です。

- **/run/user/1000**: ユーザー固有のランタイムデータ(例えばセッション情報など)を格納するための一時的なファイルシステムで、45MBの容量があり、ほとんど使用されていません(4.0KB使用)。

この情報から、システムのルートファイルシステムにはまだ十分な空き容量があり(5.9GB利用可能)、システム全体としてはディスク容量の圧迫には程遠い状況であることがわかります。また、EFIパーティションやtmpfsの使用状況も健全です。

このサーバーに入ってるテキストエディタは何がある?

ubuntu@ip-172-31-36-76:~$ which nano
which vi
which emacs
which gedit
/usr/bin/nano
/usr/bin/vi

~/.bashrc を開いてみよう の意図確認

PHPでウェブアプリケーションを起動してみよう

Apacheのプロセスはいくつ起動してる?

ps aux | grep apache2 | wc -l

8

どこにphpファイルを置けばブラウザから見られる?

/var/www/html

ubuntu@ip-172-31-36-76:~$ less /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
提供された Apache の設定ファイル (`000-default.conf`) を確認すると、ブラウザからアクセス可能な PHP ファイルを配置する場所は `DocumentRoot` ディレクティブで指定されています。この設定ファイルによると、`DocumentRoot` は `/var/www/html` に設定されています。

`DocumentRoot /var/www/html`

これは、Apache サーバーがブラウザからのリクエストを受け取った際に、ファイルを探す基本的なディレクトリを指しています。したがって、PHP ファイルやその他のウェブファイル(HTML、CSS、JavaScript など)をブラウザからアクセス可能にするには、それらを `/var/www/html` ディレクトリ内に配置する必要があります。

例えば、`example.php` という名前の PHP ファイルをブラウザから実行可能にする場合、そのファイルを `/var/www/html` ディレクトリに配置し、ブラウザから `http://your-server-ip/example.php` または `http://your-domain.com/example.php` (適切な IP アドレスやドメイン名に置き換えて)でアクセスします。

この情報に基づいて、PHP ファイルやその他のウェブコンテンツを `/var/www/html` ディレクトリに配置することで、ブラウザからのアクセスが可能になります。Apache サーバーの設定やファイルの配置に関する追加のカスタマイズが必要な場合は、適宜 `000-default.conf` ファイルやその他の設定ファイルを編集してください。

SERVER_SOFTWAREの値は?

["SERVER_SOFTWARE"]=> string(22) "Apache/2.4.52 (Ubuntu)"

必要に応じてセキュリティグループでMyIP以外も許可。URLをHTTPSではなくHTTPでアクセスできる。

http://xxx.xxxx.xxx.xxxx/index.php

array(32) { ["HTTP_HOST"]=> string(14) "xxx.xxx.xxx.xxx" ["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_USER_AGENT"]=> string(117) "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" ["HTTP_ACCEPT"]=> string(96) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8" ["HTTP_SEC_GPC"]=> string(1) "1" ["HTTP_ACCEPT_LANGUAGE"]=> string(8) "en-US,en" ["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, deflate" ["PATH"]=> string(70) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" ["SERVER_SIGNATURE"]=> string(75) "
Apache/2.4.52 (Ubuntu) Server at xxx.xxx.xxx.xxx Port 80
" ["SERVER_SOFTWARE"]=> string(22) "Apache/2.4.52 (Ubuntu)" ["SERVER_NAME"]=> string(14) "xxx.xxx.xxx.xxx" ["SERVER_ADDR"]=> string(12) "172.31.36.76" ["SERVER_PORT"]=> string(2) "80" ["REMOTE_ADDR"]=> string(14) "133.106.241.38" ["DOCUMENT_ROOT"]=> string(13) "/var/www/html" ["REQUEST_SCHEME"]=> string(4) "http" ["CONTEXT_PREFIX"]=> string(0) "" ["CONTEXT_DOCUMENT_ROOT"]=> string(13) "/var/www/html" ["SERVER_ADMIN"]=> string(19) "webmaster@localhost" ["SCRIPT_FILENAME"]=> string(23) "/var/www/html/index.php" ["REMOTE_PORT"]=> string(5) "50368" ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["REQUEST_METHOD"]=> string(3) "GET" ["QUERY_STRING"]=> string(0) "" ["REQUEST_URI"]=> string(10) "/index.php" ["SCRIPT_NAME"]=> string(10) "/index.php" ["PHP_SELF"]=> string(10) "/index.php" ["REQUEST_TIME_FLOAT"]=> float(1711695446.444052) ["REQUEST_TIME"]=> int(1711695446) }

PHPをphp-fpmで動かしてみよう

Apacheを止めてみよう

# apache2の状態を見る
sudo systemctl status apache2

# apache2を再起動
sudo systemctl restart apache2

# apache2の設定を再読み込み
sudo systemctl reload apache2

# apache2を止める
sudo systemctl stop apache2

起動中

ubuntu@ip-172-31-36-76:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Fri 2024-03-29 05:30:27 UTC; 1h 14min ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 9678 (apache2)
      Tasks: 6 (limit: 517)
     Memory: 10.1M
        CPU: 263ms
     CGroup: /system.slice/apache2.service
             ├─9678 /usr/sbin/apache2 -k start
             ├─9680 /usr/sbin/apache2 -k start
             ├─9681 /usr/sbin/apache2 -k start
             ├─9682 /usr/sbin/apache2 -k start
             ├─9683 /usr/sbin/apache2 -k start
             └─9684 /usr/sbin/apache2 -k start

Mar 29 05:30:27 ip-172-31-36-76 systemd[1]: Starting The Apache HTTP Server...
Mar 29 05:30:27 ip-172-31-36-76 systemd[1]: Started The Apache HTTP Server.

停止中

○ apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset>
     Active: inactive (dead) since Fri 2024-03-29 07:04:30 UTC; 5s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 18706 ExecStop=/usr/sbin/apachectl graceful-stop (code=exited, stat>
   Main PID: 9678 (code=exited, status=0/SUCCESS)
        CPU: 389ms

Mar 29 05:30:27 ip-172-31-36-76 systemd[1]: Starting The Apache HTTP Server...

aptでphp8.1-fpmをインストールしてみよう

sudo apt install php8.1-fpm

相談:インストール時に出た
image

デフォルトの選択肢でOK。(cmd + enter)

image
ubuntu@ip-172-31-36-76:~$ sudo systemctl status php8.1-fpm
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.1-fpm.service; enabled; vendor pre>
     Active: active (running) since Fri 2024-03-29 07:13:52 UTC; 11s ago
       Docs: man:php-fpm8.1(8)
    Process: 22935 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run>
   Main PID: 22932 (php-fpm8.1)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/>
      Tasks: 3 (limit: 517)
     Memory: 7.2M
        CPU: 44ms
     CGroup: /system.slice/php8.1-fpm.service
             ├─22932 "php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)" ">
             ├─22933 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             └─22934 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" >

Mar 29 07:13:52 ip-172-31-36-76 systemd[1]: php8.1-fpm.service: Deactivated succ>
Mar 29 07:13:52 ip-172-31-36-76 systemd[1]: Stopped The PHP 8.1 FastCGI Process >
Mar 29 07:13:52 ip-172-31-36-76 systemd[1]: Starting The PHP 8.1 FastCGI Process>
Mar 29 07:13:52 ip-172-31-36-76 systemd[1]: Started The PHP 8.1 FastCGI Proces

出力によると、php8.1-fpm サービスにはメインのプロセス(マスタープロセス)が1つと、pool www として実行されている子プロセスが2つあります。したがって、合計で3つのプロセスが起動しています。これは、CGroup セクションに表示されている以下の行から確認できます。

             ├─22932 "php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)" ">
             ├─22933 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             └─22934 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" >

php-fpm の設定ファイルのパスは、マスタープロセスの記述に明示的に記載されています。これは /etc/php/8.1/fpm/php-fpm.conf です。これが php-fpm のメインの設定ファイルであり、php-fpm の動作やプール設定などをカスタマイズする際に編集します。

             ├─22932 "php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)" ">

このパスから、PHP 8.1 用の php-fpm の設定ファイルが /etc/php/8.1/fpm/ ディレクトリ内にあり、ファイル名は php-fpm.conf であることがわかります。この情報をもとに、必要に応じて php-fpm の設定を調整できます。

設定ファイルを開いてみよう
ubuntu@ip-172-31-36-76:~$ cat /etc/php/8.1/fpm/php-fpm.conf
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix (/usr). This prefix can be dynamically changed by using the
; '-p' argument from the command line.

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
; Warning: if you change the value here, you need to modify systemd
; service PIDFile= setting to match the value here.
pid = /run/php/php8.1-fpm.pid

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php8.1-fpm.log

; syslog_facility is used to specify what type of program is logging the
; message. This lets syslogd specify that messages from different facilities
; will be handled differently.
; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
; Default Value: daemon
;syslog.facility = daemon

; syslog_ident is prepended to every message. If you have multiple FPM
; instances running on the same server, you can change the default value
; which must suit common needs.
; Default Value: php-fpm
;syslog.ident = php-fpm

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; Log limit on number of characters in the single line (log entry). If the
; line is over the limit, it is wrapped on multiple lines. The limit is for
; all logged characters including message prefix and suffix if present. However
; the new line character does not count into it as it is present only when
; logging to a file descriptor. It means the new line character is not present
; when logging to syslog.
; Default Value: 1024
;log_limit = 4096

; Log buffering specifies if the log line is buffered which means that the
; line is written in a single write operation. If the value is false, then the
; data is written directly into the file descriptor. It is an experimental
; option that can potentially improve logging performance and memory usage
; for some heavy logging scenarios. This option is ignored if logging to syslog
; as it has to be always buffered.
; Default value: yes
;log_buffering = no

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; The maximum number of processes FPM will fork. This has been designed to control
; the global number of processes when using dynamic PM within a lot of pools.
; Use it with caution.
; Note: A value of 0 indicates no limit
; Default Value: 0
; process.max = 128

; Specify the nice(2) priority to apply to the master process (only if set)
; The value can vary from -19 (highest priority) to 20 (lowest priority)
; Note: - It will only work if the FPM master process is launched as root
;       - The pool process will inherit the master process priority
;         unless specified otherwise
; Default Value: no set
; process.priority = -19

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
;daemonize = yes

; Set open file descriptor rlimit for the master process.
; Default Value: system defined value
;rlimit_files = 1024

; Set max core size rlimit for the master process.
; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value
;rlimit_core = 0

; Specify the event mechanism FPM will use. The following is available:
; - select     (any POSIX os)
; - poll       (any POSIX os)
; - epoll      (linux >= 2.5.44)
; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
; - /dev/poll  (Solaris >= 7)
; - port       (Solaris >= 10)
; Default Value: not set (auto detection)
;events.mechanism = epoll

; When FPM is built with systemd integration, specify the interval,
; in seconds, between health report notification to systemd.
; Set to 0 to disable.
; Available Units: s(econds), m(inutes), h(ours)
; Default Unit: seconds
; Default value: 10
;systemd_interval = 10

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

; Multiple pools of child processes may be started with different listening
; ports and different management options.  The name of the pool will be
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
;  - the global prefix if it's been set (-p argument)
;  - /usr otherwise
include=/etc/php/8.1/fpm/pool.d/*.conf

/run/php/php8.1-fpm.sock

ubuntu@ip-172-31-36-76:~$ ls /etc/php/8.1/fpm/pool.d/
www.conf
ubuntu@ip-172-31-36-76:~$ cat /etc/php/8.1/fpm/pool.d/www.conf 
; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[www]

; Per pool prefix
; It only applies on the following directives:
; - 'access.log'
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
; - 'chdir'
; - 'php_values'
; - 'php_admin_values'
; When not set, the global prefix (or /usr) applies instead.
; Note: This directive can also be relative to the global prefix.
; Default Value: none
;prefix = /path/to/pools/$pool

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php8.1-fpm.sock

; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 511

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users =
;listen.acl_groups =

; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any
;listen.allowed_clients = 127.0.0.1

; Specify the nice(2) priority to apply to the pool processes (only if set)
; The value can vary from -19 (highest priority) to 20 (lower priority)
; Note: - It will only work if the FPM master process is launched as root
;       - The pool processes will inherit the master process priority
;         unless it specified otherwise
; Default Value: no set
; process.priority = -19

; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user
; or group is different than the master process user. It allows to create process
; core dump and ptrace the process for the pool user.
; Default Value: no
; process.dumpable = yes

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives. With this process management, there will be
;             always at least 1 children.
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
;             pm.max_spawn_rate    - the maximum number of rate to spawn child
;                                    processes at once.
;  ondemand - no children are created at startup. Children will be forked when
;             new requests will connect. The following parameter are used:
;             pm.max_children           - the maximum number of children that
;                                         can be alive at the same time.
;             pm.process_idle_timeout   - The number of seconds after which
;                                         an idle process will be killed.
; Note: This value is mandatory.
pm = dynamic

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 5

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: (min_spare_servers + max_spare_servers) / 2
pm.start_servers = 2

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 1

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 3

; The number of rate to spawn child processes at once.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
; Default Value: 32
;pm.max_spawn_rate = 32

; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
;pm.process_idle_timeout = 10s;

; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
;pm.max_requests = 500

; The URI to view the FPM status page. If this value is not set, no URI will be
; recognized as a status page. It shows the following information:
;   pool                 - the name of the pool;
;   process manager      - static, dynamic or ondemand;
;   start time           - the date and time FPM has started;
;   start since          - number of seconds since FPM has started;
;   accepted conn        - the number of request accepted by the pool;
;   listen queue         - the number of request in the queue of pending
;                          connections (see backlog in listen(2));
;   max listen queue     - the maximum number of requests in the queue
;                          of pending connections since FPM has started;
;   listen queue len     - the size of the socket queue of pending connections;
;   idle processes       - the number of idle processes;
;   active processes     - the number of active processes;
;   total processes      - the number of idle + active processes;
;   max active processes - the maximum number of active processes since FPM
;                          has started;
;   max children reached - number of times, the process limit has been reached,
;                          when pm tries to start more children (works only for
;                          pm 'dynamic' and 'ondemand');
; Value are updated in real time.
; Example output:
;   pool:                 www
;   process manager:      static
;   start time:           01/Jul/2011:17:53:49 +0200
;   start since:          62636
;   accepted conn:        190460
;   listen queue:         0
;   max listen queue:     1
;   listen queue len:     42
;   idle processes:       4
;   active processes:     11
;   total processes:      15
;   max active processes: 12
;   max children reached: 0
;
; By default the status page output is formatted as text/plain. Passing either
; 'html', 'xml' or 'json' in the query string will return the corresponding
; output syntax. Example:
;   http://www.foo.bar/status
;   http://www.foo.bar/status?json
;   http://www.foo.bar/status?html
;   http://www.foo.bar/status?xml
;
; By default the status page only outputs short status. Passing 'full' in the
; query string will also return status for each pool process.
; Example:
;   http://www.foo.bar/status?full
;   http://www.foo.bar/status?json&full
;   http://www.foo.bar/status?html&full
;   http://www.foo.bar/status?xml&full
; The Full status returns for each process:
;   pid                  - the PID of the process;
;   state                - the state of the process (Idle, Running, ...);
;   start time           - the date and time the process has started;
;   start since          - the number of seconds since the process has started;
;   requests             - the number of requests the process has served;
;   request duration     - the duration in µs of the requests;
;   request method       - the request method (GET, POST, ...);
;   request URI          - the request URI with the query string;
;   content length       - the content length of the request (only with POST);
;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);
;   script               - the main script called (or '-' if not set);
;   last request cpu     - the %cpu the last request consumed
;                          it's always 0 if the process is not in Idle state
;                          because CPU calculation is done when the request
;                          processing has terminated;
;   last request memory  - the max amount of memory the last request consumed
;                          it's always 0 if the process is not in Idle state
;                          because memory calculation is done when the request
;                          processing has terminated;
; If the process is in Idle state, then informations are related to the
; last request the process has served. Otherwise informations are related to
; the current request being served.
; Example output:
;   ************************
;   pid:                  31330
;   state:                Running
;   start time:           01/Jul/2011:17:53:49 +0200
;   start since:          63087
;   requests:             12808
;   request duration:     1250261
;   request method:       GET
;   request URI:          /test_mem.php?N=10000
;   content length:       0
;   user:                 -
;   script:               /home/fat/web/docs/php/test_mem.php
;   last request cpu:     0.00
;   last request memory:  0
;
; Note: There is a real-time FPM status monitoring sample web page available
;       It's available in: /usr/share/php/8.1/fpm/status.html
;
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.
; Default Value: not set
;pm.status_path = /status

; The address on which to accept FastCGI status request. This creates a new
; invisible pool that can handle requests independently. This is useful
; if the main pool is busy with long running requests because it is still possible
; to get the status before finishing the long running requests.
;
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Default Value: value of the listen option
;pm.status_listen = 127.0.0.1:9001

; The ping URI to call the monitoring page of FPM. If this value is not set, no
; URI will be recognized as a ping page. This could be used to test from outside
; that FPM is alive and responding, or to
; - create a graph of FPM availability (rrd or such);
; - remove a server from a group if it is not responding (load balancing);
; - trigger alerts for the operating team (24/7).
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.
; Default Value: not set
;ping.path = /ping

; This directive may be used to customize the response of a ping request. The
; response is formatted as text/plain with a 200 response code.
; Default Value: pong
;ping.response = pong

; The access log file
; Default: not set
;access.log = log/$pool.access.log

; The access log format.
; The following syntax is allowed
;  %%: the '%' character
;  %C: %CPU used by the request
;      it can accept the following format:
;      - %{user}C for user CPU only
;      - %{system}C for system CPU only
;      - %{total}C  for user + system CPU (default)
;  %d: time taken to serve the request
;      it can accept the following format:
;      - %{seconds}d (default)
;      - %{milliseconds}d
;      - %{milli}d
;      - %{microseconds}d
;      - %{micro}d
;  %e: an environment variable (same as $_ENV or $_SERVER)
;      it must be associated with embraces to specify the name of the env
;      variable. Some examples:
;      - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
;      - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
;  %f: script filename
;  %l: content-length of the request (for POST request only)
;  %m: request method
;  %M: peak of memory allocated by PHP
;      it can accept the following format:
;      - %{bytes}M (default)
;      - %{kilobytes}M
;      - %{kilo}M
;      - %{megabytes}M
;      - %{mega}M
;  %n: pool name
;  %o: output header
;      it must be associated with embraces to specify the name of the header:
;      - %{Content-Type}o
;      - %{X-Powered-By}o
;      - %{Transfert-Encoding}o
;      - ....
;  %p: PID of the child that serviced the request
;  %P: PID of the parent of the child that serviced the request
;  %q: the query string
;  %Q: the '?' character if query string exists
;  %r: the request URI (without the query string, see %q and %Q)
;  %R: remote IP address
;  %s: status (response code)
;  %t: server time the request was received
;      it can accept a strftime(3) format:
;      %d/%b/%Y:%H:%M:%S %z (default)
;      The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
;  %T: time the log has been written (the request has finished)
;      it can accept a strftime(3) format:
;      %d/%b/%Y:%H:%M:%S %z (default)
;      The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
;  %u: remote user
;
; Default: "%R - %u %t \"%m %r\" %s"
;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%"

; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
;slowlog = log/$pool.log.slow

; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_slowlog_timeout = 0

; Depth of slow log stack trace.
; Default Value: 20
;request_slowlog_trace_depth = 20

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_terminate_timeout = 0

; The timeout set by 'request_terminate_timeout' ini option is not engaged after
; application calls 'fastcgi_finish_request' or when application has finished and
; shutdown functions are being called (registered via register_shutdown_function).
; This option will enable timeout limit to be applied unconditionally
; even in such cases.
; Default Value: no
;request_terminate_timeout_track_finished = no

; Set open file descriptor rlimit.
; Default Value: system defined value
;rlimit_files = 1024

; Set max core size rlimit.
; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value
;rlimit_core = 0

; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
; of its subdirectories. If the pool prefix is not set, the global prefix
; will be used instead.
; Note: chrooting is a great security feature and should be used whenever
;       possible. However, all PHP paths will be relative to the chroot
;       (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =

; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot
;chdir = /var/www

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Note: on highloaded environment, this can cause some delay in the page
; process time (several ms).
; Default Value: no
;catch_workers_output = yes

; Decorate worker output with prefix and suffix containing information about
; the child that writes to the log and if stdout or stderr is used as well as
; log level and time. This options is used only if catch_workers_output is yes.
; Settings to "no" will output data as written to the stdout or stderr.
; Default value: yes
;decorate_workers_output = no

; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
;clear_env = no

; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
; FPM to .php extensions to prevent malicious users to use other extensions to
; execute php code.
; Note: set an empty value to allow all extensions.
; Default Value: .php
;security.limit_extensions = .php .php3 .php4 .php5 .php7

; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

; Additional php.ini defines, specific to this pool of workers. These settings
; overwrite the values previously defined in the php.ini. The directives are the
; same as the PHP SAPI:
;   php_value/php_flag             - you can set classic ini defines which can
;                                    be overwritten from PHP call 'ini_set'.
;   php_admin_value/php_admin_flag - these directives won't be overwritten by
;                                     PHP call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.

; Defining 'extension' will load the corresponding shared extension from
; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
; overwrite previously defined php.ini values, but will append the new value
; instead.

; Note: path INI options can be relative and will be expanded with the prefix
; (pool, global or /usr)

; Default Value: nothing is defined by default except the values in php.ini and
;                specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
ubuntu@ip-172-31-36-76:~$ cat /etc/php/8.1/fpm/pool.d/www.conf | grep "listen ="
listen = /run/php/php8.1-fpm.sock

設定ファイルの内容から直接的に php-fpm がリッスンしているソケットファイルの場所を特定することはできませんが、一般的な設定パターンに基づくと、ソケットファイルの場所はプール設定ファイル (*.conf) 内で指定されます。設定ファイルの最後の部分で、プール設定ファイルをインクルードするディレクティブがあります:

include=/etc/php/8.1/fpm/pool.d/*.conf

このディレクティブは、/etc/php/8.1/fpm/pool.d/ ディレクトリ内のすべての .conf ファイルをインクルードすることを示しています。php-fpm のソケットファイルやポートのリッスン設定は、このディレクトリ内の個々のプール設定ファイルに記述されています。

ソケットファイルの設定は通常、listen = ディレクティブで指定され、それは以下のような形式になる可能性があります:

具体的なソケットファイルまたはポート番号を確認するには、/etc/php/8.1/fpm/pool.d/ ディレクトリ内のプール設定ファイルを確認する必要があります。この情報はプールごとに異なるため、具体的なファイルを見ることで詳細がわかります。

以下のコマンドを使って、該当するディレクトリ内のファイルを確認し、それらの内容を確認することができます:

ls /etc/php/8.1/fpm/pool.d/
cat /etc/php/8.1/fpm/pool.d/あなたのプール設定ファイル.conf

これにより、php-fpm がどのソケットファイルまたはポートでリッスンしているかを特定できます。

php-fpmがリッスンしているソケットファイルの場所は、提供された設定ファイルの listen ディレクティブで指定されています。この場合、ソケットファイルは以下にあります:

listen = /run/php/php8.1-fpm.sock

この設定は、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

image

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 {
    listen 80;
    server_name example.com; # あなたのドメインに置き換えてください

    root /var/www/html; # ドキュメントルートのパス
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # UNIXドメインソケットを使用してphp-fpmにリクエストを転送
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;

        # 以下のディレクティブは、環境に応じて調整してください
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

この設定では、server_nameディレクティブをあなたのドメイン名に、rootディレクティブをあなたのウェブサイトのドキュメントルートに置き換えてください。location ~ \.php$ブロックは、リクエストがPHPファイルにマッチした場合にphp-fpmに転送するように設定します。

手順

  1. Nginxの設定ファイルを編集します(例:/etc/nginx/sites-available/defaultまたはあなたのサイト専用のファイル)。
  2. 上記の設定をファイルに追加または修正します。
  3. 設定が正しいことを確認するために、sudo nginx -tコマンドを実行します。
  4. 設定に問題がなければ、sudo systemctl reload nginxコマンドでNginxを再読み込みします。

これで、NginxはPHPリクエストをphp-fpmにリバースプロキシし、PHPアプリケーションを正しく処理できるようになります。

ubuntu@ip-172-31-36-76:~$ cat /etc/nginx/sites-available/default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;
        index index.php index.html index.htm;

    # Add index.php to the list if you are using PHP

    server_name 54.238.193.253;
        location / {
          try_files $uri $uri/ =404;
        }
    location ~ \.php$ {
          include snippets/fastcgi-php.conf;

          # UNIXドメインソケットを使用してphp-fpmにリクエストを転送
          fastcgi_pass unix:/run/php/php8.1-fpm.sock;

          # 以下のディレクティブは、環境に応じて調整してください
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
        }

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
    #   include snippets/fastcgi-php.conf;
    #
    #   # With php-fpm (or other unix sockets):
    #   fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    #   # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#   listen 80;
#   listen [::]:80;
#
#   server_name example.com;
#
#   root /var/www/example.com;
#   index index.html;
#
#   location / {
#       try_files $uri $uri/ =404;
#   }
#}

負荷をかけてみよう

nginxのアクセスログにレスポンスタイムを出すようにしてみよう

はい、Nginxのアクセスログにレスポンスタイム(リクエスト処理にかかった時間)を出力することは可能です。Nginxでは、`$request_time` 変数を使用してレスポンスタイムをログに記録できます。この変数はリクエストの処理にかかった全時間(秒単位)を示します。

レスポンスタイムをアクセスログに含めるには、Nginxの設定ファイルでログフォーマットをカスタマイズします。これを行うには、まず`http`コンテキストまたは`server`コンテキスト内で`log_format`ディレクティブを定義し、その後、使用するアクセスログの定義にこのフォーマットを適用します。

### 1. カスタムログフォーマットの定義

以下は、レスポンスタイムを含むカスタムログフォーマットの例です。この例では、フォーマットに`request_time`を含め、それを`custom`という名前で定義しています。

http {
    log_format custom 'time:$time_iso8601\t'
                'remote_addr:$remote_addr\t'
                'request_method:$request_method\t'
                'request_length:$request_length\t'
                'request_uri:$request_uri\t'
                'https:$https\t'
                'uri:$uri\t'
                'query_string:$query_string\t'
                'status:$status\t'
                'bytes_sent:$bytes_sent\t'
                'body_bytes_sent:$body_bytes_sent\t'
                'referer:$http_referer\t'
                'useragent:$http_user_agent\t'
                'forwardedfor:$http_x_forwarded_for\t'
                'request_time:$request_time\t'
                'upstream_response_time:$upstream_response_time\t'
                'host:$host';

    # その他の設定...
}

### 2. カスタムログフォーマットの使用

次に、定義したログフォーマットを使用するようにNginxのサーバーブロックまたはロケーションブロックを設定します。`access_log` ディレクティブを使用して、ログファイルのパスと使用するログフォーマット(この例では`custom`)を指定します。

server {
    listen 80;
    server_name example.com;

    access_log /var/log/nginx/access.log custom;

    # その他の設定...
}

この設定により、`/var/log/nginx/access.log`に出力されるログエントリには、リクエストの処理時間が秒単位で含まれるようになります。

### 変更の適用

設定を変更した後は、設定の構文が正しいことを確認するために`sudo nginx -t`を実行し、問題がなければ`sudo systemctl reload nginx`または`sudo nginx -s reload`でNginxを再読み込みして設定を適用します。

これで、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"

このログエントリーは、Webサーバー(NginxやApacheなど)のアクセスログからのもので、1つのHTTPリクエストに関する情報を含んでいます。それぞれの部分について解説します:

1. **リモートホスト(IPアドレス)**: `39.110.211.41` はリクエストを行ったクライアントのIPアドレスです。
2. **リモートログ名**: この場合は使用されていないため、`-` と表示されています。
3. **リモートユーザー**: HTTP認証が使用されていないため、これも `-` と表示されています。
4. **日時**: `[30/Mar/2024:02:03:28 +0000]` はリクエストが行われた日時で、UTCで記録されています。
5. **リクエストライン**: `"GET /index.php HTTP/1.1"` はHTTPメソッドが `GET`、リクエストされたリソースが `/index.php`、使用されているHTTPプロトコルのバージョンが `HTTP/1.1` であることを示しています。
6. **ステータスコード**: `200` はリクエストが成功したことを意味します。
7. **転送されたバイト数**: `858` はレスポンスとして送信されたデータのバイト数です。
8. **リファラー**: `-` この場合、リファラーは提供されていない、または存在しないため、`-` が記録されています。リファラーは、ユーザーがリクエストを行う前に訪れていたページのURLを示します。
9. **ユーザーエージェント**: `"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"` はリクエストを行ったブラウザやクライアントの識別情報です。この場合、Mac OS X 10.15.7を実行しているMacintoshコンピューターから、Chromeブラウザバージョン122.0.0.0を使用してアクセスがあったことを示しています。
10. **リクエスト処理時間**: `"0.001"` はサーバーがリクエストを受け取ってからレスポンスを完全に送信し終えるまでの時間(秒)です。この場合、1ミリ秒がかかったことを意味します。

このログエントリーを通じて、サーバーがどのようなリクエストを受け、それにどのように応答したか、そして処理にどれくらいの時間がかかったかを理解することができます。

htopコマンドを使ってみよう

image
直接 `htop` コマンドを実行してその結果を表示することはできませんが、`htop` の使用方法については説明できます。`htop` はインタラクティブなプロセスビューアであり、Linux システムでプロセスをモニタリングするためによく使われます。これを使用して、システムのプロセスをメモリ使用量やCPU使用率に基づいて並べ替えることができます。また、ウェブブラウザを開いて特定のウェブサイトにアクセスすることでシステムに負荷をかけることも可能です。

### メモリ順に並べてみる

1. `htop` を起動します。
2. `F6` キーを押してソート条件の選択メニューを開きます。
3. `MEMP%`(メモリ使用率)を選択して、Enter キーを押します。

これにより、プロセスがメモリ使用率の高い順に並べ替えられます。

### CPU順に並べてみる

1. `htop` を起動します。
2. `F6` キーを押してソート条件の選択メニューを開きます。
3. `CPU%`(CPU使用率)を選択して、Enter キーを押します。

これにより、プロセスがCPU使用率の高い順に並べ替えられます。

### ウェブブラウザで負荷をかけてみる

システムに負荷をかけるには、ブラウザで負荷の高いウェブサイトにアクセスするか、JavaScriptのベンチマークテストを実行するウェブサイトを使用すると良いでしょう。例えば、以下の手順で行います。

1. ウェブブラウザを開きます。
2. CPUやメモリに負荷をかけるウェブサイトやベンチマークテストを実行します。例: [Speedometer](https://browserbench.org/Speedometer2.0/) はブラウザの速度をテストするためのベンチマークで、負荷をかけるのに使えます。
3. その間、`htop` を開いてシステムのリソース使用状況を監視します。

これらの操作を通じて、システムのパフォーマンスをモニタリングし、どのプロセスが最もリソースを消費しているかを視覚的に確認することができます。`htop` はリアルタイムで情報を更新するため、負荷テストの影響を即座に見ることが可能です。

dstatコマンドをインストールしてみよう

sudo apt install dstat

dstat -tlamp --top-cpu-adv --top-io-adv と打ってみよう
ubuntu@ip-172-31-36-76:~$ dstat -tlamp --top-cpu-adv --top-io-adv
/usr/bin/dstat:2619: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
  import imp
Terminal width too small, trimming output.
----system---- ---load-avg--- --total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system-->
     time     | 1m   5m  15m |usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw >
30-03 12:33:25|0.07 0.03    0|  0   0 100   0   0|  89k   45k|   0     0 |   0     0 |  27    25 >
30-03 12:33:26|0.07 0.03    0|  1   0  99   0   0|   0     0 | 156B 1412B|   0     0 |  48    42 >
30-03 12:33:27|0.06 0.03    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  46    39 >
30-03 12:33:28|0.06 0.03    0|  1   0  99   0   0|   0     0 | 128B  606B|   0     0 |  58    45 >
30-03 12:33:29|0.06 0.03    0|  1   0  99   0   0|   0     0 | 116B  930B|   0     0 |  52    33 >
30-03 12:33:30|0.06 0.03    0|  1   1  98   0   0|   0     0 | 116B  930B|   0     0 |  48    34 >
30-03 12:33:31|0.06 0.03    0|  1   0  99   0   0|   0    80k|  52B  516B|   0     0 |  64    51 >
30-03 12:33:32|0.06 0.03    0|  1   0  99   0   0|   0     0 |  52B  524B|   0     0 |  46    35 >
30-03 12:33:33|0.06 0.03    0|  1   0  99   0   0|   0     0 | 140B  570B|   0     0 |  42    30 >
30-03 12:33:34|0.06 0.03    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  48    43 >
30-03 12:33:35|0.06 0.03    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  40    34 >
30-03 12:33:36|0.06 0.03    0|  2   0  98   0   0|   0     0 |  52B  516B|   0     0 |  42    36 >
30-03 12:33:37|0.05 0.02    0|  0   1  99   0   0|   0     0 |  52B  516B|   0     0 |  46    38 >
30-03 12:33:38|0.05 0.02    0|  1   1  98   0   0|   0     0 | 232B 1074B|   0     0 |  64    41 >
30-03 12:33:39|0.05 0.02    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  40    33 >
30-03 12:33:40|0.05 0.02    0|  0   0 100   0   0|   0     0 | 228B  678B|   0     0 |  60    35 >
30-03 12:33:41|0.05 0.02    0|  2   0  98   0   0|   0     0 |  52B  516B|   0     0 |  44    37 >
30-03 12:33:42|0.05 0.02    0|  0   1  99   0   0|   0   104k|  52B  516B|   0     0 |  76    35 >
30-03 12:33:43|0.05 0.02    0|  1   0  99   0   0|   0     0 | 116B  946B|   0     0 |  62    39 >
30-03 12:33:44|0.05 0.02    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  46    39 >
30-03 12:33:45|0.05 0.02    0|  2   0  98   0   0|   0     0 |  52B  516B|   0     0 |  40    34 >
30-03 12:33:46|0.05 0.02    0|  0   1  99   0   0|   0     0 |  52B  516B|   0     0 |  46    37 >
30-03 12:33:47|0.04 0.02    0|  1   0  99   0   0|   0     0 |  64B  930B|   0     0 |  52    39 >
30-03 12:33:48|0.04 0.02    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  38    30 >
30-03 12:33:49|0.04 0.02    0|  1   2  90   6   1|  10M    0 |4488B 6897B|   0     0 | 292   194 >
30-03 12:33:50|0.04 0.02    0|  1   0  99   0   0|   0     0 |  12k   17k|   0     0 | 298   158 >
30-03 12:33:51|0.04 0.02    0|  1   1  98   0   0|   0     0 | 601B 1602B|   0     0 |  52    41 >
30-03 12:33:52|0.04 0.02    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  44    38 >
30-03 12:33:53|0.04 0.02    0|  0   1  99   0   0|   0     0 | 156B  582B|   0     0 |  50    38 >
----system---- ---load-avg--- --total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system-->
     time     | 1m   5m  15m |usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw >
30-03 12:33:54|0.04 0.02    0|  1   0  99   0   0|   0    88k| 128B  826B|   0     0 |  92    73 >
30-03 12:33:55|0.04 0.02    0|  1   0  99   0   0|   0     0 | 104B 1420B|   0     0 |  56    46 >
30-03 12:33:56|0.04 0.02    0|  1   1  98   0   0|   0     0 |  52B  516B|   0     0 |  46    34 >
30-03 12:33:57|0.04 0.02    0|  1   1  98   0   0|   0     0 |  52B  516B|   0     0 |  44    34 >
30-03 12:33:58|0.04 0.02    0|  1   0  99   0   0|   0     0 |  52B  516B|   0     0 |  42    35 >
30-03 12:33:59|0.04 0.02    0|  1   0  99   0   0|   0    32k| 116B  930B|   0     0 |  58    43 >
30-03 12:34:00|0.04 0.02    0|  1   0  99   0   0|   0     0 |  52B  524B|   0     0 |  48    33 >
30-03 12:34:01|0.04 0.02    0|  1   1  98   0   0|   0     0 |  52B  516B|   0     0 |  42    33 >
30-03 12:34:02|0.03 0.02    0|  0   0 100   0   0|   0     0 |  52B  516B|   0     0 |  42    40 >
30-03 12:34:03|0.03 0.02    0|  2   0  98   0   0|   0     0 |  52B  516B|   0     0 |  40    36 >
30-03 12:34:04|0.03 0.02    0|  0   1  99   0   0|   0     0 |1248B 2199B|   0     0 |  80    59 >
30-03 12:34:05|0.03 0.02    0|  1   0  99   0   0|   0     0 |6532B 9779B|   0     0 | 182   115 >
30-03 12:34:06|0.03 0.02    0|  1   0  99   0   0|   0     0 |  92B  570B|   0     0 |  48    34 >
ウェブブラウザで負荷をかけてみよう
nakedtatsuya commented 7 months ago

確認事項

SSH 接続

Host infra-training
  User ubuntu
  Port 22
  IdentityFile 鍵ファイル
  HostName パブリックIPアドレス
  ServerAliveInterval 5
  ServerAliveCountMax 12

このサーバーに入ってるテキストエディタは何がある?

~/.bashrc を開いてみよう の意図確認

PHPでWebアプリケーションを動かしてみよう

HTTPでのみアクセスできたけど何か設定おかしい?

http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/index.php

aptでphp8.1-fpmをインストールしてみよう

sudo apt install php8.1-fpm インストール時に出た

image

デフォルトの選択肢でOK。(cmd + enter)

image

nginxでphp-fpmにリバースプロキシしてみよう

手元のマシンで /etc/hosts を書いてブラウザでアクセスしてみよう

これの意図確認(Mac側の/etc/hostsを書き換える?)

Webブラウザで負荷をかけてみよう

総じて負荷のかけ方とログでの確認方法がわからなかったので教えてもらう

nakedtatsuya commented 7 months ago

ジャッジどうしよう

AWSにインスタンスを立ててみよう

cat ~/.ssh/authorized_keys でSSH接続は見れるかも。OS情報は適当に見れそう

サーバーの状態を見てみよう

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

aptでphp8.1-fpmをインストールしてみよう

nginxを使ってみよう

負荷をかけてみよう

catatsuy commented 7 months ago

@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ブラウザでリロードしまくって数値の動きを見たり、ログを見たりするだけです。

nakedtatsuya commented 7 months ago

ありがとうございます!僕が知識不足だったので助かりましたmm

追記したバージョンをプルリクに混ぜさせていただきます!