Найти в Дзене
www.TechPlanet.pro

How-to по SQLite+Nginx+php-fpm on Ubuntu 20.04

Краткая инструкция по создании базы данных SQLite и вывода данных из неё через веб сервер. Предварительная подготовка. Как создать виртуальную машину с Ubuntu можете посмотреть в этом посте. Для начала обновим нашу #Ubuntu, но это делать не обязательно sudo apt update ; sudo apt upgrade -y Минимальная настройка веб сервера. Установим #nginx sudo apt-get install nginx -y Настроем приём трафика на любой hostname sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF server {         listen   80;         root /var/www/html;         index index.php;         server_name _;         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000         location ~ \.php$ {                 fastcgi_pass 127.0.0.1:9000;                 fastcgi_index index.php;                 fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;                 include /etc/nginx/fastcgi_params;         } } EOF' Перезапустим nginx, что бы настройки вступили в силу sudo systemctl rest
Оглавление

Краткая инструкция по создании базы данных SQLite и вывода данных из неё через веб сервер.

Предварительная подготовка.

Как создать виртуальную машину с Ubuntu можете посмотреть в этом посте.

Для начала обновим нашу #Ubuntu, но это делать не обязательно

sudo apt update ; sudo apt upgrade -y

Минимальная настройка веб сервера.

Установим #nginx

sudo apt-get install nginx -y

Настроем приём трафика на любой hostname

sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
server {
        listen   80;
        root /var/www/html;
        index index.php;
        server_name _;
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}
EOF'

Перезапустим nginx, что бы настройки вступили в силу

sudo systemctl restart nginx

Установим #php-fpm для обработки кода на php

sudo apt-get install php-fpm -y

Перенастроим работу php-fpm с socket на tcp отредактировав файл /etc/php/7.4/fpm/pool.d/www.conf

sudo sed -i 's/^listen =.*/listen = 127.0.0.1:9000/' /etc/php/7.4/fpm/pool.d/www.conf

Перезапустим php-fpm, что бы изменения вступили в силу

sudo systemctl restart php7.4-fpm.service

Проверим, что php-fpm прослушивает нужны порт

sudo apt install net-tools -y
netstat -anp | grep 9000

На экране должно отобразится примерно это

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 17138/php-fpm: mast

Создадим сайт для проверки работы веб сервера

sudo bash -c 'cat > /var/www/html/info.php <<EOF
<?php
phpinfo();
EOF'

Отроем наш сайт в браузере заменив ИП 51.250.107.122 на ИП вашего сервера

http://51.250.107.122.nip.io/info.php

На странице вы должны увидеть эти строчки

PHP Version 7.4.3
SQLite 3.x driver for PDO Wez Furlong
SQLite3 Scott MacVicar, Ilia Alshanetsky, Brad Dewar

Добавим php библиотеку для работы с #SQLite

sudo apt install php-sqlite3 -y

Ещё раз откроем наш сайт

http://51.250.107.122.nip.io/info.php

Теперь появится такие строчки

sqlite3
SQLite3 support enabled
SQLite Library 3.31.1

Настройка базы данных SQLite

Установим пакет для работы с SQLite

sudo apt install sqlite3 -y

Создадим новую базу в папке нашего сайта

sudo sqlite3 /var/www/html/mydb.sq3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .databases
main: /var/www/html/mydb.sq3

Создадим таблицу items

sqlite> CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT, price REAL);

Добавим данные в эту таблицу

sqlite> INSERT INTO items VALUES ('1001', 'Salt', 3.15);
INSERT INTO items VALUES ('1002', 'Pepper', 2.75);
INSERT INTO items VALUES ('1003', 'Eggs', 2.00);
INSERT INTO items VALUES ('1004', 'Bacon', 7.25);
INSERT INTO items VALUES ('1005', 'Milk', 1.15);
INSERT INTO items VALUES ('1006', 'Strawberries', 8.73);
INSERT INTO items VALUES ('1007', 'Cereal', 2.65);
sqlite>

Сделаем из неё выборку всех продуктов, у которых цена меньше 3.00

sqlite> SELECT * FROM items WHERE price < 3.00;
1002|Pepper|2.75
1003|Eggs|2.0
1005|Milk|1.15
1007|Cereal|2.65
sqlite>

Проверим, что наш сервер имеет права на чтение файла базы данных

ls -lh /var/www/html/mydb.sq3
-rw-r--r-- 1 root root 8.0K Dec 6 10:22 /var/www/html/mydb.sq3

Создадим рабочий сайт для выборки всех продуктов, у которых цена меньше 3.00

sudo bash -c "cat > /var/www/html/index.php <<'EOF'
<?php
\$db = new SQLite3('mydb.sq3');
\$sql = \"SELECT * FROM items WHERE price < 3.00\";
\$result = \$db->query(\$sql);
while (\$row = \$result->fetchArray(SQLITE3_ASSOC)){
    echo \$row['name'] . ': \$' . \$row['price'] . '<br/>';
}
unset(\$db);
EOF"

Проверим наш сайт

http://51.250.107.122.nip.io/

Мы должны увидеть следующий результат

Pepper: $2.75
Eggs: $2
Milk: $1.15
Cereal: $2.65

Удачи в работе!