Как запустить собственный git-сервер?

Git (произносится «гит») — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года; координатор — Дзюн Хамано. Среди проектов, использующих Git, — ядро Linux, Swift, Android, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Chromium, Compiz Fusion, FlightGear, jQuery, PHP, NASM, MediaWiki, DokuWiki, Qt, ряд дистрибутивов Linux. Программа является свободной и выпущена под лицензией GNU GPL версии 2. По умолчанию используется TCP-порт 9418.

wikipedia.org

Свой git-севрер я использую для 2 целей:

  1. Зеркалирование на собственный сервер своих проектов с github. Это важный пункт для меня, так как есть не маленькая вероятность того, что в 1 прекрасный момент мне могут отказать в доступе к моим проектам, так как я русский.

  2. Хранение версий моих паролей, но об этом я расскажу в следующей статье и она будет про устройство моего менеджера паролей.

docker-compose

  1. Создаем папки для хранения данных:

# Создаем папки для хранения данных
mkdir {gitea,gitea/postgres-db,gitea/data,gitea/config}

# Переходим в gitea и создаем пустой файл docker-compose.yml
cd gitea && touch docker-compose.yml
  1. Редактируем docker-compose.yml через nano docker-compose.yml и вставляем данные:

services:
  db:
    image: postgres:16
    container_name: gitea_database
    restart: always
    env_file: ".env"
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=$GITEA_DATABASE
      - POSTGRES_DB=gitea
      - PGDATA=/var/lib/postgresql/data/pgdata
    ports:
      - "5432:5432"
    volumes:
      - ./postgres-db:/var/lib/postgresql/data

  git:
    image: gitea/gitea:1.20.5-rootless
    container_name: gitea
    env_file: ".env"
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=$GITEA_DATABASE
      - GITEA__server__START_SSH_SERVER=true
      - GITEA__server__SSH_PORT=2222
    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
  1. Создаем файл для хранения переменных через touch .env:

GITEA_DATABASE=password
  1. Запускаем docker: docker-compose up -d

  2. Переходим по пути http://<ip>:3000. Внутренний IP можно посмотреть через: hostname -I. При желании можно сделать сервис доступным из интернета.

Установка

После перехода на http://<ip>:3000 будет экран с заполненными параметрами для базы данных и сервиса.

Со всем соглашаемся и устанавливаем сервис. Через несколько секунд перед нами будет страница для входа, регистрируем нового пользователя и входим под ним.

Миграция

Для создания миграции с github нам необходим токен для акторизации и его получении описано тут. Добавление миграции выглядит следующим образом:

На этом этапе нам понадобиться github токен, который мы получили выше. Есть возможность установить периодичность зеркалирования. В результате видим копию нашего проекта на github:

2FA

Двухфакторную аутентификацию включаем, чтобы наш «надежный» пароль не подобрали и был 2-й фактор для проверки. Сканируем QRCode Вашим приложением и вводим код в соответствующее поле. Я использую свой менеджер паролей и там существует такая возможность (работы с 2FA).

До этого долгое время использовал GitLab, но там не было функции зеркалирования репозиториев c github.

Ссылки:

  1. Как установить Docker?