Files
SYSAHELPER/sysahelper/REG2026/REG26_ 2. Project_01 _ sysahelper.html

2295 lines
137 KiB
HTML
Raw Permalink Normal View History

2026-05-07 19:20:10 +05:00
<!DOCTYPE html>
<html dir="ltr" lang="ru" xml:lang="ru" class="yui3-js-enabled"><head>
<title>REG26: 2. Project_01 | sysahelper</title>
<link rel="shortcut icon" href="https://sysahelper.ru/pluginfile.php/1/theme_moove/favicon/1703880572/22212monkey_98814.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="keywords" content="moodle, REG26: 2. Project_01 | sysahelper">
<link rel="stylesheet" type="text/css" href="REG26_%202.%20Project_01%20_%20sysahelper_files/combo.css"><script async="" src="REG26_%202.%20Project_01%20_%20sysahelper_files/tag.js"></script><script charset="utf-8" id="yui_3_18_1_1_1778160100284_12" src="REG26_%202.%20Project_01%20_%20sysahelper_files/combo_002" async=""></script><script id="firstthemesheet" type="text/css">/** Required in order to fix style inclusion problems in IE with YUI **/</script><link rel="stylesheet" type="text/css" href="REG26_%202.%20Project_01%20_%20sysahelper_files/styles.css">
<script>
//<![CDATA[
var M = {}; M.yui = {};
M.pageloadstarttime = new Date();
M.cfg = {"wwwroot":"https:\/\/sysahelper.ru","homeurl":{},"sesskey":"I78ejZljGV","sessiontimeout":"28800","sessiontimeoutwarning":"1200","themerev":"1703880572","slasharguments":1,"theme":"moove","iconsystemmodule":"core\/icon_system_fontawesome","jsrev":"1703880200","admin":"admin","svgicons":true,"usertimezone":"\u0415\u0432\u0440\u043e\u043f\u0430\/\u041c\u043e\u0441\u043a\u0432\u0430","language":"ru","courseId":43,"courseContextId":1078,"contextid":1160,"contextInstanceId":780,"langrev":1703880200,"templaterev":"1703880200"};var yui1ConfigFn = function(me) {if(/-skin|reset|fonts|grids|base/.test(me.name)){me.type='css';me.path=me.path.replace(/\.js/,'.css');me.path=me.path.replace(/\/yui2-skin/,'/assets/skins/sam/yui2-skin')}};
var yui2ConfigFn = function(me) {var parts=me.name.replace(/^moodle-/,'').split('-'),component=parts.shift(),module=parts[0],min='-min';if(/-(skin|core)$/.test(me.name)){parts.pop();me.type='css';min=''}
if(module){var filename=parts.join('-');me.path=component+'/'+module+'/'+filename+min+'.'+me.type}else{me.path=component+'/'+component+'.'+me.type}};
YUI_config = {"debug":false,"base":"https:\/\/sysahelper.ru\/lib\/yuilib\/3.18.1\/","comboBase":"https:\/\/sysahelper.ru\/theme\/yui_combo.php?","combine":true,"filter":null,"insertBefore":"firstthemesheet","groups":{"yui2":{"base":"https:\/\/sysahelper.ru\/lib\/yuilib\/2in3\/2.9.0\/build\/","comboBase":"https:\/\/sysahelper.ru\/theme\/yui_combo.php?","combine":true,"ext":false,"root":"2in3\/2.9.0\/build\/","patterns":{"yui2-":{"group":"yui2","configFn":yui1ConfigFn}}},"moodle":{"name":"moodle","base":"https:\/\/sysahelper.ru\/theme\/yui_combo.php?m\/1703880200\/","combine":true,"comboBase":"https:\/\/sysahelper.ru\/theme\/yui_combo.php?","ext":false,"root":"m\/1703880200\/","patterns":{"moodle-":{"group":"moodle","configFn":yui2ConfigFn}},"filter":null,"modules":{"moodle-core-blocks":{"requires":["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification"]},"moodle-core-actionmenu":{"requires":["base","event","node-event-simulate"]},"moodle-core-notification":{"requires":["moodle-core-notification-dialogue","moodle-core-notification-alert","moodle-core-notification-confirm","moodle-core-notification-exception","moodle-core-notification-ajaxexception"]},"moodle-core-notification-dialogue":{"requires":["base","node","panel","escape","event-key","dd-plugin","moodle-core-widget-focusafterclose","moodle-core-lockscroll"]},"moodle-core-notification-alert":{"requires":["moodle-core-notification-dialogue"]},"moodle-core-notification-confirm":{"requires":["moodle-core-notification-dialogue"]},"moodle-core-notification-exception":{"requires":["moodle-core-notification-dialogue"]},"moodle-core-notification-ajaxexception":{"requires":["moodle-core-notification-dialogue"]},"moodle-core-lockscroll":{"requires":["plugin","base-build"]},"moodle-core-event":{"requires":["event-custom"]},"moodle-core-chooserdialogue":{"requires":["base","panel","moodle-core-notification"]},"moodle-core-maintenancemodetimer":{"requires":["base","node"]},"moodle-core-handlebars":{"condition":{"trigger":"handlebars","when":"after"}},"moodle-core-formchangechecker":{"requires":["base","event-focus","moodle-core-event"]},"moodle-core-dragdrop":{"requires":["base","node","io","dom","dd","event-key","event-focus","moodle-core-notification"]},"moodle-core_availability-form":{"requires":["base","node","event","event-delegate","panel","moodle-core-notification-dialogue","json"]},"moodle-backup-backupselectall":{"requires":["node","event","node-event-simulate","anim"]},"moodle-course-util":{"requires":["node"],"use":["moodle-course-util-base"],"submodules":{"moodle-course-util-base":{},"moodle-course-util-section":{"requires":["node","moodle-course-util-base"]},"moodle-course-util-cm":{"requires":["node","moodle-course-util-base"]}}},"moodle-course-management":{"requires":["base","node","io-base","moodle-core-notification-exception","json-parse","dd-constrain","dd-proxy","dd-drop","dd-delegate","node-event-delegate"]},"moodle-course-categoryexpander":{"requires":["node","event-key"]},"moodle-course-dragdrop":{"requires":["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification","moodle-course-coursebase","moodle-course-util"]},"moodle-form-dateselector":{"requires":["base","node","overlay","calendar"]},"moodle-form-shortforms":{"requires":["node","base","selector-css3","moodle-core-event"]},"moodle-question-searchform":{"requires":["base","node"]},"moodle-question-preview":{"requires":["base","dom","event-delegate","event-key","core_question_engine"]},"moodle-question-chooser":{"requires":["moodle-core-chooserdialogue"]},"moodle-availability_completion-form":{"requires":["base","node","event","moodle-core_availability-form"]},"moodle-availability_date-form":{"requires":["base","node","event","io","moodle-core_availability-form"]},"moodle-availability_grade-form":{"requires":["base","node","event","moodle-core_availability-form"]},"moodle-availability_group-form":{"requires":["base","node","event","moodle-core_availability-form"]},"moodle-availability_grouping-form":{"requires":["base","node","event"
M.yui.loader = {modules: {}};
//]]>
</script>
<link rel="preconnect" href="https://fonts.googleapis.com/">
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin="">
<link href="REG26_%202.%20Project_01%20_%20sysahelper_files/css2.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="core/first" src="REG26_%202.%20Project_01%20_%20sysahelper_files/requirejs.php"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="jquery" src="REG26_%202.%20Project_01%20_%20sysahelper_files/javascript_002.php"></script><script type="text/x-mathjax-config">
MathJax.Hub.Config({
config: ["Accessible.js", "Safe.js"],
errorSettings: { message: ["!"] },
skipStartupTypeset: true,
messageStyle: "none"
});
</script><script type="text/javascript">
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-701');
});
;
require(['core_courseformat/local/courseindex/section'], function(component) {
component.init('course-index-section-568');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-778');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-704');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-719');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-705');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-720');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-724');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-722');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-721');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-725');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-726');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-727');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-728');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-729');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-730');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-731');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-732');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-733');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-734');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-735');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-736');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-737');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-772');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-773');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-774');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-775');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-776');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-777');
});
;
require(['core_courseformat/local/courseindex/section'], function(component) {
component.init('course-index-section-569');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-779');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-782');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-783');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-784');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-780');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-781');
});
;
require(['core_courseformat/local/courseindex/cm'], function(component) {
component.init('course-index-cm-785');
});
;
require(['core_courseformat/local/courseindex/section'], function(component) {
component.init('course-index-section-570');
});
;
require(['core_courseformat/local/courseindex/courseindex'], function(component) {
component.init('course-index');
});
</script></head>
<body id="page-mod-page-view" class="format-topics limitedwidth path-mod path-mod-page gecko dir-ltr lang-ru yui-skin-sam yui3-skin-sam sysahelper-ru pagelayout-incourse course-43 context-1160 cmid-780 cm-type-page category-8 theme uses-drawers drawer-open-index jsenabled">
<div id="accessibilitybar" class="fixed-top">
<div class="container-fluid">
<div class="bars">
<div class="fontsize">
<span>Размер шрифта</span>
<ul>
<li><a class="btn btn-default" data-action="decrease" title="Уменьшить размер шрифта" id="fontsize_dec">A-</a></li>
<li><a class="btn btn-default disabled" data-action="reset" title="Сбросить размер шрифта" id="fontsize_reset">A</a></li>
<li><a class="btn btn-default" data-action="increase" title="Увеличить размер шрифта" id="fontsize_inc">A+</a></li>
</ul>
</div>
<div class="sitecolor">
<span>Цвет сайта</span>
<ul>
<li><a class="btn btn-default" data-action="reset" title="Сбросить цвет сайта" id="sitecolor_color1">R</a></li>
<li><a class="btn btn-default" data-action="sitecolor-color-2" title="Низкий контраст 1" id="sitecolor_color2">A</a></li>
<li><a class="btn btn-default" data-action="sitecolor-color-3" title="Низкий контраст 2" id="sitecolor_color3">A</a></li>
<li><a class="btn btn-default" data-action="sitecolor-color-4" title="Высокий контраст" id="sitecolor_color4">A</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="toast-wrapper mx-auto py-0 fixed-top" role="status" aria-live="polite"></div>
<div id="page-wrapper" class="d-print-block">
<div>
<a class="sr-only sr-only-focusable" href="#maincontent">Перейти к основному содержанию</a>
</div><script src="REG26_%202.%20Project_01%20_%20sysahelper_files/javascript_003.php"></script>
<script src="REG26_%202.%20Project_01%20_%20sysahelper_files/combo"></script><script src="REG26_%202.%20Project_01%20_%20sysahelper_files/javascript.php"></script>
<script>
//<![CDATA[
document.body.className += ' jsenabled';
//]]>
</script>
<nav class="navbar fixed-top navbar-light bg-white navbar-expand shadow" aria-label="Навигация по сайту">
<button class="navbar-toggler aabtn d-block d-md-none px-1 my-1 border-0" data-toggler="drawers" data-action="toggle" data-target="theme_moove-drawers-primary" data-disabled-toggle="undefined" data-restore-tooltip-on-blur="true">
<span class="navbar-toggler-icon"></span>
<span class="sr-only">Боковая панель</span>
</button>
<a href="https://sysahelper.ru/" class="navbar-brand d-none d-md-flex align-items-center m-0 mr-4 p-0 aabtn">
<img src="REG26_%202.%20Project_01%20_%20sysahelper_files/4.jpg" class="logo mr-1" alt="sysahelper">
</a>
<div class="primary-navigation">
<nav class="moremenu navigation observed">
<ul id="moremenu-69fc91d055665-navbar-nav" role="menubar" class="nav more-nav navbar-nav">
<li data-key="home" class="nav-item" role="none" data-forceintomoremenu="false">
<a role="menuitem" class="nav-link " href="https://sysahelper.ru/" tabindex="0" aria-current="true">
В начало
</a>
</li>
<li role="none" class="nav-item dropdown dropdownmoremenu d-none" data-region="morebutton">
<a class="dropdown-toggle nav-link " href="#" id="moremenu-dropdown-69fc91d055665" role="menuitem" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" tabindex="-1">
Дополнительно
</a>
<ul class="dropdown-menu dropdown-menu-left" data-region="moredropdown" aria-labelledby="moremenu-dropdown-69fc91d055665" role="menu">
</ul>
</li>
</ul>
</nav>
</div>
<ul class="navbar-nav d-none d-md-flex my-1 px-1">
<!-- page_heading_menu -->
</ul>
<div id="usernavigation" class="navbar-nav ml-auto">
<div class="navbarcallbacks">
</div>
<div id="searchinput-navbar-69fc91d05729169fc91d055d7c3" class="simplesearchform">
<div class="collapse" id="searchform-navbar">
<form autocomplete="off" action="https://sysahelper.ru/search/index.php" method="get" accept-charset="utf-8" class="mform form-inline searchform-navbar">
<input type="hidden" name="context" value="1160">
<div class="input-group">
<label for="searchinput-69fc91d05729169fc91d055d7c3">
<span class="sr-only">Найти</span>
</label>
<input type="text" id="searchinput-69fc91d05729169fc91d055d7c3" class="form-control withclear" placeholder="Найти" aria-label="Найти" name="q" data-region="input" autocomplete="off">
<a class="btn btn-close" data-action="closesearch" data-toggle="collapse" href="#searchform-navbar" role="button">
<i class="icon fa fa-times fa-fw " aria-hidden="true"></i>
<span class="sr-only">Закрыть</span>
</a>
<div class="input-group-append">
<button type="submit" class="btn btn-submit" data-action="submit">
<i class="icon fa fa-search fa-fw " aria-hidden="true"></i>
<span class="sr-only">Найти</span>
</button>
</div>
</div>
</form>
</div>
<a class="btn btn-open rounded-0 nav-link" data-toggle="collapse" data-action="opensearch" href="#searchform-navbar" role="button" aria-expanded="false" aria-controls="searchform-navbar" title="Изменить данные поисковой строки">
<i class="icon fa fa-search fa-fw " aria-hidden="true"></i>
<span class="sr-only">Изменить данные поисковой строки</span>
</a>
</div>
<div class="divider border-left h-75 align-self-center mx-1"></div>
<div class="langmenu">
<div class="dropdown show">
<a href="#" role="button" id="lang-menu-toggle" data-toggle="dropdown" aria-label="Язык" aria-haspopup="true" aria-controls="lang-action-menu" class="btn dropdown-toggle">
<i class="icon fa fa-language fa-fw mr-1" aria-hidden="true"></i>
<span class="langbutton">
Русский (ru)
</span>
<b class="caret"></b>
</a>
<div role="menu" aria-labelledby="lang-menu-toggle" id="lang-action-menu" class="dropdown-menu dropdown-menu-right">
<a href="#" class="dropdown-item pl-5" role="menuitem" aria-current="true">
Русский (ru)
</a>
<a href="https://sysahelper.ru/mod/page/view.php?id=780&amp;lang=en" class="dropdown-item pl-5" role="menuitem">
English (en)
</a>
</div>
</div>
</div>
<div class="divider border-left h-75 align-self-center mx-1"></div>
<div class="d-flex align-items-stretch usermenu-container" data-region="usermenu">
<div class="usermenu">
<span class="login pl-2">
Вы используете гостевой доступ
<div class="divider border-left h-75 align-self-center mx-2"></div>
<a href="https://sysahelper.ru/login/index.php">Вход</a>
</span>
</div>
</div>
</div>
</nav>
<div class="drawer drawer-left drawer-primary d-print-none" data-region="fixed-drawer" id="theme_moove-drawers-primary" data-preference="" data-state="show-drawer-primary" data-forceopen="0" data-close-on-resize="1" aria-hidden="true">
<div class="drawerheader">
<button class="btn drawertoggle icon-no-margin hidden" data-toggler="drawers" data-action="closedrawer" data-target="theme_moove-drawers-primary" data-toggle="tooltip" data-placement="right" title="Закрыть панель" data-aria-hidden-tab-index="" tabindex="-1">
<i class="icon fa fa-times fa-fw " aria-hidden="true"></i>
</button>
<div class="drawerheadercontent hidden">
</div>
</div>
<div class="drawercontent drag-container" data-usertour="scroller">
<div class="list-group">
<a href="https://sysahelper.ru/" class="list-group-item list-group-item-action " data-aria-hidden-tab-index="" tabindex="-1">
В начало
</a>
</div>
</div>
</div>
<div class="drawer drawer-left show d-print-none scrolled" data-region="fixed-drawer" id="theme_boost-drawers-courseindex" data-preference="drawer-open-index" data-state="show-drawer-left" data-forceopen="0" data-close-on-resize="0">
<div class="drawerheader">
<button class="btn drawertoggle icon-no-margin" data-toggler="drawers" data-action="closedrawer" data-target="theme_boost-drawers-courseindex" data-toggle="tooltip" data-placement="right" title="Закрыть оглавление курса">
<i class="icon fa fa-times fa-fw " aria-hidden="true"></i>
</button>
<div class="drawerheadercontent">
</div>
</div>
<div class="drawercontent drag-container" data-usertour="scroller">
<nav id="courseindex" class="courseindex">
<div id="courseindex-content">
<div id="course-index" class="courseindex " role="tree">
<div class="courseindex-section " id="course-index-section-568" data-for="section" data-id="568" data-number="0" role="treeitem" aria-owns="courseindexcollapse0" tabindex="0" aria-selected="true">
<div class="courseindex-item d-flex
courseindex-section-title" id="courseindexsection0" data-for="section_item" tabindex="-1">
<a data-toggle="collapse" href="#courseindexcollapse0" class="courseindex-chevron icons-collapse-expand " aria-expanded="true" aria-controls="courseindexcollapse0" tabindex="-1">
<span class="collapsed-icon icon-no-margin mr-1" title="Развернуть" tabindex="-1">
<span class="dir-rtl-hide" tabindex="-1"><i class="icon fa fa-chevron-right fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="dir-ltr-hide" tabindex="-1"><i class="icon fa fa-chevron-left fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="sr-only" tabindex="-1">Развернуть</span>
</span>
<span class="expanded-icon icon-no-margin mr-1" title="Свернуть" tabindex="-1">
<i class="icon fa fa-chevron-down fa-fw " aria-hidden="true" tabindex="-1"></i>
<span class="sr-only" tabindex="-1">Свернуть</span>
</span>
</a>
<a href="https://sysahelper.ru/course/view.php?id=43#section-0" class="courseindex-link text-truncate" data-action="togglecourseindexsection" data-for="section_title" tabindex="-1">
Общее
</a>
<span class="current-badge badge badge-primary ml-2 px-2 rounded-pill" tabindex="-1">
Выделено
</span>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</div>
<div id="courseindexcollapse0" class="courseindex-item-content collapse show" aria-labelledby="courseindexsection0" role="group" tabindex="-1">
<ul class="courseindex-sectioncontent unlist" data-for="cmlist" data-id="568" role="group" tabindex="-1">
<li class="courseindex-item
d-flex
" id="course-index-cm-701" data-for="cm" data-id="701" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/folder/view.php?id=701" data-for="cm_name" tabindex="-1">
Конкурсная документация (в исходном виде)
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
</ul>
</div>
</div>
<div class="courseindex-section " id="course-index-section-569" data-for="section" data-id="569" data-number="1" role="treeitem" aria-owns="courseindexcollapse1" tabindex="-1" aria-selected="false">
<div class="courseindex-item d-flex
courseindex-section-title" id="courseindexsection1" data-for="section_item" tabindex="-1">
<a data-toggle="collapse" href="#courseindexcollapse1" class="courseindex-chevron icons-collapse-expand " aria-expanded="true" aria-controls="courseindexcollapse1" tabindex="-1">
<span class="collapsed-icon icon-no-margin mr-1" title="Развернуть" tabindex="-1">
<span class="dir-rtl-hide" tabindex="-1"><i class="icon fa fa-chevron-right fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="dir-ltr-hide" tabindex="-1"><i class="icon fa fa-chevron-left fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="sr-only" tabindex="-1">Развернуть</span>
</span>
<span class="expanded-icon icon-no-margin mr-1" title="Свернуть" tabindex="-1">
<i class="icon fa fa-chevron-down fa-fw " aria-hidden="true" tabindex="-1"></i>
<span class="sr-only" tabindex="-1">Свернуть</span>
</span>
</a>
<a href="https://sysahelper.ru/course/view.php?id=43#section-1" class="courseindex-link text-truncate" data-action="togglecourseindexsection" data-for="section_title" tabindex="-1">
Модуль Б. Настройка технических и программных средств информационно-коммуникационных систем
</a>
<span class="current-badge badge badge-primary ml-2 px-2 rounded-pill" tabindex="-1">
Выделено
</span>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</div>
<div id="courseindexcollapse1" class="courseindex-item-content collapse show" aria-labelledby="courseindexsection1" role="group" tabindex="-1">
<ul class="courseindex-sectioncontent unlist" data-for="cmlist" data-id="569" role="group" tabindex="-1">
<li class="courseindex-item
d-flex
" id="course-index-cm-778" data-for="cm" data-id="778" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/url/view.php?id=778" data-for="cm_name" tabindex="-1">
Текст задание
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
" id="course-index-cm-704" data-for="cm" data-id="704" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=704" data-for="cm_name" tabindex="-1">
Виртуальный стенд
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
" id="course-index-cm-719" data-for="cm" data-id="719" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=719" data-for="cm_name" tabindex="-1">
Используемая таблица адресации
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
" id="course-index-cm-705" data-for="cm" data-id="705" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=705" data-for="cm_name" tabindex="-1">
Настройка виртуальной машины ISP
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-720" data-for="cm" data-id="720" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=720" data-for="cm_name" tabindex="-1">
1. Настройка имён и IP-адресации на устройствах&nbsp;rtr-cod и rtr-a
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-724" data-for="cm" data-id="724" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=724" data-for="cm_name" tabindex="-1">
2. Подход к настройке fw-cod
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-722" data-for="cm" data-id="722" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=722" data-for="cm_name" tabindex="-1">
3. Настройка маршрутизации BGP на rtr-cod
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-721" data-for="cm" data-id="721" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=721" data-for="cm_name" tabindex="-1">
4. Настройка туннелей между офисом «а» и «cod»
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-725" data-for="cm" data-id="725" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=725" data-for="cm_name" tabindex="-1">
5. Настройка доступа в Интернет
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-726" data-for="cm" data-id="726" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=726" data-for="cm_name" tabindex="-1">
6. Настройка динамической маршрутизации между офисом «a» и «cod»
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-727" data-for="cm" data-id="727" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=727" data-for="cm_name" tabindex="-1">
7. Настройка коммутации между sw1-a и sw2-a
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-728" data-for="cm" data-id="728" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=728" data-for="cm_name" tabindex="-1">
8. Настройка доступа к веб-интерфейсу fw-cod и лицензирование
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-729" data-for="cm" data-id="729" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=729" data-for="cm_name" tabindex="-1">
9. Создание интерфейсов типа VLAN на fw-cod для маршутизации между VLAN
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-730" data-for="cm" data-id="730" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=730" data-for="cm_name" tabindex="-1">
10. Настройка коммутации между sw1-cod и sw2-cod
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-731" data-for="cm" data-id="731" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=731" data-for="cm_name" tabindex="-1">
11. Настройка имён и IP-адресов на всех остальных устройствах
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-732" data-for="cm" data-id="732" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=732" data-for="cm_name" tabindex="-1">
12. Настройка административного доступа (RADIUS)
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-733" data-for="cm" data-id="733" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=733" data-for="cm_name" tabindex="-1">
13. Настройка синхронизации времени между сетевыми устройствами
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-734" data-for="cm" data-id="734" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=734" data-for="cm_name" tabindex="-1">
14. Настройка службы доменных имен в COD-е
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-735" data-for="cm" data-id="735" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=735" data-for="cm_name" tabindex="-1">
15. Развёртывание контроллера домена на базе SambaAD
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-736" data-for="cm" data-id="736" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=736" data-for="cm_name" tabindex="-1">
16. Настройка службы доменных имен в OFFICE
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-737" data-for="cm" data-id="737" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=737" data-for="cm_name" tabindex="-1">
17. Настройка центра сертификации
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-772" data-for="cm" data-id="772" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=772" data-for="cm_name" tabindex="-1">
18. Настройка сервера баз данных
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-773" data-for="cm" data-id="773" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=773" data-for="cm_name" tabindex="-1">
19. Настройка устройства хранения данных (iSCSI)
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-774" data-for="cm" data-id="774" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=774" data-for="cm_name" tabindex="-1">
20. Настройка устройства хранения данных (LVM)
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-775" data-for="cm" data-id="775" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=775" data-for="cm_name" tabindex="-1">
21. Настройка устройства хранения данных (NFS)
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-776" data-for="cm" data-id="776" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=776" data-for="cm_name" tabindex="-1">
22. Настройка системы мониторинга
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-777" data-for="cm" data-id="777" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=777" data-for="cm_name" tabindex="-1">
23. Настройка IP телефонии
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
</ul>
</div>
</div>
<div class="courseindex-section " id="course-index-section-570" data-for="section" data-id="570" data-number="2" role="treeitem" aria-owns="courseindexcollapse2" tabindex="-1" aria-selected="false">
<div class="courseindex-item d-flex
courseindex-section-title" id="courseindexsection2" data-for="section_item" tabindex="-1">
<a data-toggle="collapse" href="#courseindexcollapse2" class="courseindex-chevron icons-collapse-expand " aria-expanded="true" aria-controls="courseindexcollapse2" tabindex="-1">
<span class="collapsed-icon icon-no-margin mr-1" title="Развернуть" tabindex="-1">
<span class="dir-rtl-hide" tabindex="-1"><i class="icon fa fa-chevron-right fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="dir-ltr-hide" tabindex="-1"><i class="icon fa fa-chevron-left fa-fw " aria-hidden="true" tabindex="-1"></i></span>
<span class="sr-only" tabindex="-1">Развернуть</span>
</span>
<span class="expanded-icon icon-no-margin mr-1" title="Свернуть" tabindex="-1">
<i class="icon fa fa-chevron-down fa-fw " aria-hidden="true" tabindex="-1"></i>
<span class="sr-only" tabindex="-1">Свернуть</span>
</span>
</a>
<a href="https://sysahelper.ru/course/view.php?id=43#section-2" class="courseindex-link text-truncate" data-action="togglecourseindexsection" data-for="section_title" tabindex="-1">
Модуль В. Обеспечение отказоустойчивости
</a>
<span class="current-badge badge badge-primary ml-2 px-2 rounded-pill" tabindex="-1">
Выделено
</span>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</div>
<div id="courseindexcollapse2" class="courseindex-item-content collapse show" aria-labelledby="courseindexsection2" role="group" tabindex="-1">
<ul class="courseindex-sectioncontent unlist" data-for="cmlist" data-id="570" role="group" tabindex="-1">
<li class="courseindex-item
d-flex
" id="course-index-cm-779" data-for="cm" data-id="779" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=779" data-for="cm_name" tabindex="-1">
1. Подготовка машины Cloud-ADM
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-782" data-for="cm" data-id="782" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=782" data-for="cm_name" tabindex="-1">
1.1. Установка Terraform на Cloud-ADM
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-783" data-for="cm" data-id="783" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=783" data-for="cm_name" tabindex="-1">
1.2. Установка OpenStack CLI на Cloud-ADM
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
indented " id="course-index-cm-784" data-for="cm" data-id="784" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=784" data-for="cm_name" tabindex="-1">
1.3. Установка Ansible на Cloud-ADM
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item d-flex pageitem" id="course-index-cm-780" data-for="cm" data-id="780" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=780" data-for="cm_name" tabindex="-1">
2. Project_01
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
" id="course-index-cm-781" data-for="cm" data-id="781" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=781" data-for="cm_name" tabindex="-1">
3. Project_02
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
<li class="courseindex-item
d-flex
" id="course-index-cm-785" data-for="cm" data-id="785" role="treeitem" tabindex="-1" aria-selected="false">
<span class="completioninfo" data-for="cm_completion" data-value="NaN" tabindex="-1"></span>
<a class="courseindex-link text-truncate" href="https://sysahelper.ru/mod/page/view.php?id=785" data-for="cm_name" tabindex="-1">
3. Project_03
</a>
<span class="courseindex-locked ml-1" data-for="cm_name" tabindex="-1">
<i class="icon fa fa-lock fa-fw " aria-hidden="true" tabindex="-1"></i>
</span>
<span class="dragicon ml-auto" tabindex="-1"><i class="icon fa fa-arrows fa-fw " aria-hidden="true" tabindex="-1"></i></span>
</li>
</ul>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
<div id="page" data-region="mainpage" data-usertour="scroller" class="drawers show-drawer-left drag-container">
<header id="page-header" class="moove-container-fluid">
<div class="d-flex flex-wrap">
<div class="ml-auto d-flex">
</div>
<div id="course-header">
</div>
</div>
<div class="d-sm-flex align-items-center">
<div class="mr-auto">
<div class="page-context-header"><div class="page-header-image mr-2"><div class="content activityiconcontainer icon-size-6 modicon_page"><img class="icon activityicon " aria-hidden="true" src="REG26_%202.%20Project_01%20_%20sysahelper_files/monologo.svg" alt=""></div></div><div class="page-header-headings"><h1 class="h2">2. Project_01</h1></div></div>
</div>
<div class="header-actions-container ml-auto" data-region="header-actions-container">
</div>
<div class="d-none d-md-block" id="page-navbar">
<nav aria-label="Панель навигации">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="https://sysahelper.ru/course/view.php?id=43#section-2" title="REGION2026">REG26</a>
</li>
<li class="breadcrumb-item"><span>2. Project_01</span></li>
</ol>
</nav>
</div>
</div>
</header>
<div id="topofscroll" class="main-inner">
<div class="drawer-toggles d-flex">
<div class="drawer-toggler drawer-left-toggle open-nav d-print-none">
<button class="btn icon-no-margin" data-toggler="drawers" data-action="toggle" data-target="theme_boost-drawers-courseindex" data-toggle="tooltip" data-placement="right" title="Открыть оглавление курса">
<span class="sr-only">Открыть оглавление курса</span>
<i class="icon fa fa-list fa-fw " aria-hidden="true"></i>
</button>
</div>
</div>
<div id="page-content" class="d-print-block">
<div id="region-main-box">
<section id="region-main" aria-label="Содержимое">
<span class="notifications" id="user-notifications"></span>
<span id="maincontent"></span>
<div class="activity-header" data-for="page-activity-header">
<span class="sr-only">Требуемые условия завершения</span>
<div data-region="activity-information" data-activityname="2. Project_01" class="activity-information">
</div>
</div>
<div role="main"><div class="box py-3 generalbox center clearfix"><div class="no-overflow"><h3>Задание:</h3>
<p>a. &nbsp; &nbsp;На виртуальной машине Cloud-ADM создайте скрипт «deploy_project_01.sh».</p>
<p>b. &nbsp; &nbsp;В качестве домашней директории используйте путь /home/altlinux/Projects/Project_01.</p>
<p>c. &nbsp; &nbsp;Скрипт должен реализовывать следующий функционал:</p>
<ol>
<li>Автоматическое развёртывание виртуальных машин в соответствие с топологией (см. Топология Project_01).</li>
<li>Характеристики виртуальных машин: 1vCPU, 1 ГБ ОЗУ, 10 ГБ размер диска.</li>
<li>Образ операционной системы: alt-p11-cloud-x86_64.qcow2.</li>
<li>Для виртуальной машины haproxy01 должен создаваться и ассоциироваться Плавающий-IP.</li>
</ol>
<p>d. &nbsp; &nbsp;На виртуальной машине Cloud-ADM создайте скрипт «configure_project_01.sh».</p>
<p>e. &nbsp; &nbsp;В качестве домашней директории используйте путь /home/altlinux/Projects/Project_01.</p>
<p>f. &nbsp; &nbsp;Скрипт должен реализовывать следующий функционал:</p>
<ol>
<li>Установку необходимых компонентов для запуска приложения (см.
Приложение Project_01) на виртуальных машинах: game01, game02, game03 в
виде Docker-контейнеров.</li>
<li>Образ приложения нужно сделать легковесным через мультистейджинг.</li>
<li>На виртуальной машине haproxy01 настройку распределения входящих запросов через haproxy.</li>
<li>Настройку доступа к просмотру собранной статистики в веб-интерфейсе с
виртуальной машины Cloud-ADM по haproxy01.dev.au.team /haproxy?stats</li>
<li>Приложение должно быть доступно &nbsp;с виртуальной машины Cloud-ADM
из веб-браузера по именам: game01.dev.au.team, game02.dev.au.team и
game03.dev.au.team на 80 порту.</li>
<li>Приложение должно быть доступно из вне по Плавающему-IP виртуальной машины haproxy01 на порту 443.</li>
<li>С виртуальной машины Cloud-ADM доступ к приложению должен быть по <a href="https://game.au.team/" class="_blanktarget">https://game.au.team</a>.</li>
<li>Проблем с сертификатом возникать недолжно.</li>
</ol>
<p>g. &nbsp; &nbsp;На виртуальной машине Cloud-ADM создайте скрипт «destroy_project_01.sh».</p>
<p>h. &nbsp; &nbsp;В качестве домашней директории используйте путь /home/altlinux/Projects/Project_01.</p>
<p>i. &nbsp; &nbsp;Скрипт должен реализовывать следующий функционал:</p>
<ol>
<li>Удалять все автоматически созданные ресурсы через скрипт deploy_project_01.sh.</li>
<li>Если скрипт destroy_project_01.sh не реализован, участник не получит
баллов за данный пункт задания, а эксперты вручную выполнят удаление
ресурсов.</li>
</ol>
<h3>Вариант реализации:</h3>
<h3>Cloud-ADM:</h3>
<h4>Все последующие действия выполняются из-под пользователя&nbsp;<strong>altlinux</strong> (не root)</h4>
<ul>
<li>Создаём директорию&nbsp;<strong>/home/altlinux/Projects/Project_01</strong>:</li>
</ul>
<pre class="language-markup"><code>mkdir -p /home/altlinux/Projects/Project_01</code></pre>
<ul>
<li>Для скрипта&nbsp;<strong>deploy_project_01.sh</strong> будет использоваться&nbsp;<strong>Terraform</strong></li>
<li>Создадим директорию&nbsp;<strong>terraform</strong> в ранее созданной директории для&nbsp;<strong>Project_01:</strong></li>
</ul>
<pre class="language-markup"><code>mkdir /home/altlinux/Projects/Project_01/terraform</code></pre>
<ul>
<li>Перейдём в директорию <strong>/home/altlinux/Projects/</strong>:</li>
</ul>
<pre class="language-markup"><code>cd /home/altlinux/Projects/</code></pre>
<ul>
<li>Создадим файл с именем <strong>cloudinit.conf</strong> (имя произвольное) и поместим в него следующее содержимое:
<ul>
<li>указав переменные окружения для работы <strong>OpenStack CLI</strong> с API облака</li>
<li>в данном конкретном примере подразумевается что у участника:
<ol>
<li>Внешний доступ к панели самообслуживания: <strong><a href="https://cyberinfra.ssa2026.region:8800/" class="_blanktarget">https://cyberinfra.ssa2026.region:8800</a></strong></li>
<li>Домен:&nbsp;<strong>Competence_SiSA</strong></li>
<li>Проект:&nbsp;<strong>Project0</strong></li>
<li>Учётная запись:&nbsp;<strong>User0</strong></li>
<li>Пароль от уч.записи:&nbsp;<strong>P@ssw0rd</strong></li>
</ol>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>export OS_AUTH_URL=<a href="https://cyberinfra.ssa2026.region:5000/v3" class="_blanktarget">https://cyberinfra.ssa2026.region:5000/v3</a>
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_TYPE=password
export OS_PROJECT_DOMAIN_NAME=Competence_SiSA
export OS_USER_DOMAIN_NAME=Competence_SiSA
export OS_PROJECT_NAME=Project0
export OS_USERNAME=User0
export OS_PASSWORD=P@ssw0rd</code></pre>
<ul id="yui_3_18_1_1_1763979499685_219">
<li id="yui_3_18_1_1_1763979499685_218">Применяем переменные окружения указанные в файле</li>
</ul>
<pre id="yui_3_18_1_1_1763979499685_215" class="language-markup"><code>source cloudinit.conf</code></pre>
<ul>
<li>Проверяем возможность взаимодействовать чере&nbsp;<strong>openstack-cli</strong> с облаком:
<ul>
<li>например, выведем список инстансов командой&nbsp;<strong>openstack --insecure server list</strong>:</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image.png"></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>&nbsp;или сетей командой <strong>openstack --insecure network list</strong>:</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(1).png"></p>
<ul>
<li>Для корректной работы с <strong>Terraform</strong>, необходимо создадать файл конфигурации зеркала</li>
<li id="yui_3_18_1_1_1763979499685_252">Файл должен иметь имя&nbsp;<strong>.terraformrc</strong> ибыть расположен в домашнем каталоге пользователя</li>
<li>Файл <strong>~/.terraformrc</strong>&nbsp;должен содержать в себе следующее:</li>
</ul>
<pre id="yui_3_18_1_1_1763979499685_255" class="language-markup"><code>provider_installation {
network_mirror {
url = "<a href="https://terraform-mirror.mcs.mail.ru/" class="_blanktarget">https://terraform-mirror.mcs.mail.ru</a>"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}</code></pre>
<ul>
<li>Перейдём в директорию <strong>Project_01/terraform/</strong>:</li>
</ul>
<pre class="language-markup"><code>cd Project_01/terraform/</code></pre>
<ul>
<li>Создадим файл&nbsp;<strong>provider.tf</strong>&nbsp;и опишем параметры для подключения к провайдеру&nbsp;<strong>openstack</strong> для работы с облаком:
<ul>
<li>в данном конкретном примере подразумевается что у участника:
<ol>
<li>Внешний доступ к панели самообслуживания: <strong><a href="https://cyberinfra.ssa2026.region:8800/" class="_blanktarget">https://cyberinfra.ssa2026.region:8800</a></strong></li>
<li>Домен:&nbsp;<strong>Competence_SiSA</strong></li>
<li>Проект:&nbsp;<strong>Project0</strong></li>
<li>Учётная запись:&nbsp;<strong>User0</strong></li>
<li>Пароль от уч.записи:&nbsp;<strong>P@ssw0rd</strong></li>
</ol>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "openstack" {
auth_url = "<a href="https://cyberinfra.ssa2026.region:5000/v3" class="_blanktarget">https://cyberinfra.ssa2026.region:5000/v3</a>"
tenant_name = "Project0"
user_name = "User0"
password = "P@ssw0rd"
insecure = true
}</code></pre>
<ul>
<li>Инициализируем текущий каталог для работы с&nbsp;<strong>terraform</strong>&nbsp;и провайдером&nbsp;<strong>openstack</strong>:</li>
</ul>
<pre class="language-markup"><code>terraform init</code></pre>
<ul>
<li>Результат успешной инициализации&nbsp;<strong>Terraform</strong> провайдера:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(2).png"></p>
<ul>
<li>Чтобы с инстанса&nbsp;<strong>Cloud-ADM</strong> был доступ по SSH (для Ansible) до всех создаваемых инстансов (средствами Terraform), будет использоваться файл <strong>cloud-init.yml</strong></li>
<li>Создадим ключевую пару:</li>
</ul>
<pre class="language-markup"><code>ssh-keygen -t rsa</code></pre>
<ul>
<li>Поместим содержимое публичного ключа&nbsp;<strong>(id_rsa.pub</strong>) в файл <strong>cloud-init.yml</strong>:</li>
</ul>
<pre class="language-markup"><code>cat ~/.ssh/id_rsa.pub &gt; cloud-init.yml</code></pre>
<ul>
<li>Откроем файл&nbsp;<strong>cloud-init.yml</strong> на редактирование и добавим в самое начало (до содержимого ключа ssh):
<ul>
<li>таким образом, на создаваемых в дальнейшем интстансах будут:<br>
<ul>
<li>создан пользователь&nbsp;<strong>altlinux</strong> с паролем&nbsp;<strong>P@ssw0rd;</strong></li>
<li>задан для суперпользователя&nbsp;<strong>root</strong> пароль&nbsp;<strong>toor</strong>;</li>
<li>передан публичный SSH-ключ&nbsp;<strong>Cloud-ADM</strong>.</li>
</ul>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>#cloud-config
chpasswd:
expire: false
users:
- {name: altlinux, password: P@ssw0rd, type: text}
- {name: root, password: toor, type: text}
ssh_pwauth: false
users:
- name: altlinux
sudo: ALL=(ALL) NOPASSWD:ALL
groups: wheel
shell: /bin/bash
ssh_authorized_keys:
- &lt;СОДЕРЖИМОЕУБЛИЧНОГО_КЛЮЧА_SSH&gt;</code></pre>
<ul>
<li>Создадим файл&nbsp;<strong>vm-game.tf</strong> и опишем конфигурацию для создаваемых инстансов&nbsp;<strong>game01, game02&nbsp;</strong>и&nbsp;<strong>game03</strong>:
<ul>
<li>для минимального написания строк кода (время на выполнения задания не резиновое, <span style="text-decoration: underline;"><strong>хардкод приветствуется</strong></span>, данный модуль не проверяет применение лучших практик для автоматизации):&nbsp;
<ol>
<li>используем цикл по счётчику&nbsp;<strong>count</strong>;</li>
<li>избавляемся от параметризации с использованием переменных (хардкодим все значения в данный файл).</li>
<li>значение для параметра&nbsp;<strong>flavor_id</strong> можно узнать используя команду <strong>openstack --insecure flavor list</strong> скопировав&nbsp;<strong>ID</strong> Типа ВМ с&nbsp;<strong>1024 RAM&nbsp;</strong>и&nbsp;<strong>1 VCPUs</strong>;</li>
<li>значение для параметра&nbsp;<strong>uuid</strong> можно узнать используя команду&nbsp;<strong>openstack --insecure image list</strong> скопировав&nbsp;<strong>ID&nbsp;</strong>образа&nbsp;<strong>alt-p11-cloud-x86_64.qcow2</strong>.</li>
</ol>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>resource "openstack_compute_instance_v2" "game" {
count = "3"
name = "game0${count.index + 1}"
flavor_id = "03bf1b85-2f5f-4ada-a07b-8b994b6dcb57"
user_data = file("cloud-init.yml")
block_device {
uuid = "827e08fa-fd3c-41cd-92ca-845bb5018478"
source_type = "image"
volume_size = "10"
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
network {
port = openstack_networking_port_v2.port_vm_game[count.index].id
}
}</code></pre>
<ul>
<li>Создадим файл <strong>vm-haproxy01.tf</strong> и опишем конфигурацию для создаваемого инстанса <strong>haproxy01</strong>:
<ul>
<li>значение для параметра&nbsp;<strong style="text-align: initial;">flavor_id</strong><span style="text-align: initial;"> можно узнать используя команду </span><strong style="text-align: initial;">openstack --insecure flavor list</strong><span style="text-align: initial;"> скопировав&nbsp;</span><strong style="text-align: initial;">ID</strong><span style="text-align: initial;"> Типа ВМ с&nbsp;</span><strong style="text-align: initial;">1024 RAM&nbsp;</strong><span style="text-align: initial;">и&nbsp;</span><strong style="text-align: initial;">1 VCPUs</strong><span style="text-align: initial;">;</span></li>
<li>значение для параметра <strong>uuid</strong> можно узнать используя команду&nbsp;<strong>openstack --insecure image list</strong> скопировав&nbsp;<strong>ID&nbsp;</strong>образа&nbsp;<strong>alt-p11-cloud-x86_64.qcow2</strong>.</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>resource "openstack_compute_instance_v2" "haproxy" {
name = "haproxy01"
flavor_id = "03bf1b85-2f5f-4ada-a07b-8b994b6dcb57"
user_data = file("cloud-init.yml")
block_device {
uuid = "827e08fa-fd3c-41cd-92ca-845bb5018478"
source_type = "image"
volume_size = "10"
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
network {
port = openstack_networking_port_v2.haproxy.id
}
}</code></pre>
<ul>
<li>Создадим файл <strong>network.tf</strong> и опишем конфигурацию сети в соответствие с топологией для <strong>Project_01</strong>:
<ul>
<li>значение для параметра&nbsp;<strong style="text-align: initial;">network_id</strong><span style="text-align: initial;"> можно узнать используя команду <strong>openstack --insecure network list</strong></span><span style="text-align: initial;">&nbsp;скопировав&nbsp;</span><strong style="text-align: initial;">ID</strong><span style="text-align: initial;"> виртуальной сети с именем&nbsp;<strong>cloud-net</strong></span><span style="text-align: initial;">;</span></li>
<li>значение для параметра&nbsp;<strong style="text-align: initial;">subnet_id</strong><span style="text-align: initial;"> можно узнать используя команду <strong>openstack --insecure subnet list</strong></span><span style="text-align: initial;">&nbsp;скопировав&nbsp;</span><strong style="text-align: initial;">ID</strong><span style="text-align: initial;"> виртуальной подсети <strong>192.168.1.0/24</strong></span><span style="text-align: initial;">;</span></li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>resource "openstack_networking_port_v2" "port_vm_game" {
count = "3"
name = "port_vm_game0${count.index + 1}"
network_id = "61845892-f9cc-4fde-962c-34b59425a74d"
admin_state_up = true
fixed_ip {
subnet_id = "13592ca4-8782-410b-9bcc-90810ccab6fe"
ip_address = "192.168.1.10${count.index + 1}"
}
}
resource "openstack_networking_port_v2" "haproxy" {
name = "port_vm_haproxy"
network_id = "61845892-f9cc-4fde-962c-34b59425a74d"
admin_state_up = true
fixed_ip {
subnet_id = "13592ca4-8782-410b-9bcc-90810ccab6fe"
ip_address = "192.168.1.100"
}
}</code></pre>
<ul>
<li>Создадим файл <strong>floatingip.tf</strong> и опишем конфигурацию Плавающего IP-адреса в соответствие с топологией для <strong>Project_01</strong>:</li>
</ul>
<pre class="language-markup"><code>resource "openstack_networking_floatingip_v2" "floatingip_haproxy" {
pool = "public"
}
resource "openstack_networking_floatingip_associate_v2" "association_haproxy" {
port_id = openstack_networking_port_v2.haproxy.id
floating_ip = openstack_networking_floatingip_v2.floatingip_haproxy.address
}</code></pre>
<ul>
<li>Выполняем проверку синтаксиса и структуры файлов конфигурации <strong>Terraform</strong>:</li>
</ul>
<pre class="language-markup"><code>terraform validate</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(3).png"></p>
<ul>
<li>Перейдём в директорию&nbsp;<strong>/home/altlinux/Projects/Project_01</strong>:</li>
</ul>
<pre class="language-markup"><code>cd /home/altlinux/Projects/Project_01</code></pre>
<ul>
<li>Создадим файл&nbsp;<strong>deploy_project_01.sh</strong> и укажем инструкции необходимые для запуска&nbsp;<strong>Terraform</strong>:</li>
</ul>
<pre class="language-markup"><code>#!/bin/bash
cd /home/$USER/Projects
source cloudinit.conf
cd /home/$USER/Projects/Project_01/terraform
terraform init
terraform apply -auto-approve
sleep 60
echo "done"</code></pre>
<ul>
<li>Выдать права на исполнение для файла <strong>deploy_project_01.sh</strong>:</li>
</ul>
<pre class="language-markup"><code>chmod +x deploy_project_01.sh</code></pre>
<ul>
<li>Запустить скрипт на исполнение:</li>
</ul>
<pre class="language-markup"><code>./deploy_project_01.sh</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(4).png"></p>
<ul>
<li>Проверить автоматически созданные инстансы в облаке:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(5).png" width="1201" height="432"></p>
<ul>
<li>Проверить Плавающий IP-адрес для инстанса&nbsp;<strong>haproxy01</strong>:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(6).png" width="1200" height="298"></p>
<ul>
<li>Поскольку IP-адресация задаётся статическая, то для удобства работы редактируем конфигурационный файл&nbsp;<strong>/etc/hosts</strong>:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(7).png"></p>
<ul>
<li>Создадим директорию&nbsp;<strong>ansible</strong> в ранее созданной директории для&nbsp;<strong>Project_01:</strong></li>
</ul>
<pre class="language-markup"><code>mkdir /home/altlinux/Projects/Project_01/ansible</code></pre>
<ul>
<li>Перейдём в директорию <strong>/home/altlinux/Projects/Project_01/ansible</strong>:</li>
</ul>
<pre class="language-markup"><code>cd /home/altlinux/Projects/Project_01/ansible</code></pre>
<ul>
<li>Создадим файл конфигурации&nbsp;<strong>ansible.cfg&nbsp;</strong>поместим в него следующее содержимое:</li>
</ul>
<pre class="language-markup"><code>[defaults]
inventory = ./inventory.yml
host_key_checking = False
callback_enabled = profile_tasks
callback_whitelist = profile_tasks</code></pre>
<ul>
<li>Создадим файл <strong>inventory.yml</strong> и опишем файл инвентаря для&nbsp;<strong>Ansible</strong>:
<ul>
<li>описав 2 группы хостов с именами&nbsp;<strong>proxys</strong> и&nbsp;<strong>games</strong>:
<ul>
<li>группа&nbsp;<strong>proxys</strong> содержит в себе инстанс <strong>haproxy01</strong>;</li>
<li>группа&nbsp;<strong>games</strong> содержит в себе инстансы&nbsp;<strong>game01, game02&nbsp;</strong>и&nbsp;<strong>game03;</strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>all:
children:
proxys:
hosts:
haproxy01:
games:
hosts:
game01:
game02:
game03:</code></pre>
<ul>
<li>Создадим директорию&nbsp;<strong>group_vars</strong>&nbsp;где будем создавать файлы с переменными для групп хостов:</li>
</ul>
<pre class="language-markup"><code>mkdir group_vars</code></pre>
<ul>
<li>Создадим файл '<strong>all.yml</strong>' в директории&nbsp;<strong>group_vars</strong>:</li>
</ul>
<pre class="language-markup"><code>---
ansible_python_interpreter: /usr/bin/python3
ansible_ssh_user: altlinux
ansible_ssh_private_key_file: ~/.ssh/id_rsa</code></pre>
<ul>
<li>Проверяем возможность&nbsp;<strong>ansible</strong>&nbsp;подключиться к инстансам описанным в инвентарном файле:</li>
</ul>
<pre class="language-markup"><code>ansible -m ping all</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(8).png"></p>
<ul>
<li>Скачиваем любым способом файлы <a href="https://disk.yandex.ru/d/uhpN6U6UYRK_Nw" target="_blank" rel="noopener">https://disk.yandex.ru/d/uhpN6U6UYRK_Nw</a> (у приложения есть README от программиста-разработчика)</li>
<li>Распаковываем архив в директорию <strong>/home/altlinux/Projects/Project_01/2048-game/</strong>:</li>
</ul>
<pre class="language-markup"><code>unzip ~/Project_01.zip -d /home/altlinux/Projects/Project_01/2048-game/</code></pre>
<ul>
<li>В директории&nbsp;<strong>/home/altlinux/Projects/Project_01/ansible</strong> создаём файл&nbsp;<strong>Dockerfile</strong>:
<ul>
<li>образ приложения нужно сделать легковесным через мультистейджинг</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>FROM node:16-alpine AS builder
WORKDIR /2048-game
COPY package*.json ./
RUN npm install --include=dev
COPY . .
RUN npm run build
EXPOSE 8080
FROM nginx:stable-alpine3.19
COPY --from=builder /2048-game/dist /usr/share/nginx/html</code></pre>
<ul>
<li>В директории&nbsp;<strong>/home/altlinux/Projects/Project_01/ansible</strong> создаём файл <strong>games_playbook.yml</strong>:
<ul>
<li>таким образом, на группе хостов&nbsp;<strong>games</strong> (на инстансах: <strong>game01, game02</strong> и&nbsp;<strong>game03</strong>) будет настроено:
<ol>
<li>Установлены пакеты: <strong>docker-engine</strong> и <strong>docker-buildx</strong>;</li>
<li>Запущена и добавлена в автозагрузку служба&nbsp;<strong>docker</strong>;</li>
<li>Скопированы все файлы с&nbsp;<strong>Cloud-ADM</strong> на удалённые хосты, необходимые для приложения;</li>
<li>Скопирован с&nbsp;<strong>Cloud-ADM</strong> на удалённые хосты файл&nbsp;<strong>Dockerfile</strong>;</li>
<li>На удалённых хостах выполнена локальная сборка образа для приложения;</li>
<li>На удалённых хостав выполнен запуск контейнеров с веб-приложением.</li>
</ol>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>---
- hosts: games
become: true
tasks:
- name: Install docker
community.general.apt_rpm:
name:
- docker-engine
- docker-buildx
state: present
update_cache: true
- name: Started and enabled docker
ansible.builtin.systemd:
name: docker
state: started
enabled: true
- name: Copying the project files
ansible.builtin.copy:
src: ../2048-game/
dest: "/home/{{ ansible_ssh_user }}/2048-game/"
- name: Copying the Dockerfile
ansible.builtin.copy:
src: ./Dockerfile
dest: "/home/{{ ansible_ssh_user }}/2048-game/"
- name: Build docker image
community.docker.docker_image_build:
name: "2048-game"
tag: latest
path: "/home/{{ ansible_ssh_user }}/2048-game/"
dockerfile: Dockerfile
- name: Start docker container
community.docker.docker_container:
name: "2048-game"
image: "2048-game"
ports: "80:80"
state: started
restart: true</code></pre>
<ul>
<li>На текущем этап можно выполнить тестовый запуск созданного playbook-а <strong>games_playbook.yml</strong>:</li>
</ul>
<pre class="language-markup"><code>ansible-playbook games_playbook.yml</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(9).png"></p>
<ul>
<li>Таким образом при обращении в браузере с&nbsp;<strong>Cloud-ADM</strong> по описанным ниже url должно открываться веб-приложение:
<ul>
<li style="font-weight: bold;"><strong>game01.dev.au.team:</strong></li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(10).png"></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="font-weight: bold;"><strong>game02.dev.au.team:</strong></li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(11).png"></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="font-weight: bold;"><strong>game03.dev.au.team:</strong></li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(12).png"></p>
<ul>
<li>В директории&nbsp;<strong>/home/altlinux/Projects/Project_01/ansible</strong> создаём директорию&nbsp;<strong>files</strong>:</li>
</ul>
<pre class="language-markup"><code>mkdir files</code></pre>
<ul>
<li>В директории&nbsp;<strong>/home/altlinux/Projects/Project_01/ansible/files</strong> создаём конфигурационный файл&nbsp;<strong>haproxy.cfg</strong>
<ul>
<li>в данном файле стандартное содержимое&nbsp;<strong>haproxy.cfg</strong> за исключением блока&nbsp;<strong>frontend</strong> и&nbsp;<strong>backend</strong> для реализации необходимого функционала
<ul>
<li>для удобства можно найти конфигаруционный файл в сети Интернет;</li>
<li>или же выполнить установку пакета&nbsp;<strong>haproxy</strong> и забрать его из директории&nbsp;<strong>/etc/haproxy/haproxy.cfg</strong> (т.к. инстанс <strong>haproxy01</strong>&nbsp;в любом случае будет удалён).</li>
</ul>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>global
log /dev/log daemon
chroot /var/lib/haproxy
pidfile /run/haproxy.pid
maxconn 4000
user _haproxy
group _haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend http_front
bind *:80
bind *:443 ssl crt /var/lib/ssl/game.pem
default_backend http_back
backend http_back
balance roundrobin
server game01 192.168.1.101:80 check
server game02 192.168.1.102:80 check
server game03 192.168.1.103:80 check
listen stats
bind :80
bind *:443 ssl crt /var/lib/ssl/game.pem
stats enable
stats uri /
stats refresh 5s
stats realm Haproxy\ Stats</code></pre>
<ul>
<li>Средствами утилиты&nbsp;<strong>openssl</strong>&nbsp;разворачиваем свой Удостоверяющий Центр сертификатов:</li>
</ul>
<pre class="language-markup"><code>openssl req -x509 -sha256 -days 3653 -newkey rsa:2048 -keyout ca.key -out ca.crt</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(13).png"></p>
<ul>
<li>Добавляем корневой сертификат в хранилище на&nbsp;<strong>Cloud-ADM</strong>:</li>
</ul>
<pre id="yui_3_18_1_1_1764049198937_42" class="language-markup"><code>sudo cp ca.crt /etc/pki/ca-trust/source/anchors/ &amp;&amp; sudo update-ca-trust</code></pre>
<ul>
<li>Перемещаем файлы сертификатов в директорию <strong>files</strong>:</li>
</ul>
<pre id="yui_3_18_1_1_1764049198937_40" class="language-markup"><code>mv ca.* files/</code></pre>
<ul>
<li>Генерируем ключи, запросы и сертификаты для веб:
<ul>
<li>Ключ:</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>openssl genrsa -out files/game.key 2048</code></pre>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Запрос:</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>openssl req -key files/game.key -new -out files/game.csr</code></pre>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Результат:</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(14).png"></p>
<ul>
<li>Файл с расширениями для сертификата:</li>
</ul>
<pre id="yui_3_18_1_1_1764049198937_45" class="language-markup"><code>cat &lt;&lt;EOF &gt; files/game.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName=@alt_names
[alt_names]
DNS.1=game.au.team
IP.1=192.168.1.100
EOF</code></pre>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Выпускаем сертификат:</li>
</ul>
</li>
</ul>
<pre id="yui_3_18_1_1_1764049198937_46" class="language-markup"><code>openssl x509 -req -CA files/ca.crt -CAkey files/ca.key -in files/game.csr -out files/game.crt -days 365 -CAcreateserial -extfile files/game.ext</code></pre>
<ul>
<li>Создаём цепочку для haproxy:</li>
</ul>
<pre class="language-markup"><code>cat files/game.key files/game.crt &gt; files/game.pem</code></pre>
<ul>
<li>В директории&nbsp;<strong>/home/altlinux/Projects/Project_01/ansible</strong> создаём файл&nbsp;<strong>proxys_playbook.yml</strong>:
<ul>
<li>таким образом, на группе хостов&nbsp;<strong>games</strong> (на инстансах: <strong>game01, game02</strong> и&nbsp;<strong>game03</strong>) будет настроено:
<ol>
<li>Установлен пакет&nbsp;<strong>haproxy</strong>;</li>
<li>Скопирован с&nbsp;<strong>Cloud-ADM</strong> на удалённый хост файл&nbsp;<strong>haproxy.cfg</strong>;</li>
<li>Скопирован с&nbsp;<strong>CloudpADM</strong> на удалённый хост файл&nbsp;<strong>game.pem</strong>;</li>
<li>Включена и добавлена в автозагрузку служба&nbsp;<strong>haproxy</strong>.</li>
</ol>
</li>
</ul>
</li>
</ul>
<pre class="language-markup"><code>---
- hosts: proxys
become: true
tasks:
- name: Install HAProxy
community.general.apt_rpm:
name: haproxy
state: present
update_cache: true
- name: Copy file 'haproxy.cfg'
ansible.builtin.copy:
src: files/haproxy.cfg
dest: /etc/haproxy/haproxy.cfg
notify:
- Restarted HAProxy
- name: Copy certificate for HAProxy
ansible.builtin.copy:
src: files/game.pem
dest: /var/lib/ssl/game.pem
notify:
- Restarted HAProxy
- name: Started and enabled HAProxy
ansible.builtin.systemd:
name: haproxy
state: restarted
enabled: true
handlers:
- name: Restarted HAProxy
ansible.builtin.systemd:
name: haproxy
state: restarted</code></pre>
<ul>
<li>На текущем этап можно выполнить тестовый запуск созданного playbook-а <strong>proxys_playbook.yml</strong>:</li>
</ul>
<pre class="language-markup"><code>ansible-playbook proxys_playbook.yml</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(15).png"></p>
<ul>
<li>Таким образом при обращении в браузере с&nbsp;<strong>Cloud-ADM</strong> по описанным ниже url должно открываться веб-приложение:
<ul>
<li><strong><a href="https://game.au.team/" class="_blanktarget">https://game.au.team</a></strong> (в файле /etc/hosts должна быть добавлена запись):</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(16).png"></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>haproxy01.dev.au.team /haproxy?stats</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(17).png" width="1199" height="734"></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Плавающий IP-адрес:</li>
</ul>
</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(18).png" width="1200" height="338"></p>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(19).png"></p>
<ul>
<li>Перейдём в директорию&nbsp;<strong>/home/altlinux/Projects/Project_01</strong>:</li>
</ul>
<pre class="language-markup"><code>cd /home/altlinux/Projects/Project_01</code></pre>
<ul>
<li>Создадим файл <strong>configure_project_01.sh</strong> и укажем инструкции необходимые для запуска&nbsp;<strong>Ansible</strong>:</li>
</ul>
<pre class="language-markup"><code>#!/bin/bash
export PATH=/home/altlinux/.local/bin:$PATH
cd /home/$USER/Projects/Project_01/ansible
sleep 10
ansible-playbook games_playbook.yml
sleep 5
ansible-playbook proxys_playbook.yml</code></pre>
<ul>
<li>Выдать права на исполнение для файла <strong>configure_project_01</strong><strong>.sh</strong>:</li>
</ul>
<pre class="language-markup"><code>chmod +x configure_project_01.sh</code></pre>
<ul>
<li>Запустить скрипт на исполнение:</li>
</ul>
<pre class="language-markup"><code>./configure_project_01.sh</code></pre>
<ul>
<li>Создадим файл <strong>destroy_project_01.sh</strong> и укажем инструкции необходимые для запуска&nbsp;<strong>Ansible</strong>:</li>
</ul>
<pre class="language-markup"><code>#!/bin/bash
cd /home/$USER/Projects
source cloudinit.conf
cd /home/$USER/Projects/Project_01/terraform
terraform destroy -auto-approve
rm -f ~/.ssh/known_hosts
echo "done"</code></pre>
<ul>
<li>Выдать права на исполнение для файла <strong>destroy_project_01.sh</strong>:</li>
</ul>
<pre class="language-markup"><code>chmod +x destroy_project_01.sh</code></pre>
<ul>
<li>Запустить скрипт на исполнение:</li>
</ul>
<pre class="language-markup"><code>./destroy_project_01.sh</code></pre>
<ul>
<li>Результат:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(20).png"></p>
<ul>
<li>Таким образом, структура для&nbsp;<strong>Project01</strong> получилась следующая:</li>
</ul>
<p><img src="REG26_%202.%20Project_01%20_%20sysahelper_files/image%20(22).png"></p></div></div><div class="modified">Последнее изменение: вторник, 2 декабря 2025, 14:24</div></div>
</section>
</div>
</div>
</div>
<div class="moove-container-fluid p-0 mb-4">
<div class="card activity-navigation mdl-bottom">
<div class="card-body">
<div class="row">
<div class="col-md-4"> <div id="prev-activity">
<div class="larrow">
<i class="icon-arrow-left"></i>
</div>
<div class="text">
<span class="nav-guide">
Предыдущий элемент курса
</span>
<a href="https://sysahelper.ru/mod/page/view.php?id=784&amp;forceview=1" id="prev-activity-link" class="btn btn-link">1.3. Установка Ansible на Cloud-ADM</a>
</div>
</div>
</div>
<div class="col-md-4"> <div class="mdl-align">
<div class="urlselect">
<form method="post" action="https://sysahelper.ru/course/jumpto.php" class="form-inline" id="url_select_f69fc91d055d7c4">
<input type="hidden" name="sesskey" value="I78ejZljGV">
<label for="jump-to-activity" class="sr-only">
Перейти на...
</label>
<select id="jump-to-activity" class="custom-select urlselect" name="jump">
<option value="" selected="selected">Перейти на...</option>
<option value="/mod/folder/view.php?id=701&amp;forceview=1">Конкурсная документация (в исходном виде)</option>
<option value="/mod/url/view.php?id=778&amp;forceview=1">Текст задание</option>
<option value="/mod/page/view.php?id=704&amp;forceview=1">Виртуальный стенд</option>
<option value="/mod/page/view.php?id=719&amp;forceview=1">Используемая таблица адресации</option>
<option value="/mod/page/view.php?id=705&amp;forceview=1">Настройка виртуальной машины ISP</option>
<option value="/mod/page/view.php?id=720&amp;forceview=1">1. Настройка имён и IP-адресации на устройствах&nbsp;rtr-cod и rtr-a</option>
<option value="/mod/page/view.php?id=724&amp;forceview=1">2. Подход к настройке fw-cod</option>
<option value="/mod/page/view.php?id=722&amp;forceview=1">3. Настройка маршрутизации BGP на rtr-cod</option>
<option value="/mod/page/view.php?id=721&amp;forceview=1">4. Настройка туннелей между офисом «а» и «cod»</option>
<option value="/mod/page/view.php?id=725&amp;forceview=1">5. Настройка доступа в Интернет</option>
<option value="/mod/page/view.php?id=726&amp;forceview=1">6. Настройка динамической маршрутизации между офисом «a» и «cod»</option>
<option value="/mod/page/view.php?id=727&amp;forceview=1">7. Настройка коммутации между sw1-a и sw2-a</option>
<option value="/mod/page/view.php?id=728&amp;forceview=1">8. Настройка доступа к веб-интерфейсу fw-cod и лицензирование</option>
<option value="/mod/page/view.php?id=729&amp;forceview=1">9. Создание интерфейсов типа VLAN на fw-cod для маршутизации между VLAN</option>
<option value="/mod/page/view.php?id=730&amp;forceview=1">10. Настройка коммутации между sw1-cod и sw2-cod</option>
<option value="/mod/page/view.php?id=731&amp;forceview=1">11. Настройка имён и IP-адресов на всех остальных устройствах</option>
<option value="/mod/page/view.php?id=732&amp;forceview=1">12. Настройка административного доступа (RADIUS)</option>
<option value="/mod/page/view.php?id=733&amp;forceview=1">13. Настройка синхронизации времени между сетевыми устройствами</option>
<option value="/mod/page/view.php?id=734&amp;forceview=1">14. Настройка службы доменных имен в COD-е</option>
<option value="/mod/page/view.php?id=735&amp;forceview=1">15. Развёртывание контроллера домена на базе SambaAD</option>
<option value="/mod/page/view.php?id=736&amp;forceview=1">16. Настройка службы доменных имен в OFFICE</option>
<option value="/mod/page/view.php?id=737&amp;forceview=1">17. Настройка центра сертификации</option>
<option value="/mod/page/view.php?id=772&amp;forceview=1">18. Настройка сервера баз данных</option>
<option value="/mod/page/view.php?id=773&amp;forceview=1">19. Настройка устройства хранения данных (iSCSI)</option>
<option value="/mod/page/view.php?id=774&amp;forceview=1">20. Настройка устройства хранения данных (LVM)</option>
<option value="/mod/page/view.php?id=775&amp;forceview=1">21. Настройка устройства хранения данных (NFS)</option>
<option value="/mod/page/view.php?id=776&amp;forceview=1">22. Настройка системы мониторинга</option>
<option value="/mod/page/view.php?id=777&amp;forceview=1">23. Настройка IP телефонии</option>
<option value="/mod/page/view.php?id=779&amp;forceview=1">1. Подготовка машины Cloud-ADM</option>
<option value="/mod/page/view.php?id=782&amp;forceview=1">1.1. Установка Terraform на Cloud-ADM</option>
<option value="/mod/page/view.php?id=783&amp;forceview=1">1.2. Установка OpenStack CLI на Cloud-ADM</option>
<option value="/mod/page/view.php?id=784&amp;forceview=1">1.3. Установка Ansible на Cloud-ADM</option>
<option value="/mod/page/view.php?id=781&amp;forceview=1">3. Project_02</option>
<option value="/mod/page/view.php?id=785&amp;forceview=1">3. Project_03</option>
</select>
<noscript>
<input type="submit" class="btn btn-secondary ml-1" value="Применить">
</noscript>
</form>
</div>
</div>
</div>
<div class="col-md-4"> <div id="next-activity">
<div class="text">
<span class="nav-guide">
Следующий элемент курса
</span>
<a href="https://sysahelper.ru/mod/page/view.php?id=781&amp;forceview=1" id="next-activity-link" class="btn btn-link">3. Project_02</a>
</div>
<div class="rarrow">
<i class="icon-arrow-right"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer id="page-footer">
<div class="moove-container-fluid footer-columns">
<div class="row">
<div class="col-md-4 column-left">
<div class="contact">
<h3 class="footer-title">Обратная связь</h3>
<ul>
</ul>
</div>
<div class="socialnetworks">
<h3 class="footer-title">Подпишитесь</h3>
<ul class="mb-0">
</ul>
</div>
</div>
<div class="col-md-4 column-center">
<div class="logininfo">Вы используете гостевой доступ (<a href="https://sysahelper.ru/login/index.php">Вход</a>)</div>
<div class="tool_dataprivacy"><a href="https://sysahelper.ru/admin/tool/dataprivacy/summary.php">Сводка хранения данных</a></div>
<div class="tool_usertours-resettourcontainer"></div>
</div>
<div class="col-md-4 column-right">
</div>
</div>
</div>
<div class="footer-content-debugging footer-dark bg-dark text-light">
<div class="moove-container-fluid footer-dark-inner">
</div>
</div>
<div data-region="footer-container-popover">
<button class="btn btn-icon bg-secondary icon-no-margin btn-footer-popover" data-action="footer-popover" aria-label="Показать нижний колонтитул" data-original-title="" title="">
<i class="icon fa fa-question fa-fw " aria-hidden="true"></i>
</button>
</div>
<div class="footer-content-popover container" data-region="footer-content-popover">
<div class="footer-section p-3">
<div>На платформе <a href="https://moodle.com/">Moodle</a></div>
</div>
</div>
<div class="copyright">
<div class="madeby">
<p>Тема оформления сайта разработана</p>
<a href="https://conecti.me/">
<img src="REG26_%202.%20Project_01%20_%20sysahelper_files/logo_conectime.svg" alt="Conecti.me" style="height: 40px;">
</a>
</div>
</div>
</footer>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(96198090, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/96198090" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><script>
//<![CDATA[
var require = {
baseUrl : 'https://sysahelper.ru/lib/requirejs.php/1703880200/',
// We only support AMD modules with an explicit define() statement.
enforceDefine: true,
skipDataMain: true,
waitSeconds : 0,
paths: {
jquery: 'https://sysahelper.ru/lib/javascript.php/1703880200/lib/jquery/jquery-3.7.1.min',
jqueryui: 'https://sysahelper.ru/lib/javascript.php/1703880200/lib/jquery/ui-1.13.2/jquery-ui.min',
jqueryprivate: 'https://sysahelper.ru/lib/javascript.php/1703880200/lib/requirejs/jquery-private'
},
// Custom jquery config map.
map: {
// '*' means all modules will get 'jqueryprivate'
// for their 'jquery' dependency.
'*': { jquery: 'jqueryprivate' },
// Stub module for 'process'. This is a workaround for a bug in MathJax (see MDL-60458).
'*': { process: 'core/first' },
// 'jquery-private' wants the real jQuery module
// though. If this line was not here, there would
// be an unresolvable cyclic dependency.
jqueryprivate: { jquery: 'jquery' }
}
};
//]]>
</script>
<script src="REG26_%202.%20Project_01%20_%20sysahelper_files/javascript_004.php"></script>
<script>
//<![CDATA[
M.util.js_pending("core/first");
require(['core/first'], function() {
require(['core/prefetch'])
;
M.util.js_pending('filter_mathjaxloader/loader'); require(['filter_mathjaxloader/loader'], function(amd) {amd.configure({"mathjaxconfig":"\nMathJax.Hub.Config({\n config: [\"Accessible.js\", \"Safe.js\"],\n errorSettings: { message: [\"!\"] },\n skipStartupTypeset: true,\n messageStyle: \"none\"\n});\n","lang":"ru"}); M.util.js_complete('filter_mathjaxloader/loader');});;
require(["media_videojs/loader"], function(loader) {
loader.setUp('ru');
});;
M.util.js_pending('core_courseformat/courseeditor'); require(['core_courseformat/courseeditor'], function(amd) {amd.setViewFormat("43", {"editing":false,"supportscomponents":true,"statekey":"1772597507_1778159930","overriddenStrings":[{"component":"format_topics","key":"sectionavailability_title"},{"component":"format_topics","key":"sectiondelete_title"},{"component":"format_topics","key":"sectionsdelete_title"},{"component":"format_topics","key":"sectionsdelete_info"},{"component":"format_topics","key":"sectionmove_title"},{"component":"format_topics","key":"sectionsavailability_title"},{"component":"format_topics","key":"sectionsmove_title"},{"component":"format_topics","key":"sectionsmove_info"},{"component":"format_topics","key":"selectsection"}]}); M.util.js_complete('core_courseformat/courseeditor');});;
require(['core_courseformat/local/courseindex/placeholder'], function(component) {
component.init('course-index-placeholder');
});
;
require(['core_courseformat/local/courseindex/drawer'], function(component) {
component.init('courseindex');
});
;
M.util.js_pending('core_courseformat/local/content/activity_header'); require(['core_courseformat/local/content/activity_header'], function(amd) {amd.init(); M.util.js_complete('core_courseformat/local/content/activity_header');});;
require(['theme_moove/accessibilitybar'], function(AccessibilityBar) {
AccessibilityBar.init();
});
;
require(['core/moremenu'], function(moremenu) {
moremenu(document.querySelector('#moremenu-69fc91d055665-navbar-nav'));
});
;
require(
[
'jquery',
],
function(
$
) {
var uniqid = "69fc91d056e2e69fc91d055d7c2";
var container = $('#searchinput-navbar-' + uniqid);
var opensearch = container.find('[data-action="opensearch"]');
var input = container.find('[data-region="input"]');
var submit = container.find('[data-action="submit"]');
submit.on('click', function(e) {
if (input.val() === '') {
e.preventDefault();
}
});
container.on('hidden.bs.collapse', function() {
opensearch.removeClass('d-none');
input.val('');
});
container.on('show.bs.collapse', function() {
opensearch.addClass('d-none');
});
container.on('shown.bs.collapse', function() {
input.focus();
});
});
;
require(
[
'jquery',
],
function(
$
) {
var uniqid = "69fc91d05729169fc91d055d7c3";
var container = $('#searchinput-navbar-' + uniqid);
var opensearch = container.find('[data-action="opensearch"]');
var input = container.find('[data-region="input"]');
var submit = container.find('[data-action="submit"]');
submit.on('click', function(e) {
if (input.val() === '') {
e.preventDefault();
}
});
container.on('hidden.bs.collapse', function() {
opensearch.removeClass('d-none');
input.val('');
});
container.on('show.bs.collapse', function() {
opensearch.addClass('d-none');
});
container.on('shown.bs.collapse', function() {
input.focus();
});
});
;
require(['core/usermenu', 'theme_moove/accessibilitysettings'], function(UserMenu, AccessibilitySettings) {
UserMenu.init();
AccessibilitySettings.init();
});
;
require(['theme_boost/drawers']);
;
require(['theme_boost/drawers']);
;
require(['jquery', 'core/custom_interaction_events'], function($, CustomEvents) {
CustomEvents.define('#jump-to-activity', [CustomEvents.events.accessibleChange]);
$('#jump-to-activity').on(CustomEvents.events.accessibleChange, function() {
if ($(this).val()) {
$('#url_select_f69fc91d055d7c4').submit();
}
});
});
;
require(['theme_boost/footer-popover'], function(FooterPopover) {
FooterPopover.init();
});
;
M.util.js_pending('theme_boost/loader');
require(['theme_boost/loader', 'theme_boost/drawer'], function(Loader, Drawer) {
Drawer.init();
M.util.js_complete('theme_boost/loader');
});
;
M.util.js_pending('core/notification'); require(['core/notification'], function(amd) {amd.init(1160, []); M.util.js_complete('core/notification');});;
M.util.js_pending('core/log'); require(['core/log'], function(amd) {amd.setConfig({"level":"warn"}); M.util.js_complete('core/log');});;
M.util.js_pending('core/page_global'); require(['core/page_global'], function(amd) {amd.init(); M.util.js_complete('core/page_global');});;
M.util.js_pending('core/utility'); require(['core/utility'], function(amd) {M.util.js_complete('core/utility');});
M.util.js_complete("core/first");
});
//]]>
</script>
<script src="REG26_%202.%20Project_01%20_%20sysahelper_files/MathJax.js"></script>
<script>
//<![CDATA[
M.str = {"moodle":{"lastmodified":"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435","name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435","error":"\u041e\u0448\u0438\u0431\u043a\u0430","info":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","yes":"\u0414\u0430","no":"\u041d\u0435\u0442","cancel":"\u041e\u0442\u043c\u0435\u043d\u0430","confirm":"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c","areyousure":"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b?","closebuttontitle":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","unknownerror":"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430","file":"\u0424\u0430\u0439\u043b","url":"URL","collapseall":"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451","expandall":"\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451"},"repository":{"type":"\u0422\u0438\u043f","size":"\u0420\u0430\u0437\u043c\u0435\u0440","invalidjson":"\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 JSON","nofilesattached":"\u041d\u0435 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d \u043d\u0438 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b","filepicker":"\u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430","logout":"\u0412\u044b\u0445\u043e\u0434","nofilesavailable":"\u041d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430","norepositoriesavailable":"\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u0412\u0430\u0448\u0438\u0445 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.","fileexistsdialogheader":"\u0424\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u043d","fileexistsdialog_editor":"\u0424\u0430\u0439\u043b \u0441 \u044d\u0442\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0436\u0435 \u0431\u044b\u043b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443","fileexistsdialog_filemanager":"\u0424\u0430\u0439\u043b \u0441 \u044d\u0442\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0436\u0435 \u0431\u044b\u043b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d","renameto":"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0432 \u00ab{$a}\u00bb","referencesexist":"\u041d\u0430 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438: {$a}","select":"\u0412\u044b\u0431\u0440\u0430\u0442\u044c"},"admin":{"confirmdeletecomments":"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438?","confirmation":"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435"},"debug":{"debuginfo":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043a\u0435","line":"\u0421\u0442\u0440\u043e\u043a\u0430","stacktrace":"\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0442\u0435\u043a\u0430"},"langconfig":{"labelsep":":"}};
//]]>
</script>
<script>
//<![CDATA[
(function() {M.util.help_popups.setup(Y);
M.util.js_pending('random69fc91d055d7c5'); Y.on('domready', function() { M.util.js_complete("init"); M.util.js_complete('random69fc91d055d7c5'); });
})();
//]]>
</script>
</div>
</div><div id="yui3-css-stamp" style="position: absolute !important; visibility: hidden !important" class=""></div>
<div></div></body></html>