Self-hosted инфраструктура за 10 минут
Всем привет!
В этом туториале хотелось бы рассказать о том, как можно очень быстро развернуть минимальный набор сервисов необходимых для разработки ПО на дешевом хостинге или слабом железе. Данный набор подойдет для небольших команд или в качестве персонального решения.
Все инструменты имеют открытый исходный код, не имеют платных версий и предоставляются по открытым лицензиям, поэтому их можно использовать как для личных проектов, так и в организациях при разработке ПО в коммерческих целях.
Используемые сервисы
- Gitea - ПО для хостинга IT-проектов и совместной разработки на базе Git. Будет использоваться для хранения кодовой базы и удобного доступа к коду. Данный инструмент является хорошей альтернативой гитлабу, но не имеет интегрированного
CI-CD
, поэтому в данном списке есть следующий сервис.

- Drone - система непрерывной интеграции, написанная на Go. Её можно использовать для CI-CD и подключить как сторонюю систему к
github
,gitea
,GOGS
,bitbucket
, в нашем слечае кgitea
.

- MkDocs - это инструмент, для создания сайтов статической документации на основе файлов markdown. Данный сервис может использоваться для хранения и отображения документации по проекту.Тинькоф используют данный инструмент для предоставления информации по публичным API.

- Uptime Kuma - это простой инструмент для мониторинга и сбора статистики работоспособности других сервисов. Так же имеет функционал для отправки уведомлений в случае потери доступности какого-либо компонента.

- Dozzle - простое веб приложение для просмотра логов запущенных на хосте контейнеров. Позволяет выполнять поиск по логам и мониторить обзий уровень загрузки. Приложение не сохраняет данные и переиспользует логи которые хранятся в
docker
илиswarm
.

- Nginx - это веб-сервер и почтовый прокси. В данном месте используется для маршрутизации между остальными элементами инфраструктуры.
Подготовка DNS
Перед тем как разворачивать инфраструктуру необходимо настроить DNS, для перенаправления трафика по необходимым адресам. Как правило это можно сделать у регистратора доменного имени.
Вот примеры для nic.ru
и fozzy.com
:
Генерация docker-compose
Далее мы воспользуемся утилитой gen-tools, которая позволяет быстро собрать необходимый docker-compose
со всеми элементами инфраструктуры и подготовить необходимые конфигурации в nginx
и остальных сервисах.
Установить данную утилиту можно используя go
, docker
или yay
, я покажу вариант с go
:
go install dancheg97.ru/dancheg97/gen-tools@latest
Далее запустим команду для генерации конфигураций в пустой директории, вот пример:
gen-tools infr --name ctrl2Go --domain ctrl2go.su --user admin --pass password --email example@ctrl2go.su
После генерации необходимо получить сертификаты для возможности валидного доступа через https
, достаточно запустить скрипт certs.sh
, который сразу получит все сертификаты на все поддомены. Скрипт использует lego, инструмент для получения сертификатов из letcencrypt.
sh certs.sh
Запуск сервисов
После получения сертификатов мы должны увидеть папку .lego
, которая содержит все необходимые файлы, далее можно запускать сервисы. Это можно сделать с командой:
docker compose up
После того, как все сервисы активны, нужно запустить старт gitea
, подключить drone
, и задать мониторинг uptime-kuma
.
Все эти действия ин