Блог AST-SoftPro
Git, GitHub, GitLab и аналоги: что развернуть для одного пользователя или небольшой команды
Введение
GitHub и GitLab давно стали привычной средой для работы с исходным кодом: репозитории, pull request, CI/CD, реестры пакетов. Но за облачные сервисы платят по подписке, а данные живут на чужих серверах. Для одного разработчика или команды из нескольких человек часто разумнее развернуть собственный git-сервер — бесплатно, под своим контролем, с доступом только для своих людей.
В этой статье разберём, что такое Git и как он соотносится с GitHub/GitLab, какие решения можно поднять самостоятельно, чем они отличаются по ресурсам и функциям, и как выбрать подходящий вариант под конкретную задачу. Особое внимание — Gitea, Forgejo и GitLab Community Edition: именно на них приходится львиная доля self-hosted-развёртываний в 2026 году.
Git, GitHub, GitLab: что есть что
Начнём с терминологии, потому что её часто путают.
Git — это распределённая система контроля версий, утилита командной строки, которая живёт на вашем компьютере. Она хранит историю коммитов локально в каждом клоне репозитория и умеет синхронизироваться с любым удалённым сервером по протоколу Git (HTTP/S или SSH). Сам по себе Git — не веб-сервис: у него нет браузера, pull request'ов и дашборда.
GitHub — это облачный сервис от Microsoft, который поверх Git строит платформу для командной работы: веб-интерфейс, pull request, issues, действия (CI/CD), реестры пакетов, Actions. Вы не устанавливаете GitHub — вы регистрируетесь на сайте и пользуетесь чужой инфраструктурой.
GitLab — аналогичная платформа, но с открытым исходным кодом (Community Edition) и возможностью self-hosting: её можно развернуть у себя на сервере и получить «свой GitHub» со встроенным CI/CD, реестром контейнеров и сканерами безопасности.
💡 Практическая выгода self-hosting: код не покидает вашу инфраструктуру (важно для коммерческой тайны), нет платы за подписку, а скорость операций зависит от вашей сети, а не от загрузки чужого CDN. Для небольших команд это экономит и деньги, и риски утечки.
Почему стоит свой git-сервер
Основные сценарии, в которых собственный сервер выигрывает у облака:
-
Конфиденциальность кода. Коммерческий продукт или внутренний инструмент не должны лежать на стороннем хостинге.
-
Стоимость. Облачные планы начинаются от нескольких долларов за пользователя в месяц; при росте команды сумма растёт линейно. Self-hosted-варианты бесплатны — платите только за VPS или сервер.
-
Автономность. Нет зависимости от чужих сбоев, лимитов API и изменений ценообразования.
-
Контроль над данными. Бэкапы, миграции, права доступа — всё под вашим управлением.
⚠️ Важно понимать: self-hosting перекладывает на вас ответственность за безопасность, обновления и бэкапы. Неправильно настроенный сервер с открытым доступом к репозиториям — это та же утечка, только ваша. Для продакшн-решений рекомендуется привлечение специалистов: корректная настройка TLS, прав доступа, резервного копирования и мониторинга снижает риски, которые «вайб-развёртывание» по туториалу не закрывает.
Обзор решений для self-hosting
Рассмотрим основные варианты, доступные в 2026 году.
Gitea: лёгкий стандарт де-факто
Gitea — самохостинг git-сервис на языке Go, запущенный в 2016 году как форк Gogs. Его девиз — «Git with a cup of tea»: цель проекта всегда была простой — маленький, быстрый сервер с интерфейсом, похожим на GitHub, который можно поднять даже на Raspberry Pi.
Ключевые характеристики:
-
Язык: Go, единый бинарный файл или Docker-контейнер
-
Лицензия: MIT
-
Минимальные ресурсы: ~512 МБ RAM; свежая установка потребляет около 150 МБ в простое, загрузка с SQLite — менее секунды
-
Функции: pull request, issues, wiki, release, code review, интеграции
-
Gitea Actions (с v1.21): совместимый с GitHub Actions раннер — ваш
.github/workflows/ci.ymlпереносится в.gitea/workflows/ci.ymlпочти без изменений -
Реестры пакетов: npm, Maven, Container, Helm и другие
-
Базы данных: SQLite (по умолчанию), MySQL/MariaDB, PostgreSQL
Для команды из 5 человек, пишущей на Go или Node.js, Gitea — как правило, всё, что нужно. UI давно перестал быть «упрощённым GitHub» и предлагает сопоставимый набор функций.
💡 Совет: если планируете CI с реальными нагрузками, вынесите раннеры Actions на отдельную машину и зарегистрируйте их удалённо. По умолчанию они делят ресурсы с самим Gitea, что может тормозить веб-интерфейс во время сборки.
Forgejo: community-форк с упором на независимость
Forgejo — hard fork Gitea, созданный в конце 2022 года (первый публичный релиз — декабрь 2022) после того, как проект Gitea был передан под управление коммерческой компании. Авторы форка хотели сохранить git-сервер в руках некоммерческого сообщества. Проект развивается под эгидой non-profit организации Codeberg e.V., а хостинг основного репозитория — на собственной платформе Codeberg, а не GitHub.
Отличия от Gitea:
-
Лицензия: AGPLv3+ (copyleft); файлы, пришедшие из Gitea, остаются под MIT
-
Управление: некоммерческая организация, ежеквартальные встречи контрибьюторов, прозрачный roadmap
-
Функциональность: ~95% кодовой базы совпадает с Gitea; различия — в управлении и отдельных решениях по приватности
-
Ресурсы: те же что у Gitea (Go, ~512 МБ RAM минимум)
Выбор между ними во многом идеологический: если важна независимость от коммерческой компании и copyleft-лицензия — Forgejo; если важнее активный upstream с более быстрым набором фич — Gitea. Для типовой команды из 1–10 человек функциональная разница минимальна.
⚠️ Нюанс миграции: между Gitea и Forgejo миграция не тривиальна — это разные кодовые базы после hard fork. Если сомневаетесь в выборе, протестируйте оба на копии репозиториев перед переездом.
GitLab Community Edition: all-in-one платформа
GitLab CE — совсем другой класс продукта. Это не просто git-сервер, а полная DevOps-платформа: git + CI/CD + реестр контейнеров + issues + wiki + сканеры безопасности (SAST/DAST) + интеграция с Kubernetes. Community Edition бесплатна и open source; Enterprise добавляет seat-based платные функции.
Характеристики:
-
Стек: Ruby on Rails, Postgres, Redis, Gitaly, Sidekiq workers
-
Минимальные ресурсы: 4 ГБ RAM (официальный минимум), на практике комфортно от 8 ГБ
-
Установка: Omnibus-пакет или Docker Compose со множеством сервисов
-
Для кого: команды от 20+ разработчиков, которым нужен единый инструмент для всего цикла разработки
GitLab имеет смысл, когда вы действительно используете встроенный CI, реестр и security-сканеры. Как «красивый git push» для трёх человек он неоправдан: RAM-бюджет в разы выше, чем у Gitea/Forgejo.
⚠️ Типичная ошибка: выбор GitLab «на вырост» по привычке из туториалов по CI. В итоге вы годами держите 4–8 ГБ простаивающей памяти, пользуясь только git-частью. Подбирайте инструмент под текущий размер команды, а не гипотетический рост.
Gogs: минимализм в чистом виде
Gogs — предшественник Gitea (сам Gitea начинался как его форк). Это максимально простой self-hosted git-сервис на Go: хостинг кода, pull request, issues, минимум настроек. Поддерживает запуск одним бинарником или Docker-контейнером.
Официальная позиция проекта — «невероятно низкое потребление ресурсов»: заявлена работоспособность даже при 64 МБ RAM и четверти vCPU. Gogs активно поддерживается, но развитие идёт медленнее, чем у Gitea: новых фич (Actions, реестры пакетов) здесь нет.
Gogs подходит, если нужен буквально только git-хостинг без лишнего — например, для личного бэкапа репозиториев или очень простой команды. Для всего остального Gitea/Forgejo дают больше за сопоставимые ресурсы.
Другие варианты кратко
-
OneDev — self-hosted платформа со встроенным CI/CD и управлением проектами; Community Edition бесплатна, Enterprise — платно по числу пользователей.
-
Gitness — современная dev-платформа с «Gitspaces» (код + CI + окружения разработки).
-
cgit / gitweb — лишь веб-просмотр репозиториев без полноценного интерфейса; для одного пользователя, которому нужен только доступ «только на чтение» к своим репо.
-
GitHub Enterprise Server — self-hosted версия GitHub; мощно, но дорого и ориентировано на enterprise-команды.
Сравнительная таблица
| Критерий | Gitea | Forgejo | GitLab CE | Gogs |
|---|---|---|---|---|
| Язык | Go | Go | Ruby on Rails | Go |
| Лицензия | MIT | AGPLv3+ (файлы из Gitea — MIT) | MIT (CE) / EE платно | MIT |
| Мин. RAM | ~512 МБ | ~512 МБ | 4 ГБ (реально 8 ГБ) | ~64–256 МБ |
| CI/CD | Gitea Actions (совместим с GitHub Actions) | Forgejo Actions (аналогично) | GitLab CI (встроен, мощный) | Нет |
| Реестры пакетов | npm, Maven, Container, Helm и др. | Аналогично Gitea | Container registry + пакеты | Нет |
| Issues / PR / Wiki | Да | Да | Да (+ boards, milestones) | Базово |
| Security-сканеры (SAST/DAST) | Через Actions/интеграции | Через Actions/интеграции | Встроены (CE — часть) | Нет |
| БД | SQLite / MySQL / PostgreSQL | SQLite / MySQL / PostgreSQL | PostgreSQL + Redis + Gitaly | SQLite / MySQL / PostgreSQL |
| Для кого | 1–30 разработчиков, лёгкий старт | То же, с упором на независимость/copyleft | 20+ разработчиков, all-in-one DevOps | Минимальный git-хостинг |
Как развернуть: базовые шаги
Разберём самый частый сценарий — Gitea в Docker Compose. Это применимо и к Forgejo (образ другой, конфигурация почти идентичная).
Вариант 1: быстрая установка одним бинарником
Для тестирования или одного пользователя проще всего скачать бинарник с официального сайта и запустить:
# Linux: распаковать архив и запустить один раз для генерации конфига
./gitea web
После первого запуска откройте браузер на порту 3000 — веб-мастер проведёт через настройку администратора, выбора базы данных (SQLite подходит для старта) и параметров. Весь процесс занимает несколько минут.
Вариант 2: Docker Compose для продакшена
Более надёжный вариант — контейнер с выделенным томом для данных:
# docker-compose.yml
services:
gitea:
image: gitea/gitea:latest
restart: unless-stopped
ports:
- "3000:3000" # веб-интерфейс
- "2222:22" # SSH для git clone/push
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
volumes:
- gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: change-me-root
MYSQL_DATABASE: gitea
MYSQL_USER: gitea
MYSQL_PASSWORD: change-me-gitea
volumes:
- db-data:/var/lib/mysql
volumes:
gitea-data:
db-data:
Пояснения к конфигурации:
-
USER_UID/USER_GID— права доступа к тому с данными; подставьте UID/GID пользователя, от которого работает Docker. -
База данных: для одного пользователя или пары репозиториев достаточно SQLite (тогда секцию
dbи строкуDB_TYPE=mysqlможно убрать). Для небольшой команды MySQL/MariaDB надёжнее при росте нагрузки. -
Порт 2222 — SSH, чтобы не конфликтовать с системным sshd на 22.
Запуск: docker compose up -d. После первого старта веб-мастер предложит создать администратора и заполнить базовые параметры.
Настройка за reverse proxy
Если сервер доступен по доменному имени, Gitea ставится за Caddy/Nginx/Traefik с TLS. Критически важный параметр — ROOT_URL в app.ini: он определяет, какой URL будет подставляться в webhooks и ссылки на репозитории. Неправильный ROOT_URL — самая частая причина «сломанных» webhook-уведомлений у новичков.
# app.ini (фрагмент)
[server]
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 22
💡 Совет по безопасности: ограничьте доступ к веб-интерфейсу и SSH списком IP или VPN, включите двухфакторную аутентификацию для всех пользователей. Открытый в интернет git-сервер без этих мер — прямой путь к компрометации кода.
Бэкапы
Минимум два объекта резервного копирования:
-
Том с данными (
/dataу Gitea) — содержит bare-репозитории, аватары, вложения. -
База данных — dump через
mysqldump/pg_dump(или backup-утилиту самого Gitea).
Настройте регулярный автоматический дамп на внешнее хранилище. Без бэкапов self-hosting превращается в способ гарантированно потерять код при сбое диска.
Как выбрать: практическая логика
Короткое правило выбора по размеру команды и задачам:
| Ваша ситуация | Рекомендация |
|---|---|
| Один разработчик, личный бэкап репо | Gogs или Gitea на SQLite — минимальные усилия |
| 2–10 человек, нужен GitHub-подобный опыт + CI | Gitea (или Forgejo) + Actions на той же VM |
| Команда хочет независимый copyleft-проект | Forgejo |
| 10–30 человек, CI с горизонтальным масштабированием | Gitea на более мощной VM (4 vCPU / 8 ГБ), раннеры отдельно |
| 20+ разработчиков, нужен единый DevOps-инструмент со сканерами безопасности | GitLab CE — но только если реально используете CI/реестр/сканеры |
Дополнительные факторы:
-
Миграция с GitHub: у Gitea и GitLab есть встроенные импортёры (репозитории, issues, PR, wiki, релизы). Учёт коммитов корректно привязывается к пользователям после их первого логина.
-
Переезд из GitLab наружу — больнее всего: чистого one-shot импортёра в Gitea нет; репозитории клонируются скриптом, issues переносятся через API. Если есть вероятность покинуть GitLab в будущем, ранний переезд дешевле позднего.
-
Ресурсы: не берите GitLab «на всякий случай» — разница в RAM (4–8 ГБ против 512 МБ) напрямую бьёт по стоимости инфраструктуры.
⚠️ Про безопасность ещё раз: выбор инструмента — лишь половина задачи. Вторая половина — корректная реализация: TLS, аутентификация, права доступа, бэкапы, обновления патчей. Поверхностное копирование конфигов из интернета без понимания edge-кейсов создаёт скрытые уязвимости. Для критичных проектов стоит привлекать специалистов — это инвестиция, которая окупается снижением риска утечки кода и простоя.
Заключение
Для одного пользователя или небольшой команды self-hosted git-сервер — практичное и экономичное решение. В 2026 году выбор фактически сводится к трём вариантам:
-
Gitea — самый универсальный лёгкий вариант: GitHub-подобный опыт, Actions, реестры пакетов, ~512 МБ RAM. Хороший дефолт для команд до 30 человек.
-
Forgejo — тот же функционал при упоре на независимое сообщество и copyleft-лицензию; выбор во многом идеологический.
-
GitLab CE — полноценная DevOps-платформа, но требует 4–8 ГБ RAM и оправдана только при реальном использовании встроенного CI/реестра/сканеров командами от 20 разработчиков.
Gogs остаётся нишевым минималистичным вариантом для чистого git-хостинга. Ключевые шаги внедрения — Docker Compose с выделенным томом, корректный ROOT_URL за reverse proxy, двухфакторная аутентификация и регулярные бэкапы данных и базы.
Главное правило: подбирайте инструмент под текущий размер команды и реальные задачи, а не «на вырост». И помните — self-hosting перекладывает ответственность за безопасность на вас; для продакшн-инфраструктуры с критичным кодом разумно привлекать специалистов по настройке и защите.