Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:1807:mgul.1800711.004 [2022/06/14 20:27] gosman321 |
doc:1807:mgul.1800711.004 [2022/06/15 01:42] (текущий) gosman321 [4 Запуск WEB-сервиса] |
||
---|---|---|---|
Строка 8: | Строка 8: | ||
Функциональным назначением системы является приём, сохранение и предоставление данных, полученных в процессе работы с WEB-интерфейсом и мобильным приложением. | Функциональным назначением системы является приём, сохранение и предоставление данных, полученных в процессе работы с WEB-интерфейсом и мобильным приложением. | ||
Основные функции системы состоят в приёме и обработке данных JSON формата, сохранение и предоставлении по запросу, для последующей обработкой операторами. | Основные функции системы состоят в приёме и обработке данных JSON формата, сохранение и предоставлении по запросу, для последующей обработкой операторами. | ||
- | Для функционирования системы требуется серверная операционная си-стема, система управления базами данных, веб-сервер с поддержкой языка программирования Java и программный код. | + | Для функционирования системы требуется серверная операционная система, система управления базами данных, веб-сервер с поддержкой языка программирования Java и программный код. |
====== Структура системы ====== | ====== Структура системы ====== | ||
Строка 42: | Строка 42: | ||
$ mysql –u root –p | $ mysql –u root –p | ||
(после нужно ввести пароль) | (после нужно ввести пароль) | ||
+ | Затем необходимо создать базу данных | ||
+ | |||
CREATE DATABASE RunningString; | CREATE DATABASE RunningString; | ||
+ | | ||
Если ошибок нет, то база успешно создана. | Если ошибок нет, то база успешно создана. | ||
Создайте пользователя, под которым сайт будет работать с БД: | Создайте пользователя, под которым сайт будет работать с БД: | ||
Строка 51: | Строка 54: | ||
$ GRANT ALL PRIVILEGES ON production.* TO ‘Amind’@’localhost’ IDEN-TIFIED BY ‘Abcd123’; | $ GRANT ALL PRIVILEGES ON production.* TO ‘Amind’@’localhost’ IDEN-TIFIED BY ‘Abcd123’; | ||
- | Создавать структуру базы данных не является необходимым, поскольку при запуске WEB-приложения она создастся автоматически. | + | Создавать структуру базы данных не является необходимым, поскольку при запуске WEB-сервиса она создастся автоматически. |
- | ===== 2 Установка HTTP сервера ===== | + | ===== 2 Установка зависимостей WEB-сервиса ===== |
- | ==== Установка и настройка пакета apache ==== | + | ==== Установка пакета JDK ==== |
- | Установите apache2 веб-сервер | + | Для установки необходимо ввести |
- | $ 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> | + | sudo apt -y install openjdk-8-jdk |
- | Options ExecCGI | + | |
- | </Directory> | + | |
- | </VirtualHost></code> | + | |
- | Сохраните файл и включите сайт. | + | ==== Установка зависимости Gradle ==== |
- | a2ensite site.ru.conf | + | |
- | Отключите стандартный сайт. | + | |
- | a2dissite 000-default.conf | + | |
- | Перезапустите apache. | + | |
- | systemctl restart apache2 | + | |
- | ==== Установка и настройка php 7.2 ==== | + | Для установки необходимо ввести |
- | Импортируйте ключ подписи и включите PPA. | + | sudo install gradle |
- | $ 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 Удалённый доступ к файлам веб-приложения ===== | + | ===== 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 | ||
Строка 126: | Строка 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 Обязательные изменения в текстах программ ===== | ||
Строка 149: | Строка 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. Загрузите изменённые файлы в директорию сайта. | ||
Строка 180: | Строка 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 ====== | ||
Строка 230: | Строка 120: | ||
- | 1. **opr_list(N, Name)** – таблица содержащая данные о операторах. | + | 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(NumOb, NameOb)** – таблица содержащая данные о объектах размещения приборов. | + | 2. **string(id, code, name)** – таблица содержащая данные о устройствах. |
*Столбцы: | *Столбцы: | ||
- | ***NumOb** – уникальный номер объекта размещения(id). | + | ***id** – уникальный номер устройства(id). |
- | ***NameOb** – наименование объекта размещения. | + | ***code** – уникальный текстовый идентификатор устройства. |
+ | ***name** – наименование места размещения устройства, отображаемое пользователю. | ||
- | 3. **units_list(uNum, uName, Serial, AKey, OPid, x, y, IDob)** – таблица со-держащая данные о используемых приборах. | + | 3. **string_massage(massage_id, string_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> |