Raspi3B + Ubuntu 20.04 で nginx + php-fpm を使ってみる

# 目的
Ubuntu 20.04でnginx + php-fpmを設定後[Raspi3B + Ubuntu 20.04 に MySQL をインストールしてみる](https://qiita.com/tabizou/items/826b3467232679e3d365)でインストールしたMySQLにアクセスしてみる
※do-release-upgrade で Ubuntu 22.04に更新後に変更した部分を追記する
MySQLのバージョンは以下になる
<pre>
# sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30-0ubuntu0.22.04.1 (Ubuntu)
</pre>
## 必要なパッケージのインストール
<pre>
$ sudo apt install nginx
$ sudo apt install php-fpm
$ sudo apt install php7.4-mbstring
$ sudo apt install php7.4-mysql
$ sudo apt install php7.4-odbc ; 今回は使用しない
</pre>

phpinfoの[Additional .ini files parsed]を確認すると追加したパッケージに対応したiniファイルが表示される

## 設定ファイルの編集
### /etc/nginx/nginx.conf
変更なし

### /etc/nginx/sites-enabled/default
以下をコメントアウトする

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

        # With php-fpm (or other unix sockets):
        #fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; #20.04
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;      #22.04
        # With php-cgi (or other tcp sockets):
        #fastcgi_pass 127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
        include        fastcgi_params;
}
</pre>

### /etc/nginx/snippets/fastcgi-php.conf
以下を追加する
<pre>
fastcgi_index index.php;
include fastcgi.conf;
</pre>

### /etc/php/7.4/fpm/php.ini (/etc/php/8.1/fpm/php.ini)
変更しない

<pre>
$ sudo systemctl start nginx
$ sudo systemctl stop nginx
$ sudo systemctl restart nginx
$ sudo systemctl status nginx

$ sudo tail -f /var/log/nginx/error.log
</pre>

## MySQLのデモDB world をインストールする
[world database](https://dev.mysql.com/doc/index-other.html)よりworld-db.zipをDL後解凍する
[Setting Up the world Database / Installation](https://dev.mysql.com/doc/world-setup/en/world-setup-installation.html)に従い

<pre>
$ sudo mysql -u root -p
Enter password:
～
mysql> source /path/to/world.sql

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
+--------------------+

mysql> use world
Database changed

mysql> create user 'demo'@'localhost' identified by 'demo';

mysql> grant select on world.* to demo@'localhost';

mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| demo             | 192.168.% | caching_sha2_password |
| demo             | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+

mysql> show grants for demo@'localhost';
+-------------------------------------------------+
| Grants for demo@localhost                       |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `demo`@`localhost`        |
| GRANT SELECT ON `world`.* TO `demo`@`localhost` |
+-------------------------------------------------+
</pre>

## php-fpmのサンプルコード
上記でインストールしたworldにアクセスしてみる

```php
<?php

$dsn = 'mysql:host=localhost;dbname=world';

$user = 'demo';
$passwd = 'demo';

try{
    $dbh = new PDO($dsn, $user, $passwd);
    
    $stmt = $dbh->query("select count(*) from city");
	$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo "<pre>";
	print_r( $users );
    echo "</pre>";

}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
?>
```

# 参考にしたのは以下のサイト
[Ubuntu 20.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04-ja)
[nginx fastcgi_params を include する箇所、割と皆間違ってるよね？](https://qiita.com/kotarella1110/items/f1ad0bb40b84567cea66)
[nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する](https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc)
[nginx で PHP を動かす](https://hacknote.jp/archives/27524/)
[Wordpress（PHP-FPM）と Nginx との間の FastCGI の設定を見直した話](https://tech.enechange.co.jp/entry/2020/11/06/095401)
[Raspi3B + Ubuntu 20.04 から Windows 10 + SQL Server 2019 Express にアクセスしてみる](https://qiita.com/tabizou/items/428ea0cdbedcd2aac615)