bash ./start_everything.sh
├── configure_infra (каталог с Ansible-проектом)
│ ├── inventory (файл Inventory)
│ ├── playbook.yaml (основной playbook)
│ ├── user_vars (переменные пользователей)
│ └── roles
│ ├── nginx_confstall (раскатка nginx)
│ ├── packages_install (обновление пакетов и установка дополнительных утилит)
│ ├── ssh_conf (настройка ssh)
│ ├── static_deploy (заливка статики)
│ ├── user_conf (создание/удаление пользователей/групп)
│ └── zsh_install (установка zsh и ohmyzsh)
├── docker-compose.yaml
├── Dockerfile
├── README.md
├── .env (переменные окружения)
└── start_everything.sh (скрипт запуска проекта)
Вам предстоит написать плейбук и роли Ansible для настройки сервера
раздачи статики. Нужно будет сделать базовую настройку сервера и
установить/настроить nginx, который должен раздавать изображения по пути
/images, использовать эту подборку:
https://drive.google.com/file/d/1L9hsq9ZFB5VbXYJ3kEKH47x9nhxxZEnI
В качестве тестового окружения, к которому будет подключаться Ansible,
используйте Docker-контейнер, запускаемый через Docker Compose. Для
этого контейнера необходимо написать Dockerfile, используя в качестве
базового образа официальный Ubuntu 24.04. Вместе с ОС должен быть
установлен openssh-server для доступа по SSH. Также нужно описать
конфигурацию Docker Compose с пробросом необходимых портов.
Решенное тестовое задание ожидается в виде публичного github/gitlab
репозитория.
Все роли должны быть написаны с учётом идемпотентности.
1. Развернуть тестовое окружение через docker compose up
2. Запустить плейбук со всеми необходимыми vars файлами и с заранее
подготовленным inventory файлом (сами плейбуки заворачивать в docker
container не обязательно)
4. На 80 порту, по пути /images должна отображаться структура файлов, а
по пути /images/filename отображаться изображение
5. SSH порт должен быть открыт для подключения
1. Роль для создания/удаления пользователей/групп пользователей,
состояние пользователей и список кастомных групп необходимо
указывать в vars файле. Через vars’ы должно быть возможно
устанавливать пользователям следующие параметры:
a. Имя
b. Оболочка (bash/zsh/etc)
c. Состояние (удален/создан)
d. Публичный ключ (для подключения по ssh)
e. Пароль
f. Список групп в которых состоит пользователь (в том числе кастомные
группы, которые задаются в vars)
2. Роль для установки zsh/ohmyzsh для пользователей, устанавливать
только для пользователей с соответственным shell
3. Роль для настройки ssh, необходимо будет:
a. Запретить вход с пользователя root
b. Запретить пустые пароли
c. Выставить логгирование в режим VERBOSE
d. Отключить X11Forwarding
4. Обновление пакетов и установка дополнительных утилит, список должен
быть легко расширяем:
a. htop
b. ncdu
c. git
d. nano
5. Роль для раскатки nginx, в котором nginx устанавливается, настраивается, создается vhost с нужными нам locations, из настроек нужно:
a. Настроить gzip’ирование для статики
b. Логирование запросов
c. Добавить кэширование с сроком истечение 1 час
6. Роль для заливки статики, она должна любым удобным способом
размещать статику на сервере.