Свой Git: Forgejo или Gitea
Как поднять личный сервер репозиториев с веб-интерфейсом, доступом по SSH и запуском сборок — и что нужно копировать, чтобы не потерять код.
Обновлено 23 августа 2026 г.
Свой Git нужен, когда код не должен уезжать на чужую площадку или когда хочется без ограничений на приватные репозитории и минуты сборок. Forgejo и Gitea — два близких проекта (Forgejo вырос из Gitea), оба ставятся в один контейнер и держатся на скромной машине.
Что выбрать и сколько ресурсов
Разницы в повседневной работе почти нет: интерфейс, задачи, запросы на слияние, зеркала, действия для сборок. Forgejo развивается сообществом, Gitea — компанией. Берите Forgejo, если важна независимость проекта.
Для двух-трёх человек хватает VDS-1. Как только добавляете раннер для сборок, берите VDS-3 и выше: сборка ест процессор и диск, а скорость диска ограничена по ступени.
Установка через Compose
services:
forgejo:
image: codeberg.org/forgejo/forgejo:11
container_name: forgejo
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
ports:
- "3000:3000"
- "2222:22"
docker compose up -d
docker compose logs -f forgejo
Откройте http://<адрес-машины>:3000 и пройдите первичную настройку. Первый созданный пользователь становится администратором.
Порт 3000 наружу оставлять не нужно. Закройте его и поставьте перед сервисом веб-сервер с сертификатом — так вы получите HTTPS и не покажете панель установки посторонним. Пока настройка не завершена, любой, кто откроет адрес, может создать администратора первым.
Доступ по SSH
Порт 22 внутри контейнера проброшен на 2222, потому что 22 занят системным SSH. В настройке репозитория адрес будет выглядеть так:
git clone ssh://git@example.com:2222/user/repo.git
Если хочется обычного git@example.com:user/repo.git без порта — оставьте контейнеру 2222, а на хосте настройте проброс через системный SSH или перенесите административный SSH на другой порт (см. защиту доступа).
Сборки
Действия запускает отдельный раннер — контейнер forgejo-runner, который регистрируется по токену из настроек администратора. Дайте ему доступ к сокету Docker только осознанно: это равносильно root на машине. Для сборок лучше ограничить раннер по памяти и процессору — см. ограничения ресурсов.
Что копировать
Всё состояние лежит в томе ./data: репозитории, база, вложения, конфигурация. Копия делается так:
docker compose stop forgejo
restic -r <репозиторий> backup ./data
docker compose start forgejo
Останавливать сервис нужно, если внутри SQLite — иначе снимок базы может оказаться нецелостным. С PostgreSQL достаточно pg_dump без остановки. Подробнее — что именно копировать и Restic.
Частые ошибки
- Забыли про размер репозиториев. Игровые сборки и медиа быстро съедают диск: 40 ГБ младшей ступени кончаются незаметно.
- Не настроили почту. Без неё не работают приглашения и сброс пароля. Проще подключить внешний SMTP, чем поднимать свой почтовик.
- Обновление без копии. Смена мажорной версии меняет схему базы. Сначала копия, потом
docker compose pull— см. обновление контейнеров.