April 4

SelectOS в деле

Совсем недавно я рассказал тебе про эту серверную операционную систему.

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

Поэтому я решил не останавливаться и продолжить эксперименты. На этот раз на базе SelectOS я буду решать бизнес-задачу.

А задача у меня такая — установить локальный, корпоративный Gitlab сервер для командной разработки.

Дада, без docker и т.п. прям standalone как в лучших домах. Закинуть текущие проекты в репозитории, настроить раннеры для сборки и деплоя. В общем подготовить комфортную среду для повседневной работы.


Для сервера я возьму минимальную конфигурацию: 4 CPU / 4 RAM / 50 SSD.

Да, Gitlab прожорливая штука, но на момент установки такой конфигурации мне будет достаточно.

В дальнейшем эту конфигурацию можно будет легко изменить под необходимую нагрузку.

Сервер на SelectOS у меня уже готов, приступим к установке Gitlab.

Устанавливать буду Community Edition. В дефолтных репозиториях Gitlab я не нашел, поэтому буду ставить из пакетов.

Тут бы хотелось, чтобы ребята из Selectel добавили в свои репозитории дистрибутивы с Gitlab.

Из официальных репозиториев, Gitlab в РФ к сожалению установить не получится, по итогу получишь: 403 Forbidden. Поэтому скачаем бинарник через обходные пути и закинем его на сервер.

Как вариант, можешь поднять на сервере wireguard и пустить трафик через промежуточные узлы.

Я сразу настроил wireguard и пропустил трафик сервера через корпоративную приватную сеть. Как это сделать, мануалы прекрасно гуглятся. Где-то читал, что нельзя такие мануалы больше писать. Рисковать не будем.

Тут самое главное, что wireguard на SelectOS встал как по маслу. Буквально в 2 команды и копипасты конфига с серверного wg-easy.

А дальше рутина:

Идем на сайт: https://packages.gitlab.com/gitlab/gitlab-ce

И скачиваем пакет: gitlab-ce_17.10.3-ce.0_amd64.deb(debian/bookworm)


Теперь внимание!

На SelectOS пакет (1.32 ГБ) скачался через wireguard за 0m30.582s

А на последнем Debian этот же пакет при таких же условиях (wireguard, та же сеть) скачался за 1m32.247s

Ради интереса повторил эксперимент, всё так и есть. Скорость скачивания на SelectOS оказалось в разы выше.

Это тот самый DPDK в действии? Или что-то другое? Ну да ладно. Мелочь, а приятно!


Чудненько, продолжаем установку:

cd /tmp
dpkg -i gitlab-ce_17.10.3-ce.0_amd64.deb

Ждём, ждем, ждем... эта штука весит чуть более гигабайта.

Если дождался, то будешь вознагражден такой картинкой:

Открываем файл /etc/gitlab/gitlab.rb и прописываем парамер external_url.

Я прописал external_url http://gitlab.local

У меня в корпоративной сети живет PI-HOLE, и работает локальный DNS сервер, но ты можешь прописать айпишник своего сервера.

Опять же повторюсь, пакет с Gitlab залетел на SelectOS вообще без костылей и установки дополнительных зависимостей. Были-были у меня сомнения.

После этого отправляем свежеиспеченный Gitlab в переконфигурацию:

sudo gitlab-ctl reconfigure

И снова ждём, такова учесть девопс инженера. Ждать.

На экране начнет выводиться вакханалия, почувствуй себя на несколько минут героем фильма "Пароль рыба меч".

Отлично, всё взлетело! Проверяем:

pstree

С виду всё нормально, проверяем ресурсы:

Я же говорил, прожорливая тварь. Но опять же нам этого вполне хватит для конфигурации. На момент релиза подкину еще 4 ядра и памяти столько же.

Идем в браузер и видим страницу входа:

По умолчанию логин: root, а пароль лежит на сервере в файле /etc/gitlab/initial_root_password

Заходим:

