README.md

Почему мы выбрали GitFlic

Почему мы выбрали GitFlic

Python GitFlic Status License

Опыт команды: как инфраструктурный проект на 16 серверов живёт на GitFlic уже несколько лет. Что именно дал нам GitFlic и почему мы рекомендуем его похожим проектам.


Что мы построили

Starter — программа, которая на чистой машине разворачивает всю инфраструктуру. Клонирует репозитории, генерирует docker-compose, поднимает сеть с отдельной подсетью, запускает сервисы и обновляет сама себя.

16 типов серверов на 16 репозиториях. Каждый сервер — отдельный репозиторий, отдельный Docker Compose стек, изолированная подсеть:

🤖 AI-ассистенты с мультиагентной системой
🎤 Распознавание речи и синтез
📊 Генерация векторов для поиска
🌐 Браузерная автоматизация
🛸 Навигация дронов и детекция объектов
📺 Стриминг
💬 Роутер сообщений между платформами
📦 Файловое хранилище

Ключевое отличие от обычного проекта: Starter не хранит код — он его исполняет на машине пользователя в момент установки. Код из репозитория запускается с правами администратора, поднимает сеть, сервисы и проверяет результат.

Именно поэтому мы выбрали платформу, которую можно развернуть самому.


Три причины, которые всё решили

1. Мы подняли GitFlic у себя

Это то, что закрыло нашу главную потребность.

GitFlic разворачивается как обычный стек — сам GitFlic, PostgreSQL, Redis, RabbitMQ. Поднять его на своём сервере — вопрос часа, а не проекта на месяц.

Сейчас наш код общается именно с self-hosted инстансом:

// Jobs/ForControlProjects/checkNewCommits.php
$url = 'gitflic.myidon.site/rest-api';
// Installer/DockerConfGeneratorController.php
$response = Http::get(
    'http://gitflic.myidon.site/project/adminuser/docker/blob/raw?file=.env.example'
);

Что это дало в работе:

  • Инфраструктура не зависит от чужого SaaS — работает, даже когда публичная платформа недоступна
  • Один и тот же клиент работает и с self-hosted, и с публичным GitFlic — один формат ответов, никакого дублирования кода
  • Git, REST API и вебхуки — из одного источника
  • Полный контроль над данными — всё в своей юрисдикции

Последний пункт для инфраструктурных проектов важнее, чем кажется.

2. Свой реестр Docker-образов

GitFlic — не только код. Это ещё и registry для контейнерных образов. Мы публикуем свои образы туда же, где лежит код:

# CLIENTv2/docker/docker-compose.yml
image: registry.gitflic.ru/project/impor/client/vpn-other:0.0.1

И написали отдельный build-инструментарий, который собирает и публикует образы в этот реестр автоматически.

Что это даёт на практике:

  • Код и образы в одном месте — один хостинг, один аккаунт, один бэкап
  • Одна аутентификация вместо двух: Git-токен и registry-токен в одном
  • Меньше точек отказа — не нужно держать и синхронизировать внешний Docker Hub и приватный registry
  • Версионирование рядом с исходниками — тег образа и коммит видно рядом

3. Автообновления, которые просто работают

Starter проверяет обновления и обновляет сам себя — с приоритетами на три ветки:

# starter/files/configs/starter_repos.py
STARTER_REPOSITORIES = [
    {'name': 'Основной',  'branch': 'master',  'priority': 1},
    {'name': 'Резервный', 'branch': 'main',    'priority': 2},
    {'name': 'Dev',       'branch': 'develop', 'priority': 3},
]

Дополнительно при обновлении каждого сервера:

  • git pull --ff-only — безmerge-коммитов и неожиданных расхождений
  • health-check 12 попыток с интервалом 5 секунд
  • автооткат, если после обновления что-то сломалось
  • таймауты на каждый этап, чтобы зависший шаг не блокировал всё

