Инструменты пользователя

Инструменты сайта


doc:1513:643.mgul.15131-01_32_01

АННОТАЦИЯ

В данном программном документе приведено руководство системного программиста по установке и настройке системы сбора, обработки и хранения результатов измерений (далее система), предназначенной для сохранения и предоставления любых переданных данных, а в частности – с учебных устройств, разработанных на кафедре ПМиВТ МФ МГТУ им. Н. Э. Баумана.

Общие сведения о системе

Функциональным назначением системы является приём, сохранение и предоставление данных, полученных в процессе проведения замеров. Основные функции системы состоят в приёме и обработке данных JSON формата, сохранение и предоставлении по запросу, для последующей обработкой операторами. Для функционирования системы требуется серверная операционная си-стема, система управления базами данных, веб-сервер с поддержкой языка программирования PHP 7.2 и программный код.

Структура системы

Система сбора, обработки и хранения результатов измерений состоит из комплекса программного обеспечения, необходимого для её выполнения. На серверной операционной системе запущен веб-сервер, ожидающий HTTP запроса. При вхождение запроса выполняется сценарий, зависящий от вызываемого при запросе файла.

Настройка системы

Подготовка системы к работе делится на несколько этапов, выполнение которых будет рассматриваться на примере системы GNU/Linux Debian 9.

1 Создание базы данных

Установка СУБД MariaDB

Обновите базу пакетов

$ apt-get update

Найдите нужный пакет

 $ apt-cache search mysql-server

Установите пакет mariaDB

$ apt-get install mariadb-server-*

Если будет просить ввести root пароль, то оставьте его пустым Инициализируйте систему безопасности MySQL

$ mysql_secure_installation

После этого система будет задавать вопросы, рассмотренные в разделе «сообщения системного программисту».

Настройка СУБД

Откройте конфигурационный файл «50-server.cnf» расположенный по пути /etc/mysql/mariadb.conf.d/ и в разделе [mysql] добавьте строку lower_case_table_names = 1 для регистронезависимости имён таблиц. Перезапустите mysql для внесения изменений

$ systemctl restart mysql

Создание и настройка базы данных

Зайдите в mysql и создайте новую базу данных:

$ mysql –u root –p 
(после нужно ввести пароль)
CREATE DATABASE Production;

Если ошибок нет, то база успешно создана. Создайте пользователя, под которым сайт будет работать с БД, пользователя для запроса данных, и пользователя-администратора базы данных для удалённого администрирования, следующей командой:

CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’;

Выдайте пользователям привилегии. Для сайта:

$ GRANT SELECT,INSERT,UPDATE,DELETE ON production.* TO ‘username’@’localhost’ IDENTIFIED BY ‘password’;

Для запроса данных:

$ GRANT SELECT ON production.* TO ‘username’@’localhost’ IDENTIFIED BY ‘password’;
GRANT FILE ON *.* TO ‘username’@’localhost’ IDENTIFIED BY ‘password’;

Для администратора:

$ GRANT ALL PRIVILEGES ON production.* TO ‘username’@’localhost’ IDEN-TIFIED BY ‘password’;

Выйдите из базы данных.

$ Exit

Воссоздайте структуру базы данных с помощью SQL файла дампа.

mysql -u username -p Production < data-dump.sql

(Структура базы данных рассматривается в Приложении 1.)

2 Установка HTTP сервера

Установка и настройка пакета apache

Установите apache2 веб-сервер

$ apt-get install apache2

Создайте каталог для сайта.

$ mkdir –p /var/www/site.ru/

Настройте конфигурацию виртуального хоста.

$ nano /etc/apache2/sites-available/site.ru.conf

Вставьте в созданный файл конфигурации следующие настройки:

<VirtualHost *:80>
ServerAdmin admin@e-mail
ServerName site.ru
ServerAlias www.site.ru
DocumentRoot /var/www/site.ru/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /var/www/site.ru>
Options ExecCGI
</Directory>
</VirtualHost>

