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

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


doc:1807:mgul.1800711.004

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
doc:1807:mgul.1800711.004 [2022/06/14 20:12]
gosman321 создано
doc:1807:mgul.1800711.004 [2022/06/15 01:42] (текущий)
gosman321 [4 Запуск WEB-сервиса]
Строка 8: Строка 8:
 Функциональным назначением системы является приём, сохранение и предоставление данных,​ полученных в процессе работы с WEB-интерфейсом и мобильным приложением. Функциональным назначением системы является приём, сохранение и предоставление данных,​ полученных в процессе работы с WEB-интерфейсом и мобильным приложением.
 Основные функции системы состоят в приёме и обработке данных JSON формата,​ сохранение и предоставлении по запросу,​ для последующей обработкой операторами. Основные функции системы состоят в приёме и обработке данных JSON формата,​ сохранение и предоставлении по запросу,​ для последующей обработкой операторами.
-Для функционирования системы требуется серверная операционная си-стема, система управления базами данных,​ веб-сервер с поддержкой языка программирования Java и программный код.+Для функционирования системы требуется серверная операционная система,​ система управления базами данных,​ веб-сервер с поддержкой языка программирования Java и программный код.
    
 ====== Структура системы ====== ====== Структура системы ======
Строка 28: Строка 28:
  
 Установите пакет MySQL-server Установите пакет MySQL-server
- <​code>​ $ sudo apt-get install mysql-server<​code>​+ <​code>​ $ sudo apt-get install mysql-server<​/code> 
 Если будет просить ввести root пароль,​ то оставьте его пустым Если будет просить ввести root пароль,​ то оставьте его пустым
 Инициализируйте систему безопасности MySQL Инициализируйте систему безопасности MySQL
   $ mysql_secure_installation   $ mysql_secure_installation
 +  ​
  
  
Строка 40: Строка 42:
   $ mysql –u root –p    $ mysql –u root –p 
   (после нужно ввести пароль)   (после нужно ввести пароль)
-  ​CREATE DATABASE ​Production;+Затем необходимо создать базу данных 
 + 
 +  ​CREATE DATABASE ​RunningString; 
 +  ​
 Если ошибок нет, то база успешно создана. Если ошибок нет, то база успешно создана.
-Создайте пользователя,​ под которым сайт будет работать с БД, пользователя для запроса данных, ​и пользователя-администратора базы данных для удалённого администрирования, следующей командой:​ +Создайте пользователя,​ под которым сайт будет работать с БД
-  CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’;​+  CREATE USER ‘Amind’@’localhost’ IDENTIFIED BY ‘Abcd123’;​ 
 +Логин и пароль ​можно изменить в файле application.properties,​ находящийся по пути rString\src\main\resources
  
-Выдайте пользователям привилегии+Выдайте пользователям привилегии:​ 
-Для сайта:​ +  $ GRANT ALL PRIVILEGES ON production.* TO ‘Amind’@’localhost’ IDEN-TIFIED BY ‘Abcd123’;
-  $ 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 файла дампа. +Создавать структуру базы данных ​не является необходимым, поскольку при запуске WEB-сервиса она создастся автоматически.
-  mysql -u username -p Production < data-dump.sql+
  
-труктура базы данных рассматривается в Приложении 1.)+===== 2 Установка зависимостей WEB-сервиса =====
  
-===== 2 Установка ​HTTP сервера =====+==== Установка ​пакета JDK ====
  
-==== Установка и настройка пакета apache ====+Для установки необходимо ввести
  
-Установите apache2 веб-сервер +  sudo apt -install ​openjdk-8-jdk
-  $ apt-get install ​apache2 +
-Создайте каталог для сайта. +
-  $ mkdir –p /​var/​www/​site.ru/​ +
-Настройте конфигурацию виртуального хоста. +
-  $ nano /​etc/​apache2/​sites-available/​site.ru.conf +
-Вставьте в созданный файл конфигурации следующие настройки:​ +
-<​code><​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>​ +==== Установка зависимости Gradle ====
-Options ExecCGI +
-</​Directory>​ +
-</​VirtualHost></​code>​+
  
-Сохраните файл и включите сайт. +Для установки ​необходимо ввести
-  a2ensite site.ru.conf +
-Отключите стандартный сайт. +
-  a2dissite 000-default.conf +
-Перезапустите apache. +
-  systemctl restart apache2+
  
-==== Установка и настройка php 7.2 ====+  sudo install gradle
  
-Импортируйте ключ подписи и включите PPA. +===== 3 Удалённый доступ к файлам веб-сервиса ​=====
-  $ 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 Установите SSH
Строка 134: Строка 84:
   $ scp User@remote.host:/​var/​www/​site.ru/​file.http local/​path/​to/​dir   $ scp User@remote.host:/​var/​www/​site.ru/​file.http local/​path/​to/​dir
  
-===== 4 Создание пользователей системы ​=====+===== 4 Запуск WEB-сервиса  ​=====
  
-Создайте группу и http пользователя этой группы. +Для ​запуска сервиса необходимо перейти в его корень ​и ввести ​команду 
-  $ groupadd http +  ​gradle BootRun 
-  $ 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 Обязательные изменения в текстах программ ===== ===== 5 Обязательные изменения в текстах программ =====
Строка 157: Строка 96:
  
 2. Замените в нём: 2. Замените в нём:
