本当に最低限の基本動作ができるまでです
各種インストール
sqlite3をインストール
データベースとして
$ sudo apt install sqlite3
32bit版があるならmariaDB
でも良かったけど、windows版しかなかった感じなので
nginxをインストール
ウェブサーバーとして
$ sudo apt install nginx3
PHP-FPMのインストール
NginxでPHPを動かすために
$ sudo apt install php8.2-fpm
php-fpm
をインストールしても現状の最新版(今回の場合は8.2)がインストールされたけど、正常インストールされてなくて混乱したので、最新版を確認して当該バージョンがついた名前のをインストールした方が安全かもです。
php-sqlite3のインストール
PHP用のsqlite3ライブラリ
$ sudo apt-get -y install php8.2-sqlite3
確認作業
nginxの稼働を確認
- Nginxのステータス確認:Nginxが正常に動作しているか確認します。以下のコマンドを実行します:
$ systemctl status nginx
- Nginxの起動:もしNginxが稼働していなければ、以下のコマンドで起動します:
$ sudo systemctl start nginx
- ファイアウォールの設定:リモートからのアクセスを許可するために、ファイアウォールの設定を変更する必要があります。以下のコマンドでHTTPとHTTPSのトラフィックを許可します:
$ sudo ufw allow 'Nginx Full'
- リモートからの接続確認:以上の手順を終えたら、リモートマシンからブラウザを開き、NginxサーバーのIPアドレスを入力して接続を試みます。正常に接続できれば、Nginxのデフォルトウェルカムページが表示されます。
sqlite3のデータベース内容をブラウザで表示
1.sqlite3のデータベース内容を出力するテスト用のPHPスクリプトを用意します。
AIに書いてもらうのが簡単です(例)
nginxでデータベースの内容を公開したいと思います。テストとしてsqlite3 -readonly testdb.sqlite3
で起動したsqlite3から、アクセス中のデータベースの全内容をselect * from Customers;
というクエリで取り出してwebページに表示する方法を教えてください
<?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
の結果が、ブラウザで直接表示されるはずです。