update Dockerfile

This commit is contained in:
2026-06-24 13:38:07 +03:00
parent 47c712b3e0
commit f50c31df0f
8 changed files with 301 additions and 3 deletions
+2 -1
View File
@@ -2,12 +2,13 @@
FROM node:20-alpine AS builder FROM node:20-alpine AS builder
WORKDIR /app WORKDIR /app
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install --force
COPY . . COPY . .
RUN npm run build RUN npm run build
# Stage 2: Serve the application with Nginx # Stage 2: Serve the application with Nginx
FROM nginx:1.25-alpine FROM nginx:1.25-alpine
COPY --from=builder /app/dist /usr/share/nginx/html COPY --from=builder /app/dist /usr/share/nginx/html
COPY --from=builder /app/src/public /usr/share/nginx/html
EXPOSE 80 EXPOSE 80
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]
+1 -1
View File
@@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Brain Training App</title> <title>Мониторинг инфраструктуры</title>
<style>html, body { height: 100%; margin: 0; } #root { height: 100%; }</style> <style>html, body { height: 100%; margin: 0; } #root { height: 100%; }</style>
</head> </head>
+1 -1
View File
@@ -97,7 +97,7 @@ export function Dashboard() {
throw new Error('Network response was not ok'); throw new Error('Network response was not ok');
} }
const result = await response.json(); const result = await response.json();
setServers([...servers, ...result['result']]); setServers([...result['result']]);
setError(null); setError(null);
} catch (err) { } catch (err) {
setError(err.message); setError(err.message);
+55
View File
@@ -0,0 +1,55 @@
Options -Indexes
ErrorDocument 404 /404.php
<IfModule mod_setenvif.c>
SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on
</IfModule>
<IfModule mod_php5.c>
php_flag session.use_trans_sid off
#php_flag default_charset UTF-8
#php_value display_errors 1
</IfModule>
<IfModule mod_php7.c>
php_flag session.use_trans_sid off
#php_flag default_charset UTF-8
#php_value display_errors 1
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} [\xC2-\xDF][\x80-\xBF] [OR]
RewriteCond %{REQUEST_FILENAME} \xE0[\xA0-\xBF][\x80-\xBF] [OR]
RewriteCond %{REQUEST_FILENAME} [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} [OR]
RewriteCond %{REQUEST_FILENAME} \xED[\x80-\x9F][\x80-\xBF] [OR]
RewriteCond %{REQUEST_FILENAME} \xF0[\x90-\xBF][\x80-\xBF]{2} [OR]
RewriteCond %{REQUEST_FILENAME} [\xF1-\xF3][\x80-\xBF]{3} [OR]
RewriteCond %{REQUEST_FILENAME} \xF4[\x80-\x8F][\x80-\xBF]{2}
RewriteCond %{REQUEST_FILENAME} !/bitrix/virtual_file_system.php$
RewriteRule ^(.*)$ /bitrix/virtual_file_system.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 3 day"
ExpiresByType image/gif "access plus 3 day"
ExpiresByType image/png "access plus 3 day"
ExpiresByType text/css "access plus 3 day"
ExpiresByType application/javascript "access plus 3 day"
</IfModule>
+149
View File
@@ -0,0 +1,149 @@
<? $arJsConfig = [
'React' => [
'js' => '/assets/index-chN5Iirr.js',
'css' => '/assets/index-IAjJXhKq.css',
'rel' =>[],
]
];
foreach ($arJsConfig as $nameExt => $arExt) {
\CJSCore::RegisterExt($nameExt, $arExt);
}
class RestTest
{
public static function OnRestServiceBuildDescription()
{
return array(
'iblock' => array(
'iblock.test' => array(
'callback' => array(__CLASS__, 'test'),
'options' => array(),
),
'iblock.edocadd' => array(
'callback' => array(__CLASS__, 'edocadd'),
'options' => array(),
),
'iblock.servers' => array(
'callback' => array(__CLASS__, 'serverList'),
'options' => array(),
),
)
);
}
public static function test($query, $navStart, \CRestServer $server)
{
if ($query['error']) {
throw new \Bitrix\Rest\RestException(
'Message',
'ERROR_CODE',
\CRestServer::STATUS_PAYMENT_REQUIRED
);
}
return array(
'query' => $query,
'files' => $_FILES
);
}
public static function serverList($query, $navStart, \CRestServer $server)
{
if ($query['error']) {
throw new \Bitrix\Rest\RestException(
'Message',
'ERROR_CODE',
\CRestServer::STATUS_PAYMENT_REQUIRED
);
}
if (\Bitrix\Main\Loader::includeModule('iblock')) {
$el = new CIBlockElement;
$result = array();
$arFilter = array("IBLOCK_ID" => 3, "ACTIVE" => "Y");
$arOrder = array("SORT" => "ASC");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$arFields["PROPERTY"] = $ob->GetProperties();
$result[] = array(
"id" => $arFields["ID"],
"name"=> $arFields["NAME"],
"url" => $arFields["PROPERTY"]["1"]["VALUE"],
"status"=> $arFields["PROPERTY"]["2"]["VALUE"],
"responseTime"=> $arFields["PROPERTY"]["3"]["VALUE"],
"uptime"=> $arFields["PROPERTY"]["4"]["VALUE"],
"lastCheck"=> $arFields["PROPERTY"]["5"]["VALUE"],
"checkType"=> $arFields["PROPERTY"]["6"]["VALUE"],
);
}
return $result;
}
return array(
'result' => 'error'
);
}
//-----------------------------EDOC------------------------------------
public static function edocadd($query, $navStart, \CRestServer $server)
{
if ($query['error']) {
throw new \Bitrix\Rest\RestException(
'Message',
'ERROR_CODE',
\CRestServer::STATUS_PAYMENT_REQUIRED
);
}
if (\Bitrix\Main\Loader::includeModule('iblock')) {
$el = new CIBlockElement;
$PROP = array();
$PROP['TITLE'] = $query['title'] ?? 'Без имени';
if($_FILES) {
foreach(array_keys($_FILES) as $file_key) {
if(!empty($query['pdf']) && $query['pdf'] == $file_key) $PROP['PDF'] = $_FILES[$file_key];
else $PROP['ANNEXES'].array_push($_FILES[$file_key]);
}
}
$query['name'] = $query['name'] ?? 'Без имени';
$code = CUtil::translit($query['name'], "ru", array(
"max_len" => 100,
"change_case" => "L", // L - в нижний регистр, U - в верхний, сниппеты [3, 7]
"replace_space" => "-", // замена пробелов
"replace_other" => "-", // замена спецсимволов
"delete_repeat_replace" => true, // удалять повторяющиеся символы
));
$arFields = Array(
"CODE" => $code ?? 'nocode',
"MODIFIED_BY" => $query['user_id'] ?? 1,
"IBLOCK_SECTION_ID" => $query['section'] ?? false,
"IBLOCK_ID" => 5, //НПА
"PROPERTY_VALUES"=> $PROP,
"NAME" => $query['name'],
"ACTIVE" => "Y",
"ACTIVE_FROM" => ConvertTimeStamp(time(), "SHORT"),
"PREVIEW_TEXT" => $query['preview_text'] ?? "",
"DETAIL_TEXT" => $query['detail_text'] ?? "",
);
if($NEW_ID = $el->Add($arFields))
$message = "Создан элемент с ID: ".$NEW_ID;
else
$message = "Ошибка: ".$el->LAST_ERROR;
}
return array(
'result' => $message
);
}
}
AddEventHandler(
'rest',
'OnRestServiceBuildDescription',
['\RestTest','OnRestServiceBuildDescription']
);
+64
View File
@@ -0,0 +1,64 @@
<?php
// подключаем пролог административной части Битрикса
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin.php');
// проверяем, что модуль REST установлен и активен
if (!\Bitrix\Main\Loader::includeModule('rest')) {
ShowError('Модуль REST не установлен');
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php');
exit;
} ?>
<style>
.webform-button.webform-button-create{
background: #025ea1;
padding: 10px 15px;
text-align: center;
color:#fff;
cursor: pointer;
}
</style>
<div class="adm-workarea">
<?php
// выводим компонент REST API, отображает список вебхуков и обрабатывает страницы их создания/редактирования
$APPLICATION->IncludeComponent(
'bitrix:rest.hook',
'.default',
[
'SEF_MODE' => 'Y',
// путь к нашей папке
'SEF_FOLDER' => '/local/rest/',
'COMPONENT_TEMPLATE' => '.default',
// шаблоны ЧПУ для компонента
'SEF_URL_TEMPLATES' => [
'list' => '',
'event_list' => 'event/',
'event_edit' => 'event/#id#/',
'ap_list' => 'ap/',
'ap_edit' => 'ap/#id#/',
],
],
false
); ?>
<br>
<a href="javascript:;" class="adm-btn adm-btn-green"
onclick="BX.PopupMenu.show('rest_hook_menu', this, [
{
// ссылка на создание исходящего вебхука
'href':'/local/rest/event/0/',
'text':'Исходящий вебхук'
},
{
// ссылка на создание входящего вебхука
'href':'/local/rest/ap/0/',
'text':'Входящий вебхук'
}
])">
Добавить вебхук
</a>
</div>
<?php
// подключаем эпилог
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php');
+2
View File
@@ -0,0 +1,2 @@
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
+27
View File
@@ -0,0 +1,27 @@
<?php
$arUrlRewrite=array (
0 =>
array (
'CONDITION' => '#^/local/rest/#',
'RULE' => '',
'ID' => 'bitrix:rest.hook',
'PATH' => '/local/rest/index.php',
'SORT' => 100,
),
1 =>
array (
'CONDITION' => '#^/local/rest/#',
'RULE' => '',
'ID' => 'bitrix:rest.hook',
'PATH' => '/local/rest/index.php',
'SORT' => 100,
),
2 =>
array (
'CONDITION' => '#^/rest/#',
'RULE' => '',
'ID' => '',
'PATH' => '/bitrix/services/rest/index.php',
'SORT' => 200,
),
);