Git стал де-факто стандартом систем контроля версий – и ведение проекта без него кажется невозможным. Поверх него было создано множество фронтендов, дополняющих git инструментами для коллаборации, ревью кода, создания релизов и запуска пайплайнов. Не всем командам при совместной разработке проектов нужен весь функционал таких гигантов, как Gitlab, однако зачастую появляется требование к хранению кода на своем сервере вместо облачных сервисов. В такой ситуации хорошо подойдет форк проекта Gitea – Forgejo. Форк проекта – это ответвление или копия существующего кода, которую начинают развивать независимо от оригинала. Forgejo – легковесная альтернатива Gitlab и Github, позволяющая управлять проектами на своем сервере, запускать конвейеры сборки и деплоя и проводить код-ревью.
Установка
В данной статье мы рассмотрим процесс установки Forgejo с помощью Docker, а также настройку доступа к репозиториям по SSH в такой конфигурации.
Установка будет производиться на готовом решении Docker.
Подключитесь к серверу по SSH, после чего создайте директории под файлы конфигурации:
mkdir -p /opt/forgejo/{forgejo,postgres}Создайте файл compose.yaml со следующим содержимым:
networks:
forgejo:
external: false
services:
server:
image: codeberg.org/forgejo/forgejo:12
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=db:5432
- FORGEJO__database__NAME=forgejo
- FORGEJO__database__USER=forgejo
- FORGEJO__database__PASSWD=forgejo
restart: always
networks:
- forgejo
volumes:
- ./forgejo:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=forgejo
- POSTGRES_PASSWORD=forgejo
- POSTGRES_DB=forgejo
networks:
- forgejo
volumes:
- ./postgres:/var/lib/postgresql/dataВ данной конфигурации веб-интерфейс будет доступен на порту 3000, доступ к репозиториям по SSH будет доступен на порту 222.
(Опционально) Добавление реверс-прокси
При желании вы можете настроить работу Forgejo на собственном домене с сертификатом TLS. В качестве реверс-прокси будет использоваться Caddy, в рамках данной статьи предполагается, что другие сервисы не используют порты 80/443.
В файл compose.yml добавьте следующий блок:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
depends_on:
- forgejo
volumes:
- ./caddy:/etc/caddy:ro
networks:
- forgejoВ директории /opt/forgejo создайте директорию caddy, в ней создайте файл Caddyfile с содержимым следующего вида:
git.betutorial.ru {
reverse_proxy forgejo:3000
}Вместо git.betutorial.ru укажите домен, который будет использоваться для вашего git-сервера. Сертификат TLS будет выпускаться автоматически.
Завершение установки
Загрузите образы контейнеров командой:
docker compose pullПосле чего запустите их, используя команду:
docker compose up -dСервис будет доступен по адресу http://ip_сервера:3000 либо по указанному в конфигурации Caddy домену на стандартном порту 443.
Первичная настройка
При первом переходе по адресу откроется страница первичной настройки:

По умолчанию для сервиса отключается самостоятельная регистрация пользователя, для создания пользователя-администратора раскройте вкладку “Administrator account settings” и укажите данные нового пользователя:

Для завершения первичной настройки нажмите “Install Forgejo”. Для смены языка сервиса нажмите на название текущего языка в правом нижнем углу экрана и выберите подходящий вам:

Создание репозитория
Чтобы создать новый репозиторий в Forgejo, нажмите на кнопку создания и выберите “New repository”:

На появившейся странице введите название репозитория, при необходимости – его описание. Если нужно, чтобы репозиторий был приватным, поставьте соответствующую галочку в пункте “Make repository private”.

Здесь же можно сразу инициализировать репозиторий, в том числе выбрав шаблон для файла .gitignore и лицензию:

В продвинутых настройках есть возможность задать набор лейблов для Issue, формат объектов и название главной ветки:

Для завершения создания нажмите “Create repository”.
Как создать зеркало репозитория с GitHub
Создание зеркала позволяет дублировать репозиторий с/на внешний источник, что может быть полезно в следующих сценариях:
- Вы мигрировали на Forgejo, но вам всё еще нужно использовать проект в другой системе контроля версий. В таком случае можно просто настроить зеркало с подтягиванием данных в Forgejo – тогда вся история коммитов, тегов и веток будет также доступна в Forgejo.
- У вас есть старые проекты на источнике, который вы больше не используете, но не хотите удалять – например, используя его в качестве резервной копии. В таком случае можно пушить данные из Forgejo на удаленный сервер, автоматически дублируя изменения, созданные в Forgejo.
Pull-зеркало удаленного репозитория
Для создания зеркала выберите “New Migration” в меню “Create” в правом верхнем углу. Выберите подходящий источник:

В поле URL введите адрес удаленного репозитория, если репозиторий приватный, укажите в поле “Access token” токен с доступом к репозиторию. Подробнее о создании токена вы можете прочитать в документации GitHub.
В migration options установите галочку напротив “This repository will be a mirror”:

После чего нажмите “Migrate repository” для запуска миграции.
Создание push-репозитория
Для добавления функционала push-репозитория в существующий репозиторий перейдите в его настройки, в разделе “Mirror settings” укажите URL удаленного репозитория:

В поле “Authorization” укажите данные для авторизации в репозитории. Для авторизации может использоваться:
- имя пользователя и пароль
- токен
- SSH-ключ
При выборе SSH-авторизации будет сгенерирована пара ключей, публичную часть ключа нужно будет добавить в доверенные в настройках репозитория.
Также можно включить синхронизацию при пуше коммитов и настроить интервал синхронизации либо отключить его. После добавления репозиторий будет добавлен в список, здесь же можно будет скопировать сгенерированный публичный ключ и вручную синхронизировать репозитории:

Заключение
В данной статье мы рассмотрели процесс установки и первичной настройки форка проекта Gitea – Forgejo.
Также в нашей базе знаний есть отдельная статья о Gitea Actions – встроенном в Gitea инструменте автоматизации CI/CD.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками облака Beget – ждем вас в нашем сообществе в Telegram.