И видим что все системы работают исправно. Одна из задач успешно выполнена. Осталось перенести рабочие репозитории и подключить раннеры.

Тормозов не наблюдается, даже с минимальной конфигурацией по серверу. Для домашних лабораторий этот конфиг прям маст-хэв. Я на пятой малине держу такой Gitlab и вообще не испытываю дискомфорта.

Это всё хорошо. Но нужно провести стресс тест, этот тест я провожу всегда.

Суть теста проста — отправить сервер в перезагрузку и посмотреть, что после перезагрузки всё само поднимется.

Бывали моменты когда nginx или php начинали ругаться, что они не могут найти папку run и т.п.

Рекомендую проводить обязательно такой тест, до запуска в продакшен. Сохранит тебе кучу нервов в будущем.

Такс, сервер успешно загрузился, видим веселого динозавра:

Проверяем Gitlab:

Работает! Всё! Теперь мы убедились что после перезагрузки сервера, всё автоматически стартануло. Можем быть спокойны, по крайней мере с этим кейсом.

Для большего успокоения прохожусь по логам сервера, фаталов и oom не замечено, дистрибутив SelectOS чувствует себя прекрасно.


Проходимся напильником

Как переносить проекты я показывать не буду, там всё банально и не интересно.

По факту у меня получилось так:

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


Регистрируем раннеры


Что бы пайплайны в проектах выполнялись, для этого нужны раннеры. У меня есть отдельный сервер под это дело. На этом сервере живут все нужные мне раннеры. Они собирают docker images, скидывают их в docker registry и деплоят по ssh на продакшены.

Обычно я регистрирую пару штук. Это docker-runner и shell-runner, кто в курсе тот в курсе для чего они нужны.

Но я отойду от обычных кейсов и сделаю финт ушами. Установлю раннеры прям на сервер с SelectOS.

Установка софта

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

Раннер успешно установился, проблем не возникло. Перейдем к их регистрации.

sudo gitlab-runner register --url http://gitlab.local --token glrt-token

Регистрирую отдельно docker-runner и shell-runner. Выполняю команду 2 раза.

После регистрации проверяю, как эти раннеры подключились к Gitlab.

Всё отлично подключилось и фурычит, статус зелёненький.

Напомню, что раннеры я установил и зарегистрировал именно на сервере с SelectOS. Там же где я развернул Gitlab.

Но это чисто ради эксперимента. А ты старайся под раннеры сделать отдельный сервер, чтобы они никак не были связаны ни с продом, ни с другими сервисами.

Давай теперь проверим как запустится пайплайн на этих раннерах.

Для теста я сделал подобную штуку и закинул .gitlab-ci.ymlв корень проекта.

stages:
  - print_info

print_info_1:
  stage: print_info
  tags:
    - shell-runner
  script:
    - lsb_release -d

print_info_2:
  stage: print_info
  tags:
    - docker-runner 
  script:
    - lsb_release -d

По итогу будут запущены 2 стадии, на разных раннерах, которые выведут название операционной системы.

Получаем ожидаемый результат:

Первая стадия успешно выполнилась, а вторая упала. Почему вторая упала?

Потому что на сервере с SelectOS я не установил docker, соответственно docker-runner не смог подключиться к сокету docker и выполнить задачу.

По первой стадии я получил такое:

Как видим: Description: SelectOS GNU/Linux 1.1

Что и требовалось доказать!


Заключение и выводы

Что еще написать? Да вроде и нечего. Gitlab полноценно работает, раннеры регистрируются и отрабатывают пайплайны. Установка и настройка софта обошлась без костылей и граблей.

Получилось готовое и полноценное решение для разработки, бизнес-задачи которые я ставил, успешно решены.

В основе всего этого добра стоит SelectOS, ну какие тут могут быть еще выводы?

Всё работает! Быстро, чётко, без ошибок в логах.

Ну а теперь я отправляюсь докидывать ресурсов на сервер и официально сдавать это решение в команду. Task Done!