LMDE6にnginxサーバーを立ててsqlite3のデータをwebで見えるようにする

本当に最低限の基本動作ができるまでです

## 各種インストール

### sqlite3をインストール
データベースとして
```console
$ sudo apt install sqlite3
```
32bit版があるなら`mariaDB`でも良かったけど、windows版しかなかった感じなので

### nginxをインストール
ウェブサーバーとして
```cpnsole
$ sudo apt install nginx3
```

### PHP-FPMのインストール
NginxでPHPを動かすために
```console
$ sudo apt install php8.2-fpm
```
`php-fpm`をインストールしても現状の最新版(今回の場合は8.2)がインストールされたけど、正常インストールされてなくて混乱したので、最新版を確認して当該バージョンがついた名前のをインストールした方が安全かもです。


### php-sqlite3のインストール
PHP用のsqlite3ライブラリ
```console
$ sudo apt-get -y install php8.2-sqlite3
```

## 確認作業

### nginxの稼働を確認

1. Nginxのステータス確認：Nginxが正常に動作しているか確認します。以下のコマンドを実行します：
    ```
    $ systemctl status nginx
    ```
2. Nginxの起動：もしNginxが稼働していなければ、以下のコマンドで起動します：
    ```
    $ sudo systemctl start nginx
    ```
3. ファイアウォールの設定：リモートからのアクセスを許可するために、ファイアウォールの設定を変更する必要があります。以下のコマンドでHTTPとHTTPSのトラフィックを許可します：
    ```
    $ sudo ufw allow 'Nginx Full'
    ```
4. リモートからの接続確認：以上の手順を終えたら、リモートマシンからブラウザを開き、NginxサーバーのIPアドレスを入力して接続を試みます。正常に接続できれば、Nginxのデフォルトウェルカムページが表示されます。

## sqlite3のデータベース内容をブラウザで表示

### 1.sqlite3のデータベース内容を出力するテスト用のPHPスクリプトを用意します。

AIに書いてもらうのが簡単です(例)

:::note
nginxでデータベースの内容を公開したいと思います。テストとして`sqlite3 -readonly testdb.sqlite3`で起動したsqlite3から、アクセス中のデータベースの全内容を`select * from Customers;`というクエリで取り出してwebページに表示する方法を教えてください

```php
<?php
$db = new SQLite3('testdb.sqlite3', SQLITE3_OPEN_READONLY);
$results = $db->query('SELECT * FROM Customers');

echo "<table>";
while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
    echo "<tr>";
    foreach ($row as $key => $value) {
        echo "<td>" . htmlspecialchars($key) . ": " . htmlspecialchars($value) . "</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>
```
:::

### 2.nginxでphpを動かすための準備

NginxとPHP-FPMの設定例を以下に示します。この設定例は、NginxがPHPファイルを適切に処理し、ブラウザからアクセス可能にするためのものです。

#### I. PHP-FPMの設定
##### `/etc/php/8.2/fpm/pool.d/www.conf` ファイルを開き、以下のように設定します：

```
[www]
user = www-data
group = www-data
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
```

- これにより、PHP-FPMは`www-data`ユーザーとグループで実行され、`/var/run/php-fpm/php-fpm.sock`で待ち受けます。
- 特に変更する必要はないので、内容を確認する程度で良いと思います。

##### 拡張ディレクトリの確認：

php.iniファイル内のextension_dirにPHPが拡張をロードするためのディレクトリを指定します。

ディレクトリの確認
```
$ php -i | grep extension_dir
PHP Warning:  Module "sqlite3" is already loaded in Unknown on line 0
extension_dir => /usr/lib/php/20220829 => /usr/lib/php/20220829
sqlite3.extension_dir => no value => no value
```
上記のコマンド実行例では`/usr/lib/php/20220829`が設定すべきパスです

パスの存在と、パスの中に`sqlite3.so`が存在することを確認してください。

```
$ ls  /usr/lib/php/20220829
calendar.so  exif.so  fileinfo.so  gettext.so  opcache.so  pdo_sqlite.so  posix.so     shmop.so    sqlite3.so  sysvsem.so  tokenizer.so
ctype.so     ffi.so   ftp.so       iconv.so    pdo.so      phar.so        readline.so  sockets.so  sysvmsg.so  sysvshm.so
```

`php.ini`にコメントアウトされている`;extension_dir =`があるので、コメントアウトを解除した後、確認したディレクトリのパスを指定してください

```
extension_dir = "/usr/lib/php/20220829"
```

#### II. Nginxの設定：
`/etc/nginx/sites-available/default` ファイルを開き、`server`ブロック内に以下のような`location`ブロックを追加します：

```
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
}
```
- ブロックは存在し、コメントアウトされています。コメントアウトを解除するだけですが`fastcgi_pass unix:`で指定するディレクトリはphp-fpmのバージョンによって異なるので、確認して正しいパスを設定してください。
- これにより、Nginxは`.php`で終わるすべてのリクエストを`fastcgi_pass unix:`にあるPHP-FPMに転送します。

#### III. Nginxの再起動：最後に、設定を反映させるためにNginxを再起動します：
```
$ sudo systemctl restart nginx
```

以上の設定により、NginxはPHPファイルを適切に処理し、ブラウザからアクセス可能になります。設定が正しく行われていれば、`db.php`の結果が、ブラウザで直接表示されるはずです。