LoginSignup
0
0

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

Posted at

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

各種インストール

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の稼働を確認

  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に書いてもらうのが簡単です(例)

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の結果が、ブラウザで直接表示されるはずです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0