-  * 'server' – если ​база данных и веб сервер находятся на одной машине, то замените на «localhost», ​иначе ​замените на адрес сервера с базой данных. +  * 'spring.datasource.username' – если необходимо изменить имя пользователя для доступа к базе данных ​WEB-сервиса
-  * 'user' – замените на логин ​пользователя базы данных. +  * 'spring.datasource.password' – замените на пароль пользователя базы данных. 
-  * 'password' – замените ​на пароль ​пользователя ​базы данных. +  * 'server.http.port' – Замените порт, по которому осуществляется HTTP запросы 
-  * 'BD' – замените ​на название базы данных (по умолчанию Production).+  * 'server.port' – Замените ​порт, по которому осуществляется HTTPS запросы.
  
 3. Сохраните изменения 3. Сохраните изменения
- 
-4. Откройте в текстовом редакторе файл /​admin/​config.php. 
- 
-5. Добавьте пользователей панели управления. 
- 
-Шаблонный пример:​ 
-<​code>​$buffer['​admin'​] = ['​password'​=>'​111','​level'​=>​255];​ </​code> ​ 
-В данной строке в массив buffer по индексу ‘admin’ вносится массив с паролем ‘12345’ и уровнем доступа ‘255’. Индекс – имя пользователя. Уровень доступа указывает к каким функциям пользователь имеет доступ:​ 
- 
-**"​1"​** – только внесение новых данных. 
- 
-**"​2"​** – внесение новых данных и данных калибровки и адресов датчиков. 
- 
-**"​127"​** – добавление и редактирование объектов,​ операторов и приборов. 
- 
-**"​255"​** – Полный доступ. 
- 
-6. Сохраните изменений 
- 
-7. Загрузите изменённые файлы в директорию сайта. 
  
  
Строка 188: Строка 107:
  
 Для проведения проверки системы рекомендуется внести данные в ручном режиме через веб-интерфейс,​ или же провести тестовую передачу данных с устройства. После выполнение внесения данных,​ проверьте хранимые данные SQL запросом: ​ Для проведения проверки системы рекомендуется внести данные в ручном режиме через веб-интерфейс,​ или же провести тестовую передачу данных с устройства. После выполнение внесения данных,​ проверьте хранимые данные SQL запросом: ​
-<​code>​SELECT sd.Num as Num,sd.Type as Type,​sd.Value as Value,​li.Date as Date,li.uid as Unit  +<​code>​select * from massages</​code>​ 
-FROM save_data sd  +<​code>​select * from string</​code>​ 
-INNER JOIN ( +<​code>​select * from string_massage</​code>​
- 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</​code>​+
  
 ====== Сообщения системному программисту ====== ====== Сообщения системному программисту ======
  
-При запуске ​инициализации ​системы безопасности MySQL будут заданы вопросы: +При запуске ​WEB-сервиса в консоли ​Фреймворк будет выводить ​возможные сообщения ​ошибок.
- +
----- +
- +
-«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 ======
Строка 238: Строка 120:
  
  
-1. **opr_list(NName)** – таблица содержащая данные о операторах.+1. **massages(id,showed,​string_text,​ string_color,​string_color_type,​string_speed)** – таблица содержащая данные о сообщениях.
   *Столбцы:​   *Столбцы:​
-    ***N** – уникальный номер оператора(id)+    ***id** – уникальный номер ​сообщения(id). 
-    ***Name** – имя оператора.+    ***showed** – флаг отображения сообщения
 +    ***string_text** – текст сообщения
 +    ***string_color** – статичный цвет сообщения. 
 +    ***string_color_type** – тип ​анимации цвета 
 +    ***string_speed** – скорость ​анимации сдвига сообщения.
  
-2. **objects(NumObNameOb)** – таблица содержащая данные о объектах ​размещения приборов.+2. **string(idcode, name)** – таблица содержащая данные о устройствах.
   *Столбцы:​   *Столбцы:​
-    ***NumOb** – уникальный номер объекта размещения(id)+    ***id** – уникальный номер устройства(id). 
-    ***NameOb** – наименование ​объекта размещения.+    ***code** – уникальный текстовый идентификатор устройства
 +    ***name** – наименование ​места размещения ​устройства,​ отображаемое пользователю.
  
-3. **units_list(uNumuName, Serial, AKey, OPid, x, y, IDob)** – таблица ​со-держащая ​данные ​о используемых приборах.+3. **string_massage(massage_idstring_id)** – таблица ​реализующая ​связь "многие ко многим" между таблицами string и massages.
   *Столбцы:​   *Столбцы:​
-    ***uNum** – уникальный ​номер ​прибора(id). +    ***massage_id** – номер сообщения. 
-    ***uName** – наименование прибора. +    ***string_id** – номер устройства.
-    ***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.
  
-{{:doc:1513:bd_after.png?nolink|}}+{{:doc:1807:database.png?400|}}
 === Рисунок 1. === === Рисунок 1. ===
    
  
 ---- ----
- 
-===== SQL запрос,​ для загрузки в новую базу данных созданной структуры ===== 
- 
-<file 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; 
- 
-</​file>​ 
doc/1807/mgul.1800711.004.1655226739.txt.gz · Последние изменения: 2022/06/14 20:12 — gosman321