September 28, 2023

Что нам стоит сайт построить. Часть 1 - теоретическая

Начинаю приключенческий сериал о том, до какого безумия можно дойти в желании иметь домашнюю страницу.

Предыстория

Когда-то давно я купил себе домен и решил что буду использовать его под всякие технические задачи. В какой-то момент на нём образовались поддомены с блогами. Всё было прекрасно, пока что-то не спросил почему основной домен у меня не открывается. Потому что я не думал об этом. Но, видимо, время пришло поставить на него какую-то заглушку-визитку. Но просто так купить VPS или шарик было бы скучно, поэтому будем разгонять безумие ради безумия. Начнём с ТЗ и будем его накручивать в каждой итерации.

Техническое задание v 0.1

Необходимо создать сайт-визитку в виде статичной HTML-страницы, указав на ней информацию об авторе сайта.

Разработка

  • Подготовить Git-репозиторий для размещения исходного кода проекта
  • Создать валидную HTML-страницу с указанным содержимым

Контент

  • Указать имя автора сайта
  • Указать краткую информацию об авторе сайте
  • Указать ссылки на блоги и аккаунты в соцсетях и репозиториях

Размещение

  • Сайт должен представлять из себя docker-образ или набор образов, позволяющий запускать контейнер в любой среде исполнения, в том числе kubernetes
  • Сайт должен размещаться на внешнем выделенном виртуальном сервере (продакшен)
  • Сайт должен автоматически разворачиваться на внешнем хостинге при внесении изменений в исходный код

Безопасность

  • Доступ к репозиториям исходного кода должен быть ограничен на изменение авторизованными учётными записями
  • Доступ к управлению продакшен-сервера должен быть ограничен авторизованными учётными записями с использованием ключевой аутентификации. Парольный доступ должен быть исключён
  • Сайт должен использовать протокол подключения HTTPS

Приёмка изменений

  • Необходимо организовать тестовую среду исполнения, позволяющую проверить внесённые изменения перед отправкой их на продакшен-сервер.

То есть мы делаем что? Мы делаем сайт и готовим инфраструктуру. Примерно такую:

Приблизительный флоу работы с проектом

Архитектура

Я хочу предусмотреть возможность в перспективе развернуть не только статичный сайт, а какой-нибудь свистящий по-всякому CMS, поэтому начальные решения будут такими:

  1. Terraform - для раскатки тестового сервера и Gitlab Runner на Qemu/KVM.
  2. Ansible - для подготовки окружения на серверах
  3. K0S - для запуска контейнеров
  4. Репозиторий кода - GitLab. Сначала буду использовать общедоступный, но в перспективе перееду на self-hosted решение.
  5. Обеспечение CI/CD - GitLab Runner для деплоя сайта на тестовые и продакшн сервера
Инфраструктура проекта для версии v0.1

В процессе развития проекта мы столкнёмся с проблемами, ограничениями и прочими вещами, решение которых поможет раздуть инфарструктуру до бессмысленного объёма, без которого не может существовать ни один современный сайт.

В следующей части займёмся разработкой. Пока!