Сохраните файл и включите сайт.

a2ensite site.ru.conf

Отключите стандартный сайт.

a2dissite 000-default.conf

Перезапустите apache.

systemctl restart apache2

Установка и настройка php 7.2

Импортируйте ключ подписи и включите PPA.

$ wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -echo "deb https://packages.sury.org/php/stretch main" | sudo tee /etc/apt/sources.list.d/php.list

Установите сертификаты.

$ apt-get install ca-certificates apt-transport-https

Обновите пакеты.

$ apt-get update

Установите пакеты php 7.2 с наиболее используемыми расширениями

$ apt-get install php7.2 php7.2-cli php7.2-common php7.2-opcache php7.2-curl php7.2-mbstring php7.2-mysql php7.2-zip php7.2-xml php7.2-json

Проверьте результат установки запросом версии php

$ php –v

В конфигурационном файле php.ini располагающемся по пути /etc/php/7.2/apache2/php.ini значение «short_open_tag» укажите «on».

3 Удалённый доступ к файлам веб-приложения

Для доступа к файлам сайта можно использовать FTP или SSH.

FTP

Установите пакет ftp

$ apt-get install proftpd

Откройте конфигурационный файл proftpd.conf, путь к которому /etc/proftpd/proftpd.conf В строке DefaultRoot укажите /var/www/site.ru/ В строке User укажите пользователя, которого создадите позднее http-admin В строке Group укажите группу http Проверьте, чтобы весь раздел <Anonymous> был закомментирован.

SSH

Установите SSH

$ apt-get install openssh-server

Запустите сервис ssh

$ service ssh start

Для загрузки файла на сервер используйте команду

$ scp /path/to/file.http User@remote.host:/var/www/site.ru

Для загрузки папки на сервер используйте команду с ключом –r

$ scp –r path/to/dir User@remote.host:/var/www/site.ru

Для скачивания с сервера на локальную машину используйте команду

$ scp User@remote.host:/var/www/site.ru/file.http local/path/to/dir

4 Создание пользователей системы

Создайте группу и http пользователя этой группы.

$ groupadd http
$ adduser User
$ usermod –aG sudo,http User

Выдайте пользователю владение директорией сайта

$ chown –R User:http /var/www/site.ru/

Для возможности экспорта из mysql выдайте разделу /var/www/site.ru/export/ доступ другим пользователям.

$ chmod –R 777 /var/www/site.ru/export/

В случае, если для доступа к файлам сайта было решено использовать FTP, создайте пользователя http-admin и добавьте ему группу http

$ adduser http-admin
$ usermod –aG http http-admin

Смените владельца директории сайта на группу http

$ chgrp –R http /var/www/site.ru/

5 Обязательные изменения в текстах программ

1. Откройте в текстовом редакторе файл /core/baseinfo.php.

2. Замените в нём:

  • 'server' – если база данных и веб сервер находятся на одной машине, то замените на «localhost», иначе замените на адрес сервера с базой данных.
  • 'user' – замените на логин пользователя базы данных.
  • 'password' – замените на пароль пользователя базы данных.
  • 'BD' – замените на название базы данных (по умолчанию Production).

3. Сохраните изменения

4. Откройте в текстовом редакторе файл /admin/config.php.

5. Добавьте пользователей панели управления.

Шаблонный пример:

$buffer['admin'] = ['password'=>'111','level'=>255]; 

В данной строке в массив buffer по индексу ‘admin’ вносится массив с паролем ‘12345’ и уровнем доступа ‘255’. Индекс – имя пользователя. Уровень доступа указывает к каким функциям пользователь имеет доступ:

«1» – только внесение новых данных.

«2» – внесение новых данных и данных калибровки и адресов датчиков.

«127» – добавление и редактирование объектов, операторов и приборов.

«255» – Полный доступ.

6. Сохраните изменений

7. Загрузите изменённые файлы в директорию сайта.

Проверка системы

