ЗИТ Тестовое задание: Junior DevOps / Системный администратор (Linux)
Добавлено: 31 июл 2025, 09:46
Завод инновационных технологий
Цель:
Проверить базовые навыки работы с Linux, CI/CD, контейнерами, мониторингом и автоматизацией.
1. Подготовка тестового окружения:
На своём локальном ПК или виртуалке (например, Ubuntu 20.04+): Установите и настройте nginx Настройте systemd-сервис, чтобы nginx запускался при старте системы
Ожидаемый результат: Nginx работает systemctl status nginx показывает активное состояние
2. Напишите простой .gitlab-ci.yml файл Сценарий:
Этап test должен запускать проверку наличия установленного nginx: bash Copy Edit which nginx && nginx -v
Ожидаемый результат: Корректный файл .gitlab-ci.yml с минимальным пайплайном Комментарии внутри объясняют, что делает каждая стадия
3. Работа с Docker (по желанию, но желательно):
Напишите Dockerfile, который собирает образ с nginx и выводит “Hello from DevOps!” на главной странице
Ожидаемый результат:
Рабочий Dockerfile Контейнер поднимается и отвечает на curl localhost или через браузер
4. (На выбор) Мини-задание по YAML / Kubernetes:
Напишите простейший deployment.yaml, который запускает nginx в 1 реплике
Ожидаемый результат:
Корректный YAML-файл, описывающий Deployment Используется nginx:stable Указаны replicas, containers, ports
5. Ответьте письменно на 3 вопроса:
Чем отличается apt update от apt upgrade?
Как вы проверите, слушает ли сервис нужный порт?
Какие команды вы используете для диагностики сетевых проблем?
Цель:
Проверить базовые навыки работы с Linux, CI/CD, контейнерами, мониторингом и автоматизацией.
1. Подготовка тестового окружения:
На своём локальном ПК или виртуалке (например, Ubuntu 20.04+): Установите и настройте nginx Настройте systemd-сервис, чтобы nginx запускался при старте системы
Ожидаемый результат: Nginx работает systemctl status nginx показывает активное состояние
Ниже приведена пошаговая инструкция по установке и настройке nginx на Ubuntu 20.04+ с автоматическим запуском при старте системы через systemd.
1. Установка nginx
Откройте терминал и выполните команды:
bash2. Проверка статуса nginxКод: Выделить всё
sudo apt update sudo apt install nginx -y
bashНа этом этапе nginx должен быть активен и работать. Если всё правильно, вы увидите статус `active (running)`.Код: Выделить всё
systemctl status nginx
3. Настройка systemd-сервиса (если требуется)
По умолчанию, nginx устанавливается с системным unit-файлом, и systemd управляет им автоматически. Но если нужно создать или изменить его вручную, выполните следующее:
a) Создайте или откройте файл сервиса
bashb) Вставьте в него следующий минимальный конфиг:Код: Выделить всё
sudo mcedit /etc/systemd/system/nginx.service
iniОбратите внимание, что стандартный unit-файл nginx обычно уже установлен. Этот пример подходит, если нужно создать или заменить его.Код: Выделить всё
[Unit] Description=A high performance web server and a reverse proxy server After=network.target [Service] Type=simple ExecStart=/usr/sbin/nginx -g 'daemon off;' ExecReload=/bin/kill -s HUP $MAINPID PIDFile=/run/nginx.pid Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
4. Перезагрузите systemd и включите nginx в автозагрузку
bash5. Запустите nginxКод: Выделить всё
sudo systemctl daemon-reload sudo systemctl enable nginx
bashили перезапустите, чтобы убедиться, что всё работает:Код: Выделить всё
sudo systemctl start nginx
bash6. Проверьте статусКод: Выделить всё
sudo systemctl restart nginx
bashДолжно показывать `active (running)`.Код: Выделить всё
systemctl status nginx
Итог
- nginx установлен и запущен.
- systemd управляет nginx и настроен на автоматический запуск при старте системы.
- Статус `systemctl status nginx` показывает активное состояние.
2. Напишите простой .gitlab-ci.yml файл Сценарий:
Этап test должен запускать проверку наличия установленного nginx: bash Copy Edit which nginx && nginx -v
Ожидаемый результат: Корректный файл .gitlab-ci.yml с минимальным пайплайном Комментарии внутри объясняют, что делает каждая стадия
Вот пример простого `.gitlab-ci.yml` файла с одним этапом `test`, который проверяет наличие nginx и выводит его версию. В комментариях объясняется, что делает каждая часть:
yamlКод: Выделить всё
# Определяем пайплайн с одним этапом 'test' stages: - test # Этап 'test' test_nginx: stage: test script: - echo "Проверка наличия nginx и вывод версии" # Находит путь к nginx - which nginx # Выводит версию nginx - nginx -v # Используем образ с Linux image: alpine:latest # Устанавливаем nginx, чтобы команда which nginx работала before_script: - apk add --no-cache nginx
Объяснение:
- `stages:` — определяет стадии пайплайна, у нас только `test`.
- `test_nginx:` — название задачи (джоба).
- `stage: test` — указывает, что задача относится к стадии `test`.
- `script:` — список команд, которые выполняются в ходе задачи:
- `which nginx` — проверяет, установлен ли nginx и выводит его путь.
- `nginx -v` — выводит версию nginx.
- `image:` — базовый Docker-образ (здесь Alpine Linux).
- `before_script:` — команды, которые выполняются перед основным скриптом, устанавливаем nginx.
Это минимальный рабочий пример для проверки наличия nginx и его версии в CI/CD пайплайне GitLab.
3. Работа с Docker (по желанию, но желательно):
Напишите Dockerfile, который собирает образ с nginx и выводит “Hello from DevOps!” на главной странице
Ожидаемый результат:
Рабочий Dockerfile Контейнер поднимается и отвечает на curl localhost или через браузер
Вот пример Dockerfile, который собирает образ с nginx и выводит “Hello from DevOps!” на главной странице:
dockerfileИнструкции по сборке и запуску:Код: Выделить всё
# Используем официальный образ nginx как базовый FROM nginx:latest # Удаляем дефолтную страницу nginx RUN rm /usr/share/nginx/html/index.html # Копируем нашу страницу с сообщением RUN echo "<html><body><h1>Hello from DevOps!</h1></body></html>" > /usr/share/nginx/html/index.html # Открываем порт 80 EXPOSE 80
1. Создайте файл с именем `Dockerfile` и вставьте туда вышеуказанный код.
2. Соберите образ командой:
bash3. Запустите контейнер:Код: Выделить всё
docker build -t hello-nginx .
bashПосле этого можно перейти в браузер или выполнить `curl localhost`, чтобы убедиться, что nginx показывает сообщение “Hello from DevOps!”.Код: Выделить всё
docker run -d -p 80:80 --name my-nginx hello-nginx
4. (На выбор) Мини-задание по YAML / Kubernetes:
Напишите простейший deployment.yaml, который запускает nginx в 1 реплике
Ожидаемый результат:
Корректный YAML-файл, описывающий Deployment Используется nginx:stable Указаны replicas, containers, ports
пример простейшего файла deployment.yaml, который запускает nginx в одной реплике:Этот YAML-файл создаст Deployment с одним контейнером nginx:stable, который слушает порт 80.Код: Выделить всё
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable ports: - containerPort: 80
5. Ответьте письменно на 3 вопроса:
Чем отличается apt update от apt upgrade?
Как вы проверите, слушает ли сервис нужный порт?
Какие команды вы используете для диагностики сетевых проблем?
Конечно! Вот объяснение по вашим вопросам:
1. Чем отличается `apt update` от `apt upgrade`?
- `apt update` — команда, которая обновляет список пакетов и их версий из репозиториев. Она не устанавливает или обновляет пакеты, а просто получает актуальную информацию о доступных версиях.
- `apt upgrade` — команда, которая обновляет уже установленные пакеты до новых версий, основываясь на информации, полученной командой `apt update`. Она устанавливает обновления для пакетов, которые уже есть в системе.
Кратко:
`apt update` — обновление информации о пакетах
`apt upgrade` — обновление установленных пакетов до последних версий
---
2. Как проверить, слушает ли сервис нужный порт?
Можно использовать команду `ss` или `netstat`. Например:
bashилиКод: Выделить всё
ss -tuln | grep <номер_порта>
bashЭто покажет все сокеты, прослушивающие указанный порт. Также можно использовать `lsof`:Код: Выделить всё
netstat -tuln | grep <номер_порта>
bashЕсли команда выводит информацию о процессе, значит сервис слушает этот порт.Код: Выделить всё
sudo lsof -i :<номер_порта>
---
3. Какие команды вы используете для диагностики сетевых проблем?
Некоторые основные команды:
- `ping <адрес>` — проверка доступности узла по IP или домену
- `traceroute <адрес>` — трассировка маршрута до узла
- `telnet <хост> <порт>` — попытка соединения с портом для проверки его доступности
- `nc -zv <хост> <порт>` — проверка открытости порта (использование netcat)
- `ip a` или `ifconfig` — проверка настроек сетевых интерфейсов
- `route -n` или `ip route` — проверка маршрутов
- `dig <домен>` или `nslookup <домен>` — проверка DNS-разрешения
- `curl -v http://<адрес>` — проверка доступности HTTP-сервиса