Участвуй в конкурсе сайтов
Получи профессиональную оценку сайта и
награду за дизайн, контент или технологичность

Just pack it! Сборка пакетов и их автоматизация для виртуального хостинга

Обсудить
Just pack it! Сборка пакетов и их автоматизация для виртуального хостинга

В этой статье мы расскажем о сборке пакетов в Timeweb: какие пакеты используем, почему собираем и как мы это делаем. 

Сейчас команда Timeweb формирует более 100 различных пакетов.

Среди них:

  • пакеты PHP для версий 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4 (под Ubuntu Trusty и Bionic1); 
  • PECL-модули для PHP2 (под Ubuntu Trusty и Bionic); 
  • Nginx (под Ubuntu Trusty и Bionic); 
  • TW Tools (внутренний пакет Python для работы с нашими сервисами, только под Ubuntu Bionic); 
  • CMS Utils (небольшой пакет, чтобы держать утилиты в одном месте и деплоить одновременно).
Примечание:
1. Пакеты для Ubuntu 14.04 LTS Trusty Tahr и 18.04 LTS Bionic Beaver собираются отдельно, в разных ветках репозитория. 
2. PECL-модулей очень много. Они, хоть и собираются в одном репозитории, но под каждый модуль создается отдельный пакет (в сумме более 100 пакетов). 

Зачем делать руками, если можно автоматизировать?

Раньше все компоненты собирались вручную. Нужно было зайти на один сервер, скачать патчи с другого сервера, компилировать и надеяться, что всё заработает. Затем самостоятельно загружать дистрибутив на тестовый сервер и проверять там, вручную добавлять в хранилище пакетов. Звучит просто, но с тем огромным количеством пакетов, что мы используем, это занимало очень много времени. И рутинная работа, конечно, никому не нравится!

До того как мы автоматизировали весь процесс, для каждой версии PHP нам приходилось выполнять эти действия вручную. У нас есть 7 версий PHP — для каждой версии PHP нужно выполнить всё перечисленное выше и повторить 7 раз. В итоге цикл обновления всех пакетов PHP занимал недели, сейчас — всего 1 день.

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

Как реализовано?

Все пакеты собираются через GitLab. Для пакетов под каждую версию PHP у нас заведен отдельный репозиторий. В репозитории хранятся патчи и правила сборки. 

Когда мы делаем git push, с помощью GitLab CI в Docker-контейнере скачиваются исходники с официального репозитория и накладываются патчи, где нужно. Всё собирается в одном Docker-контейнере и затем тестируется в другом. Мы делаем простые проверки: например, для Nginx — отдача статического файла по 3 доменам; для PHP — обращение к сайту на WordPress. PHP собирается как модуль Apache. Apache не запускается? Значит, какая-то проблема с пакетом.

Если проверка прошла успешно, пакеты автоматически или вручную отправляются в хранилище пакетов (мы используем Aptly). Деплой осуществляется посредством deb-пакетов. Операционная система пользователя следит за обновлениями: если в репозиторий пришла новая версия пакета, она автоматически будет установлена с утра. 

Мы используем одинаковый порядок действий и набор инструментов для создания и автоматизации всех пакетов.

Все пакеты собираются через GitLab

Версии Ubuntu

Под каждую версию Ubuntu собирается собственный пакет. Мы постепенно обновляем сервера виртуального хостинга до 18.04 LTS, но часть наших серверов еще использует версию 14.04 LTS. Не все пакеты, которые запускаются на новой версии Ubuntu, могут запуститься на старой, поэтому мы собираем пакеты с учетом прежних версий Ubuntu.

Если не позаботиться об этом, могут возникнуть проблемы с OpenSSL. Например, версия PHP 5.3 требует старую версию OpenSSL, которой нет на Ubuntu 18.04, поэтому мы добавляем OpenSSL нужной версии в сборку PHP 5.3 и ставим такой пакет на Ubuntu 18.04.

Иногда клиент хочет получить вместе с ОС и готовую систему управления контентом. Для некоторых CMS нужен определенный набор утилит. Чтобы упростить работу по администрированию сайта, удобно собрать утилиты в один готовый пакет и работать с ним. Мы обновляем утилиты и отправляем их в GitLab, там при помощи dpkg-deb происходит сборка в пакет, который затем отправляется в хранилище. Такой пакет — своеобразный архив с утилитами, который впоследствии разворачивается на виртуальном хостинге.

Комментарии

С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
С помощью соцсетей
У меня уже есть аккаунт Войти
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте