Что нам стоит сайт построить. Часть 1 - теоретическая
Начинаю приключенческий сериал о том, до какого безумия можно дойти в желании иметь домашнюю страницу.
Предыстория
Когда-то давно я купил себе домен и решил что буду использовать его под всякие технические задачи. В какой-то момент на нём образовались поддомены с блогами. Всё было прекрасно, пока что-то не спросил почему основной домен у меня не открывается. Потому что я не думал об этом. Но, видимо, время пришло поставить на него какую-то заглушку-визитку. Но просто так купить VPS или шарик было бы скучно, поэтому будем разгонять безумие ради безумия. Начнём с ТЗ и будем его накручивать в каждой итерации.
Техническое задание v 0.1
Необходимо создать сайт-визитку в виде статичной HTML-страницы, указав на ней информацию об авторе сайта.
Разработка
- Подготовить Git-репозиторий для размещения исходного кода проекта
- Создать валидную HTML-страницу с указанным содержимым
Контент
- Указать имя автора сайта
- Указать краткую информацию об авторе сайте
- Указать ссылки на блоги и аккаунты в соцсетях и репозиториях
Размещение
- Сайт должен представлять из себя docker-образ или набор образов, позволяющий запускать контейнер в любой среде исполнения, в том числе kubernetes
- Сайт должен размещаться на внешнем выделенном виртуальном сервере (продакшен)
- Сайт должен автоматически разворачиваться на внешнем хостинге при внесении изменений в исходный код
Безопасность
- Доступ к репозиториям исходного кода должен быть ограничен на изменение авторизованными учётными записями
- Доступ к управлению продакшен-сервера должен быть ограничен авторизованными учётными записями с использованием ключевой аутентификации. Парольный доступ должен быть исключён
- Сайт должен использовать протокол подключения HTTPS
Приёмка изменений
- Необходимо организовать тестовую среду исполнения, позволяющую проверить внесённые изменения перед отправкой их на продакшен-сервер.
То есть мы делаем что? Мы делаем сайт и готовим инфраструктуру. Примерно такую:
Архитектура
Я хочу предусмотреть возможность в перспективе развернуть не только статичный сайт, а какой-нибудь свистящий по-всякому CMS, поэтому начальные решения будут такими:
- Terraform - для раскатки тестового сервера и Gitlab Runner на Qemu/KVM.
- Ansible - для подготовки окружения на серверах
- K0S - для запуска контейнеров
- Репозиторий кода - GitLab. Сначала буду использовать общедоступный, но в перспективе перееду на self-hosted решение.
- Обеспечение CI/CD - GitLab Runner для деплоя сайта на тестовые и продакшн сервера
В процессе развития проекта мы столкнёмся с проблемами, ограничениями и прочими вещами, решение которых поможет раздуть инфарструктуру до бессмысленного объёма, без которого не может существовать ни один современный сайт.