Для проведения проверки системы рекомендуется внести данные в ручном режиме через веб-интерфейс, или же провести тестовую передачу данных с устройства. После выполнение внесения данных, проверьте хранимые данные SQL запросом:

SELECT sd.Num as Num,sd.Type as Type,sd.Value as Value,li.Date as Date,li.uid as Unit 
FROM save_data sd 
INNER JOIN (
	SELECT Num_i as Num, Date, ul.uname as uid 
	FROM info inf 
	INNER JOIN (
		SELECT uNum,uName as uname FROM units_list) as ul
	ON inf.Prib_id = ul.uNum ORDER BY inf.Num_i DESC) as li
ON li.Num = sd.Num

Сообщения системному программисту

При запуске инициализации системы безопасности MySQL будут заданы вопросы:


«Enter current password for root (enter for none)». Нажмите Enter, текущий пароль root пустой.


«Set root password? [Y/n]». Введите Y. Да, установить пароль root для подключения к MariaDB. Теперь введите «новый» пароль root.


«Remove anonymous users? [Y/n]». Введите Y. Удалить анонимного пользователя.


«Disallow root login remotely? [Y/n]». Введите Y. Запретить подключаться под пользователем root к MariaDB с удаленных машин.


«Remove test database and access to it? [Y/n]». Введите Y. Удалить тестовую базу test.


«Reload privilege tables now? [Y/n]». Введите Y. Перезагрузить таблицу привилегий для вступления их в силу.

ПРИЛОЖЕНИЕ 1

Структура базы данных

Для хранения данных используется следующая структура базы данных:

1. opr_list(N, Name) – таблица содержащая данные о операторах.

  • Столбцы:
    • N – уникальный номер оператора(id).
    • Name – имя оператора.

2. objects(NumOb, NameOb) – таблица содержащая данные о объектах размещения приборов.

  • Столбцы:
    • NumOb – уникальный номер объекта размещения(id).
    • NameOb – наименование объекта размещения.

3. units_list(uNum, uName, Serial, AKey, OPid, x, y, IDob) – таблица со-держащая данные о используемых приборах.

  • Столбцы:
    • uNum – уникальный номер прибора(id).
    • uName – наименование прибора.
    • Serial – серийный номер прибора.
    • AKey – ключ доступа прибора (используется для идентификации при-бора при передаче данных).
    • OPid – уникальный номер оператора (берётся из таблицы OPR_list).
    • x – координата размещения прибора Х.
    • y – координата размещения прибора У.
    • IDob – уникальный номер объекта размещения (берётся из таблицы Objects)

4. info(Num_i, Date, Prib_id, OpNum, ObjectId, x, y) – таблица содержащая данные о сессиях передачи данных.

  • Столбцы:
    • Num_i – номер сессии передачи данных.
    • Date – временной штамп сессии передачи данных.
    • Prib_id – уникальный номер прибора передавшего данные (берётся из units_list)
    • OpNum – уникальный номер оператора, закреплённого к прибору на момент сессии передачи данных (берётся из OPR_list)
    • ObjectId – уникальный номер объекта размещения, где располагался прибор на момент сессии передачи данных.
    • x – координата X размещения прибора на объекта размещения, на момент сессии передачи данных.
    • y – координата Y размещения прибора на объекте размещения, на момент сессии передачи данных.

5. save_data(Num, Type, Value) – таблица содержащая данные, полученные в процессе сессии передачи данных.

  • Столбцы:
    • Num – номер сессии, в процессе которой были переданы данные.
    • Type – вид параметра, данные измерения которого были переданы.
    • Value – значение данных для замеряемого параметра.

6. multiplier(unit, sensor, timestamp, ratio) – таблица содержащая калибровочные данные датчиков.

  • Столбцы:
    • unit – уникальный номер прибора на котором установлен калибруемый датчик.
    • sensor – наименование датчика, параметр, если он снимает несколько параметров, а так же номер датчика, если их несколько в одном приборе
    • timestamp – временная привязка данных калибровки
    • ratio – данные калибровки.

