DevOps-инженер: полная программа

Практический курс по освоению ключевых инструментов DevOps-инженера. Вы изучите администрирование ОС, контейнеризацию, автоматизацию и мониторинг, чтобы эффективно управлять инфраструктурой и решать реальные задачи [ru.hexlet.io](https://ru.hexlet.io/programs/devops-engineer-from-scratch) с использованием современных облачных технологий [teachmeskills.by](https://teachmeskills.by/kursy/kursy-dev-ops-online).

1. Основы Linux и сетевые технологии (сети, TCP/IP)

Операционная система Linux и сетевой стек TCP/IP: фундамент инфраструктуры

Любая современная IT-инфраструктура базируется на серверах, а подавляющее большинство серверов в мире работают под управлением операционной системы Linux. Понимание того, как устроена эта система и как серверы обмениваются данными по сети, является отправной точкой для любого специалиста, занимающегося автоматизацией, развертыванием и поддержкой приложений.

Архитектура и философия Linux

Операционная система состоит из множества компонентов, но её сердцем является ядро (kernel). Ядро управляет ресурсами компьютера: процессором, оперативной памятью и периферийными устройствами. Пользователи и программы взаимодействуют с ядром через системные вызовы, используя командную оболочку или графический интерфейс.

Ключевая особенность систем семейства Unix, к которым относится Linux, заключается в унифицированном подходе к ресурсам.

> Всё есть файл, а если это не файл, то это процесс. > > Операционные системы и сети

Это означает, что конфигурации, жесткие диски, сетевые интерфейсы и даже информация о запущенных программах представлены в системе в виде файлов. Например, чтобы узнать информацию о процессоре сервера, достаточно прочитать содержимое текстового файла /proc/cpuinfo.

Иерархия файловой системы

В Linux нет привычных для пользователей Windows дисков «C:» или «D:». Вся файловая система представляет собой единое дерево, которое начинается с корневого каталога, обозначаемого символом /.

* /bin и /sbin — содержат исполняемые файлы основных системных утилит. * /etc — хранит глобальные конфигурационные файлы программ и сервисов. * /var — используется для часто изменяемых данных, таких как логи приложений и базы данных. * /home — содержит домашние директории пользователей.

Если приложение генерирует 500 мегабайт логов ежедневно, эти данные будут накапливаться именно в директории /var/log. Переполнение этого раздела — частая причина отказа серверных служб.

Права доступа в Linux

Безопасность в Linux строится на строгом разграничении прав доступа. Каждый файл и директория принадлежат определенному пользователю и группе. Права делятся на три категории: чтение (Read), запись (Write) и выполнение (Execute).

| Действие | Символьное обозначение | Числовое значение | Описание | | :--- | :--- | :--- | :--- | | Чтение | r | 4 | Позволяет просматривать содержимое файла или список файлов в директории | | Запись | w | 2 | Позволяет изменять файл или создавать/удалять файлы в директории | | Выполнение | x | 1 | Позволяет запускать файл как программу или переходить в директорию |

Права назначаются отдельно для владельца файла, для группы владельца и для всех остальных пользователей. Числовое представление прав получается путем сложения значений.

Например, команда chmod 755 script.sh устанавливает следующие права: Владелец получает права 7 (4 + 2 + 1), то есть чтение, запись и выполнение. Группа получает права 5 (4 + 1) — только чтение и выполнение. Остальные пользователи также получают права 5. Это стандартная конфигурация для скриптов, которые должен изменять только создатель, но запускать могут все.

Сетевое взаимодействие и стек TCP/IP

Локальный сервер бесполезен, если он не может общаться с внешним миром. Взаимодействие между компьютерами, контейнерами и базами данных регулируется набором сетевых протоколов. Главным стандартом интернета является стек TCP/IP.

Стек TCP/IP делит процесс передачи данных на четыре логических уровня, каждый из которых решает свою узкую задачу:

  • Прикладной уровень (Application) — отвечает за взаимодействие с пользователем и приложениями. Здесь работают протоколы HTTP (веб-сайты), FTP (передача файлов), SMTP (электронная почта).
  • Транспортный уровень (Transport) — обеспечивает доставку данных между конкретными программами на разных компьютерах.
  • Сетевой уровень (Internet) — отвечает за маршрутизацию пакетов между различными сетями. Главный протокол здесь — IP.
  • Канальный уровень (Network Access) — управляет физической передачей сигналов по кабелям или радиоволнам (например, Ethernet или Wi-Fi).
  • Представьте отправку посылки. Прикладной уровень — это вы, упаковывающие товар в коробку. Транспортный уровень — курьерская служба, гарантирующая доставку. Сетевой уровень — логистический центр, прокладывающий маршрут между городами. Канальный уровень — грузовик, физически везущий коробку по шоссе.

    Транспортный уровень: TCP против UDP

    На транспортном уровне доминируют два протокола: TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). Выбор между ними зависит от того, что важнее для приложения: надежность или скорость.

    | Характеристика | TCP | UDP | | :--- | :--- | :--- | | Гарантия доставки | Да (пакеты проверяются и пересылаются при потере) | Нет (пакеты отправляются «вслепую») | | Порядок данных | Строго сохраняется | Может нарушаться | | Скорость работы | Ниже (из-за накладных расходов на проверки) | Выше | | Примеры использования | Веб-сайты, базы данных, передача файлов | Онлайн-игры, видеостриминг, DNS-запросы |

    Протокол TCP устанавливает надежное соединение с помощью механизма «тройного рукопожатия». Сначала клиент отправляет серверу пакет синхронизации. Сервер отвечает подтверждением. Затем клиент подтверждает ответ сервера. Только после этого начинается передача полезных данных. Если при скачивании архива размером 2 гигабайта по TCP потеряется хотя бы один байт, протокол автоматически запросит его повторно, чтобы файл не оказался поврежденным.

    IP-адресация и порты

    Чтобы пакет данных нашел своего адресата в глобальной сети, используется IP-адрес. Самая распространенная версия протокола — IPv4. Такой адрес состоит из четырех чисел от 0 до 255, разделенных точками, например 192.168.1.15.

    Математически IPv4-адрес представляет собой 32-битное число. Общее количество возможных адресов вычисляется по формуле:

    Где — максимальное количество уникальных IP-адресов. Это значение равно 4 294 967 296. Из-за того, что устройств в мире стало значительно больше четырех миллиардов, IT-индустрия постепенно переходит на протокол IPv6, который использует 128-битные адреса.

    Однако IP-адрес указывает только на конкретный сервер. На одном сервере могут одновременно работать десятки программ: веб-сервер, база данных, почтовый сервис. Чтобы сетевой пакет попал в нужную программу, используются порты.

    Порт — это числовой идентификатор от 0 до 65535. Комбинация IP-адреса и порта называется сокетом. Например, когда вы открываете сайт, ваш браузер неявно обращается к IP-адресу сервера по порту 80 (для обычного HTTP) или 443 (для защищенного HTTPS). Если IP-адрес — это номер многоквартирного дома, то порт — это номер конкретной квартиры, где живет нужное приложение.

    Понимание того, как процессы в Linux открывают сетевые порты и как трафик маршрутизируется между ними, является критически важным навыком. Без этих знаний невозможно настроить балансировщик нагрузки, защитить сервер с помощью межсетевого экрана или связать между собой изолированные контейнеры.