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 и т.п.
Рекомендую проводить обязательно такой тест, до запуска в продакшен. Сохранит тебе кучу нервов в будущем.
Такс, сервер успешно загрузился, видим веселого динозавра:
Работает! Всё! Теперь мы убедились что после перезагрузки сервера, всё автоматически стартануло. Можем быть спокойны, по крайней мере с этим кейсом.
Для большего успокоения прохожусь по логам сервера, фаталов и 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!