Министерство цифрового развития, связи и массовых коммуникаций Федеральное государственное образовательное учреждение высшего образования «Поволжский государственный университет телекоммуникаций и информатики» Кафедра Информационные системы и технологии (наименование кафедры) «УТВЕРЖДАЮ» Заведующий кафедрой ИСТ наименование кафедры / « подпись, Фамилия И.О. » 201 / г. ЗАДАНИЕ СТУДЕНТАМ ДЛЯ КУРСОВОЙ РАБОТЫ По учебной дисциплине «Платформы и программные среды разработки информационных систем» (наименование учебной дисциплины) Тема: «Проектирование и разработка информационной системы с помощью современных платформ и средств проектирования» (Ubuntu) (наименование темы) Самара 2021 *В методических указаниях не обращаем внимание на то, что выделено жёлтым цветом. 2 Содержание 1. Цель курсовой работы ...........................................................................................................4 2. Задание....................................................................................................................................4 2.1. Темы для курсовой работы ...............................................................................................5 2.2. Отчетность о выполнении курсовой работы ..................................................................5 2.3. Структура курсовой работы .............................................................................................6 3. Требования к оформлению курсовой работы .....................................................................6 4. Список рекомендуемой литературы ....................................................................................7 4.1 Основная литература .........................................................................................................7 4.2 Дополнительная литература .............................................................................................7 4.3 Интернет-ресурсы ..............................................................................................................7 5. Методические указания к выполнению курсовой работы ................................................8 5.1 Разработка технического задания ..................................................................................10 5.2 Пример выполнения курсовой работы ..........................................................................12 Итог проделанной работы ..........................................................................................................59 Глоссарий .....................................................................................................................................60 Приложение 1...............................................................................................................................61 Приложение 2...............................................................................................................................64 Приложение 3...............................................................................................................................67 3 1. Цель курсовой работы Цель выполнения курсовой работы состоит в повышении уровня знаний студентов в области информационных технологий и приобретении навыков по выбору платформ и программных сред разработки информационных систем, разработке информационной системы с помощью современных платформ и средств проектирования, развертыванию системы, связи базы данных с клиентским приложением посредством Kubernetes Изучение основных принципов работы реляционной базы данных, языка запросов SQL и интеграции базы данных с Python приложением. 2. Задание Разработать информационную систему в заданной предметной области по варианту, к которой предъявляются указанные ниже требования. Обеспечение целостности хранения данных Наличие простого и удобного пользовательского интерфейса Обеспечение функционала по доступу к информации, необходимой для ведения основной деятельности Предоставление инструментов, позволяющих проводить анализ доступных данных и предоставлять отчетность Среда разработки – PyCharm. Развернуть систему, а именно связать базу данных с клиентским приложением посредством Kubernetes в заданной предметной области по варианту, к которой предъявляются указанные ниже требования. Для создания информационной системы необходимо выполнить следующее: 1) Разработать перечень и структуру хранимой информации; 2) Выделить возможные информационные подсистемы и установить связи между ними; 3) Разработать логическую структуру базы данных; 4) Разработать общие для системы принципы формирования интерфейса пользователя; 5) Изучить основы HTTP и HTML и разработать веб-приложения на языке Python. 6) Установить Docker. Создать образ и запустить контейнер. 7) Создать базу данных. Подключиться к базе данных из Phyton-приложения. 8) Запустить одноузловый Kubernetes-кластер с помощью Minikube. 9) Запустить многоузловый кластер с помощью Kubeadm. 10) Развернуть контейнеры с помощью Kubectl, YAM. 11) Связать базы данных с клиентским приложением посредством Kubernetes. По окончанию выполнения работы должны быть получены следующие результаты. Построена концептуальная модель хранимой информации Сформирована логическая структура информации Реализована физическая структура базы данных 4 Реализован интерфейс пользователя для работы с модулями учёта информации (о подразделениях и руководящем составе, направлениях деятельности, предоставляемых услугах и т.д.) Описаны функциональные возможности аналитического модуля, модуля отчетности и т.д. Реализована информационная система в среде разработки PyCharm, со связанной базой данных с клиентским приложением посредством Kubernetes. 2.1. Темы для курсовой работы Одна из приведенных ниже тем курсовых работ выбирается студентом и согласовывается с преподавателем: № варианта 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Тема Проектирование и разработка ИС гостиничного бизнеса. Проектирование и разработка ИС туристического агентства. Проектирование и разработка ИС для библиотеки. Проектирование и разработка ИС для больницы. Проектирование и разработка ИС для учебной части колледжа. Проектирование и разработка ИС для университета ПГУТИ. Проектирование и разработка ИС для автомастерской. Проектирование и разработка ИС для авиатранспорта. Проектирование и разработка ИС для пункта видеопроката. Проектирование и разработка ИС для приемной комиссии. Проектирование и разработка ИС для регистратуры в поликлинике. Проектирование и разработка ИС для автостоянки. Проектирование и разработка ИС для автопроката. Проектирование и разработка ИС для музыкальной школы. Проектирование и разработка ИС для спортивной школы. Проектирование и разработка ИС для магазина одежды. Проектирование и разработка ИС для салона красоты. Проектирование и разработка ИС для книжного магазина. Проектирование и разработка ИС для супермаркета. Проектирование и разработка ИС для агентства недвижимости. Проектирование и разработка ИС для Ж/Д вокзала. Проектирование и разработка ИС для аптечного сервиса Проектирование и разработка ИС для ресторанного бизнеса Проектирование и разработка ИС сервисного центра Тема, предложенная студентом 2.2. Отчетность о выполнении курсовой работы Отчетность производится поэтапно во время консультаций с определением процента выполнения курсовой работы на каждом этапе. Форма представления выполненной курсовой работы – текстовый и графический материал в отпечатанном и 5 подшитом виде. Электронная копия предоставляется по указанию преподавателя во время защиты курсовой работы. Критерии оценки уровня курсовых работ Оценка содержания курсовой работы; Оценка оформления работы; Оценка устного представления курсовой работы. Организация работы и этапы Выбор и утверждение темы. Обзор теоретического материала. Приобретение практических навыков работы с программным обеспечением, описываемым в работе. Оформление курсовой работы и её представление. Защита курсовой работы 2.3. Структура курсовой работы Структура курсовой работы зависит от типа задания и индивидуального стиля работы студента. Однако, все работы должны обладать некоторыми общими чертами и включать следующие основные элементы: Титульный лист Лист рецензии Содержание Введение Теоретическая часть Практическая часть Заключение Список источников информации Приложения 3. Требования к оформлению курсовой работы Текстовый материал должен быть подготовлен с использованием MS Word. Текст должен быть набран с учетом следующих параметров: 1. шрифт Times New Roman; 2. размер шрифта заголовков – 14, основного текста - 12; 3. межстрочный интервал - 1; 4. межбуквенный интервал - Normal; 5. поля: левое – 2.5, правое – 2, верхнее и нижнее – 1.5; 6. выравнивание – по ширине страницы; 7. нумерация страниц – в нижем правом углу; 8. в верхнем колонтитуле указать название работы, Ф.И.О. автора; 9. образец оформления титульного листа приведен в приложении 1. Объем работы не менее 20 страниц. Использование электронного оглавления. Рисунки должны быть пронумерованы и подписаны. 6 Список источников информации должен содержать как список литературы, так и список ресурсов Интернет и оформлен по требованиям ГОСТ. Презентационный материал должен быть подготовлен с использованием MS Power Point. Презентация должна быть выдержана в одном стиле, содержать не более 10 слайдов и отстроена по времени. Устное выступление не должно превышать 7 минут. При обнаружении плагиата курсовая работа рассматриваться и оцениваться не будет! 4. Список рекомендуемой литературы 4.1 Основная литература 1. Современные информационные технологии [Электронный ресурс] : учеб. пособие по дисциплине "Информатика" для студентов первого курса специальностей 10.03.01 и 10.05.02. / А. П. Алексеев [и др.] ; ПГУТИ, Каф. ИВТ. - Самара : ИНУЛ ПГУТИ, 2016. - Загл. с титул.экрана. - Электрон.версия печ. издания 2016 г. - Режим доступа: http://elib.psuti.ru/Alekseev_Vanutin_Sovremennye_informacionnye_tehnologii.pdf. 2. Алексеев, А. П. Современные информационные технологии [Электронный ресурс] : метод.указания по вып. лаб. работы / Алексеев А. П. ; ПГУТИ, Каф. ИВТ. Электрон.текстовые дан. (1 файл : 2,31 Мб). - Самара : ИНУЛ ПГУТИ, 2015. - 56 с. - Загл. с титул.экрана. - Электрон.версия печ. издания 2013 г. - Режим доступа: http://elib.psuti.ru/Alekseev_Sovremennye_informacionnye_tehnologii.pdf. 4.2 Дополнительная литература 1. Бедняк, С. Г. Теоретические основы прикладных информационных технологий обработки и оформления полученных результатов исследований [Электронный ресурс] : учебное пособие / С. Г. Бедняк, О. И. Захарова ; ПГУТИ, Каф. ИСТ. Самара : ПГУТИ, 2017. - Загл. с титул.экрана. - Режим доступа: http://elib.psuti.ru/Bednyak_Zaharova_Teoreticheskie_osnovy_prikladnyh_informacionnyh_teh nologij_obrabotki_i_oformleniya_rezultatov_issledovani.pdf. 2. Романов А.Н. Информационные системы в экономике [Теxt] : учебное пособие для вузов / ред.: А. Н. Романов, Б. Е. Одинцов. - 2-е изд., доп. и перераб. - М. : Вуз. учебник, 2008. - 411 с. 3. Сергеев В.И. Логистика: информационные системы и технологии [Теxt] : учебно-практ. пособие / В. И. Сергеев, М. Н. Григорьев, С. А. Уваров. - М. : Альфа-Пресс, 2008. - 608 с. 4. Алексеев А.П. Введение в Web-дизайн [Теxt] : учеб. пособие для вузов / А. П. Алексеев. - М. : Солон-Пресс, 2008. - 192 с. 4.3 Интернет-ресурсы 1. Компьютерные технологии [Электронный ресурс]: Лабораторный практикум/. – Воронеж: Воронежский государственный архитектурно-строительный университет, ЭБС АСВ, 2015. – 147 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=55002. 7 2. Королев В.Т. Математика и информатика. MATHCAD [Электронный ресурс]: Учебно-методические материалы для выполнения практических занятий и самостотельной работы студентами специалитета/ Королев В.Т. – М.: Российский государственный университет правосудия, 2015. – 62 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=45224. Персова М.Г. Современные компьютерные технологии [Электронный ресурс]: Конспект лекций/ Персова М.Г., Соловейчик Ю.Г., Домников П.А. – Новосибирск: Новосибирский государственный технический университет, 2014. – 80 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=45025. 3. Назаркин О.А. Разработка графического пользовательского интерфейса в соответствии с паттерном Model-View-Viewmodel на платформе WindowsPresentationFoundation. Основные средства WPF [Электронный ресурс]: Учебное пособие по дисциплине «Проектирование человеко-машинного интерфейса»/ Назаркин О.А. –Липецк: Липецкий государственный технический университет, ЭБС АСВ, 2014. – 61 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=55141. 4. Канивец Е.К. Информационные технологии в профессиональной деятельности [Электронный ресурс]: Курс лекций/ Канивец Е.К. – Оренбург: Оренбургский государственный университет, ЭБС АСВ, 2015. – 108 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=54115. 5. Основы информационных технологий [Электронный ресурс]/ С.В. Назаров [и др.]. – М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2016. – 530 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=52159. 6. Введение в программные системы и их разработку [Электронный ресурс]/ С.В. Назаров [и др.]. – М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2016. – 649 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=52145. 7. Клочко И.А. Информационные технологии в профессиональной деятельности [Электронный ресурс]: Учебное пособие для СПО/ Клочко И.А. – Саратов: Профобразование, Ай Пи Эр Медиа, 2019. – 292 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=80327. 8. Информационные системы и технологии в экономике и управлении. Проектирование информационных систем [Электронный ресурс]: Учебное пособие/ Е.В. Акимова [и др.]. – Саратов: Вузовское образование, 2016. – 178 c. – Режим доступа: http://www.bibliocomplectator.ru/book/?id=47671. 5. Методические указания к выполнению курсовой работы Под средствами проектирования информационных систем (СП ИС) будем понимать комплекс инструментальных средств, обеспечивающих в рамках выбранной методологии проектирования поддержку полного жизненного цикла (ЖЦ) ИС, который включает в себя: 1. планирование и анализ 2. проектирование 3. реализацию и внедрение 4. эксплуатацию 8 Понятие «цикл» связано с тем, что как правило, начало эксплуатации ИС совпадает с планированием и анализом обстановки для создания следующей ИС (результаты опытной эксплуатации являются исходными данными для обоснования и выбора параметров новой ИС). Тенденции развития современных информационных технологий приводят к постоянному возрастанию сложности ИС, создаваемых в различных областях экономики. Современные сложные ИС и проекты, обеспечивающие их создание, характеризуются, как правило, следующими особенностями: 1. сложность предметной области; 2. наличие совокупности тесно взаимодействующих компонентов - подсистем, имеющих свои локальные задачи и цели функционирования; 3. иерархическая структура взаимосвязей компонентов; 4. отсутствие прямых аналогов, ограничивающее возможность использования какихлибо типовых проектных решений и прикладных систем; 5. необходимость достаточно длительного сосуществования старых приложений и вновь разрабатываемых БД и приложений; 6. наличие потребности как в традиционных приложениях, связанных с обработкой транзакций и решением регламентных задач 7. поддержка одновременной работы достаточно большого количества локальных сетей, связываемых в глобальную сеть масштаба предприятия, и территориально удаленных пользователей; 8. функционирование в неоднородной операционной среде на нескольких вычислительных платформах. Жизненный цикл ИС – непрерывный процесс, который начинается с момента принятия решения о необходимости создания системы и заканчивается в момент ее изъятия из эксплуатации. Стратегия проектирования ИС определяется использованием соответствующей модели жизненного цикла, определяющей последовательность стадий проектирования и выполняемых в них процессов. Согласно ГОСТ 34.601-90 «Автоматизированные системы. Стадии создания» выделяют следующие основные стадии создания и этапы разработки автоматизированной системы (АС): Рисунок 1 9 5.1 Разработка технического задания Техническое задание представляет собой документ, в котором сформулированы основные цели разработки, требования к программному продукту, определены сроки и этапы разработки и регламентирован процесс приемо-сдаточных испытаний. В разработке технического задания участвуют как представители заказчика, так и представители исполнителя. В основе этого документа лежат исходные требования заказчика, анализ передовых достижений техники, результаты выполнения научно-исследовательских работ, предпроектных исследований, научного прогнозирования и т. п. Разработка технического задания выполняется в следующей последовательности. Прежде всего, устанавливают набор выполняемых функций, а также перечень и характеристики исходных данных. Затем определяют перечень результатов, их характеристики и способы представления. Далее уточняют среду функционирования программного обеспечения: конкретную комплектацию и параметры технических средств, версию используемой операционной системы и, возможно, версии и параметры другого установленного программного обеспечения, с которым предстоит взаимодействовать будущему программному продукту. В случаях, когда разрабатываемое программное обеспечение собирает и хранит некоторую информацию или включается в управление каким-либо техническим процессом, необходимо также четко регламентировать действия программы в случае сбоев оборудования и энергоснабжения. 1. Общие положения 1.1. Техническое задание оформляют в соответствии с ГОСТ 19.106—78 на листах формата А4 и A3 по ГОСТ 2.301—68, как правило, без заполнения полей листа. Номера листов (страниц) проставляют в верхней части листа над текстом. 1.2. Лист утверждения и титульный лист оформляют в соответствии с ГОСТ 19.104—78. Информационную часть (аннотацию и содержание), лист регистрации изменений допускается в документ не включать. 1.3. Для внесения изменений и дополнений в техническое задние на последующих стадиях разработки программы или программного изделия выпускают дополнение к нему. Согласование и утверждение дополнения к техническому заданию проводят в том же порядке, который установлен для технического задания. 1.4. Техническое задание должно содержать следующие разделы: введение; наименование и область применения; основание для разработки; назначение разработки; технические требования к программе или программному изделию; технико-экономические показатели; стадии и этапы разработки; порядок контроля и приемки; приложения. В зависимости от особенностей программы или программного изделия допускается уточнять содержание разделов, вводить новые разделы или объединять отдельные из них. При необходимости допускается в техническое задание включать приложения. 10 2. Содержание разделов 2.1. Введение должно включать краткую характеристику области применения программы или программного продукта, а также объекта (например, системы), в котором предполагается их использовать. Основное назначение введения — продемонстрировать актуальность данной разработки и показать, какое место эта разработка занимает в ряду подобных. 2.2. В разделе «Наименование и область применения» указывают наименование, краткую характеристику области применения программы или программного изделия и объекта, в котором используют программу или программное изделие. 2.3. В разделе «Основание для разработки» должны быть указаны: документ (документы), на основании которых ведется разработка. Таким документом может служить план, приказ, договор и т. п.; организация, утвердившая этот документ, и дата его утверждения; наименование и (или) условное обозначение темы разработки. 2.4. В разделе «Назначение разработки» должно быть указано функциональное и эксплуатационное назначение программы или программного изделия. 2.5.Раздел «Технические требования к программе или программному изделию» должен содержать следующие подразделы: требования к функциональным характеристикам; требования к надежности; условия эксплуатации; требования к составу и параметрам технических средств; требования к информационной и программной совместимости; требования к маркировке и упаковке; требования к транспортированию и хранению; специальные требования. 2.5.1. В подразделе «Требования к функциональным характеристикам» должны быть указаны требования к составу выполняемых функций, организации входных и выходных данных, временным характеристикам и т. п. 2.5.2. В подразделе «Требования к надежности» должны быть указаны требования к обеспечению надежного функционирования (обеспечение устойчивого функционирования, контроль входной и выходной информации, время восстановления после отказа и т. п.). 2.5.3. В подразделе «Условия эксплуатации» должны быть указаны условия эксплуатации (температура окружающего воздуха, относительная влажность и т. п. для выбранных типов носителей данных), при которых должны обеспечиваться заданные характеристики, а также вид обслуживания, необходимое количество и квалификация персонала. 2.5.4. В подразделе «Требования к составу и параметрам технических средств» указывают необходимый состав технических средств с указанием их технических характеристик. 2.5.5. В подразделе «Требования к информационной и программной совместимости о должны быть указаны требования к информационным структурам на 11 входе и выходе и методам решения, исходным кодам, языкам программирования. При необходимости должна обеспечиваться защита информации и программ. 2.5.6. В подразделе «Требования к маркировке и упаковке» в общем случае указывают требования к маркировке программного изделия, варианты и способы упаковки. 2.5.7. В подразделе «Требования к транспортированию и хранению» должны быть указаны для программного изделия условия транспортирования, места хранения, условия хранения, условия складирования, сроки хранения в различных условиях. 2.5.8. В разделе «Технико-экономические показатели» должны быть указаны: ориентировочная экономическая эффективность, предполагаемая годовая потребность, экономические преимущества разработки по сравнению с лучшими отечественными и зарубежными образцами или аналогами. 2.6.В разделе «Стадии и этапы разработки» устанавливают необходимые стадии разработки, этапы и содержание работ (перечень программных документов, которые должны быть разработаны, согласованы и утверждены), а также как правило, сроки разработки и определяют исполнителей. 2.7.В разделе «Порядок контроля и приемки» должны быть указаны виды испытаний и общие требования к приемке работы. 2.8.В приложениях к техническому заданию при необходимости приводят: перечень научно-исследовательских и других работ, обосновывающих разработку; схемы алгоритмов, таблицы, описания, обоснования, расчеты и другие документы, которые могут быть использованы при разработке; другие источники разработки. В случаях, если какие-либо требования, предусмотренные техническим заданием, заказчик не предъявляет, следует в соответствующем месте указать «Требования не предъявляются». Примеры разработки технического задания приведены в Приложениях 1 и 2. При проектировании и разработке сайта есть ряд нюансов и особенностей как самого проектирования, так и подготовки технической и сопроводительной документации. Пример технического задания на разработку сайта представлен в Приложении 3. В качестве быстрого и простейшего средства создания ТЗ на разработку сайта можно воспользоваться бесплатным онлайн сервисом https://gagara-web.ru/tools/tzgenerator/ . 5.2 Пример выполнения курсовой работы В рамках методических указаний к выполнению курсовой работы представлен пример на основе приложения для социальных сетей. Установка Python и Pip Pip является менеджером пакетов для Python. Именно с помощью него обычно устанавливаются модули/библиотеки для разработки в виде пакетов. В Ubuntu Pip ставится отдельно. 12 Для начала выполнения курсовой работы в Ubuntu необходимо установить Python 3, сделать это можно можно через терминал. Для этого необходимо запустить его и ввести команду установки. Вторая команда выводит версию Python. sudo apt install python3-minimal python3 -V Далее устанавливается Pip и обновляется. После обновления необходимо перезапустить текущую сессию (или перезагрузить компьютер), иначе возникнет ошибка во время вызова Pip. sudo apt install python3-pip pip3 install --user --upgrade pip Основные команды Pip Рассмотрим основные команды при работе с Pip в командной строке Windows и в терминале Ubuntu. Команда Описание pip help Справка по командам pip search package_name Поиск пакета pip show package_name Информация об пакете pip install package_name Установка пакета(ов) pip uninstall package_name Удаление пакета(ов) pip list Список установленных пакетов pip install -U Обновление пакета(ов) Если виртуальные окружения не используются, то во время установки пакета(ов) полезно использовать дополнительно ключ --user, устанавливая пакет(ы) локально только для текущего пользователя. Установка VirtualEnv и VirtualEnvWrapper VirtualEnv используется для создания виртуальных окружений для Python программ. Это необходимо для избежания конфликтов, позволяя установить одну версию библиотеки для одной программы, и другу для второй. Всё удобство использования VirtualEnv постигается на практике. Для Ubuntu команда установки будет следующей: pip3 install --user virtualenv virtualenvwrapper После которой в конец ~/.bashrc (Этот файл предназначен для задания псевдонимов команд и функций, используемых пользователями оболочки bash.) добавляем: 13 export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source ~/.local/bin/virtualenvwrapper.sh При новом запуске терминала должны будут появиться сообщения, начинающиеся на virtualenvwrapper.user_scripts creating, что говорит об успешном завершении установки. Установка PyCharm PyCharm — интегрированная среда разработки для языка программирования Python. Обладает всеми базовыми вещами необходимых для разработки. В нашем случае огромное значение имеет хорошее взаимодействие PyCharm с VirtualEnv и Pip, чем мы и будем пользоваться. Скачиваем установщик PyCharm Community для Linux с официального сайта JetBrains. Распаковываем архив с PyCharm и переименовываем папку с программой в pycharm-community, убрав версию из названия. Теперь в директории ~/.local (Ctrl + H — Показ скрытый файлов), создаем папку opt, куда и перемещаем pycharm-community. В результате по пути /.local/opt/pycharm-community должны размещаться папки bin, help и т.д. Таким образом PyCharm будет находится в своём месте и ничему не будет мешать. Далее выполняем команды в терминале: cd /home/maksim/.local/opt/pycharm-community/bin sh ./pycharm.sh Производим установку. И очень важно в конце не забыть создать desktop файл для запуска PyCharm. Для этого в Окне приветствия в нижнем правом углу нажимаем на Configure → Create Desktop Entry. 14 Рисунок 2 Создание программы Запускаем PyCharm и окне приветствия выбираем Create New Project. В мастере создания проекта, указываем в поле Location путь расположения создаваемого проекта. Имя конечной директории также является именем проекта. В примере директория называется 'first_program'. Далее разворачиваем параметры окружения, щелкая по Project Interpreter. И выбираем New environment using Virtualenv. Путь расположения окружения генерируется автоматически. В Windows можно поменять в пути папку venv на Envs, чтобы команда workon находила создаваемые в PyCharm окружения. Ставить дополнительно галочки — нет необходимости. И нажимаем на Create. Рисунок 3 Теперь установим библиотеки, которые будем использовать в программе. С помощью главного меню переходим в настройки File → Settings. Где переходим в Project: project_name → Project Interpreter. 15 Рисунок 4 Откройте файл и введите в него следующий код: Для запуска программы, необходимо создать профиль с конфигурацией. Для этого в верхнем правом углу нажимаем на кнопку Add Configuration.... Откроется окно Run/Debug Configurations, где нажимаем на кнопку с плюсом (Add New Configuration) в правом верхнем углу и выбираем Python. Далее указываем в поле Name имя конфигурации и в поле Script path расположение Python файла с кодом программы. Остальные параметры не трогаем. В завершение нажимаем на Apply, затем на OK. 16 Рисунок 5 После этого можно выполнить программу. Установка Docker на Linux Docker - это система управления контейнерами для Linux. Если говорить просто, то контейнеры - это что-то среднее между виртуальными машинами, с полной изоляцией и chroot окружением. Все процессы выполняются в изолированном пространстве, но в то же время на одном ядре, что позволяет экономить ресурсы основной системы. Перед тем как переходить к установке самой программы, нужно обновить систему до актуального состояния. Для этого выполните: sudo apt update && sudo apt upgrade Перед тем как установить Docker Ubuntu необходимо установить дополнительные пакеты ядра, которые позволяют использовать Aufs для контейнеров Docker. С помощью этой файловой системы мы сможем следить за изменениями и делать мгновенные снимки контейнеров: sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual Примечание: если данные команды не работают, попробуйте использовать для установки linux-image-extra следующие команды: Рисунок 6 Ещё надо установить пакеты, необходимые для работы apt по https: sudo apt install apt-transport-https ca-certificates curl software-properties-common После того как все приготовления завершены, и вы убедились, что ваша система полностью готова, можно перейти к установке. Мы будем устанавливать программу из 17 официального репозитория разработчиков. Сначала необходимо добавить ключ репозитория: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add – Затем добавьте репозиторий docker в систему: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" sudo apt update && apt-cache policy docker-ce И установка Docker на Ubuntu: sudo apt install -y docker-ce Теперь установка Docker Ubuntu и всех необходимых компонентов завершена. Первой командой мы добавили ключ репозитория разработчиков, второй - сам репозиторий. Далее обновили списки пакетов и сообщили системе что можно заменять системные пакеты на пакеты из этого репозитория. Чтобы завершить установку осталось добавить нашего пользователя в группу docker. Иначе при запуске утилиты вы будете получать ошибку подключения к сокету: Рисунок 7 Для добавления выполните: sudo usermod -aG docker $(whoami) Рисунок 8 Затем проверяем запущен ли сервис: sudo systemctl status docker 18 Рисунок 9 Все готово к работе. Теперь рассмотрим подробнее использование Docker. Установка Docker Compose Сейчас работа с docker не обходится без утилиты управления контейнерами docker compose, её тоже необходимо установить. Чтобы установить docker compose Ubuntu выполните последовательность команд: sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/dockercompose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose Утилита была загружена из официального сайта и теперь вы можете посмотреть её версию: docker-compose version Утилита Docker Все действия с контейнерами выполняются утилитой docker. Ее можно запускать от имени вашего пользователя после того, как он был добавлен в группу программы. Синтаксис утилиты очень прост: $ docker опции команда опции_команды аргументы Рисунок 10 Давайте сначала рассмотрим основные опции утилиты, их всего несколько: -D - включить режим отладки; 19 -H - подключиться к серверу, запущенному на другом компьютере; -l - изменить уровень ведения логов, доступно: debug,info,warn,error,fatal; -v - показать версию; --help вывести справку по команде или утилите в целом; Команд намного больше, ниже приведены все команды, которые вы можете использовать в своих программах: attach - подключиться к запущенному контейнеру; build - собрать образ из инструкций dockerfile; commit - создать новый образ из изменений контейнера; cp - копировать файлы между контейнером и файловой системой; create - создать новый контейнер; diff - проверить файловую систему контейнера; events - посмотреть события от контейнера; exec - выполнить команду в контейнере; export - извлечь содержимое контейнера в архив; history - посмотреть историю изменений образа; images - список установленных образов; import - создать контейнер из архива tar; info - посмотреть информацию о системе; inspect - посмотреть информацию о контейнере; kill - остановить запущенный контейнер; load - загрузить образ из архива; login - авторизация в официальном репозитории Docker; logout - выйти из репозитория Docker; logs - посмотреть логи контейнера; pause - приостановить все процессы контейнера; port - подброс портов для контейнера; ps - список запущенных контейнеров; pull - скачать образ контейнера из репозитория; push - отправить образ в репозиторий; restart - перезапустить контейнер; rm - удалить контейнер; run - выполнить команду в контейнере; save - сохранить образ в архив tar; search - поиск образов в репозитории по заданному шаблону; start - запустить контейнер; stats - статистика использования ресурсов контейнером; stop - остановить контейнер; top - посмотреть запущенные процессы в контейнере; unpause - проложить выполнение процессов в контейнере. В процессе разработки мы будем часто использовать команду run, рассмотрим ее опции: -e - переменные окружения для команды; 20 -h - имя хоста контейнера; -i - интерактивный режим, связывающий stdin терминала с командой; -m - ограничение памяти для команды; -u - пользователь, от имени которого будет выполнена команда; -t - связать tty с контейнером для работы ввода и вывода; -v - примонтировать директорию основной системы в контейнер. Теперь, когда мы рассмотрели все основы, приведем несколько примеров работы с контейнерами. Это очень просто. Использование Docker в Ubuntu Чтобы убедиться, что все работает давайте запустим тестовый образ. Для этого наберите: docker run hello-world Больше ничего не нужно, программа сама скачает образ, и выполнит оболочку в нем. Вы увидите сообщение Hello from Docker: Рисунок 11 Поиск и установка контейнеров Использование docker очень простое по своей сути. Если вы не знаете название нужного пакета, можете воспользоваться поиском, например, найдем Ubuntu: docker search ubuntu Рисунок 12 21 Утилита выведет список всех доступных для загрузки образов из репозитория Docker, которые содержат такое слово. Колонка Official означает, что образ поддерживается официальным разработчиком, а Stars - это количество пользователей, которым этот образ понравился. Для загрузки образа на локальный компьютер используйте команду pull: docker pull ubuntu Рисунок 13 После завершения загрузки вы можете посмотреть список установленных образов: docker images Рисунок 14 Запуск контейнера Теперь, давайте запустим командную оболочку контейнера с помощью команды run, для получения интерактивного доступа используйте опции -i и -t: docker run -it ubuntu Рисунок 15 Вы в окружении контейнера. У вас есть права суперпользователя, но вы не можете получить доступ к основной системе. Контейнер содержит минимум необходимых 22 файлов, нет даже текстовых редакторов. Для установки чего-либо сначала нужно обновить репозиторий: apt-get update Рисунок 16 Например, установим утилиту dialog: apt-get install -y dialog Рисунок 17 Для выхода из контейнера используйте команду exit. Сохранение изменений Вы можете изменять контейнер как захотите, добавлять и удалять программы и многое другое. Но когда вы его удалите, все изменения будут потеряны. Вы можете создать новый образ из модифицированного контейнера, для этого используется команда commit. Сначала смотрим список запущенных контейнеров: docker ps (если после установки в списке не отображаются containers, попробуйте использовать команду с ключом -a) 23 Рисунок 18 Отсюда возьмите id контейнера, затем выполните такую команду для создания нового образа: docker commit -m "изменения" -a "автор" ид_контейнера repository/имя Например: docker commit -m "Zenity" -a "Seriyyy95" d034b794a3bf repository/ubuntu-zenity Рисунок 19 Новый образ был сохранен на вашем компьютере, и вы можете увидеть его в списке образов: docker images Рисунок 20 Список контейнеров Как уже говорилось выше, вы можете посмотреть список запущенных контейнеров с помощью команды ps: docker ps Рисунок 21 Если вам нужны все контейнеры, используйте опцию -a: docker ps -a 24 Рисунок 22 Чтобы вывести последний созданный контейнер, используйте: docker ps –l Рисунок 23 Управление контейнерами Чтобы остановить запущенный контейнер используйте команду stop: docker stop d034b794a3bf Рисунок 24 Для запуска: docker start d034b794a3bf Рисунок 25 Вы можете подключиться к запущенному контейнеру с помощью attach: docker attach d034b794a3bf Рисунок 26 Чтобы удалить контейнер со всеми изменениями выполните: docker rm d034b794a3bf 25 Рисунок 27 Установка MySQL По умолчанию в репозиторий пакетов APT в Ubuntu включена только последняя версия MySQL. Для установки этой версии обновите индекс пакетов apt командой: sudo apt update Затем установите пакет: sudo apt install mysql-server Эта команда установит MySQL, но при этом вам не будет предложено задать пароль или внести какие-либо правки в конфигурацию. Поскольку это делает установку небезопасной, рассмотрим далее, как настроить установленную MySQL. Настройка MySQL В случае новой установки MySQL вам необходимо выполнить скрипт безопасности. Он изменяет некоторые настройки по умолчанию на более безопасные, например, удалённый вход для пользователей root и пользователи, созданные по умолчанию. В старых версиях MySQL вам было необходимо также инициализировать директорию данных вручную, теперь это делается автоматически. Выполните скрипт безопасности командой: sudo mysql_secure_installation В результате выполнения этого скрипта вам будет предложено внести изменения в настройки безопасности вашей MySQL. Сначала вам будет предложено установить плагин валидации паролей (Validate Password Plugin), который позволяет тестировать надёжность паролей MySQL. Далее вам предложат задать пароль для пользователя root вашей установки MySQL. Выберите надёжный пароль и введите его два раза. Далее вы можете выбирать Y и нажимать ENTER для всех последующих вопросов. При этом будут удалены некоторые анонимные пользователи и тестовые базы данных, будет отключена возможность удалённого входа для root пользователей, после чего все внесённые изменения будут применены к вашей установке MySQL. Для инициализации директории данных MySQL вам необходимо использовать mysql_install_db для версий меньше, чем 5.7.6, и mysqld --initialize для версии 5.7.6 и более поздних версий. При этом, если вы устанавливаете MySQL для Debian как описано на шаге 1, директория данных будет создана автоматически и вам нет необходимости что-то делать. Если вы при этом попытаетесь всё равно выполнить команду создания директории данных, вы увидите следующую ошибку: Вывод mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists) ... 2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting 26 Обратите внимание, несмотря на то, что вы задали пароль для пользователя root для MySQL, этот пользователь не настроен для аутентификации по паролю при подключении к оболочке (shell) MySQL. Вы можете изменить эту настройку на следующем шаге 3. (Опционально) Настройка аутентификации и привилегий На серверах с Ubuntu, использующей MySQL 5.7 (и более поздние версии), пользователь root в MySQL по умолчанию аутентифицируется с помощью плагина auth_socket, а не по паролю. Это в целом более безопасно и удобно во многих случаях, но не в случае, когда вам необходимо организовать доступ к MySQL со стороны сторонней программы, например, phpMyAdmin. Для того, чтобы пользователь root в MySQL мог использовать пароль для входа в систему вам необходимо изменить метод аутентификации с auth_socket на mysql_native_password. Для этого войдите в оболочку MySQL следующей командой: sudo mysql Далее проверьте, какой метод аутентификации используется для каждого из ваших пользователей MySQL: SELECT user,authentication_string,plugin,host FROM mysql.user; Вывод +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec) В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER. Не забудьте изменить password на ваш сильный пароль: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; Далее выполните команду FLUSH PRIVILEGES, которая применит внесённые изменения: FLUSH PRIVILEGES; Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации: SELECT user,authentication_string,plugin,host FROM mysql.user; Вывод +------------------+-------------------------------------------+-----------------------+-----------+ 27 | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec) Как можно видеть на представленном выводе теперь root пользователь MySQL аутентифицируется с использованием пароля. После того, как мы в этом убедились, можно выйти из оболочки MySQL: exit В некоторых случаях бывает полезно использовать для входа в MySQL отдельного пользователя. Для создания такого пользователя войдите в оболочку MySQL: sudo mysql Внимание: если вы включили вход по паролю для пользователя root, как описано выше, вам потребуется использовать другую команду для входа в оболочку MySQL. Команда выше запустит оболочку с привилегиями обычного пользователя, для получения привилегий администратора вам необходимо выполнить следующую команду: mysql -u root -p Далее создайте нового пользователя и задайте для него надёжный пароль: CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password'; Далее задайте для пользователя подходящий набор привилегий. Например, вы можете дать пользователю доступ ко всем таблицам в базе данных, а также права на добавление, изменение и удаление пользовательских привилегий следующей командой: GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION; Обратите внимание на то, что в этом случае вам нет необходимости выполнять команду FLUSH PRIVILEGES. Эта команда необходимо только тогда, когда вы изменяете таблицы доступа (grant tables) используя команды INSERT, UPDATE или DELETE. Поскольку вы создали нового пользователя, а не редактируете права существующего пользователя, команда FLUSH PRIVILEGES не является необходимой. После этого, выйдите из оболочки MySQL: exit Теперь мы можем протестировать нашу установку MySQL. Тестирование MySQL Вне зависимости от того, как именно вы установили MySQL, она должна запуститься автоматически. Проверим это следующей командой: systemctl status mysql.service Вы увидите вывод, похожий на этот: Вывод 28 ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago Main PID: 3754 (mysqld) Tasks: 28 Memory: 142.3M CPU: 1.994s CGroup: /system.slice/mysql.service └─3754 /usr/sbin/mysqld Если MySQL не запущена, вы можете запустить её с помощью команды sudo systemctl start mysql. Для дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin, который представляет собой клиент, позволяющий запускать административные команды. Например, эта команда приказывает подключиться к MySQL в качестве пользователя root (-u root), запросить пароль (-p) и вернуть версию. sudo mysqladmin -p -u root version Вы увидите вывод, похожий на этот: Вывод mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Server version 5.7.21-1ubuntu1 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 30 min 54 sec Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006 Это означает, что MySQL запущена и работает. Разработаем небольшую базу данных приложения для социальных сетей. База данных будет состоять из четырех таблиц: 1. users 2. posts 3. comments 4. likes Схема базы данных показана на рисунке ниже. 29 Рисунок 28 Пользователи (users) и публикации (posts) будут иметь тип связи один-ко-многим: одному читателю может понравиться несколько постов. Точно так же один и тот же юзер может оставлять много комментариев (comments), а один пост может иметь несколько комментариев. Таким образом, и users, и posts по отношению к comments имеют тот же тип связи. А лайки (likes) в этом плане идентичны комментариям В Python по умолчанию нет модуля, который можно использовать для подключения к базе данных MySQL. Для этого вам нужно установить драйвер Python для MySQL. Одним из таких драйверов является mysql-connector-python. Вы можете скачать этот модуль Python SQL с помощью pip: Рисунок 29 Обратите внимание, что MySQL – это серверная система управления базами данных. Один сервер MySQL может хранить несколько баз данных. В отличие от SQLite, где соединение равносильно порождению БД, формирование базы данных MySQL состоит из двух этапов: 1. Установка соединения с сервером MySQL. 2. Выполнение запроса для создания БД. Определим функцию, которая будет подключаться к серверу MySQL и возвращать объект подключения: 30 Рисунок 30 Рисунок 31 В приведенном выше коде мы определили новую функцию create_connection(), которая принимает три параметра: 1. host_name 2. user_name 3. user_password Модуль mysql.connector определяет метод connect(), используемый в седьмой строке для подключения к серверу MySQL. Как только соединение установлено, объект connection возвращается вызывающей функции. В последней строке функция create_connection() вызывается с именем хоста, именем пользователя и паролем. Пока мы только установили соединение. Самой базы ещё нет. Для этого мы определим другую функцию – create_database(), которая принимает два параметра: 1. Объект connection; 2. query – строковый запрос о создании базу данных. Вот как выглядит эта функция: Рисунок 32 Для выполнения запросов используется объект cursor. 31 Создадим базу данных sm_appдля нашего приложения на сервере MySQL: Рисунок 33 Теперь у нас есть база данных на сервере. Однако объект connection, возвращаемый функцией create_connection() подключен к серверу MySQL. А нам необходимо подключиться к базе данных sm_app. Для этого нужно изменить create_connection() следующим образом: Рисунок 34 Функция create_connection() теперь принимает дополнительный параметр с именем db_name. Этот параметр указывает имя БД, к которой мы хотим подключиться. Имя теперь можно передать при вызове функции: Рисунок 35 Скрипт успешно вызывает create_connection() и подключается к базе данных sm_app. Выше мы увидели, как подключаться к серверу базы данных MySQL, используя разные библиотеки Python. Мы создали базу данных sm_app. Далее мы рассмотрим, как формировать таблицы внутри этих трех баз данных. Как обсуждалось ранее, нам нужно получить и связать четыре таблицы: 1. users 32 2. posts 3. comments 4. likes Чтобы создать таблицу в MySQL, нужно передать запрос в cursor.execute(). Создадим новый вариант функции execute_query(): Рисунок 36 Описываем таблицу users: Рисунок 37 MySQL использует ключевое слово AUTO_INCREMENT для указания столбцов, значения которых автоматически увеличиваются при вставке новых записей. Следующий скрипт составит таблицу posts, содержащую внешний ключ user_id, который ссылается на id столбца таблицы users: 33 Рисунок 38 Аналогично для создания таблиц comments и likes, передаём соответствующие CREATE-запросы функции execute_query(). Есть два способа вставить записи в базы данных MySQL из приложения Python. Можно сохранить запрос INSERT INTO в строке, а затем использовать для вставки записей cursor.execute(). Ранее мы определили функцию-оболочку execute_query(), которую использовали для вставки записей. Мы можем использовать ту же функцию: Рисунок 39 Второй подход использует метод cursor.executemany(), который принимает два параметра: Строка query, содержащая заполнители для вставляемых записей. Список записей, которые мы хотим вставить. Посмотрите на следующий пример, который вставляет две записи в таблицу likes: 34 Рисунок 40 Какой подход выбрать – зависит от вас. Если вы не очень хорошо знакомы с SQL, проще использовать метод курсора executemany(). Извлечение данных из записей Процесс выбора записей в MySQL: Рисунок 41 Теперь выберем все записи из таблицы users: Рисунок 42 Обновление записей таблицы Процесс обновления записей в MySQL с помощью модуля mysql-connector-python является точной копией модуля sqlite3: 35 Рисунок 43 Удаление записей таблицы В качестве примера удалим комментарий с id равным 5: Рисунок 44 Теперь, если мы извлечем все записи из таблицы comments, то увидим, что пятый комментарий был удален. Для запуска minikube нам необходимо виртуальное пространство. Чтобы проверить, поддерживается ли виртуализация в Linux, выполните следующую команду и проверьте, что вывод не пустой: grep -E --color 'vmx|svm' /proc/cpuinfo Далее необходимо убедиться, что у вас установлен kubectl. Для этого рассмотрим установку kubectl. Установка kubectl в linux Представим два способа установки kubectl на Linux Ubuntu. Вы можете использовать любой из двух методов. Установка двоичного файла kubectl с помощью curl в Linux 1. Загрузите последнюю версию с помощью команды: curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl 2. Сделайте двоичный файл kubectl исполняемым: chmod +x ./kubectl 36 3. Переместите двоичный файл в директорию из переменной окружения PATH: sudo mv ./kubectl /usr/local/bin/kubectl 4. Убедитесь, что установлена последняя версия: kubectl version –client Установка с помощью встроенного пакетного менеджера Для установки с помощью встроенного пакетного менеджера выполните ряд следующих команд: sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl На данный момент kubectl установлен. Чтобы kubectl мог найти и получить доступ к кластеру Kubernetes, нужен файл kubeconfig, который создаётся автоматически при создании кластера с помощью скрипта kube-up.sh или при успешном развертывании кластера Minikube. По умолчанию конфигурация kubectl находится в ~/.kube/config. Посмотрите на состояние кластера, чтобы убедиться, что kubectl правильно сконфигурирован: kubectl cluster-info Если вы видите URL-ответ, значит kubectl корректно настроен для работы с вашим кластером. Если вы видите сообщение следующего содержания, то значит kubectl настроен некорректно или не может подключиться к кластеру Kubernetes: The connection to the server <server-name:port> was refused - did you specify the right host or port? Если вы собираетесь запустить кластер Kubernetes на своем ноутбуке (локально), вам потребуется сначала установить специальный для этого инструмент, например, Minikube, а затем снова выполнить указанные выше команды. Если команда kubectl cluster-info возвращает URL-ответ, но вы не можете подключиться к своему кластеру, чтобы убедиться, что он правильно настроен, воспользуйтесь этой командой: kubectl cluster-info dump 37 Установка Minikube Minikube поддерживает опцию --vm-driver=none, которая запускает компоненты Kubernetes на хосте, а не на виртуальной машине. Для использования этого драйвера требуется только Docker и Linux, но не гипервизор. В курсовой работе мы будем использовать Doker. Итак, перейдем к установке minikube. Здесь также имеется несколько вариантов установки. Установка Minikube через пакет Доступны экспериментальные пакеты для Minikube; Вы можете загрузить пакеты для Linux (AMD64) со страницы релизов Minikube на GitHub. Используйте пакетный менеджер в вашем дистрибутиве Linux для установки нужного пакета. Установка Minikube с помощью прямой ссылки Вы можете загрузить двоичный файл и использовать его вместо установки пакета: curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ && chmod +x minikube Чтобы исполняемый файл Minikube был доступен из любой директории выполните следующие команды: sudo mkdir -p /usr/local/bin/ sudo install minikube /usr/local/bin/ Вместо гипервизора мы будем использовать Docker. Для этого установим docker (если до этого он не был реализован). Установку можно выполнить с помощью пакетного менеджера Ubuntu или же установить вручную, как мы делали в предыдущих лабораторных работах. При использовании одной виртуальной машины для Kubernetes легко повторно использовать демон Docker, встроенный в Minikube. В этом случае нет необходимости создавать реестр Docker на вашей хост-машине и отправлять образ туда. Вместо этого вы можете создать реестр внутри того же демона Docker, который использует Minikube, что позволит ускорить локальные запуски. Для работы с Docker-демоном на вашем хосте под управлением Linux, запустите последнюю строку из вывода команды: 38 minikube docker-env Теперь вы можете использовать Docker в командной строке вашего хосткомпьютера на Linux для взаимодействия с демоном Docker внутри виртуальной машины Minikube: docker ps Рисунок 45 Запуск кластера После установки minikube чтобы убедиться в том, что гипервизор и Minikube были установлены корректно, выполните следующую команду, которая запускает локальный кластер Kubernetes: minikube start Рисунок 46 После того, как команда minikube start отработала успешно, выполните команду для проверки состояния кластера: minikube status Если ваш кластер запущен, то в выводе команды minikube status должно быть чтото вроде этого: host: Running kubelet: Running apiserver: Running kubeconfig: Configured 39 Теперь вы можете работать со своим кластером через CLI-инструмент kubectl. Давайте создадим развёртывание (Deployment) в Kubernetes, используя существующий образ echoserver, представляющий простой HTTP-сервер, и сделаем его доступным на порту 8080 с помощью --port. kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10 Вывод будет примерно следующим: deployment.apps/hello-minikube created Чтобы получить доступ к объекту Deployment hello-minikube извне, создайте объект сервиса (Service): kubectl expose deployment hello-minikube --type=NodePort --port=8080 Опция --type=NodePort определяет тип сервиса. Вывод будет примерно следующим: service/hello-minikube exposed Под (Pod) hello-minikube теперь запущен, но нужно подождать, пока он начнёт функционировать, прежде чем обращаться к нему. Проверьте, что под работает: kubectl get pod Если в столбце вывода STATUS выводится ContainerCreating, значит под все еще создается: NAME READY STATUS RESTARTS AGE hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s Если в столбце STATUS указано Running, то под теперь в рабочем состоянии: NAME READY STATUS RESTARTS AGE hello-minikube-3383150820-vctvh 1/1 Running 0 13s Узнайте URL-адрес открытого (exposed) сервиса, чтобы просмотреть подробные сведения о сервисе: minikube service hello-minikube --url Чтобы ознакомиться с подробной информацией о локальном кластере, скопируйте и откройте полученный из вывода команды на предыдущем шаге URL-адрес в браузере. Вывод будет примерно следующим: 40 Hostname: hello-minikube-7c77b68cff-8wdzq Pod Information: -no pod information availableServer values: server_version=nginx: 1.13.3 - lua: 10008 Request Information: client_address=172.17.0.1 method=GET real path=/ query= request_version=1.1 request_scheme=http request_uri=http://192.168.99.100:8080/ Request Headers: accept=*/* host=192.168.99.100:30674 user-agent=curl/7.47.0 Request Body: -no body in request- Проверим состояние нашего кластера. Введем команду: kubectl cluster-info При корректном создании кластера в терминале будет примерно следующий вывод: Рисунок 47 Здесь мы видим, что наш кластер «бежит» на нашем сервере. Выполнив команду: kubectl get nodes Увидим следующий вывод: Рисунок 48 41 Если сервис и кластер вам больше не нужны, их можно удалить. Теперь, когда вы убедились, что Minikube работает с выбранным вами гипервизором, вы можете продолжить использовать Minikube или остановить кластер. Чтобы остановить кластер выполните команду ниже: minikube stop Рисунок 49 Панель управления Чтобы получить доступ к веб-панели управления Kubernetes, запустите эту команду в командной оболочке после запуска Minikube, чтобы получить адрес: minikube dashboard Прежде чем вы начнете: На одной или нескольких машинах работает одно из: o Ubuntu 16.04+ o Debian 9+ o CentOS 7 o Red Hat Enterprise Linux (RHEL) 7. o Fedora 25+ o HypriotOS v1.0.1 + o Flatcar Container Linux (протестировано с 2512.3.0) 2 ГБ или более ОЗУ на машину (иначе для ваших приложений останется меньше места) 2 процессора или более Полное сетевое соединение между всеми машинами в кластере (общедоступная или частная сеть) Уникальное имя хоста, MAC-адрес и product_uuid для каждого узла. Некоторые порты открыты на ваших машинах. Свап отключен. Вы ДОЛЖНЫ отключить свап, чтобы kubelet работал правильно. Убедитесь, что MAC-адрес и product_uuid уникальны для каждого узла 42 Вы можете получить MAC-адрес сетевых интерфейсов с помощью команды ip link или ifconfig -a Product_uuid можно проверить с помощью команды sudo cat /sys/class/dmi/id/product_uuid Очень вероятно, что аппаратные устройства будут иметь уникальные адреса, хотя некоторые виртуальные машины могут иметь идентичные значения. Kubernetes использует эти значения для однозначной идентификации узлов в кластере. Если эти значения не уникальны для каждого узла, процесс установки может завершиться ошибкой . Проверить сетевые адаптеры Если у вас более одного сетевого адаптера, и ваши компоненты Kubernetes недоступны по маршруту по умолчанию, рекомендуется добавить IP-маршрут (-ы), чтобы адреса кластера Kubernetes проходили через соответствующий адаптер. Разрешение iptables видеть мостовой трафик Убедитесь, что br_netfilterмодуль загружен. Это можно сделать, запустив lsmod | grep br_netfilter. Чтобы загрузить его явно вызовите sudo modprobe br_netfilter. В качестве требования для iptables вашего узла Linux, чтобы правильно видеть мостовой трафик, вы должны убедиться, net.bridge.bridge-nf-call-iptablesчто в вашей sysctlконфигурации установлено значение 1 , например cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system Установка среды выполнения Для запуска контейнеров в подах Kubernetes использует среда выполнения контейнера. По умолчанию Kubernetes использует Интерфейс среды выполнения контейнера (CRI) для взаимодействия с выбранной вами средой выполнения контейнера. Если вы не укажете среду выполнения, kubeadm автоматически попытается обнаружить установленную среду выполнения контейнера, просмотрев список хорошо известных сокетов домена Unix. В частности докер. Вы установите эти пакеты на все свои машины: kubeadm: команда для загрузки кластера. kubelet: компонент, который работает на всех машинах в вашем кластере и выполняет такие функции, как запуск модулей и контейнеров. kubectl: утилита командной строки для связи с вашим кластером. 43 kubeadm не будет устанавливать или управлять kubelet или kubectl для вас, так что вам нужно будет убедиться, что они соответствуют версии плоскости управления Kubernetes. Инициализация узла уровня управления kubeadm init Эта команда инициализирует узел уровня управления Kubernetes. Узел уровня управления - это машина, на которой работают компоненты плоскости управления, включая etcd (база данных кластера) и API-сервер (с которым kubectl инструмент командной строки взаимодействует). 1. Если у вас есть планы по обновлению этого единственного kubeadm кластера уровня управления до высокой доступности, вы должны указать, --control-plane-endpoint чтобы установить общую конечную точку для всех узлов плоскости управления. Такой конечной точкой может быть DNS-имя или IP-адрес балансировщика нагрузки. 2. Выберите надстройку сети Pod и проверьте, требуется ли для нее передача какихлибо аргументов kubeadm init. В зависимости от того, какого стороннего поставщика вы выберете, вам может потребоваться установить значение, --podnetwork-cidr зависящее от поставщика. Kubeadm позволяет поэтапно создавать узел плоскости управления с помощью kubeadm init phase команды. Некоторые этапы имеют уникальные флаги, поэтому, если вы хотите взглянуть на список доступных опций, добавьте --help, например: sudo kubeadm init phase control-plane controller-manager –help Вы также можете использовать, --help чтобы просмотреть список подфаз для определенной родительской фазы: sudo kubeadm init phase control-plane --help kubeadm token Маркеры начальной загрузки используются для установления двунаправленного доверия между узлом, присоединяющимся к кластеру, и узлом плоскости управления. kubeadm init создает начальный токен с 24-часовым TTL. Следующие команды позволяют управлять таким токеном, а также создавать новые и управлять ими. kubeadm token create - Эта команда создаст для вас токен начальной загрузки. Вы можете указать способы использования этого токена, «время жизни» и необязательное описание, понятное человеку. [token] — это фактический токен для записи. Это должен быть надежно сгенерированный случайный токен вида "[a-z0-9] {6}. [A-z0-9] {16}". Если [token] не указан, kubeadm вместо этого сгенерирует случайный токен. kubeadm token create [token] kubeadm token delete – эта команда удалит для вас список токенов начальной загрузки. 44 [Значение-токена] — это полный токен в форме «[a-z0-9] {6}. [A-z0-9] {16}» или идентификатор токена в форме «[a-z0-9] {6} "для удаления. . kubeadm token delete [token-value] ... kubeadm token generate – эта команда выведет случайно сгенерированный токен начальной загрузки, который можно использовать с командами «init» и «join». Вам не обязательно использовать эту команду для создания токена. Вы можете сделать это самостоятельно, если это будет в формате "[a-z0-9] {6}. [A-z0-9] {16}". Эта команда предназначена для удобства генерации токенов в заданном формате. Вы также можете использовать "kubeadm init" без указания токена, и он сгенерирует и выведет его для вас. kubeadm token generate [flags] kubeadm token list - эта команда выведет для вас список всех токенов начальной загрузки. kubeadm token list [flags] kubeadm join Эта команда инициализирует рабочий узел Kubernetes и присоединяет его к кластеру. При присоединении к инициализированному кластеру kubeadm нам необходимо установить двунаправленное доверие. Это разделено на обнаружение (когда узел доверяет плоскости управления Kubernetes) и загрузку TLS (когда плоскость управления Kubernetes доверяет узлу). Есть 2 основные схемы открытия. Первый - использовать общий токен вместе с IPадресом сервера API. Второй - предоставить файл - часть стандартного файла kubeconfig. Этот файл может быть локальным или загруженным через URL-адрес HTTPS. Формы: kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443, kubeadm join --discovery-file path / to / file.conf или kubeadm join --discovery-file https: // url / file. конф. Можно использовать только одну форму. Если информация об обнаружении загружается с URL-адреса, необходимо использовать HTTPS. Кроме того, в этом случае установленный на хосте пакет CA используется для проверки соединения. Если вы используете общий токен для обнаружения, вы также должны передать флаг --discovery-token-ca-cert-hash для проверки открытого ключа корневого центра сертификации (CA), представленного плоскостью управления Kubernetes. Значение этого флага указывается как «<hash-type>: <hex-encoded-value>», где поддерживаемый тип хэша - «sha256». Хэш вычисляется по байтам объекта информации открытого ключа субъекта (SPKI) (как в RFC7469). Это значение доступно в выводе «kubeadm init» или может быть вычислено с помощью стандартных инструментов. Флаг --discovery-token-ca-cert-hash может повторяться несколько раз, что позволяет использовать более одного открытого ключа. Kubeadm позволяет вам присоединять узел к кластеру поэтапно, используя kubeadm join phase. Примеры kubeadm join команд: Для рабочих узлов: kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443 Для узлов уровня управления: 45 kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef -control-plane 1.2.3.4:6443 Изоляция узла плоскости управления По умолчанию ваш кластер не будет планировать поды на узле плоскости управления по соображениям безопасности. Если вы хотите иметь возможность планировать поды на узле плоскости управления, например, для кластера Kubernetes на одной машине для разработки, запустите: kubectl taint nodes --all node-role.kubernetes.io/master- Результат выглядит примерно так: node "test-01" untainted taint "node-role.kubernetes.io/master:" not found taint "node-role.kubernetes.io/master:" not found Это удалит node-role.kubernetes.io/master заражение со всех узлов, в которых он есть, включая узел уровня управления, а это означает, что планировщик сможет планировать поды везде. Присоединение к вашим узлам В узлах выполняются ваши рабочие нагрузки (контейнеры, модули и т. Д.). Чтобы добавить новые узлы в свой кластер, сделайте следующее для каждой машины: SSH к машине Стать root (например sudo su -) Запустите команду, выведенную с помощью kubeadm init. Например: kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash> Если у вас нет токена, вы можете получить его, выполнив следующую команду на узле уровня управления: kubeadm token list По умолчанию срок действия токенов истекает через 24 часа. Если вы присоединяете узел к кластеру после истечения срока действия текущего токена, вы можете создать новый токен, выполнив следующую команду на узле плоскости управления: kubeadm token create Если у вас нет значения --discovery-token-ca-cert-hash, вы можете получить его, выполнив следующую цепочку команд на узле уровня управления: openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //' Удалить узел Обращаясь к узлу уровня управления с соответствующими учетными данными, запустите: kubectl drain <node name> --delete-local-data --force --ignore-daemonsets 46 Перед удалением узла сбросьте состояние, установленное kubeadm: kubeadm reset Процесс сброса не сбрасывает и не очищает правила iptables или таблицы IPVS. Если вы хотите сбросить iptables, вы должны сделать это вручную: iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X Если вы хотите сбросить таблицы IPVS, вы должны выполнить следующую команду: ipvsadm -C Теперь удалите узел: kubectl delete node <node name> Если вы хотите начать сначала, просто kubeadm init или kubeadm join используйте соответствующие аргументы Установка kubeadm на ваши хосты Примечание: если вы уже установили kubeadm, запустите apt-get update && apt-get upgradeили, yum update чтобы получить последнюю версию kubeadm. Для установки kubeadm выполним следующие команды: sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl Теперь kubelet перезапускается каждые несколько секунд, так как в аварийном цикле ждет, пока kubeadm скажет ему, что делать. При использовании Docker kubeadm автоматически обнаружит драйвер cgroup для kubelet и установит его в /var/lib/kubelet/config.yamlфайле во время выполнения. Инициализация узла уровня управления (kubeadm init) Напомним, узел уровня управления - это машина, на которой работают компоненты плоскости управления, включая etcd (база данных кластера) и API-сервер (с которым kubectl инструмент командной строки взаимодействует). Чтобы инициализировать узел плоскости управления, выполните: kubeadm init kubeadm init сначала запускает серию предварительных проверок, чтобы убедиться, что машина готова к запуску Kubernetes. Эти предварительные проверки выявляют предупреждения и завершают работу при ошибках. kubeadm init затем загружает и устанавливает компоненты плоскости управления кластером. Это займет несколько минут. Результат должен выглядеть так: [init] Using Kubernetes version: vX.Y.Z [preflight] Running pre-flight checks [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection 47 [preflight] You can also perform this action in beforehand using 'kubeadm config images pull' [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Activating the kubelet service [certs] Using certificateDir folder "/etc/kubernetes/pki" [certs] Generating "etcd/ca" certificate and key [certs] Generating "etcd/server" certificate and key [certs] etcd/server serving cert is signed for DNS names [kubeadm-cp localhost] and IPs [10.138.0.4 127.0.0.1 ::1] [certs] Generating "etcd/healthcheck-client" certificate and key [certs] Generating "etcd/peer" certificate and key [certs] etcd/peer serving cert is signed for DNS names [kubeadm-cp localhost] and IPs [10.138.0.4 127.0.0.1 ::1] [certs] Generating "apiserver-etcd-client" certificate and key [certs] Generating "ca" certificate and key [certs] Generating "apiserver" certificate and key [certs] apiserver serving cert is signed for DNS names [kubeadm-cp kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4] [certs] Generating "apiserver-kubelet-client" certificate and key [certs] Generating "front-proxy-ca" certificate and key [certs] Generating "front-proxy-client" certificate and key [certs] Generating "sa" key and public key [kubeconfig] Using kubeconfig folder "/etc/kubernetes" [kubeconfig] Writing "admin.conf" kubeconfig file [kubeconfig] Writing "kubelet.conf" kubeconfig file [kubeconfig] Writing "controller-manager.conf" kubeconfig file [kubeconfig] Writing "scheduler.conf" kubeconfig file [control-plane] Using manifest folder "/etc/kubernetes/manifests" [control-plane] Creating static Pod manifest for "kube-apiserver" [control-plane] Creating static Pod manifest for "kube-controller-manager" [control-plane] Creating static Pod manifest for "kube-scheduler" [etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests" [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s [apiclient] All control plane components are healthy after 31.501735 seconds [uploadconfig] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace [kubelet] Creating a ConfigMap "kubelet-config-X.Y" in namespace kube-system with the configuration for the kubelets in the cluster [patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "kubeadm-cp" as an annotation [mark-control-plane] Marking the node kubeadm-cp as control-plane by adding the label "noderole.kubernetes.io/master=''" [mark-control-plane] Marking the node kubeadm-cp as control-plane by adding the taints [noderole.kubernetes.io/master:NoSchedule] [bootstrap-token] Using token: <token> [bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles [bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials [bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token 48 [bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster [bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a Pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: /docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash> Чтобы kubectl работал на пользователя без полномочий root, выполните следующие команды, которые также являются частью kubeadm init вывода: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config В качестве альтернативы, если вы являетесь root пользователем, вы можете запустить: export KUBECONFIG=/etc/kubernetes/admin.conf Сделайте запись kubeadm join команды, которую выводит kubeadm init. Эта команда нужна вам для присоединения узлов к вашему кластеру. Маркер используется для взаимной аутентификации между узлом уровня управления и присоединяющимися узлами. Включенный здесь токен является секретным. Держите его в безопасности, потому что любой, у кого есть этот токен, может добавлять аутентифицированные узлы в ваш кластер. Эти токены можно перечислить, создать и удалить с помощью kubeadm token команды. Установка сетевой надстройки Pod Вы можете установить надстройку сети Pod с помощью следующей команды на узле плоскости управления или на узле, имеющем учетные данные kubeconfig: kubectl apply -f <add-on.yaml> Вы можете установить только одну сеть Pod на кластер. 49 После установки сети Pod вы можете убедиться, что она работает, проверив, что CoreDNS Pod находится Runningв выходных данных kubectl get pods --all-namespaces. И как только CoreDNS Pod запущен и работает, вы можете продолжить, присоединив свои узлы. Присоединение к вашим узлам В узлах выполняются ваши рабочие нагрузки (контейнеры, модули и т. Д.). Чтобы добавить новые узлы в свой кластер, сделайте следующее для каждой машины: SSH к машине Стать root (например sudo su -) Запустите команду, выведенную с помощью kubeadm init. Например: kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash> Если у вас нет токена, вы можете получить его, выполнив следующую команду на узле уровня управления: kubeadm token list Результат похож на этот: TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS 8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system: signing token generated by bootstrappers: 'kubeadm init'. kubeadm: default-node-token По умолчанию срок действия токенов истекает через 24 часа. Если вы присоединяете узел к кластеру после истечения срока действия текущего токена, вы можете создать новый токен, выполнив следующую команду на узле плоскости управления: kubeadm token create Результат похож на этот: 5didvk.d09sbcov8ph2amjw Если у вас нет значения --discovery-token-ca-cert-hash, вы можете получить его, выполнив следующую цепочку команд на узле уровня управления: openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //' Результат похож на: 8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78 [preflight] Running pre-flight checks ... (log output of join workflow) ... Node join complete: * Certificate signing request sent to control-plane and response 50 received. * Kubelet informed of new secure connection details. Run 'kubectl get nodes' on control-plane to see this machine join. Через несколько секунд вы должны заметить этот узел в выходных данных kubectl get nodes при запуске на узле плоскости управления. Развертывание и настройка контейнера В первую очередь, ставим пакет lxc и все необходимые утилиты: sudo apt-get install lxc bridge-utils Смотрим доступные группы томов LVM: $sudo vgs VG #PV #LV #SN Attr VSize VFree nethack-vg 1 6 0 wz--n- 119,00g 7,36g sudo lxc-create -t debian -B lvm --vgname nethack-vg --fssize 2G -n deb_test Указываем использовать LVM в качестве системы хранения, Volume Group ( в моем случае — nethack-vg) и размер 2 гигабайта, иначе по умолчанию будет создан одногиговый том. Хотя, если вдруг стало тесно, можно будет сделать lvresize. Смотрим: Рисунок 50 $sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert deb_test nethack-vg -wi-ao---- 2,00g home nethack-vg -wi-ao---- 93,09g 51 root tmp var vm nethack-vg -wi-ao---- 8,38g nethack-vg -wi-ao---- 380,00m nethack-vg -wi-ao---- 2,79g nethack-vg -wi-ao---- 5,00g Видим, что у нас появился том deb_test. Типовой конфиг, созданный скриптом: /var/lib/lxc/deb_test/config Стартуем: sudo lxc-start -n deb_test Рисунок 51 «Залогинимся» с указанным паролем. Для запуска в headless-режиме используется ключ -d, а рутовую консоль можно получить с помощью команды sudo lxc-attach -n deb_test Пока у нас ни сети, ни нужных для работы программ. Для этого на хосте поднимаем мост, задаем IP, заворачиваем трафик из подсети виртуалки, при отключении интерфейса разрушаем мост. На хосте прописываем в /etc/network/interfaces auto lo br0 iface br0 inet static address 172.20.0.1 52 netmask 255.255.255.0 pre-up /sbin/brctl addbr br0 post-up /sbin/brctl setfd br0 0 post-up iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE post-up echo 1 > /proc/sys/net/ipv4/ip_forward pre-down /sbin/brctl delbr br0 В конфигурации контейнера дописываем: lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 00:01:02:03:04:05 Понятно, что mac-адрес произвольный, на любой вкус. Чтобы сразу получить рабочую сеть и возможность установки пакетов apt'ом, допишем lxc.network.ipv4 = 172.20.0.3 lxc.network.ipv4.gateway = 172.20.0.1 И выполним echo "nameserver 192.168.18.1">/etc/resolv.conf Понятно, что 192.168.18.1 — IP для DNS. Установим нужные пакеты: #apt-get install vim openvpn zsh iftop Дальше либо на хосте, либо на другой рабочей виртуальной машине можно получить список установленных пакетов и установить их все в нашем новом контейнере: scp [email protected]:/etc/apt/sources.list /etc/apt/ scp -r [email protected]:/etc/apt/sources.list.d /etc/apt/ apt-get update ssh [email protected] 'dpkg --get-selections|grep -v deinstall'|dpkg --set-selections apt-get dselect-upgrade 53 Теперь можно настроить сетевой интерфейс в контейнере, использовав любимый текстовый редактор: /etc/network/interfaces: auto lo eth0 iface lo inet loopback iface eth0 inet static address 172.20.0.3 netmask 255.255.255.0 gateway 172.20.0.1 dns-nameservers 192.168.18.1 Впрочем, это можно было сделать с хост-системы, например, смонтировав логический том. Способов много. В принципе, в качестве DNS можно указать любой публичный, если не опасаетесь за свою приватность. Например, гугл 8.8.8.8 и 8.8.4.4. Добавим для этого следующую строчку в конфигурации: lxc.cgroup.devices.deny = a Удаляем lxc.include = /usr/share/lxc/config/debian.common.conf Попробуем подключиться через OpenVPN. Сразу же получаем ошибку: Thu Oct 15 16:39:33 2015 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2) Thu Oct 15 16:39:33 2015 Exiting due to fatal error 54 Рисунок 52 Система пишет, что интерфейсы TUN/TAP недоступны по причине их отсутствия. Очевидно, что нужно разрешить гостевой системе использовать устройства хоста. Открываем конфигурационный файл контейнера, /var/lib/lxc/deb_test/config и добавляем туда строчку: lxc.cgroup.devices.allow = c 10:200 rwm В контейнере выполняем: root@deb_test:/# mkdir /dev/net; mknod /dev/net/tun c 10 200 Рисунок 53 Обратим внимание на 10:200 — это идентификатор типа устройств. Если выполним на хосте: $ls -l /dev/net/tun crw-rw-rw- 1 root root 10, 200 окт 13 10:30 /dev/net/tun То увидим идентификаторы 10, 200. По ним и будем ориентироваться, разрешая доступ к устройствам, например, камере — video0. 55 lxc.cgroup.devices.allow = c 81:* rwm Точно также добавляем остальные нужные устройства: # /dev/null and zero lxc.cgroup.devices.allow = c 1:3 rwm lxc.cgroup.devices.allow = c 1:5 rwm # consoles lxc.cgroup.devices.allow = c 5:1 rwm lxc.cgroup.devices.allow = c 5:0 rwm lxc.cgroup.devices.allow = c 4:0 rwm lxc.cgroup.devices.allow = c 4:1 rwm # /dev/{,u}random lxc.cgroup.devices.allow = c 1:9 rwm lxc.cgroup.devices.allow = c 1:8 rwm lxc.cgroup.devices.allow = c 136:* rwm lxc.cgroup.devices.allow = c 5:2 rwm # rtc lxc.cgroup.devices.allow = c 254:0 rm #usb passthrough lxc.cgroup.devices.allow = c 189:* rwm #video lxc.cgroup.devices.allow = c 81:* rwm #sound lxc.cgroup.devices.allow = c 116:* rwm lxc.cgroup.devices.allow = c 14:* rwm Для функционирования иксов и возможности их проброса через ssh, нужно добавить точку монтирования: lxc.mount.entry = /tmp/.X11-unix/X0 tmp/.X11-unix/X0 none bind,optional,create=file По аналогии можно примонтировать и другие, нужные каталоги и файлы: lxc.mount.entry = /home/user/.vim home/user/.vim none bind,optional,create=dir 0 0 lxc.mount.entry = /home/user/.vimrc home/user/.vimrc none bind,optional,create=file 0 0 Для воспроизведения звука, можно разрешить доступ к звуковому устройству, если карта многопоточная (с однопоточной при использовании dmix возникают проблемы с блокировкой): 56 lxc.cgroup.devices.allow = c 116:* rwm lxc.cgroup.devices.allow = c 14:* rwm lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir 0 0 А можно настроить pulseaudio на воспроизведение звука по сети, как это описано здесь. Кратко: Отредактировать на хосте /etc/pulse/default.pa, дописав туда: load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.20.0.3 auth-anonymous=1 В итоге у нас получается вот такой конфиг: /var/lib/lxc/deb_test/config Контейнер готов к использованию. Использование До установим, например, i2p с Tor'ом, если не сделали этого ранее, и настроим privoxy: wget -q https://geti2p.net/_static/i2p-debian-repo.key.asc -O- | sudo apt-key add echo "deb http://deb.i2p2.no/ jessie main" >/etc/apt/sources.list.d/i2p.list echo "deb-src http://deb.i2p2.no/ jessie main" >>/etc/apt/sources.list.d/i2p.list apt-get update apt-get install privoxy i2p tor /etc/privoxy/config Запускать графические приложения вроде браузера удобнее всего через ssh: ssh -Y 172.20.0.2 "PULSE_SERVER=172.20.0.1 http_proxy=127.0.0.1:8118 chromium" 57 Рисунок 54 Также, разумеется, LXC предоставляет средства для клонирования контейнеров и снятия снапшотов. Так, например, склонировать контейнер, файловая система которого будет являться LVM-снапшотом можно командой: sudo lxc-clone -s -H -o deb_test -L 200M --new deb_test2 Рисунок 55 Будет создан контейнер deb_test2 с файловой системой, размещенной на LVMснапшоте размером 200MB (под хранение diff'ов). Это будет точная копия deb_test, над которой можно провести пару экспериментов и, например, безболезненно удалить. 58 Поздравляем! Ваша система развернута и готова к использованию. Итог проделанной работы После выполнения всех этапов разработки можно получить расширенные навыки работы с Kubernetes. Тема довольно обширная и сложная, но очень интересная. Развернув таким образом проект на одной машине, вы сможете развернуть его там, где вам нужно, посредством Docker, просто скопировав туда конфигурацию. Именно поэтому данная технология завоевала такую большую популярность среди разработчиков и DevOps. 59 Глоссарий Термин Master Узел (нода) Pod Replication controller Service Kubelet Kubectl Описание Машина, управляющая узлами (нодами) Kubernetes. Машины, выполняющие назначенные задачи. В Kubernetes их контролирует мастер. Группа из одного или нескольких контейнеров, развернутых на одном узле. Все контейнеры в поде совместно используют IPадрес, IPC, имя хоста и другие ресурсы. Поды абстрагируют сеть и хранилище от базового контейнера. Это позволяет более легко перемещать контейнеры внутри кластера. Определяет, сколько идентичных копий пода должно быть запущено внутри кластера. Отделяет рабочие определения от подов. Прокси-серверы службы Kubernetes автоматически получают запросы на обслуживание нужного пода независимо от того, куда он перемещается в кластере. Эта служба работает на нодах и считывает манифесты контейнеров, а также обеспечивает их запуск и выполнение. Средство настройки командной строки для Kubernetes. 60 Приложение 1 Разработать техническое задание на программный продукт, предназначенный для наглядной демонстрации школьникам графиков функций одного аргумента y=f(x). Разрабатываемая программа должна рассчитывать таблицу значений и строить график функций на заданном отрезке по заданной формуле и менять шаг аргумента и границы отрезка. Кроме этого, программа должна запоминать введенные формулы. Пример разработки технического задания на программный продукт Федеральное агентство связи Федеральное государственное бюджетное образовательное учреждение высшего образования «Поволжский государственный университет телекоммуникаций и информатики» Кафедра Информационные системы и технологии «УТВЕРЖДАЮ» _____________________ «_____»____________ 2020г. ПРОГРАММА сортировки одномерного массива ТЕХНИЧЕСКОЕ ЗАДАНИЕ Листов 3 Разработал Иванов И.И. 61 1. Введение Настоящее техническое задание распространяется на разработку программы сортировки одномерного массива методами пузырька, прямого выбора, Шелла и быстрой сортировки, предназначенной для использования школьниками старших классов при изучении курса школьной информатики. 2. Основание для разработки 2.1.Программа разрабатывается на основе учебного плана кафедры «Информационных систем и технологий». 2.2.Наименование работы: «Программа сортировки одномерного массива». 2.3.Исполнитель: компания BcstSoft. 2.4.Соисполнители: ист. 3. Назначение Программа предназначена для использования школьниками при изучении темы «Обработка одномерных массивов» в курсе «Информатика». 4. Требования к программе или программному изделию 4.1. Требования к функциональным характеристикам 4.1.1. Программа должна обеспечивать возможность выполнения следующих функций: • ввод размера массива и самого массива; • хранение массива и памяти; • выбор метола сортировки; • вывод текстового описании метода сортировки; • вывод результата сортировки. 4.1.2. Исходные данные: • размер массива, заданный целым числом; • массив. 4.1.3. Организация входных и выходных данных. Входные данные поступают с клавиатуры. Выходные данные отображаются на экране и при необходимости выводятся на печать. 4.2.Требования к надежности Предусмотреть контроль вводимой информации. Предусмотреть блокировку некорректных действий пользователя при работе с системой. 4.3.Требования к составу и параметрам технических средств. Система должна работать на IBM-совместимых персональных компьютерах. Минимальная конфигурация: • тип процессора Pentium и выше; • объем оперативного запоминающего устройства 32 Мб и более; • объем свободного места на жестком диске 40 Мб. Рекомендуемая конфигурация: • тип процессора Pentium II 400; • объем оперативного запоминающего устройства 128 Мб; • объем свободного места на жестком диске 60 Мб. 4.4. Требования к программной совместимости. Программа должна работать под управлением семейства операционных систем Win 32 (Windows 2003/7/10/МЕ/ХР и т. п.). 5. Требования к программной документации 5.1.Разрабатываемые программные модули должны быть самодокументированы, т. е. тексты программ должны содержать все необходимые комментарии. 5.2.Разрабатываемая программа должна включать справочную информацию о работе программы, описания методов сортировки и подсказки учащимся. 62 5.3.В состав сопровождающей документации должны входить: Пояснительная записка на пяти листах, содержащая описание разработки. Руководство пользователя. 63 Приложение 2 Разработать техническое задание на разработку «Модуля автоматизированной системы оперативно-диспетчерского управления теплоснабжением корпусов института». Пример технического задания на разработку «УТВЕРЖДАЮ» _______________ «____»____________2020г. Техническое задание на разработку «Модуля автоматизированной системы оперативно-диспетчерского управления теплоснабжением корпусов Поволжского государственного университета телекоммуникаций и информатики» Самара 2020 64 1. Введение Работа выполняется в рамках проекта «Автоматизированная система оперативнодиспетчерского управления электротеплоснабжением корпусов Поволжского государственного университета телекоммуникаций и информатики». 2. Основание для разработки 2.1.Основанием для данной работы служит договор № 1234 от 10 марта 2020 г. 2.2.Наименование работы: «Модуль автоматизированной системы оперативно-диспетчерского управления теплоснабжением корпусов Поволжского государственного университета телекоммуникаций и информатики». 2.3.Исполнители: ОАО «Лаборатория создания программного обеспечения». 2.4.Соисполнители: нет. 3. Назначение разработки Создание модуля для контроля и оперативной корректировки состояния основных параметров обеспечения корпусов Поволжского государственного университета телекоммуникаций и информатики. 4. Технические требования 4.1. Требования к функциональным характеристикам. 4.1.1. Состав выполняемых функций. Разрабатываемое ПО должно обеспечивать: •сбор и анализ информации о расходовании тепла, горячей и холодной воды по данным теплосчетчиков SA-94 на всех тепловых выходах; •сбор и анализ информации с устройств управления системами воздушного отопления и кондиционирования типа РТ1 и РТ2 (разработки кафедры СММЭ и ТЦ); •предварительный анализ информации на предмет нахождения параметров в допустимых пределах и сигнализирование при выходе параметров за пределы допуска; •выдачу рекомендаций по дальнейшей работе; •отображение текущего состояния по набору параметров — циклически постоянно (режим работы круглосуточный), при сохранении периодичности контроля прочих параметров; •визуализацию информации по расходу теплоносителя: —текущую, аналогично показаниям счетчиков; —с накоплением за прошедшие сутки, неделю, месяц — в виде почасового графика для информации за сутки и неделю; —суточный расход — для информации за месяц. Для устройств управления приточной вентиляцией текущая информация должна содержать номер приточной системы и все параметры, выдаваемые на собственный индикатор. По отдельному запросу осуществляются внутренние настройки. В конце отчетного периода система должна архивировать данные. 4.1.2. Организация входных и выходных данных. Исходные данные в систему поступают в виде значений с датчиков, установленных в помещениях института. Эти значения отображаются на компьютере диспетчера. После анализа поступившей информации оператор диспетчерского пункта устанавливает необходимые параметры для устройств, регулирующих отопление и вентиляцию в помещениях. Возможна также автоматическая установка некоторых параметров для устройств регулирования. Основной режим использования системы — ежедневная работа. 4.2. Требования к надежности. Для обеспечения надежности необходимо проверять корректность получаемых данных с датчиков. 4.3. Условия эксплуатации и требования к составу и параметрам технических средств. 65 Для работы системы должен быть выделен ответственный оператор. Требования к составу и параметрам технических средств уточняются на этапе эскизного проектирования системы. 4.4. Требования к информационной и программной совместимости. Программа должна работать на платформах Windows 2000/2003/7/10/11. 4.5. Требования к транспортировке и хранению. Программа поставляется на лазерном носителе информации. Программная документация поставляется в электронном и печатном виде. 4.6. Специальные требования: •программное обеспечение должно иметь дружественный интерфейс, рассчитанный на пользователя (в плане компьютерной грамотности) квалификации; •ввиду объемности проекта задачи предполагается решать поэтапно, при этом модули ПО, созданные в разное время, должны предполагать возможность наращивания системы и быть совместимы друг с другом, поэтому документация на принятое эксплуатационное ПО должна содержать полную информацию, необходимую для работы программистов с ним; •язык программирования — по выбору исполнителя, должен обеспечивать возможность интеграции программного обеспечения с некоторыми видами периферийного оборудования (например, счетчик SA-94 и т. п.). 5. Требования к программной документации Основными документами, регламентирующими разработку будущих программ, должны быть документы Единой Системы Программной Документации (ЕСПД): руководство пользователя, руководство администратора, описание применения. 6. Технико-экономические показатели Эффективность системы определяется удобством использования системы для контроля и управления основными параметрами теплообеспечения помещений Поволжского государственного университета телекоммуникаций и информатики, а также экономической выгодой, полученной от внедрения аппаратно-программного комплекса. 7. Порядок контроля и приемки После передачи Исполнителем отдельного функционального модуля программы Заказчику последний имеет право тестировать модуль в течение 7 дней. После тестирования Заказчик должен принять работу по данному этапу или в письменном виде изложить причину отказа принятия. В случае обоснованного отказа Исполнитель обязуется доработать модуль. 8. Календарный план работ № этапа 1 2 3 Название этапа Изучение предметной области. Проектирование системы. Разработка предложений по реализации системы Разработка программного модуля по сбору и анализу информации со счетчиков и устройств управления. Внедрение системы для одного из корпусов ПГУТИ. Тестирование и отладка модуля. Внедрение системы в обоих корпусах ПГУТИ. Руководитель работ Сроки этапа 01.02.202028.02.2020 Чем заканчивается этап Предложения по работе системы. Акт сдачи приемки. 01.03.202031.08.2020 Программный комплекс решающий поставленные задачи для корпуса ПГУТИ. Акт сдачи приемки. 01.09.202030.12.2020 Готовая система контроля тепло обеспечения ПГУТИ. Программная документация. Акт сдачи приемки. Иванов И.И. 66 Приложение 3 Пример шаблона технического задания (ТЗ) на сайт ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ ИНТЕРНЕТ-САЙТА Структура документа: Глоссарий Общие положения Предмет разработки Назначение документа Требования к графическому дизайну сайта Требования к дизайну сайта Порядок утверждения дизайн-концепции Функциональные требования Требования к представлению сайта Требования к системе управления сайтом Требования к разделению доступа Требования к видам обеспечения Требования к информационному обеспечению Требования к программному обеспечению Требования к техническому обеспечению Требования к лингвистическому обеспечению Требования к эргономике и технической эстетике Требования к приемке-сдаче проекта Требования к наполнению информацией Требования к персоналу Порядок предоставления дистрибутива Порядок переноса сайта на технические средства заказчика 67 Глоссарий Термин Сайт Описание Информационная система, предоставляющая пользователям сети Интернет доступ к своему содержимому и функционалу в виде упорядоченного набора взаимосвязанных HTML-страниц World wide web (WWW, Единое информационное пространство на базе сети Internet, состоящее из web, веб) совокупности сайтов. Приставка "веб-" может использоваться для обозначения объектов, ориентированных на использование в WWW или использующих типичные для WWW технологии (например, веб-интерфейс - интерфейс на базе веб-страниц) HTML-страница (веб- Основной носитель информации в World ide Web. Особым образом страница, страница) сформатированный файл (набор файлов), просматриваемый с помощью wwwбраузера как единое целое (без перехода по гиперссылкам) HTML-теги (теги) Управляющие коды, посредством которых осуществляется форматирование HTML-страницы Гиперссылка (ссылка, Активный элемент HTML-страницы, задаваемый специальным тегом. линк) Выделенный фрагмент текста или изображения, позволяющий загрузить другую страницу или выполнить определенное действие WWW-браузер (браузер) Клиентская программа, поставляемая третьими сторонами и позволяющая просматривать содержимое HTML-страниц HTML-форма (форма) Часть HTML-страницы, предназначенная для взаимодействия с посетителем сайта. Представляет собой набор элементов (текстовых полей, селекторов, выпадающих списков), посредством которых пользователь может ввести какую-либо информацию и отправить ее для обработки на сервере Поле (поле БД, поле Структурный элемент, содержащий однотипную информацию, например, текст, формы) дату, числовые значения и т.п. Флаг Особое поле данных, могущее содержать только одно из двух допустимых значений. Позволяет указать на наличие или отсутствие какого-либо события или свойства объекта Справочник Вспомогательная структура данных, содержащая список допустимых значений для какого-либо поля основных форм или БД. Справочники подразделяются на фиксированные (неизменяемые и поставляемые Исполнителем вместе с готовым сайтом) и редактируемые (состав которых может изменяться администратором) Администратор (менеджер, Лицо, осуществляющее от имени Заказчика информационную поддержку сайта редактор) сайта Дизайн-шаблон страниц Файл, содержащий элементы внешнего оформления HTML страниц сайта, а также набор специальных тегов, используемых системой публикации сайта для вывода информации при создании окончательных HTML страниц Дизайн веб-сайта Уникальные для конкретного веб-сайта структура, графическое оформление и способы представления информации Информационные Информация о деятельности Заказчика. Может включать графические, материалы текстовые, аудио или видео материалы. Предоставляется Заказчиком Наполнение (контент) Совокупность информационного наполнения веб-сайта. Включает тексты, изображения, файлы и т.п. предназначенные для пользователей системы Элемент наполнения Отдельная запись в базе данных, внешнее представление которой зависит от (контента) управляющего ей программного модуля (например, в модуле «новостная лента» элементом наполнения является отдельная новость) Система динамического Информационная система, позволяющая авторизованным пользователям управления наполнением производить изменения иерархической структуры и информационного (контентом) сайта наполнения веб-сайта без использования каких либо дополнительных специальных программных средств Дамп Совокупность объектов базы данных, представленная в виде файлов, позволяющая восстановить точную копию структуры исходной базы данных в аналогичной системе управления базами данных Веб-интерфейс Совокупность экранов и элементов управления системы, позволяющих пользователю, осуществляющему доступ к системе через веб-браузер, осуществлять поддержку и управление системой. Шаблона раздела Ссобым образом размеченный ASCII-файл, определяющий как графическое 68 WYSIWYG редактор Роль оформление страниц раздела, так и их макет (раскладку) – взаимное расположение блоков с наполнением раздела Редактор языка HTML, имеющий возможности по работе в текстовом режиме и в режиме WYSIWYG (What You See Is What You Get). В режиме WYSIWYG элементы HTML страницы при редактировании представляются в том же виде, что и при просмотре Класс пользователей системы, обладающих определенным набором прав доступа Прочая техническая терминология понимается в соответствии с действующими стандартами и рекомендациями международных органов, ответственных за вопросы стандартизации в сети Интернет. Общие положения Предмет разработки Предметом разработки является Интернет-сайт компании ООО «…», с системой динамического управления наполнением на базе веб-интерфейса. Назначение сайта: - предоставление информации о компании ООО «…»; - предоставление информации о деятельности компании ООО «…»; - т.д.; - пр. Цель создания сайта: ... . Назначение документа В настоящем документе приводится полный набор требований к реализации сайта компании ООО "". Подпись Заказчика и Исполнителя на настоящем документе подтверждает их согласие с нижеследующими фактами и условиями: 1. Исполнитель подготовил и разработал настоящий документ, именуемый Техническое Задание, который содержит перечень требований к выполняемым работам. 2. Заказчик согласен со всеми положениями настоящего Технического Задания. 3. Заказчик не вправе требовать от Исполнителя в рамках текущего Договора выполнения работ либо оказания услуг, прямо не описанных в настоящем Техническом Задании. 4. Исполнитель обязуется выполнить работы в объёме, указанном в настоящем Техническом Задании. 5. Заказчик не вправе требовать от Исполнителя соблюдения каких-либо форматов и стандартов, если это не указано в настоящем Техническом Задании. 6. Все неоднозначности, выявленные в настоящем Техническом задании после его подписания, подлежат двухстороннему согласованию между Сторонами. В процессе согласования могут быть разработаны дополнительные требования, которые оформляются дополнительным соглашением к Договору и соответствующим образом оцениваются. Требования к графическому дизайну сайта Требования к дизайну сайта При разработке сайта должны быть использованы преимущественно светлые стили. Основные разделы сайта должны быть доступны с первой страницы. На первой странице не должно быть большого объема текстовой информации. В дизайне сайта не должны присутствовать: - мелькающие баннеры; 69 - много сливающегося текста; - т.д.; - пр. Порядок утверждения дизайн-концепции Под дизайн-концепцией понимается вариант оформления главной страницы и графическая оболочка внутренних страниц, демонстрирующие общее визуальное (композиционное, цветовое, шрифтовое, навигационное) решение основных страниц сайта. Дизайн-концепция представляется в виде файла (нескольких файлов) в растровом формате или в распечатке по согласованию сторон. Если представленная Исполнителем дизайн-концепция удовлетворяет Заказчика, он должен утвердить ее в течение пяти рабочих дней с момента представления. При этом он может направить Исполнителю список частных доработок, не затрагивающих общую структуру страниц и их стилевое решение. Указанные доработки производятся параллельно с разработкой программных модулей сайта. Внесение изменений в дизайнконцепцию после ее приемки допускается только по дополнительному соглашению сторон. Если представленная концепция не удовлетворяет требованиям Заказчика, последний предоставляет мотивированный отказ от принятия концепции с указанием деталей, которые послужили препятствием для принятия концепции и более четкой формулировкой требований. В этом случае Исполнитель разрабатывает второй вариант дизайн-концепции. Обязательства по разработке второго варианта дизайн-концепции Исполнитель принимает только после согласования и подписания дополнительного соглашения о продлении этапа разработки дизайн-концепции на срок не менее пяти рабочих дней. Дополнительные (третий и последующие) варианты разрабатываются Исполнителем за отдельную плату на основании дополнительных соглашений. Функциональные требования Требования к представлению сайта Требования к представлению главной страницы сайта Главная страница сайта должна содержать графическую часть, навигационное меню сайта, а также контентную область для того, чтобы посетитель сайта с первой страницы мог получить вводную информацию о компании, а также ознакомиться с последними новостями компании. Контентная область первой страницы должна делиться на следующие разделы: - вступительная статья о компании со ссылкой «подробнее», ведущей на раздел «О компании»; - новости - содержит 3 последние новости (анонсы) в формате: дата, заголовок, краткое содержание; - краткая контактная информация - телефон и e-mail компании; - вверху страницы отображаются облегченная навигационная панель, которая обеспечивает переход к основным пунктам меню сайта (О компании, Новости и т.д.); - поле поиска – предназначено для выполнения полнотекстового поиска по сайту; - поле выбора языка – русский\английский; - счетчики и ссылка на страницу обмена ссылками. 70 Рис. 1. Пример размещения элементов главной страницы Графическая оболочка внутренних страниц (общая для всех подразделов) Графическая оболочка внутренних страниц должна делиться на следующие разделы: - графическая шапка - навигационное меню сайта (навигационная панель 2 обеспечивает переход к основным пунктам меню сайта); - поле поиска – предназначено для выполнения полнотекстового поиска по сайту; - поле выбора языка – русский\английский; - ссылка «На главную»; - навигационная панель по подразделам выбранного раздела сайта; - поле для отображения контента выбранной страницы сайта; - внизу страницы - краткая контактная информация - телефон и e-mail компании; - кнопка «Для печати» - обеспечивает вывод контентной области в виде, отверстанном для печати на листах формата А4; - кнопка «Задать вопрос» - обеспечивает переход к форме «Задать вопрос». Рис. 2. Пример размещения элементов внутренних страниц сайта. Требования к структуре сайта Все названия разделов сайта, приведенные ниже, являются условными и могут корректироваться по согласованию с Заказчиком в ходе проектирования. Первоначальная структура сайта должна иметь следующий вид: 1.О компании a. История компании b. Дипломы и сертификаты c. Наши партнеры d. Наши клиенты 71 e. Наши координаты f. ... 2. Новости 3. т.д. 4. пр. Требования к системе управления сайтом Общие требования к административной части Для получения доступа к административной части сайта необходимо указать определенный адрес в строке браузера и пройти авторизацию. Главная страница административной части должна содержать следующие пункты меню: - Станицы сайта (в соответствии с первым уровнем структуры сайта): - О компании - Новости - т.д.; Рис. 3. Макет формы главной страницы административной части сайта. Требования к управлению разделами сайта Для управления разделами сайта должны быть предусмотрены следующие функции: - создание подраздела 1 уровня; - создание подраздела 2 (и далее) уровня; - редактирование контента страницы; - удаление раздела; - перемещение раздела вверх в списке; - перемещение раздела вниз в списке; - признак показа (show) или не показа (hide) страницы в клиентской части сайта; - отображение списка подразделов выбранного уровня. Управление наполнением сайта Для управления наполнением сайта должны быть предусмотрены следующие блоки: 1. поле элемента контента, может быть одного из следующих типов: - строка; - дата; - ссылка на файл; - многострочный текст; 2. элемент контента – состоит из набора полей элемента контента; 3. список элементов контента – состоит из набора элементов контента. 72 Рис. 4. Поля элемента контента. Поле элемента контента типа «Текст» должно редактироваться на отдельной странице в редакторе многострочного текста (данный редактор допускает включение в текст изображений). Рис. 5. Редактор многострочного текста в административной части. Для каждого элемента контента должен определяться требуемый набор полей. Например, для элемента «Новость» определяется следующий набор полей контента: Рис. 6. Пример представления элемента контента «Новость» в административной части. Список элементов контента должен позволять: • перейти к редактированию полей элемента списка; • удалить элемент списка; • определить порядок элементов списка вывода в клиентской части; •указать признак hide\show. 73 Рис. 7. Пример представления списка элементов контента в административной части и их отображения в клиентской части. В списке элементов должны выводиться все поля элемента, кроме полей вида «Многострочный текст». Управление настройками сайта В состав настроек сайта должны входить: - e-mail для …; - т.д.; - пр. Дополнительные функции административной части В состав дополнительных функций административной части должны входить: - …; Требования к разделению доступа Все опубликованные разделы сайта должны открываться для доступа на чтение без аутентификации пользователя. При попытке входа в закрытый раздел у пользователя не прошедшего аутентификацию, должен быть запрошен логин и пароль. После прохождения аутентификации система должна проверять полномочия пользователя на доступ к запрошенному разделу. Если доступ запрещен, пользователю должно быть выведено сообщение о невозможности доступа в закрытый раздел. Требования к видам обеспечения Требования к информационному обеспечению Требования к хранению данных Все данные сайта должны храниться в структурированном виде под управлением реляционной СУБД. Исключения составляют файлы данных, предназначенные для просмотра и скачивания (изображения, видео, документы и т.п.). Такие файлы сохраняются в файловой системе, а в БД размещаются ссылки на них. Наполнение различных сайтов, функционирование которых поддерживается одной и той же инсталляцией системы, должно храниться под управлением единой СУБД. Требования к языкам программирования Для реализации статических страниц и шаблонов должны использоваться языки HTML 4.0 и CSS. Исходный код должен разрабатываться в соответствии со стандартами W3C (HTML 4.0). Для реализации интерактивных элементов клиентской части должны использоваться языки JavaScript и DHTML. Для реализации динамических страниц Требования к организации гиперссылок должен использоваться язык PHP. 74 Все ссылки на сайте должны быть относительными (за исключением внешних). Требования к иллюстрациям Все рисунки и фото объемом более 1 kb (кроме элементов дизайна страницы) должны быть выполнены с замещающим текстом. Все рисунки должны быть в формате gif или jpg. Требования к объему одной страницы Объем одной стандартной загружаемой страницы сайта в среднем не должен превышать 170 kb. Объем flash-заставки не должен превышать 300 Kb. Требования к программному обеспечению Требования к программному обеспечению серверной части Для функционирования сайта необходимо следующее программное обеспечение: - Операционная система – Windows XP и Windows Server 2003; - Веб-сервер – Apache версии не ниже 1.3.26; - СУБД – MySQL версии не ниже 3.23; Требования к клиентскому программному обеспечению Сайт должен быть доступен для полнофункционального просмотра с помощью следующих браузеров: • MS IE 5.0 и выше; • Opera 6.0 и выше; • Mozilla Firefox 1.0; • Mozilla 1.7. Сайт должен быть работоспособен (информация, расположенная на нем, должна быть доступна) при отключении в браузере поддержки flash и JavaScript. Требования к техническому обеспечению Для функционирования сайта необходимо следующее техническое обеспечение со следующими минимальными характеристиками: - процессор – Intel Pentium III 1 Ghz; - оперативная память – 512 Mb RAM; - жесткий диск - 20 Gb HDD. - т.д.; - пр. Требования к лингвистическому обеспечению Сайт должен выполняться на русском и английском языках. Должна быть предусмотрена возможность переключения между русским и английским языками на любой из страниц сайта. Требования к эргономике и технической эстетике 75 Сайт должен быть оптимизирован для просмотра при разрешении 1024*768, 1280*1024 без горизонтальной полосы прокрутки и без пустых (белых) полей для основных типов разрешения. Элементы управления должны быть сгруппированы однотипно – горизонтально либо вертикально – на всех страницах. На каждой странице должны отображаться логотип компании и контактная информация. Интерфейс подключаемых модулей должен быть выполнен в едином стиле с интерфейсом ядра системы и должен обеспечивать возможность прозрачного перемещения администратора между модулями системы и использование одинаковых процедур управления и навигационных элементов для выполнения однотипных операций. Требования к приемке-сдаче проекта Требования к наполнению информацией Общие требования к информационному наполнению В рамках работ по данному проекту Исполнитель обеспечивает наполнение разделов сайта предоставленными Заказчиком материалами в порядке, указанном в п. 6.1.2. Исполнитель обеспечивает обработку иллюстраций для приведения их в соответствие с техническими требованиями и HTML-верстку подготовленных материалов. Сканирование, набор и правка-вычитка текстов, ретушь, монтаж, перевод и другие работы могут быть выполнены Исполнителем на основании дополнительного соглашения (после просмотра имеющихся у заказчика материалов). После сдачи системы в эксплуатацию информационное наполнение разделов, осуществляется на основании договора на поддержку сайта. Объем текста и количество иллюстраций в других типах разделов определяется предусмотренной настоящим ТЗ структурой данных и уточняется на этапе согласования дизайн-концепции. Порядок предоставления информационного наполнения Заказчик предоставляет материалы в электронной форме в zip-архиве, содержащем дерево директорий, соответствующих структуре сайта. В каждой директории размещается набор документов в формате MS Word – по одному документу на каждый информационный модуль, информационные блоки которого опубликованы в соответствующем разделе. Не допускается размещение текста в виде графических изображений или иных нетекстовых элементов. Изображения могут быть размещены как в тексте внутри файла, так и в виде отдельного изображения. Однако, в последнем случае текст должен содержать ссылку на изображение в виде указания пути и названия файла изображения. Для каждого информационного модуля структура документа должна соответствовать шаблонам, предоставляемым Исполнителем до начала этапа предоставления материалов. Материалы для первоначального наполнения разделов должны быть полностью представлены Исполнителю в сроки, установленные планом-графиком работ. Допускается передача материалов частями, в нескольких zip-файлах, соответствующих приведенным требованиям. Передача материалов в объеме и формате, соответствующем настоящему ТЗ закрепляется подписанием Акта о передаче информационного наполнения. Любые изменения информационного наполнения силами Исполнителя после подписания данного Акта допускаются только на основании отдельного соглашения за дополнительную плату. 76 Информационные материалы, не предоставленные Заказчиком в сроки, установленные планом-графиком работ, размещаются Исполнителем по гарантийному письму Исполнителя в течение 2-х недель после сдачи-приемки проекта. На эту часть информационных материалов также накладываются требования к формату предоставления, изложенные выше. Требования к персоналу Для эксплуатации веб-интерфейса системы динамического управления наполнением от администратора не должно требоваться специальных технических навыков, знания технологий или программных продуктов, за исключением общих навыков работы с персональным компьютером и стандартным веб-браузером (например, MS IE 6.0 или выше). Порядок предоставления дистрибутива По окончании разработки Исполнитель должен предоставить Заказчику дистрибутив системы в составе: -архив с исходными кодами всех программных модулей и разделов сайта; - дамп проектной базы данных с актуальной информацией. Дистрибутив предоставляется на CD-диске в виде файлового архива. Порядок переноса сайта на технические средства заказчика После завершения сдачи-приемки сайта, в рамках гарантийной поддержки Исполнителем производится однократный перенос разработанного программного обеспечения на аппаратные средства Заказчика. Соответствие программно-аппаратной платформы требованиям настоящего документа обеспечивает Заказчик. Перед осуществлением переноса Заказчик обеспечивает удаленный shell-доступ к веб-серверу и доступ к базе данных сайта. 77