7. sensors_adr(id, unit_id, sensor, adr, timestamp, sensor_name, note) – таблица содержащая адреса датчиков.

  • Столбцы:
    • id – уникальный номер записи
    • unit_id – уникальный номер прибора на котором установлен датчик
    • sensor – полное название параметра передаваемого датчиком
    • adr – адрес датчика
    • timestamp – время внесения данных
    • sensor_name – короткое наименование параметра
    • note – заметка о датчике и его применение

Далее представлена структура базы данных и взаимосвязь таблиц на рисунке 1.

Рисунок 1.


SQL запрос, для загрузки в новую базу данных созданной структуры

inject.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
-- Table structure for info
-- ----------------------------
DROP TABLE IF EXISTS `info`;
CREATE TABLE `info`  (
  `Num_i` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `Date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Prib_id` tinyint(1) UNSIGNED NOT NULL,
  `OpNum` tinyint(1) UNSIGNED NOT NULL,
  `ObjectId` tinyint(1) UNSIGNED NOT NULL,
  `x` FLOAT(10, 5) NOT NULL,
  `y` FLOAT(10, 5) NOT NULL,
  PRIMARY KEY (`Num_i`) USING BTREE,
  UNIQUE INDEX `Number_id_index`(`Num_i`) USING BTREE,
  INDEX `date_index`(`Date`) USING BTREE,
  INDEX `Unit_index`(`Prib_id`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for multiplier
-- ----------------------------
DROP TABLE IF EXISTS `multiplier`;
CREATE TABLE `multiplier`  (
  `unit` tinyint(1) NOT NULL,
  `sensor` VARCHAR(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `timestamp` datetime(0) NOT NULL,
  `ratio` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `adr` VARCHAR(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  INDEX `Unit_index_multip`(`unit`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for objects
-- ----------------------------
DROP TABLE IF EXISTS `objects`;
CREATE TABLE `objects`  (
  `NumOb` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NameOb` VARCHAR(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`NumOb`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for opr_list
-- ----------------------------
DROP TABLE IF EXISTS `opr_list`;
CREATE TABLE `opr_list`  (
  `N` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`N`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for save_data
-- ----------------------------
DROP TABLE IF EXISTS `save_data`;
CREATE TABLE `save_data`  (
  `Num` INT(1) UNSIGNED NOT NULL,
  `Type` CHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `Value` CHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  INDEX `Num_ses`(`Num`) USING BTREE,
  INDEX `Type_value_index`(`Type`, `Value`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for sensors_adr
-- ----------------------------
DROP TABLE IF EXISTS `sensors_adr`;
CREATE TABLE `sensors_adr`  (
  `id` SMALLINT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `unit_id` tinyint(1) UNSIGNED NOT NULL,
  `sensor` VARCHAR(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `adr` VARCHAR(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `timestamp` datetime(0) NOT NULL,
  `sensor_name` VARCHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `note` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
-- ----------------------------
-- Table structure for units_list
-- ----------------------------
DROP TABLE IF EXISTS `units_list`;
CREATE TABLE `units_list`  (
  `uNum` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uName` VARCHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `Serial` VARCHAR(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `AKey` VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `OPid` tinyint(1) UNSIGNED NOT NULL,
  `x` FLOAT(10, 5) NOT NULL,
  `y` FLOAT(10, 5) NOT NULL,
  `IDob` tinyint(1) UNSIGNED NOT NULL,
  `remove` bit(1) NOT NULL,
  PRIMARY KEY (`uNum`) USING BTREE,
  UNIQUE INDEX `Units`(`uNum`, `uName`) USING BTREE
) ENGINE = Aria CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Page;
 
SET FOREIGN_KEY_CHECKS = 1;
doc/1513/643.mgul.15131-01_32_01.txt · Последние изменения: 2019/07/21 12:09 — deimozzz