В процессе командной работы над "Неким проектом" (о начале этой работы можно прочитать в посте "Маленькая предыстория...") мы столкнулись со знакомой многим проблемой - последствиями санкций. Выяснилось, что пользователям из некоторых регионов РФ недоступен GitLab, а GitHub не позволяет работать в приватных репозиториях.
Мы перебрали несколько альтернативных вариантов (о чем вы узнаете в постах Некоего Вестника Сплетен) и в результате решили запустить свой собственный GIT-сервер.
Выбор пал на готовое решение Gitea, отличающееся от аналогов легковесностью, а также доступностью привычного функционала GitHub.
Установка будет производиться на VPS-сервере с Debian 12. Как установить Docker я рассказывал в посте "Docker 2.2 Установка Docker на Linux".
Официальная документация Gitea доступна по ссылке: https://docs.gitea.com/
Подготовка Docker-compose файла.
Подключитесь по SSH к вашему серверу и перейдите в рабочую директорию.
Затем выполните следующие команды для создания директорий и yaml-файла:
mkdir -p gitea/{data,config}  
cd gitea  
touch docker-compose.yml
Выполним команду nano docker-compose.yml для открытия файла и напишем следующую конфигурацию:
Обратите внимание на отступы и форматирование!
version: '3'
services:
  db:
    image: postgres
    restart: always
    environment:
      - POSTGRES_USER=db_username
      - POSTGRES_PASSWORD=db_password
      - POSTGRES_DB=db_name
      - PGDATA=/var/lib/postgresql/data/pgdata
    ports:
      - "5432:5432"
    volumes:
      - ./postgres-db:/var/lib/postgresql/data
  git:
    image: gitea/gitea:1.20.5-rootless
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=db_name
      - GITEA__database__USER=db_username
      - GITEA__database__PASSWD=db_password
    restart: always
    volumes:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"
    depends_on:
      - db
Разберём, что и зачем:
У нас будет два сервиса: db и git.
Первый сервис db - это контейнер с СУБД PostgreSQL.
Второй сервис git - это контейнер с Gitea.
Прописываемые параметры:
- image:- указывает на то, какой образ из- Docker Hubбудет использоваться.
- restart:- указывает на правила перезагрузки сервера в случае сбоя.
- environment:- указывает на параметры переменной среды. В нашем случае это: имя пользователя, пароль, имя базы данных, указание на расположение файлов.
- ports:- указывает какие порты открыты в контейнере,- <внешний_порт>:<внутренний_порт>.
- volumes:- указывает на подключённые внутри контейнера директории:- <директория_вне_контейнера>:<директория_внутри_контейнера>.
- depends_on- определяет порядок запуска контейнеров, т.е. контейнер с- Giteaзапустится после запуска контейнера с БД.
Обратите внимание на порты в сервисе git.
Порт 3000 - это порт веб-интерфейса, его можно изменить на удобный вам.
Порт 2222 - это порт SSH-подключения, его также можно изменить более на удобный.
Запуск и первая настройка.
Для запуска используем команду docker compose up -d.
После того, как запустятся контейнеры, открываем браузер и переходим по адресу: http://<ip_сервера>:3000/ или http://<ваш_домен>:3000/, если у вас к серверу прикреплено доменное имя.
Перед нами откроется окно первоначальной конфигурации, разбитое на три блока.
Настройки базы данных.
В этом блоке указываем данные для подключения к БД, но если вы прописали их в docker-compose-файле, пропускаем этот блок.
Иначе заполняем данными, выбирая удобную для вашего решения СУБД.

Основные настройки.
В этом блоке указываем:
- Название сайта.
- Настройки путей внутри контейнера.
- Домен или ip-адрес сервера.
- Порты.
- URL-адрес для доступа к веб-интерфейсу.
- Если необходимо, включаем оповещение об обновлениях Gitea.

Расширенные настройки.
Этот блок состоит из трёх подблоков:
- Настройки электронной почты - в этом блоке указываем настройки почтового сервера. Как запускать свой почтовый сервер я писал в постах "Docker 5.1 Почтовый сервер на Docker Mailserver" и "Docker 5.2 Почтовый сервер на Docker Mailserver"
- Сервер и настройки внешних служб - в этом блоке настраиваются различные службы, такие как регистрация пользователей, OpenID и др.
- Настройки учётной записи администратора - в этом блоке указываются данные администратора.

Environment Configuration.
В этом блоке есть две кнопки установить. Честно, не совсем очевидно зачем их две. Я использовал первую кнопку, после нажатия на которую будет выполнена установка.

Создание репозитория.
После установки откроется главная страница. Кликаем по кнопке "Вход" в правой части экрана.
Вводим учётные данные администратора и авторизуемся.

Попадаем на страницу, где будут отображаться ваши активности, как на GitHub.


Для создания нового репозитория, в правом верхнем углу нажимаем на + и выбираем "Новый репозиторий".
Откроется страница, знакомая всем пользователям GitHub. 
Заполняем необходимые поля и нажимаем "Создать репозиторий".
После чего, если вы решили не создавать README-файл, откроется страница с инструкцией по подключению локального репозитория, а если создали, откроется страница репозитория. Всё как на GitHub.
Дополнительно: Поддержка HTTPS.
По умолчанию веб-интерфейс и всё взаимодействие происходит по HTTP-протоколу.
Для включения поддержки HTTPS-протокола необходимо выполнить дополнительные действия.
Переходим в директорию config и открываем файл app.ini командой nano app.ini.
В блоке server добавляем следующие строки:
PROTOCOL = https
CERT_FILE = cert.pem
KEY_FILE = key.pemГде CERT_FILE и KEY_FILE, указываем названия ваших файлов SSL-сертификата.
Также в параметре ROOT_URL заменяем http на https.
Сохраняем.
После чего возвращаемся на уровень выше и переходим в директорию data, а затем в custom. В эту директорию помещаем ваши файлы SSL-сертификата.
Перезагружаем контейнер с Gitea, выполнив команду docker restart <имя_контейнера>.
Готово. Теперь веб-интерфейс и всё взаимодействие будет использовать защищённый HTTPS-протокол.
Заключение.
Вот так достаточно просто можно развернуть свой аналог GitHub на собственном сервере. Если команда небольшая, то и ресурсов он будет потреблять не много, что отлично подойдёт начинающим разработчикам.
 
           
                    
Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
Спасибо большое автору статьи. Очень хорошая статья для новичка в разворачивании подобного сервиса у себя. Я развернул gitea по данному гайду + почитывал документацию самой gitea. Хочу пару моментов добавить лично от себя. 1) Сертификаты ssl помните что они действуют 3 месяца и потом их нужно обновлять. Либо руками либо писать скрипт автоматический. 2) Если будете использовать в связке с github или другим сервисом чтоб как-бы на gitea держать бекап, то есть два варианта зеркало и обычный репозиторий. Из-за того что я люблю контролировать многие вещи руками я просто добавил git remote add gitea_name ssh://git@name_git_url (вставите свои данные) и пушу отдельно в гитхаб и в гитеа двумя командами. Если что-то случиться с гитхаб я просто снесу связь с ним на локальной машине и продолжу работать только с репо gitea. А зеркало умеет автоматически подтягивать изменения, но нужна соответствующая настройка.