Когда инфраструктура обновляется сама и откатывается сама — про это забываешь. Это лучший комплимент инфраструктурному коду.


Как это выглядит в коде

Весь реестр серверов — один декларативный словарь. Добавить сервер — это добавить запись:

# starter/files/configs/server_types.py
'embeddings': {
    'name': 'Генератор векторов',
    'default_port': 5000,
    'order': 2,
    'strategy': UPDATE_PYTHON,
    'repository': {
        'url': 'https://gitflic.ru/project/impor/embeddings.git',
        'branch': 'master',
    },
    'update': {
        'pull_mode': '--ff-only',
        'health_check': {'enabled': True, 'retries': 12, 'interval': 5},
        'rollback_on_failure': True,
    },
},

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

Программное управление — 16 REST-эндпоинтов, которыми пользуются AI-агенты:

GET    /api/v1/servers                     POST   /api/v1/servers/install
GET    /api/v1/servers/types               POST   /api/v1/servers/<id>/start
GET    /api/v1/servers/<id>                POST   /api/v1/servers/<id>/stop
GET    /api/v1/servers/<id>/config         POST   /api/v1/servers/<id>/update
PUT    /api/v1/servers/<id>/config         DELETE /api/v1/servers/<id>/remove
GET    /api/v1/servers/<id>/update/plan    POST   /api/v1/servers/update-clients
GET    /api/v1/servers/<id>/update/preflight
GET    /api/v1/status  ·  /drives  ·  /folders

Стек

Раскрываем наш стек — вдруг кому-то пригодится для своего проекта:

Слой Технология
Оркестратор Python + Flask, HTTPS с самоподписанным сертификатом
Реестр серверов декларативный Python-словарь, 16 типов
API оркестратора 16 REST-эндпоинтов, ключ в заголовке X-API-Key
Приложения Laravel 13 (клиент) + Laravel 12 (ядро)
Ядро вынесено в отдельный composer-пакет impor/core
ИИ-слой 8 агентов, 5-уровневый пайплайн, 8 LLM-провайдеров
Векторный поиск Qdrant
Очереди и real-time Redis + Reverb
БД MariaDB 10.8
Состав клиента 11 сервисов в одном docker-compose
Сеть Tailscale, отдельная подсеть на сервер, Nginx + Let’s Encrypt
Git и образы GitFlic + Container Registry

ИИ-слой — отдельная находка: 8 агентов (StarterAgent, ChatAgent, DroneAgent, TaskSchedulerAgent, IoTGatewayAgent, PhoneAgent, RoomManagerAgent, GardenAgent) проходят пятиуровневый пайплайн pre → router → inter → agent → post. Агенты умеют вызывать REST API оркестратора, поэтому установка сервера — это обычный текстовый запрос.


Рекомендация

GitFlic — хороший выбор, если:

  • ✅ вы хотите поднять хостинг самим и не зависеть от чужого SaaS
  • ✅ вам важно, чтобы код и Docker-образы лежали рядом
  • ✅ вы работаете внутри команды и discoverability не главный фактор
  • ✅ вам нужен стабильный REST API для автоматизации
  • ✅ вы цените, что платформа выросла из российских и живёт рядом с вами

Для open-source-проекта, которому нужна широкая аудитория и звёзды, или если вы хотите Copilot — GitHub остаётся разумным выбором. Задачи у платформ разные, и обе отлично справляются со своими.


Спасибо

Спасибо команде GitFlic за то, что продукт можно развернуть самому, за Container Registry в одном месте с кодом, и за API, который стабильно отвечает.

Если вы делаете что-то похожее — расскажите в комментариях, как у вас устроено. Интересно сравнить.

Открыт к PR: идеи по структуре статьи, поправки в тексте или уточнения по цифрам — присылайте, поправим.


Лицензия

Текст — CC BY-SA 4.0. Код в примерах можно свободно использовать со ссылкой на источник.

Описание
Конвейеры
0 успешных
0 с ошибкой
Разработчики